i2c-tools: only try /dev/i2c/* if opening /dev/i2c-* fails with ENOENT
authorBartosz Golaszewski <bartekgola@gmail.com>
Mon, 11 May 2015 15:26:27 +0000 (17:26 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Mon, 11 May 2015 15:26:27 +0000 (17:26 +0200)
Trying to access /dev/i2c/* on every error after opening /dev/i2c-* can
mislead users who e.g. don't have root access. Instead of bailing-out
with "permission denied" we currently print "no such file or directory".

Fix it by trying open("/dev/i2c/%d") only if we got ENOENT.

Upstream i2cdetect tries to get any info it can from /sys and /proc even
when invoked by an unprivileged user, but we don't want to add unnecessary
bloat.

Signed-off-by: Bartosz Golaszewski <bartekgola@gmail.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
miscutils/i2c_tools.c

index 2805cf3b0dc5f355828945ca3ca6409770bdb344..7034dc9a852a4e4fa87797459f754d09412bacda 100644 (file)
@@ -379,8 +379,12 @@ static int i2c_dev_open(int i2cbus)
        sprintf(filename, "/dev/i2c-%d", i2cbus);
        fd = open(filename, O_RDWR);
        if (fd < 0) {
-               filename[8] = '/'; /* change to "/dev/i2c/%d" */
-               fd = xopen(filename, O_RDWR);
+               if (errno == ENOENT) {
+                       filename[8] = '/'; /* change to "/dev/i2c/%d" */
+                       fd = xopen(filename, O_RDWR);
+               } else {
+                       bb_perror_msg_and_die("can't open '%s'", filename);
+               }
        }
 
        return fd;