X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=libudev%2Flibudev-device.c;h=5811490a34599cbfdb4078938bda213a33c405fa;hp=478fdcb92d7f80231662b10ccfceef6f1a2c7900;hb=a7d29d15095a7977c02fa3a6bb1efe627dcdd2f4;hpb=28460195c2ae90892bf556aff2b80705a8f37795 diff --git a/libudev/libudev-device.c b/libudev/libudev-device.c index 478fdcb92..5811490a3 100644 --- a/libudev/libudev-device.c +++ b/libudev/libudev-device.c @@ -279,11 +279,13 @@ int udev_device_read_db(struct udev_device *udev_device) return 0; } - f = fopen(filename, "r"); + f = fopen(filename, "re"); if (f == NULL) { dbg(udev_device->udev, "error reading db file %s: %m\n", filename); return -1; } + udev_device->db_loaded = true; + while (fgets(line, sizeof(line), f)) { ssize_t len; const char *val; @@ -322,7 +324,6 @@ int udev_device_read_db(struct udev_device *udev_device) fclose(f); info(udev_device->udev, "device %p filled with db file data\n", udev_device); - udev_device->db_loaded = true; return 0; } @@ -338,9 +339,10 @@ int udev_device_read_uevent_file(struct udev_device *udev_device) return 0; util_strscpyl(filename, sizeof(filename), udev_device->syspath, "/uevent", NULL); - f = fopen(filename, "r"); + f = fopen(filename, "re"); if (f == NULL) return -1; + udev_device->uevent_loaded = true; while (fgets(line, sizeof(line), f)) { char *pos; @@ -364,7 +366,6 @@ int udev_device_read_uevent_file(struct udev_device *udev_device) udev_device->devnum = makedev(maj, min); fclose(f); - udev_device->uevent_loaded = true; return 0; } @@ -1163,7 +1164,7 @@ const char *udev_device_get_sysattr_value(struct udev_device *udev_device, const goto out; /* read attribute value */ - fd = open(path, O_RDONLY); + fd = open(path, O_RDONLY|O_CLOEXEC); if (fd < 0) { dbg(udev_device->udev, "attribute '%s' can not be opened\n", path); goto out; @@ -1286,8 +1287,21 @@ void udev_device_cleanup_tags_list(struct udev_device *udev_device) udev_list_cleanup_entries(udev_device->udev, &udev_device->tags_list); } +/** + * udev_device_get_tags_list_entry: + * @udev_device: udev device + * + * Retrieve the list of tags attached to the udev device. The next + * list entry can be retrieved with udev_list_entry_next(), + * which returns #NULL if no more entries exist. The tag string + * can be retrieved from the list entry by udev_list_get_name(). + * + * Returns: the first entry of the tag list + **/ struct udev_list_entry *udev_device_get_tags_list_entry(struct udev_device *udev_device) { + if (udev_device == NULL) + return NULL; return udev_list_get_entry(&udev_device->tags_list); }