]> git.alsa-project.org Git - alsa-utils.git/commitdiff
amixer: support infinite line length for --stdin option
authorMikhail Ivashinenko <miuivashinenko@sberdevices.ru>
Wed, 28 Jan 2026 17:53:30 +0000 (20:53 +0300)
committerJaroslav Kysela <perex@perex.cz>
Mon, 25 May 2026 09:34:09 +0000 (11:34 +0200)
Closes: https://github.com/alsa-project/alsa-utils/pull/321
Signed-off-by: Mikhail Ivashinenko <miuivashinenko@salutedevices.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
amixer/amixer.c

index 07e9819e5cdbd68f5b7f7cce087edfbe45078be2..9eb7f73c9b3a8922bb7c57db8ac6da448a2f88fc 100644 (file)
@@ -1760,13 +1760,14 @@ static int split_line(char *buf, char **token, int max_token)
 static int exec_stdin(void)
 {
        int narg;
-       char buf[256], *args[MAX_ARGS];
+       char *buf = NULL, *args[MAX_ARGS];
+       size_t size = 0;
        int err = 0;
 
        /* quiet = 1; */
        ignore_error = 1;
 
-       while (fgets(buf, sizeof(buf), stdin)) {
+       while (getline(&buf, &size, stdin) > 0) {
                narg = split_line(buf, args, MAX_ARGS);
                if (narg > 0) {
                        if (!strcmp(args[0], "sset") || !strcmp(args[0], "set"))
@@ -1774,10 +1775,12 @@ static int exec_stdin(void)
                        else if (!strcmp(args[0], "cset"))
                                err = cset(narg - 1, args + 1, 0, 1);
                        if (err < 0)
-                               return 1;
+                               break;
                }
        }
-       return 0;
+
+       free(buf);
+       return err < 0 ? 1 : 0;
 }