httpd: simplify insane conf file parser
function old new delta bb_simplify_abs_path_inplace - 98 +98 parse_expr 824 832 +8 passwd_main 1025 1027 +2 evalvar 1374 1376 +2 parse_command 1463 1460 -3 bb_simplify_path 137 55 -82 parse_conf 1572 1422 -150 ------------------------------------------------------------------------------ (add/remove: 3/2 grow/shrink: 3/3 up/down: 126/-251) Total: -125 bytes
This commit is contained in:
parent
574c316e5a
commit
1cf4a0eb81
3 changed files with 200 additions and 194 deletions
|
@ -6,22 +6,13 @@
|
|||
*
|
||||
* Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
|
||||
*/
|
||||
|
||||
#include "libbb.h"
|
||||
|
||||
char* FAST_FUNC bb_simplify_path(const char *path)
|
||||
char* FAST_FUNC bb_simplify_abs_path_inplace(char *start)
|
||||
{
|
||||
char *s, *start, *p;
|
||||
char *s, *p;
|
||||
|
||||
if (path[0] == '/')
|
||||
start = xstrdup(path);
|
||||
else {
|
||||
s = xrealloc_getcwd_or_warn(NULL);
|
||||
start = concat_path_file(s, path);
|
||||
free(s);
|
||||
}
|
||||
p = s = start;
|
||||
|
||||
do {
|
||||
if (*p == '/') {
|
||||
if (*s == '/') { /* skip duplicate (or initial) slash */
|
||||
|
@ -47,7 +38,22 @@ char* FAST_FUNC bb_simplify_path(const char *path)
|
|||
if ((p == start) || (*p != '/')) { /* not a trailing slash */
|
||||
++p; /* so keep last character */
|
||||
}
|
||||
*p = 0;
|
||||
|
||||
return start;
|
||||
*p = '\0';
|
||||
return p;
|
||||
}
|
||||
|
||||
char* FAST_FUNC bb_simplify_path(const char *path)
|
||||
{
|
||||
char *s, *p;
|
||||
|
||||
if (path[0] == '/')
|
||||
s = xstrdup(path);
|
||||
else {
|
||||
p = xrealloc_getcwd_or_warn(NULL);
|
||||
s = concat_path_file(p, path);
|
||||
free(p);
|
||||
}
|
||||
|
||||
bb_simplify_abs_path_inplace(s);
|
||||
return s;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue