diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2019-02-08 18:02:39 +0300 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2019-02-08 18:02:39 +0300 |
commit | 78301861ef9e8d0edc72898712dbce7d793150a8 (patch) | |
tree | fb2d0f38f45d779ddb53930e16146ff9d2dc9520 /procps | |
parent | 1422ba6dea9160a4b8ad7be9c2cc925c810f1414 (diff) |
sysctl: do slash/dot conversions only on name, not value part
function old new delta
sysctl_dots_to_slashes 71 86 +15
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'procps')
-rw-r--r-- | procps/sysctl.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/procps/sysctl.c b/procps/sysctl.c index 94a307901..5303460f9 100644 --- a/procps/sysctl.c +++ b/procps/sysctl.c @@ -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) |