backlight-helper: Simplify reading the level from stdin

Since the helper is a standalone app, the usual xserver rules of not using
stdio because of signal handling don't apply.

And since the helper does run with elevated rights, it is important to keep
the code KISS so that it can be audited easily.

This commit replaces the hard to read "raw" read loop with a much simpler
loop using fgets, improving readability of the code.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
This commit is contained in:
Hans de Goede 2014-02-17 13:16:54 +01:00 committed by Chris Wilson
parent b5229c6e15
commit e860b3eaed
1 changed files with 7 additions and 22 deletions

View File

@ -9,7 +9,7 @@
int main(int argc, char *argv[])
{
struct stat st;
char buf[1024], *b = buf;
char buf[1024];
int len, fd;
if (argc != 2) {
@ -24,27 +24,12 @@ int main(int argc, char *argv[])
return 1;
}
while ((len = read(0, b, sizeof(buf) - (b - buf) - 1)) > 0) {
len += b - buf;
buf[len] = '\0';
b = buf;
do {
char *end = strchr(b, '\n');
if (end == NULL)
break;
++end;
if (write(fd, b, end - b) != end - b) {
fprintf(stderr, "Failed to update backlight interface '%s'\n", argv[1]);
return 2;
}
b = end;
} while (1);
memmove(buf, b, len = buf + len - b);
b = buf + len;
while (fgets(buf, sizeof(buf), stdin)) {
len = strlen(buf);
if (write(fd, buf, len) != len) {
fprintf(stderr, "Failed to update backlight interface '%s'\n", argv[1]);
return 2;
}
}
return 0;