From 37de89865378bf045e2cd33ded75a30d384bc7fa Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Tue, 12 Aug 2014 01:43:23 +0200 Subject: udev: modernize net_id builtin a bit Signed-off-by: Anthony G. Basile --- src/shared/util.h | 13 +++++++++++++ src/udev/udev-builtin-net_id.c | 21 +++++++++------------ 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/src/shared/util.h b/src/shared/util.h index 5e699ca5a8..5fe724af40 100644 --- a/src/shared/util.h +++ b/src/shared/util.h @@ -336,6 +336,19 @@ static inline void _reset_errno_(int *saved_errno) { #define PROTECT_ERRNO _cleanup_(_reset_errno_) __attribute__((unused)) int _saved_errno_ = errno int unlink_noerrno(const char *path); + +#define strappenda(a, b) \ + ({ \ + const char *_a_ = (a), *_b_ = (b); \ + char *_c_; \ + size_t _x_, _y_; \ + _x_ = strlen(_a_); \ + _y_ = strlen(_b_); \ + _c_ = alloca(_x_ + _y_ + 1); \ + strcpy(stpcpy(_c_, _a_), _b_); \ + _c_; \ + }) + static inline void qsort_safe(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)) { if (nmemb) { diff --git a/src/udev/udev-builtin-net_id.c b/src/udev/udev-builtin-net_id.c index ae3b6459f7..ae32d2f104 100644 --- a/src/udev/udev-builtin-net_id.c +++ b/src/udev/udev-builtin-net_id.c @@ -149,25 +149,22 @@ static int dev_pci_onboard(struct udev_device *dev, struct netnames *names) { /* read the 256 bytes PCI configuration space to check the multi-function bit */ static bool is_pci_multifunction(struct udev_device *dev) { - char filename[256]; - FILE *f = NULL; - char config[64]; - bool multi = false; + _cleanup_fclose_ FILE *f = NULL; + const char *filename; + uint8_t config[64]; - snprintf(filename, sizeof(filename), "%s/config", udev_device_get_syspath(dev)); + filename = strappenda(udev_device_get_syspath(dev), "/config"); f = fopen(filename, "re"); if (!f) - goto out; + return false; if (fread(&config, sizeof(config), 1, f) != 1) - goto out; + return false; /* bit 0-6 header type, bit 7 multi/single function device */ if ((config[PCI_HEADER_TYPE] & 0x80) != 0) - multi = true; -out: - if (f) - fclose(f); - return multi; + return true; + + return false; } static int dev_pci_slot(struct udev_device *dev, struct netnames *names) { -- cgit v1.2.3-54-g00ecf