From c8916f18f61cd7bf7fe48bec44b0ff2a89e5cb79 Mon Sep 17 00:00:00 2001 From: Peter Wu Date: Wed, 22 May 2013 12:04:55 +0200 Subject: ltunify: make hidraw device path more obvious --- ltunify.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'ltunify.c') diff --git a/ltunify.c b/ltunify.c index db0d6a4..c3c8971 100644 --- a/ltunify.c +++ b/ltunify.c @@ -1091,7 +1091,7 @@ static int validate_args(int argc, char **argv, char ***argsp, char **hidraw_pat int open_hidraw(void) { int fd = -1; glob_t matches; - char *hiddev_name = NULL; + char hiddev_name[32] = {0}; if (!glob("/sys/class/hidraw/hidraw*/device/driver", 0, NULL, &matches)) { size_t i; @@ -1100,6 +1100,7 @@ int open_hidraw(void) { ssize_t r; char *name = matches.gl_pathv[i]; const char *last_comp; + char *dev_name; r = readlink(name, buf, (sizeof buf) - 1); if (r < 0) { @@ -1110,16 +1111,17 @@ int open_hidraw(void) { buf[r] = 0; /* readlink does not NUL-terminate */ last_comp = basename(buf); + /* retrieve 'hidrawX' name */ + dev_name = name + sizeof "/sys/class/hidraw"; + *(strchr(dev_name, '/')) = 0; + if (!strcmp(last_comp, RECEIVER_NAME)) { /* Logitech receiver c52b and c532 - pass */ } else { /* unknown driver */ continue; } - hiddev_name = name + sizeof "/sys/class/hidraw" - sizeof "/dev"; - memcpy(hiddev_name, "/dev", sizeof "/dev" - 1); - name[strlen(name) - sizeof "/device/driver" + 1] = '\0'; - + snprintf(hiddev_name, sizeof hiddev_name, "/dev/%s", dev_name); fd = open(hiddev_name, O_RDWR); if (fd < 0) { perror(hiddev_name); @@ -1130,7 +1132,7 @@ int open_hidraw(void) { } if (fd < 0) { - if (hiddev_name) { + if (*hiddev_name) { fprintf(stderr, "Logitech Unifying Receiver device is not accessible.\n" "Try running this program as root or enable read/write permissions\n" "for %s\n", hiddev_name); -- cgit v1.2.1