diff options
-rw-r--r-- | libs/surfaces/powermate/powermate.cc | 33 |
1 files changed, 19 insertions, 14 deletions
diff --git a/libs/surfaces/powermate/powermate.cc b/libs/surfaces/powermate/powermate.cc index 96baf749b3..98dfcebae7 100644 --- a/libs/surfaces/powermate/powermate.cc +++ b/libs/surfaces/powermate/powermate.cc @@ -33,35 +33,41 @@ static const char *valid_prefix[NUM_VALID_PREFIXES] = { #define NUM_EVENT_DEVICES 16 -int open_powermate(const char *dev, int mode) +int open_powermate (const char *dev, int mode) { if (!Glib::file_test (dev, Glib::FILE_TEST_EXISTS)) { return -1; } + int fd = open(dev, mode); int i; char name[255]; - if(fd < 0){ + if (fd < 0) { if (errno != EACCES) { error << string_compose ("Unable to open \"%1\": %2", dev, strerror(errno)) << endmsg; } return -1; } - if(ioctl(fd, EVIOCGNAME(sizeof(name)), name) < 0){ - error << string_compose ("\"%1\": EVIOCGNAME failed: %2", dev, strerror(errno)) << endmsg; - close(fd); - return -1; - } + /* placate valgrind */ + name[0] = '\0'; - // it's the correct device if the prefix matches what we expect it to be: - for(i=0; i<NUM_VALID_PREFIXES; i++) - if(!strncasecmp(name, valid_prefix[i], strlen(valid_prefix[i]))) - return fd; + if (ioctl (fd, EVIOCGNAME (sizeof(name)), name) < 0) { + error << string_compose ("\"%1\": EVIOCGNAME failed: %2", dev, strerror(errno)) << endmsg; + close (fd); + return -1; + } - close(fd); - return -1; + // it's the correct device if the prefix matches what we expect it to be: + for (i = 0; i < NUM_VALID_PREFIXES; ++i) { + if (!strncasecmp (name, valid_prefix[i], strlen (valid_prefix[i]))) { + return fd; + } + } + + close (fd); + return -1; } int find_powermate(int mode) @@ -96,7 +102,6 @@ PowermateControlProtocol::probe () if (port < 0) { printf ("powermate: Opening of powermate failed - %s\n", strerror(errno)); - close (port); return false; } |