str++;
        if (!(*str))
                return -EINVAL;
-       size = 0;
+       size = 1;       /* for '\0' */
        if (*str != '"' && *str != '\'') {
                while (*str && *str != ',') {
                        if (size < sizeof(buf)) {
                if (*str == c)
                        str++;
        }
-       if (*str == '\0')
-               return 0;
+       if (*str == '\0') {
+               snd_mixer_selem_id_set_index(sid, 0);
+               *ptr = 0;
+               goto _set;
+       }
        if (*str != ',')
                return -EINVAL;
        *ptr = 0;       /* terminate the string */
        if (!isdigit(*str))
                return -EINVAL;
        snd_mixer_selem_id_set_index(sid, atoi(str));
+       _set:
        snd_mixer_selem_id_set_name(sid, buf);
        return 0;
 }