diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2017-08-05 17:50:35 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2017-08-05 17:50:35 +0200 |
commit | 20077c1429915b2c223e4d179a033f2b1806872c (patch) | |
tree | 76c89e23adc5bb529e310d9e25e7016f6d699645 | |
parent | 9cf89cdf84fb20154088145980b676d2b28fc55d (diff) | |
download | busybox-w32-20077c1429915b2c223e4d179a033f2b1806872c.tar.gz busybox-w32-20077c1429915b2c223e4d179a033f2b1806872c.tar.bz2 busybox-w32-20077c1429915b2c223e4d179a033f2b1806872c.zip |
libbb: make trim() return pointer to terminating NUL
function old new delta
trim 80 90 +10
angle_address 56 50 -6
sysctl_main 282 273 -9
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/3 up/down: +10/-15) Total: -5 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | include/libbb.h | 2 | ||||
-rw-r--r-- | libbb/trim.c | 12 | ||||
-rw-r--r-- | mailutils/sendmail.c | 5 | ||||
-rw-r--r-- | miscutils/lsscsi.c | 3 | ||||
-rw-r--r-- | procps/sysctl.c | 12 |
5 files changed, 22 insertions, 12 deletions
diff --git a/include/libbb.h b/include/libbb.h index 6a2a2d640..6077f64c9 100644 --- a/include/libbb.h +++ b/include/libbb.h | |||
@@ -347,7 +347,7 @@ unsigned long long monotonic_ms(void) FAST_FUNC; | |||
347 | unsigned monotonic_sec(void) FAST_FUNC; | 347 | unsigned monotonic_sec(void) FAST_FUNC; |
348 | 348 | ||
349 | extern void chomp(char *s) FAST_FUNC; | 349 | extern void chomp(char *s) FAST_FUNC; |
350 | extern void trim(char *s) FAST_FUNC; | 350 | extern char *trim(char *s) FAST_FUNC; |
351 | extern char *skip_whitespace(const char *) FAST_FUNC; | 351 | extern char *skip_whitespace(const char *) FAST_FUNC; |
352 | extern char *skip_non_whitespace(const char *) FAST_FUNC; | 352 | extern char *skip_non_whitespace(const char *) FAST_FUNC; |
353 | extern char *skip_dev_pfx(const char *tty_name) FAST_FUNC; | 353 | extern char *skip_dev_pfx(const char *tty_name) FAST_FUNC; |
diff --git a/libbb/trim.c b/libbb/trim.c index 16cb4fbb0..e47fec74e 100644 --- a/libbb/trim.c +++ b/libbb/trim.c | |||
@@ -10,9 +10,10 @@ | |||
10 | 10 | ||
11 | #include "libbb.h" | 11 | #include "libbb.h" |
12 | 12 | ||
13 | void FAST_FUNC trim(char *s) | 13 | char* FAST_FUNC trim(char *s) |
14 | { | 14 | { |
15 | size_t len = strlen(s); | 15 | size_t len = strlen(s); |
16 | size_t old = len; | ||
16 | 17 | ||
17 | /* trim trailing whitespace */ | 18 | /* trim trailing whitespace */ |
18 | while (len && isspace(s[len-1])) | 19 | while (len && isspace(s[len-1])) |
@@ -26,5 +27,12 @@ void FAST_FUNC trim(char *s) | |||
26 | memmove(s, nws, len); | 27 | memmove(s, nws, len); |
27 | } | 28 | } |
28 | } | 29 | } |
29 | s[len] = '\0'; | 30 | |
31 | s += len; | ||
32 | /* If it was a "const char*" which does not need trimming, | ||
33 | * avoid superfluous store */ | ||
34 | if (old != len) | ||
35 | *s = '\0'; | ||
36 | |||
37 | return s; | ||
30 | } | 38 | } |
diff --git a/mailutils/sendmail.c b/mailutils/sendmail.c index 346de2712..65895f0ec 100644 --- a/mailutils/sendmail.c +++ b/mailutils/sendmail.c | |||
@@ -166,9 +166,8 @@ static char *angle_address(char *str) | |||
166 | { | 166 | { |
167 | char *s, *e; | 167 | char *s, *e; |
168 | 168 | ||
169 | trim(str); | 169 | e = trim(str); |
170 | e = last_char_is(str, '>'); | 170 | if (e != str && e[-1] == '>') { |
171 | if (e) { | ||
172 | s = strrchr(str, '<'); | 171 | s = strrchr(str, '<'); |
173 | if (s) { | 172 | if (s) { |
174 | *e = '\0'; | 173 | *e = '\0'; |
diff --git a/miscutils/lsscsi.c b/miscutils/lsscsi.c index b69ff1eef..c86630e31 100644 --- a/miscutils/lsscsi.c +++ b/miscutils/lsscsi.c | |||
@@ -37,9 +37,8 @@ static char *get_line(const char *filename, char *buf, unsigned *bufsize_p) | |||
37 | if (sz < 0) | 37 | if (sz < 0) |
38 | sz = 0; | 38 | sz = 0; |
39 | buf[sz] = '\0'; | 39 | buf[sz] = '\0'; |
40 | trim(buf); | ||
41 | 40 | ||
42 | sz = strlen(buf) + 1; | 41 | sz = (trim(buf) - buf) + 1; |
43 | bufsize -= sz; | 42 | bufsize -= sz; |
44 | buf += sz; | 43 | buf += sz; |
45 | buf[0] = '\0'; | 44 | buf[0] = '\0'; |
diff --git a/procps/sysctl.c b/procps/sysctl.c index 619f4f1e4..ef1a1b99f 100644 --- a/procps/sysctl.c +++ b/procps/sysctl.c | |||
@@ -257,12 +257,16 @@ static int sysctl_handle_preload_file(const char *filename) | |||
257 | parse_flags &= ~PARSE_EOL_COMMENTS; // NO (only first char) - comments are recognized even if not first char | 257 | parse_flags &= ~PARSE_EOL_COMMENTS; // NO (only first char) - comments are recognized even if not first char |
258 | while (config_read(parser, token, 2, 2, "#=", parse_flags)) { | 258 | while (config_read(parser, token, 2, 2, "#=", parse_flags)) { |
259 | char *tp; | 259 | char *tp; |
260 | trim(token[0]); | 260 | |
261 | trim(token[1]); | 261 | trim(token[1]); |
262 | tp = trim(token[0]); | ||
262 | sysctl_dots_to_slashes(token[0]); | 263 | sysctl_dots_to_slashes(token[0]); |
263 | tp = xasprintf("%s=%s", token[0], token[1]); | 264 | /* ^^^converted in-place. tp still points to NUL */ |
264 | sysctl_act_on_setting(tp); | 265 | /* now, add "=TOKEN1" */ |
265 | free(tp); | 266 | *tp++ = '='; |
267 | overlapping_strcpy(tp, token[1]); | ||
268 | |||
269 | sysctl_act_on_setting(token[0]); | ||
266 | } | 270 | } |
267 | if (ENABLE_FEATURE_CLEAN_UP) | 271 | if (ENABLE_FEATURE_CLEAN_UP) |
268 | config_close(parser); | 272 | config_close(parser); |