From 070bb98651b7e38d953eeffc5b0435e909e603b9 Mon Sep 17 00:00:00 2001 From: Gabor Juhos Date: Tue, 10 Sep 2013 12:59:21 +0200 Subject: [PATCH] udevtrigger: add device_has_attribute helper Move the code from device_list_insert() into a separate function. This makes it possible to reuse the code for other attribute files. Signed-off-by: Gabor Juhos --- udevtrigger.c | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/udevtrigger.c b/udevtrigger.c index efea6b2..c5628bd 100644 --- a/udevtrigger.c +++ b/udevtrigger.c @@ -21,6 +21,7 @@ #include #include #include +#include #include #include #include @@ -135,21 +136,33 @@ static int sysfs_resolve_link(char *devpath, size_t size) return 0; } +static bool device_has_attribute(const char *path, const char *attr, + mode_t mode) +{ + char filename[PATH_SIZE]; + struct stat statbuf; + + strlcpy(filename, path, sizeof(filename)); + strlcat(filename, attr, sizeof(filename)); + + if (stat(filename, &statbuf) < 0) + return false; + + if (!(statbuf.st_mode & mode)) + return false; + + return true; +} static int device_list_insert(const char *path) { - char filename[PATH_SIZE]; char devpath[PATH_SIZE]; struct stat statbuf; dbg("add '%s'" , path); /* we only have a device, if we have an uevent file */ - strlcpy(filename, path, sizeof(filename)); - strlcat(filename, "/uevent", sizeof(filename)); - if (stat(filename, &statbuf) < 0) - return -1; - if (!(statbuf.st_mode & S_IWUSR)) + if (!device_has_attribute(path, "/uevent", S_IWUSR)) return -1; strlcpy(devpath, &path[4], sizeof(devpath)); -- 2.30.2