]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
sd-device: shorten code a bit
authorYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 15 Apr 2022 04:45:26 +0000 (13:45 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 15 Apr 2022 15:52:24 +0000 (00:52 +0900)
src/libsystemd/sd-device/sd-device.c

index ef3586ddfb5dd665dc2c803c8cea4d75e76bcb32..6c8e7d646fb18e13b0ffae83adc1e9be55f6f63b 100644 (file)
@@ -1170,8 +1170,8 @@ _public_ int sd_device_get_devname(sd_device *device, const char **devname) {
 
 static int device_set_sysname_and_sysnum(sd_device *device) {
         _cleanup_free_ char *sysname = NULL;
-        const char *sysnum = NULL;
-        size_t len = 0;
+        char *p;
+        int r;
 
         assert(device);
 
@@ -1180,21 +1180,14 @@ static int device_set_sysname_and_sysnum(sd_device *device) {
                 return r;
 
         /* some devices have '!' in their name, change that to '/' */
-        while (sysname[len] != '\0') {
-                if (sysname[len] == '!')
-                        sysname[len] = '/';
-
-                len++;
-        }
-
-        /* trailing number */
-        while (len > 0 && isdigit(sysname[--len]))
-                sysnum = &sysname[len];
+        for (p = strchrnul(sysname, '!'); *p != '\0'; p = strchrnul(p, '!'))
+                *p = '/';
 
-        if (len == 0)
-                sysnum = NULL;
+        /* trailing number (refuse number only sysname)*/
+        for (; p > sysname && isdigit(p[-1]); p--)
+                ;
 
-        device->sysnum = sysnum;
+        device->sysnum = p > sysname && *p != '\0' ? p : NULL;
         return free_and_replace(device->sysname, sysname);
 }