[alsa-devel] [PATCH] fix bug 5579: invalid long long format specifier
Takashi Iwai
tiwai at suse.de
Tue Apr 24 15:39:39 CEST 2012
At Tue, 24 Apr 2012 12:58:48 +0200,
John Spencer wrote:
>
> the attached patch fixes an invalid long long format specifier issue (%L
> was used by mistake, which is the long double specifier).
> this lead to abort() on 64bit system, making some of the alsa-utils
> unusable.
Applied now. Thanks.
Takashi
>
> --JS
> [2 0001-fix-bug-5579-invalid-long-long-format-specifier.patch <text/x-patch (7bit)>]
> >From 63fe3fa4765c423ef6904a4506e4ed74908ecfb6 Mon Sep 17 00:00:00 2001
> From: John Spencer <maillist-alsa at barfooze.de>
> Date: Tue, 24 Apr 2012 12:41:27 +0200
> Subject: [PATCH] fix bug 5579: invalid long long format specifier
>
> Per POSIX:
>
> L Specifies that a following a, A, e, E, f, F, g, or G conversion
> specifier applies to a long double argument.
>
> L is only intended to be used with long doubles, not long long ints.
>
> the proper way is to use "ll" instead.
>
> Signed-off-by: John Spencer <maillist-alsa at barfooze.de>
> ---
> src/conf.c | 6 +++---
> test/midiloop.c | 2 +-
> 2 files changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/src/conf.c b/src/conf.c
> index 5b1b5a6..32446a2 100644
> --- a/src/conf.c
> +++ b/src/conf.c
> @@ -496,7 +496,7 @@ static int safe_strtoll(const char *str, long long *val)
> if (!*str)
> return -EINVAL;
> errno = 0;
> - if (sscanf(str, "%Li%n", &v, &endidx) < 1)
> + if (sscanf(str, "%lli%n", &v, &endidx) < 1)
> return -EINVAL;
> if (str[endidx])
> return -EINVAL;
> @@ -1378,7 +1378,7 @@ static int _snd_config_save_node_value(snd_config_t *n, snd_output_t *out,
> snd_output_printf(out, "%ld", n->u.integer);
> break;
> case SND_CONFIG_TYPE_INTEGER64:
> - snd_output_printf(out, "%Ld", n->u.integer64);
> + snd_output_printf(out, "%lld", n->u.integer64);
> break;
> case SND_CONFIG_TYPE_REAL:
> snd_output_printf(out, "%-16g", n->u.real);
> @@ -2630,7 +2630,7 @@ int snd_config_get_ascii(const snd_config_t *config, char **ascii)
> {
> char res[32];
> int err;
> - err = snprintf(res, sizeof(res), "%Li", config->u.integer64);
> + err = snprintf(res, sizeof(res), "%lli", config->u.integer64);
> if (err < 0 || err == sizeof(res)) {
> assert(0);
> return -ENOMEM;
> diff --git a/test/midiloop.c b/test/midiloop.c
> index ee2e563..d6548b5 100644
> --- a/test/midiloop.c
> +++ b/test/midiloop.c
> @@ -175,7 +175,7 @@ int main(int argc, char** argv)
> printf("output.status.xruns = %zi\n", snd_rawmidi_status_get_xruns(ostat));
>
> diff = timediff(end, start);
> - printf("Time diff: %Liusec (%Li bytes/sec)\n", diff, ((long long)opos * 1000000) / diff);
> + printf("Time diff: %lliusec (%lli bytes/sec)\n", diff, ((long long)opos * 1000000) / diff);
>
> if (verbose) {
> fprintf(stderr,"Closing\n");
> --
> 1.7.3.4
>
> [3 <text/plain; us-ascii (7bit)>]
> _______________________________________________
> Alsa-devel mailing list
> Alsa-devel at alsa-project.org
> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
More information about the Alsa-devel
mailing list