/* vi: set sw=4 ts=4: */ /* * Licensed under GPLv2 or later, see file LICENSE in this source tree. */ #include "libbb.h" #include "bb_archive.h" const char* FAST_FUNC strip_unsafe_prefix(const char *str) { const char *cp = str; while (1) { char *cp2; if (*cp == '/') { cp++; continue; } /* We are called lots of times. * is_prefixed_with(cp, "../") is slower than open-coding it, * with minimal code growth (~few bytes). */ if (cp[0] == '.' && cp[1] == '.' && cp[2] == '/') { cp += 3; continue; } cp2 = strstr(cp, "/../"); if (!cp2) break; cp = cp2 + 4; } if (cp != str) { static smallint warned = 0; if (!warned) { warned = 1; bb_error_msg("removing leading '%.*s' from member names", (int)(cp - str), str); } } return cp; }