From: Lennart Poettering Date: Tue, 19 Nov 2013 00:14:21 +0000 (+0100) Subject: libudev: always return valid negative error codes on API functions X-Git-Tag: v209~1390 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=994e023433e020e2b3f683d5d1f2c974db580447;ds=sidebyside libudev: always return valid negative error codes on API functions --- diff --git a/src/libudev/libudev-device.c b/src/libudev/libudev-device.c index d7f672f18..b5b07fc5d 100644 --- a/src/libudev/libudev-device.c +++ b/src/libudev/libudev-device.c @@ -536,7 +536,7 @@ int udev_device_read_db(struct udev_device *udev_device, const char *dbfile) f = fopen(dbfile, "re"); if (f == NULL) { udev_dbg(udev_device->udev, "no db file to read %s: %m\n", dbfile); - return -1; + return -errno; } udev_device->is_initialized = true; @@ -593,7 +593,7 @@ int udev_device_read_uevent_file(struct udev_device *udev_device) strscpyl(filename, sizeof(filename), udev_device->syspath, "/uevent", NULL); f = fopen(filename, "re"); if (f == NULL) - return -1; + return -errno; udev_device->uevent_loaded = true; while (fgets(line, sizeof(line), f)) { @@ -1521,13 +1521,13 @@ static int udev_device_sysattr_list_read(struct udev_device *udev_device) int num = 0; if (udev_device == NULL) - return -1; + return -EINVAL; if (udev_device->sysattr_list_read) return 0; dir = opendir(udev_device_get_syspath(udev_device)); if (!dir) - return -1; + return -errno; for (dent = readdir(dir); dent != NULL; dent = readdir(dir)) { char path[UTIL_PATH_SIZE]; diff --git a/src/libudev/libudev-monitor.c b/src/libudev/libudev-monitor.c index 021279255..24efdc65e 100644 --- a/src/libudev/libudev-monitor.c +++ b/src/libudev/libudev-monitor.c @@ -288,7 +288,7 @@ _public_ int udev_monitor_filter_update(struct udev_monitor *udev_monitor) bpf_stmt(ins, &i, BPF_RET|BPF_K, 0xffffffff); if (i+1 >= ELEMENTSOF(ins)) - return -1; + return -E2BIG; } /* nothing matched, drop packet */ @@ -303,7 +303,7 @@ _public_ int udev_monitor_filter_update(struct udev_monitor *udev_monitor) filter.len = i; filter.filter = ins; err = setsockopt(udev_monitor->sock, SOL_SOCKET, SO_ATTACH_FILTER, &filter, sizeof(filter)); - return err; + return err < 0 ? -errno : 0; } int udev_monitor_allow_unicast_sender(struct udev_monitor *udev_monitor, struct udev_monitor *sender) @@ -350,7 +350,7 @@ _public_ int udev_monitor_enable_receiving(struct udev_monitor *udev_monitor) udev_monitor->snl.nl.nl_pid = snl.nl.nl_pid; } else { udev_err(udev_monitor->udev, "bind failed: %m\n"); - return err; + return -errno; } /* enable receiving of sender credentials */ @@ -371,7 +371,7 @@ _public_ int udev_monitor_enable_receiving(struct udev_monitor *udev_monitor) _public_ int udev_monitor_set_receive_buffer_size(struct udev_monitor *udev_monitor, int size) { if (udev_monitor == NULL) - return -1; + return -EINVAL; return setsockopt(udev_monitor->sock, SOL_SOCKET, SO_RCVBUFFORCE, &size, sizeof(size)); } @@ -381,7 +381,7 @@ int udev_monitor_disconnect(struct udev_monitor *udev_monitor) err = close(udev_monitor->sock); udev_monitor->sock = -1; - return err; + return err < 0 ? -errno : 0; } /** @@ -451,7 +451,7 @@ _public_ struct udev *udev_monitor_get_udev(struct udev_monitor *udev_monitor) _public_ int udev_monitor_get_fd(struct udev_monitor *udev_monitor) { if (udev_monitor == NULL) - return -1; + return -EINVAL; return udev_monitor->sock; }