* end with a '/', then the callers need to be fixed up accordingly.
*
*/
+
+static const char *skip_slashes(const char *p)
+{
+ while (is_dir_sep(*p))
+ p++;
+ return p;
+}
+
int normalize_path_copy_len(char *dst, const char *src, int *prefix_len)
{
char *dst0;
}
dst0 = dst;
- while (is_dir_sep(*src))
- src++;
+ src = skip_slashes(src);
for (;;) {
char c = *src;
} else if (is_dir_sep(src[1])) {
/* (2) */
src += 2;
- while (is_dir_sep(*src))
- src++;
+ src = skip_slashes(src);
continue;
} else if (src[1] == '.') {
if (!src[2]) {
} else if (is_dir_sep(src[2])) {
/* (4) */
src += 3;
- while (is_dir_sep(*src))
- src++;
+ src = skip_slashes(src);
goto up_one;
}
}
up_one:
/*
+ * strip the last component
+ *
* dst0..dst is prefix portion, and dst[-1] is '/';
* go up one level.
*/