[git commit] i2c-tools: only try /dev/i2c/* if opening /dev/i2c-* fails with ENOENT

Denys Vlasenko vda.linux at googlemail.com
Mon May 11 15:26:27 UTC 2015


commit: http://git.busybox.net/busybox/commit/?id=7ca5c51cc8c54f35b6265d815d8a8be19e0821b0
branch: http://git.busybox.net/busybox/commit/?id=refs/heads/master

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 at gmail.com>
Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 miscutils/i2c_tools.c |    8 ++++++--
 1 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/miscutils/i2c_tools.c b/miscutils/i2c_tools.c
index 2805cf3..7034dc9 100644
--- a/miscutils/i2c_tools.c
+++ b/miscutils/i2c_tools.c
@@ -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;


More information about the busybox-cvs mailing list