Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:12.3
alsa
0024-PCM-Fix-the-conversion-from-string-to-chma...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0024-PCM-Fix-the-conversion-from-string-to-chmap-position.patch of Package alsa
From c6db60e32758e8f4bb6f066a5c6fc7758a0f4c49 Mon Sep 17 00:00:00 2001 From: Takashi Iwai <tiwai@suse.de> Date: Wed, 12 Sep 2012 18:44:42 +0200 Subject: [PATCH 24/30] PCM: Fix the conversion from string to chmap position Use strncasecmp() to allow lower cases, and also evaluate the inverted phase suffix, too. Signed-off-by: Takashi Iwai <tiwai@suse.de> --- src/pcm/pcm.c | 37 +++++++++++++++++++++++++++---------- 1 file changed, 27 insertions(+), 10 deletions(-) --- a/src/pcm/pcm.c +++ b/src/pcm/pcm.c @@ -7471,24 +7471,41 @@ int snd_pcm_chmap_print(const snd_pcm_ch static int str_to_chmap(const char *str, int len) { int val; + unsigned long v; + char *p; if (isdigit(*str)) { - val = atoi(str); - if (val < 0) + v = strtoul(str, &p, 0); + if (v == ULONG_MAX) return -1; - return val | SND_CHMAP_DRIVER_SPEC; - } else if (str[0] == 'C' && str[1] == 'h') { - val = atoi(str + 2); - if (val < 0) + val = v; + val |= SND_CHMAP_DRIVER_SPEC; + str = p; + } else if (!strncasecmp(str, "ch", 2)) { + v = strtoul(str + 2, &p, 0); + if (v == ULONG_MAX) return -1; - return val; + val = v; + str = p; } else { for (val = 0; val <= SND_CHMAP_LAST; val++) { - if (!strncmp(str, chmap_names[val], len)) - return val; + int slen; + assert(chmap_names[val]); + slen = strlen(chmap_names[val]); + if (slen > len) + continue; + if (!strncasecmp(str, chmap_names[val], slen) && + !isalpha(str[slen])) { + str += slen; + break; + } } - return -1; + if (val > SND_CHMAP_LAST) + return -1; } + if (str && !strncasecmp(str, "[INV]", 5)) + val |= SND_CHMAP_PHASE_INVERSE; + return val; } unsigned int snd_pcm_chmap_from_string(const char *str)
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor