diff --git a/amixer/amixer.c b/amixer/amixer.c index 07e9819..9eb7f73 100644 --- a/amixer/amixer.c +++ b/amixer/amixer.c @@ -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; }