From a5d5e4dd2b2f9611cec337c08225f9c42f7d0978 Mon Sep 17 00:00:00 2001 From: illiliti Date: Sun, 26 Jul 2020 12:34:43 +0300 Subject: [PATCH] fix gcc 10 --- udev.c | 6 ++++++ udev_device.c | 21 +++++++++++++++++---- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/udev.c b/udev.c index 0b4a3d0..57cf4c8 100644 --- a/udev.c +++ b/udev.c @@ -11,6 +11,12 @@ struct udev *udev_new(void) struct udev *udev; udev = calloc(1, sizeof(struct udev)); + + if (!udev) { + return NULL; + } + + udev->refcount = 1; return udev; } diff --git a/udev_device.c b/udev_device.c index 5844d0b..0e00c33 100644 --- a/udev_device.c +++ b/udev_device.c @@ -298,7 +298,7 @@ int udev_device_set_sysattr_value(struct udev_device *udev_device, const char *s return 0; } -static const char *udev_device_read_symlink(struct udev_device *udev_device, const char *name) +static char *udev_device_read_symlink(struct udev_device *udev_device, const char *name) { char link[PATH_MAX], path[PATH_MAX]; ssize_t len; @@ -312,7 +312,7 @@ static const char *udev_device_read_symlink(struct udev_device *udev_device, con } link[len] = '\0'; - return strrchr(link, '/') + 1; + return strdup(strrchr(link, '/') + 1); } static void udev_device_set_properties_from_uevent(struct udev_device *udev_device) @@ -424,6 +424,7 @@ struct udev_device *udev_device_new_from_syspath(struct udev *udev, const char * { char path[PATH_MAX], file[PATH_MAX + 7]; struct udev_device *udev_device; + char *subsystem, *driver; struct stat st; if (!udev || !syspath) { @@ -459,8 +460,20 @@ struct udev_device *udev_device_new_from_syspath(struct udev *udev, const char * udev_list_entry_add(&udev_device->properties, "SYSPATH", path); udev_list_entry_add(&udev_device->properties, "DEVPATH", path + 4); - udev_list_entry_add(&udev_device->properties, "DRIVER", udev_device_read_symlink(udev_device, "driver")); - udev_list_entry_add(&udev_device->properties, "SUBSYSTEM", udev_device_read_symlink(udev_device, "subsystem")); + + subsystem = udev_device_read_symlink(udev_device, "subsystem"); + + if (subsystem) { + udev_list_entry_add(&udev_device->properties, "SUBSYSTEM", subsystem); + free(subsystem); + } + + driver = udev_device_read_symlink(udev_device, "driver"); + + if (driver) { + udev_list_entry_add(&udev_device->properties, "DRIVER", driver); + free(driver); + } udev_device_set_properties_from_uevent(udev_device); udev_device_set_properties_from_ioctl(udev_device);