summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Wu <lekensteyn@gmail.com>2013-05-22 12:04:55 +0200
committerPeter Wu <lekensteyn@gmail.com>2013-05-22 12:04:55 +0200
commitc8916f18f61cd7bf7fe48bec44b0ff2a89e5cb79 (patch)
tree31cc21e40ca89c50476a5dbeb0dde19d0e920dcf
parent446ac251397defb8d331c0cb82bb8484226155a9 (diff)
downloadltunify-c8916f18f61cd7bf7fe48bec44b0ff2a89e5cb79.tar.gz
ltunify: make hidraw device path more obvious
-rw-r--r--ltunify.c14
1 files changed, 8 insertions, 6 deletions
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);