X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=libbb%2Fsimplify_path.c;h=367f1f04d9ca6773b6ac7258a04590b8efeef04f;hb=1fd1ea4395e520694bd9f8b1dc9e60af6442946d;hp=171798e6048cccf517dfc001171a5e30a063b7be;hpb=5d8843e451c01d8abfe6b5be772637310e9e581e;p=oweals%2Fbusybox.git diff --git a/libbb/simplify_path.c b/libbb/simplify_path.c index 171798e60..367f1f04d 100644 --- a/libbb/simplify_path.c +++ b/libbb/simplify_path.c @@ -7,17 +7,16 @@ * Licensed under GPLv2 or later, see file LICENSE in this tarball for details. */ -#include #include "libbb.h" -char *bb_simplify_path(const char *path) +char* FAST_FUNC bb_simplify_path(const char *path) { char *s, *start, *p; if (path[0] == '/') - start = bb_xstrdup(path); + start = xstrdup(path); else { - s = xgetcwd(NULL); + s = xrealloc_getcwd_or_warn(NULL); start = concat_path_file(s, path); free(s); } @@ -27,13 +26,16 @@ char *bb_simplify_path(const char *path) if (*p == '/') { if (*s == '/') { /* skip duplicate (or initial) slash */ continue; - } else if (*s == '.') { - if (s[1] == '/' || s[1] == 0) { /* remove extra '.' */ + } + if (*s == '.') { + if (s[1] == '/' || !s[1]) { /* remove extra '.' */ continue; - } else if ((s[1] == '.') && (s[2] == '/' || s[2] == 0)) { + } + if ((s[1] == '.') && (s[2] == '/' || !s[2])) { ++s; if (p > start) { - while (*--p != '/'); /* omit previous dir */ + while (*--p != '/') /* omit previous dir */ + continue; } continue; }