X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=udev_lib.c;h=6807f817a1e7b119e6ea8ca64dc2d1d628192c95;hb=2092fbcdebf5313f29b43bdaa57a22baf0c0269f;hp=7fb45f0b5fb6b6549de364d3a6357e30abb518e2;hpb=2b41e68a08548ce44b4d145900dab2bb04cd34f7;p=elogind.git diff --git a/udev_lib.c b/udev_lib.c index 7fb45f0b5..6807f817a 100644 --- a/udev_lib.c +++ b/udev_lib.c @@ -35,56 +35,6 @@ #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); -}