sysctl: do slash/dot conversions only on name, not value part
authorDenys Vlasenko <vda.linux@googlemail.com>
Fri, 8 Feb 2019 15:02:39 +0000 (16:02 +0100)
committerDenys Vlasenko <vda.linux@googlemail.com>
Fri, 8 Feb 2019 15:02:39 +0000 (16:02 +0100)
function                                             old     new   delta
sysctl_dots_to_slashes                                71      86     +15

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
procps/sysctl.c

index 94a3079012bc40f95320b3d7353e9b16f349a7ad..5303460f93b82f2631773463cd91e521dd2572a9 100644 (file)
@@ -57,6 +57,7 @@ enum {
 static void sysctl_dots_to_slashes(char *name)
 {
        char *cptr, *last_good, *end;
+       char end_ch;
 
        /* Convert minimum number of '.' to '/' so that
         * we end up with existing file's name.
@@ -76,10 +77,11 @@ static void sysctl_dots_to_slashes(char *name)
         *
         * To set up testing: modprobe 8021q; vconfig add eth0 100
         */
-       end = name + strlen(name);
-       last_good = name - 1;
+       end = strchrnul(name, '=');
+       end_ch = *end;
        *end = '.'; /* trick the loop into trying full name too */
 
+       last_good = name - 1;
  again:
        cptr = end;
        while (cptr > last_good) {
@@ -96,7 +98,7 @@ static void sysctl_dots_to_slashes(char *name)
                }
                cptr--;
        }
-       *end = '\0';
+       *end = end_ch;
 }
 
 static int sysctl_act_on_setting(char *setting)