71 lines
3.0 KiB
Diff
71 lines
3.0 KiB
Diff
From 3e2d0c6ab2abc0ab85440580931b2462bb73cfda Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
|
|
Date: Wed, 5 May 2021 16:57:39 +0200
|
|
Subject: [PATCH] sd-device: use memdupa_suffix0() where appropriate
|
|
|
|
No functional change intended.
|
|
|
|
Conflict:NA
|
|
Reference:https://github.com/systemd/systemd-stable/commit/3e2d0c6ab2abc0ab85440580931b2462bb73cfda
|
|
---
|
|
src/libsystemd/sd-device/sd-device.c | 27 +++++++++++----------------
|
|
1 file changed, 11 insertions(+), 16 deletions(-)
|
|
|
|
diff --git a/src/libsystemd/sd-device/sd-device.c b/src/libsystemd/sd-device/sd-device.c
|
|
index da1a7a3181..16c518fced 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:
|
|
--
|
|
2.27.0
|
|
|