chiark / gitweb /
[PATCH] support SUBSYSTEM as a rule key
[elogind.git] / udev_lib.c
index 7fb45f0b5fb6b6549de364d3a6357e30abb518e2..6807f817a1e7b119e6ea8ca64dc2d1d628192c95 100644 (file)
 #include "list.h"
 
 
-char *get_action(void)
-{
-       char *action;
-
-       action = getenv("ACTION");
-       if (action != NULL && strlen(action) > ACTION_SIZE)
-               action[ACTION_SIZE-1] = '\0';
-
-       return action;
-}
-
-char *get_devpath(void)
-{
-       char *devpath;
-
-       devpath = getenv("DEVPATH");
-       if (devpath != NULL && strlen(devpath) > DEVPATH_SIZE)
-               devpath[DEVPATH_SIZE-1] = '\0';
-
-       return devpath;
-}
-
-char *get_devname(void)
-{
-       char *devname;
-
-       devname = getenv("DEVNAME");
-       if (devname != NULL && strlen(devname) > NAME_SIZE)
-               devname[NAME_SIZE-1] = '\0';
-
-       return devname;
-}
-
-char *get_seqnum(void)
-{
-       char *seqnum;
-
-       seqnum = getenv("SEQNUM");
-
-       return seqnum;
-}
-
-char *get_subsystem(char *subsystem)
-{
-       if (subsystem != NULL && strlen(subsystem) > SUBSYSTEM_SIZE)
-               subsystem[SUBSYSTEM_SIZE-1] = '\0';
-
-       return subsystem;
-}
-
 #define BLOCK_PATH             "/block/"
 #define CLASS_PATH             "/class/"
 #define NET_PATH               "/class/net/"
@@ -112,11 +62,13 @@ char get_device_type(const char *path, const char *subsystem)
        return '\0';
 }
 
-void udev_set_values(struct udevice *udev, const char* devpath, const char *subsystem)
+void udev_set_values(struct udevice *udev, const char* devpath,
+                    const char *subsystem, const char* action)
 {
        memset(udev, 0x00, sizeof(struct udevice));
        strfieldcpy(udev->devpath, devpath);
        strfieldcpy(udev->subsystem, subsystem);
+       strfieldcpy(udev->action, action);
        udev->type = get_device_type(devpath, subsystem);
 }
 
@@ -226,12 +178,12 @@ static int file_list_insert(char *filename, struct list_head *file_list)
 }
 
 /* calls function for every file found in specified directory */
-int call_foreach_file(int fnct(char *f) , char *dirname, char *suffix)
+int call_foreach_file(file_fnct_t fnct, const char *dirname,
+                     const char *suffix, void *data)
 {
        struct dirent *ent;
        DIR *dir;
        char *ext;
-       char file[NAME_SIZE];
        struct files *loop_file;
        struct files *tmp_file;
        LIST_HEAD(file_list);
@@ -265,10 +217,12 @@ int call_foreach_file(int fnct(char *f) , char *dirname, char *suffix)
 
        /* call function for every file in the list */
        list_for_each_entry_safe(loop_file, tmp_file, &file_list, list) {
-               snprintf(file, NAME_SIZE-1, "%s/%s", dirname, loop_file->name);
-               file[NAME_SIZE-1] = '\0';
+               char filename[NAME_SIZE];
+
+               snprintf(filename, NAME_SIZE, "%s/%s", dirname, loop_file->name);
+               filename[NAME_SIZE-1] = '\0';
 
-               fnct(file);
+               fnct(filename, data);
 
                list_del(&loop_file->list);
                free(loop_file);
@@ -277,22 +231,3 @@ int call_foreach_file(int fnct(char *f) , char *dirname, char *suffix)
        closedir(dir);
        return 0;
 }
-
-/* Set the FD_CLOEXEC  flag of desc if value is nonzero,
-   or clear the flag if value is 0.
-   Return 0 on success, or -1 on error with errno  set. */ 
-       
-int set_cloexec_flag (int desc, int value)
-{
-       int oldflags = fcntl (desc, F_GETFD, 0);
-       /* If reading the flags failed, return error indication now. */
-       if (oldflags < 0)
-               return oldflags;
-       /* Set just the flag we want to set. */
-       if (value != 0)
-               oldflags |= FD_CLOEXEC;
-       else
-               oldflags &= ~FD_CLOEXEC;
-       /* Store modified flag word in the descriptor. */
-       return fcntl (desc, F_SETFD, oldflags);
-}