sd-device: minor optimization for sd_device_new_from_device_id()
authorYu Watanabe <watanabe.yu+github@gmail.com>
Sun, 7 Mar 2021 06:24:15 +0000 (15:24 +0900)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Sat, 15 May 2021 17:15:36 +0000 (19:15 +0200)
(cherry picked from commit ff7a8d2938b24cb7ca7b69900395ecf837a43a23)
(cherry picked from commit d7ea7c486a0101dae06a9aca290bfafa46bc1fe2)

src/libsystemd/sd-device/sd-device.c

index 6e05ba586f6772e69c5fd79e41f832aa3b3e9f18..e8ac2233fe7df8fa91071e1a3ccbf86783a9b6f9 100644 (file)
@@ -609,7 +609,7 @@ _public_ int sd_device_new_from_device_id(sd_device **ret, const char *id) {
                 struct ifreq ifr = {};
                 int ifindex;
 
-                r = ifr.ifr_ifindex = parse_ifindex(&id[1]);
+                r = ifr.ifr_ifindex = parse_ifindex(id + 1);
                 if (r < 0)
                         return r;
 
@@ -638,15 +638,14 @@ _public_ int sd_device_new_from_device_id(sd_device **ret, const char *id) {
         }
 
         case '+': {
-                char subsys[PATH_MAX];
-                char *sysname;
+                char subsys[NAME_MAX+1]; /* NAME_MAX does not include the trailing NUL. */
+                const char *sysname;
 
-                (void) strscpy(subsys, sizeof(subsys), id + 1);
-                sysname = strchr(subsys, ':');
+                sysname = strchr(id + 1, ':');
                 if (!sysname)
                         return -EINVAL;
 
-                sysname[0] = '\0';
+                (void) strnscpy(subsys, sizeof(subsys), id + 1, sysname - id - 1);
                 sysname++;
 
                 return sd_device_new_from_subsystem_sysname(ret, subsys, sysname);