X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=udev%2Flib%2Flibudev-device.c;h=00b9440386171542f294bbbcb2f6f6393ec01108;hb=1c7047ea77a417f183b6b92f4f5ea3728acef79b;hp=c4d65e9c49243468619c52bca6d63a698e300a30;hpb=11d543c1ee886ef30c3ef66d7176149d0b126fa5;p=elogind.git diff --git a/udev/lib/libudev-device.c b/udev/lib/libudev-device.c index c4d65e9c4..00b944038 100644 --- a/udev/lib/libudev-device.c +++ b/udev/lib/libudev-device.c @@ -41,6 +41,13 @@ struct udev_device { char *subsystem; struct list_head link_list; struct list_head env_list; + char *action; + char *driver; + char *devpath_old; + char *physdevpath; + int timeout; + dev_t devnum; + long long int seqnum; }; struct udev_device *device_init(struct udev *udev) @@ -58,7 +65,7 @@ struct udev_device *device_init(struct udev *udev) udev_device->udev = udev; INIT_LIST_HEAD(&udev_device->link_list); INIT_LIST_HEAD(&udev_device->env_list); - log_info(udev_device->udev, "udev_device: %p created\n", udev_device); + info(udev_device->udev, "udev_device: %p created\n", udev_device); return udev_device; } @@ -101,7 +108,7 @@ struct udev_device *udev_device_new_from_devpath(struct udev *udev, const char * if (udev_device == NULL) return NULL; - udevice = udev_device_init(NULL); + udevice = udev_device_init(udev); if (udevice == NULL) { free(udev_device); return NULL; @@ -109,13 +116,13 @@ struct udev_device *udev_device_new_from_devpath(struct udev *udev, const char * /* resolve possible symlink to real path */ strlcpy(path, devpath, sizeof(path)); - sysfs_resolve_link(path, sizeof(path)); + sysfs_resolve_link(udev, path, sizeof(path)); device_set_devpath(udev_device, devpath); - log_info(udev, "device %p has devpath '%s'\n", udev_device, udev_device_get_devpath(udev_device)); + info(udev, "device %p has devpath '%s'\n", udev_device, udev_device_get_devpath(udev_device)); err = udev_db_get_device(udevice, path); if (err >= 0) - log_info(udev, "device %p filled with udev database data\n", udev_device); + info(udev, "device %p filled with udev database data\n", udev_device); if (udevice->name[0] != '\0') asprintf(&udev_device->devname, "%s/%s", udev_get_dev_path(udev), udevice->name); @@ -126,11 +133,11 @@ struct udev_device *udev_device_new_from_devpath(struct udev *udev, const char * strlcpy(name, udev_get_dev_path(udev), sizeof(name)); strlcat(name, "/", sizeof(name)); strlcat(name, name_loop->name, sizeof(name)); - name_list_add(&udev_device->link_list, name, 0); + name_list_add(udev, &udev_device->link_list, name, 0); } list_for_each_entry(name_loop, &udevice->env_list, node) - name_list_add(&udev_device->env_list, name_loop->name, 0); + name_list_add(udev_device->udev, &udev_device->env_list, name_loop->name, 0); udev_device_cleanup(udevice); return udev_device; @@ -185,9 +192,13 @@ void udev_device_unref(struct udev_device *udev_device) free(udev_device->syspath); free(udev_device->devname); free(udev_device->subsystem); - name_list_cleanup(&udev_device->link_list); - name_list_cleanup(&udev_device->env_list); - log_info(udev_device->udev, "udev_device: %p released\n", udev_device); + name_list_cleanup(udev_device->udev, &udev_device->link_list); + name_list_cleanup(udev_device->udev, &udev_device->env_list); + free(udev_device->action); + free(udev_device->driver); + free(udev_device->devpath_old); + free(udev_device->physdevpath); + info(udev_device->udev, "udev_device: %p released\n", udev_device); free(udev_device); } @@ -333,6 +344,34 @@ int udev_device_get_properties(struct udev_device *udev_device, return count; } +const char *udev_device_get_driver(struct udev_device *udev_device) +{ + if (udev_device == NULL) + return NULL; + return udev_device->driver; +} + +dev_t udev_device_get_devnum(struct udev_device *udev_device) +{ + if (udev_device == NULL) + return makedev(0, 0); + return udev_device->devnum; +} + +const char *udev_device_get_action(struct udev_device *udev_device) +{ + if (udev_device == NULL) + return NULL; + return udev_device->action; +} + +unsigned long long int udev_device_get_seqnum(struct udev_device *udev_device) +{ + if (udev_device == NULL) + return 0; + return udev_device->seqnum; +} + int device_set_devpath(struct udev_device *udev_device, const char *devpath) { if (asprintf(&udev_device->syspath, "%s%s", udev_get_sys_path(udev_device->udev), devpath) < 0) @@ -359,14 +398,85 @@ int device_set_devname(struct udev_device *udev_device, const char *devname) int device_add_devlink(struct udev_device *udev_device, const char *devlink) { - if (name_list_add(&udev_device->link_list, devlink, 0) == NULL) + if (name_list_add(udev_device->udev, &udev_device->link_list, devlink, 0) == NULL) return -ENOMEM; return 0; } int device_add_property(struct udev_device *udev_device, const char *property) { - if (name_list_add(&udev_device->env_list, property, 0) == NULL) + if (name_list_add(udev_device->udev, &udev_device->env_list, property, 0) == NULL) + return -ENOMEM; + return 0; +} + +int device_set_action(struct udev_device *udev_device, const char *action) +{ + udev_device->action = strdup(action); + if (udev_device->action == NULL) + return -ENOMEM; + return 0; +} + +int device_set_driver(struct udev_device *udev_device, const char *driver) +{ + udev_device->driver = strdup(driver); + if (udev_device->driver == NULL) return -ENOMEM; return 0; } + +const char *device_get_devpath_old(struct udev_device *udev_device) +{ + if (udev_device == NULL) + return NULL; + return udev_device->devpath_old; +} + +int device_set_devpath_old(struct udev_device *udev_device, const char *devpath_old) +{ + udev_device->devpath_old = strdup(devpath_old); + if (udev_device->devpath_old == NULL) + return -ENOMEM; + return 0; +} + +const char *device_get_physdevpath(struct udev_device *udev_device) +{ + if (udev_device == NULL) + return NULL; + return udev_device->physdevpath; +} + +int device_set_physdevpath(struct udev_device *udev_device, const char *physdevpath) +{ + udev_device->physdevpath = strdup(physdevpath); + if (udev_device->physdevpath == NULL) + return -ENOMEM; + return 0; +} + +int device_get_timeout(struct udev_device *udev_device) +{ + if (udev_device == NULL) + return -1; + return udev_device->timeout; +} + +int device_set_timeout(struct udev_device *udev_device, int timeout) +{ + udev_device->timeout = timeout; + return 0; +} + +int device_set_seqnum(struct udev_device *udev_device, unsigned long long int seqnum) +{ + udev_device->seqnum = seqnum; + return 0; +} + +int device_set_devnum(struct udev_device *udev_device, dev_t devnum) +{ + udev_device->devnum = devnum; + return 0; +}