udevtrigger: add device_has_attribute helper
authorGabor Juhos <juhosg@openwrt.org>
Tue, 10 Sep 2013 10:59:21 +0000 (12:59 +0200)
committerFelix Fietkau <nbd@openwrt.org>
Tue, 10 Sep 2013 11:25:35 +0000 (13:25 +0200)
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 <juhosg@openwrt.org>
udevtrigger.c

index efea6b287c897bbbb817b569eee67fcbf49249b7..c5628bdce03147b2420010f6320028ce258433bc 100644 (file)
@@ -21,6 +21,7 @@
 #include <stddef.h>
 #include <stdarg.h>
 #include <stdio.h>
+#include <stdbool.h>
 #include <unistd.h>
 #include <getopt.h>
 #include <errno.h>
@@ -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));