aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2019-02-08 16:02:39 +0100
committerDenys Vlasenko <vda.linux@googlemail.com>2019-02-08 16:02:39 +0100
commit78301861ef9e8d0edc72898712dbce7d793150a8 (patch)
treefb2d0f38f45d779ddb53930e16146ff9d2dc9520
parent1422ba6dea9160a4b8ad7be9c2cc925c810f1414 (diff)
downloadbusybox-78301861ef9e8d0edc72898712dbce7d793150a8.tar.gz
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>
-rw-r--r--procps/sysctl.c8
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)