X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Flibelogind%2Fsd-device%2Fsd-device.c;h=7cea5a074658ef5a63dda89881eba859a19dd0a2;hp=af8137b1ae99c95c6430e6f228df25faf4db392f;hb=d76bb3c179b7a32b109e39aa87ff09c8f5a8c178;hpb=b32ab4f27b4a4235ce433eff7f6433c020caad51 diff --git a/src/libelogind/sd-device/sd-device.c b/src/libelogind/sd-device/sd-device.c index af8137b1a..7cea5a074 100644 --- a/src/libelogind/sd-device/sd-device.c +++ b/src/libelogind/sd-device/sd-device.c @@ -791,6 +791,9 @@ _public_ int sd_device_get_subsystem(sd_device *device, const char **ret) { device->subsystem_set = true; } + if (!device->subsystem) + return -ENOENT; + *ret = device->subsystem; return 0; @@ -901,10 +904,16 @@ _public_ int sd_device_get_driver(sd_device *device, const char **ret) { if (r >= 0) { r = device_set_driver(device, driver); if (r < 0) - return r; - } + return log_debug_errno(r, "sd-device: could not set driver for %s: %m", device->devpath); + } else if (r == -ENOENT) + device->driver_set = true; + else + return log_debug_errno(r, "sd-device: could not set driver for %s: %m", device->devpath); } + if (!device->driver) + return -ENOENT; + *ret = device->driver; return 0; @@ -999,6 +1008,8 @@ _public_ int sd_device_get_sysname(sd_device *device, const char **ret) { return r; } + assert_return(device->sysname, -ENOENT); + *ret = device->sysname; return 0; @@ -1267,7 +1278,7 @@ int device_read_db_aux(sd_device *device, bool force) { } /* devices with a database entry are initialized */ - device->is_initialized = true;; + device->is_initialized = true; for (i = 0; i < db_len; i++) { switch (state) { @@ -1368,6 +1379,8 @@ _public_ int sd_device_get_usec_since_initialized(sd_device *device, uint64_t *u } _public_ const char *sd_device_get_tag_first(sd_device *device) { + void *v; + assert_return(device, NULL); (void) device_read_db(device); @@ -1375,10 +1388,13 @@ _public_ const char *sd_device_get_tag_first(sd_device *device) { device->tags_iterator_generation = device->tags_generation; device->tags_iterator = ITERATOR_FIRST; - return set_iterate(device->tags, &device->tags_iterator); + set_iterate(device->tags, &device->tags_iterator, &v); + return v; } _public_ const char *sd_device_get_tag_next(sd_device *device) { + void *v; + assert_return(device, NULL); (void) device_read_db(device); @@ -1386,10 +1402,13 @@ _public_ const char *sd_device_get_tag_next(sd_device *device) { if (device->tags_iterator_generation != device->tags_generation) return NULL; - return set_iterate(device->tags, &device->tags_iterator); + set_iterate(device->tags, &device->tags_iterator, &v); + return v; } _public_ const char *sd_device_get_devlink_first(sd_device *device) { + void *v; + assert_return(device, NULL); (void) device_read_db(device); @@ -1397,10 +1416,13 @@ _public_ const char *sd_device_get_devlink_first(sd_device *device) { device->devlinks_iterator_generation = device->devlinks_generation; device->devlinks_iterator = ITERATOR_FIRST; - return set_iterate(device->devlinks, &device->devlinks_iterator); + set_iterate(device->devlinks, &device->devlinks_iterator, &v); + return v; } _public_ const char *sd_device_get_devlink_next(sd_device *device) { + void *v; + assert_return(device, NULL); (void) device_read_db(device); @@ -1408,7 +1430,8 @@ _public_ const char *sd_device_get_devlink_next(sd_device *device) { if (device->devlinks_iterator_generation != device->devlinks_generation) return NULL; - return set_iterate(device->devlinks, &device->devlinks_iterator); + set_iterate(device->devlinks, &device->devlinks_iterator, &v); + return v; } static int device_properties_prepare(sd_device *device) { @@ -1479,7 +1502,7 @@ _public_ const char *sd_device_get_property_first(sd_device *device, const char device->properties_iterator_generation = device->properties_generation; device->properties_iterator = ITERATOR_FIRST; - value = ordered_hashmap_iterate(device->properties, &device->properties_iterator, (const void**)&key); + ordered_hashmap_iterate(device->properties, &device->properties_iterator, (void**)&value, (const void**)&key); if (_value) *_value = value; @@ -1501,7 +1524,7 @@ _public_ const char *sd_device_get_property_next(sd_device *device, const char * if (device->properties_iterator_generation != device->properties_generation) return NULL; - value = ordered_hashmap_iterate(device->properties, &device->properties_iterator, (const void**)&key); + ordered_hashmap_iterate(device->properties, &device->properties_iterator, (void**)&value, (const void**)&key); if (_value) *_value = value; @@ -1559,6 +1582,7 @@ static int device_sysattrs_read_all(sd_device *device) { } _public_ const char *sd_device_get_sysattr_first(sd_device *device) { + void *v; int r; assert_return(device, NULL); @@ -1573,16 +1597,20 @@ _public_ const char *sd_device_get_sysattr_first(sd_device *device) { device->sysattrs_iterator = ITERATOR_FIRST; - return set_iterate(device->sysattrs, &device->sysattrs_iterator); + set_iterate(device->sysattrs, &device->sysattrs_iterator, &v); + return v; } _public_ const char *sd_device_get_sysattr_next(sd_device *device) { + void *v; + assert_return(device, NULL); if (!device->sysattrs_read) return NULL; - return set_iterate(device->sysattrs, &device->sysattrs_iterator); + set_iterate(device->sysattrs, &device->sysattrs_iterator, &v); + return v; } _public_ int sd_device_has_tag(sd_device *device, const char *tag) {