summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
Diffstat (limited to 'tools')
-rw-r--r--tools/backlight_helper.c56
1 files changed, 35 insertions, 21 deletions
diff --git a/tools/backlight_helper.c b/tools/backlight_helper.c
index 24958ec6..8b2667dc 100644
--- a/tools/backlight_helper.c
+++ b/tools/backlight_helper.c
@@ -1,43 +1,57 @@
#include <stdio.h>
#include <string.h>
+#include <stdarg.h>
+#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
+#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
+#define DBG 0
+
+#if defined(__GNUC__) && (__GNUC__ > 3)
+__attribute__((format(printf, 1, 2), noreturn))
+#endif
+static void die(const char *format, ...)
+{
+ if (DBG) {
+ va_list args;
+
+ va_start(args, format);
+ vfprintf(stderr, format, args);
+ va_end(args);
+ }
+
+ exit(1);
+}
+
int main(int argc, char *argv[])
{
struct stat st;
char buf[1024];
int len, fd;
- if (argc != 2) {
- fprintf(stderr, "Usage: %s <iface>\n", argv[0]);
- return 1;
- }
+ if (argc != 2)
+ die("Usage: xf86-video-intel-backlight-helper <iface>\n");
+
+ if (strchr(argv[1], '/') != NULL)
+ die("Invalid interface '%s': contains '/'\n", argv[1]);
+
+ if (snprintf(buf, sizeof(buf),
+ "/sys/class/backlight/%s/brightness",
+ argv[1]) >= sizeof(buf))
+ die("Invalid interface '%s': name too long\n", argv[1]);
- if (strchr(argv[1], '/') != NULL) {
- fprintf(stderr, "Invalid interface name\n");
- return 1;
- }
- if (snprintf(buf, sizeof(buf), "/sys/class/backlight/%s/brightness",
- argv[1]) >= sizeof(buf)) {
- fprintf(stderr, "Interface name is too long\n");
- return 1;
- }
fd = open(buf, O_RDWR);
- if (fd < 0 || fstat(fd, &st) || major(st.st_dev)) {
- fprintf(stderr, "Cannot access backlight interface '%s'\n", argv[1]);
- return 1;
- }
+ if (fd < 0 || fstat(fd, &st) || major(st.st_dev))
+ die("Invalid interface '%s': unknown backlight file\n", argv[1]);
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;
- }
+ if (write(fd, buf, len) != len)
+ die("Failed to update backlight interface '%s': errno=%d\n", argv[1], errno);
}
return 0;