From: Zbigniew Jędrzejewski-Szmek Date: Wed, 5 May 2021 14:57:39 +0000 (+0200) Subject: sd-device: use memdupa_suffix0() where appropriate X-Git-Tag: v249-rc1~293^2~1 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=3e2d0c6ab2abc0ab85440580931b2462bb73cfda;p=thirdparty%2Fsystemd.git sd-device: use memdupa_suffix0() where appropriate No functional change intended. --- diff --git a/src/libsystemd/sd-device/sd-device.c b/src/libsystemd/sd-device/sd-device.c index da1a7a31817..16c518fced8 100644 --- a/src/libsystemd/sd-device/sd-device.c +++ b/src/libsystemd/sd-device/sd-device.c @@ -271,20 +271,17 @@ _public_ int sd_device_new_from_subsystem_sysname(sd_device **ret, const char *s return sd_device_new_from_syspath(ret, syspath); } else if (streq(subsystem, "drivers")) { - char subsys[PATH_MAX]; - char *driver; + const char *subsys, *sep; - strscpy(subsys, sizeof(subsys), sysname); - driver = strchr(subsys, ':'); - if (driver) { - driver[0] = '\0'; - driver++; + sep = strchr(sysname, ':'); + if (sep) { + subsys = memdupa_suffix0(sysname, sep - sysname); - if (snprintf_ok(syspath, sizeof syspath, "/sys/subsystem/%s/drivers/%s", subsys, driver) && + if (snprintf_ok(syspath, sizeof syspath, "/sys/subsystem/%s/drivers/%s", subsys, sep + 1) && access(syspath, F_OK) >= 0) return sd_device_new_from_syspath(ret, syspath); - if (snprintf_ok(syspath, sizeof syspath, "/sys/bus/%s/drivers/%s", subsys, driver) && + if (snprintf_ok(syspath, sizeof syspath, "/sys/bus/%s/drivers/%s", subsys, sep + 1) && access(syspath, F_OK) >= 0) return sd_device_new_from_syspath(ret, syspath); } @@ -652,17 +649,15 @@ _public_ int sd_device_new_from_device_id(sd_device **ret, const char *id) { } case '+': { - char subsys[NAME_MAX+1]; /* NAME_MAX does not include the trailing NUL. */ - const char *sysname; + const char *subsys, *sep; - sysname = strchr(id + 1, ':'); - if (!sysname) + sep = strchr(id + 1, ':'); + if (!sep || sep - id - 1 > NAME_MAX) return -EINVAL; - (void) strnscpy(subsys, sizeof(subsys), id + 1, sysname - id - 1); - sysname++; + subsys = memdupa_suffix0(id + 1, sep - id - 1); - return sd_device_new_from_subsystem_sysname(ret, subsys, sysname); + return sd_device_new_from_subsystem_sysname(ret, subsys, sep + 1); } default: