Merge branch 'ps/simplify-normalize-path-copy-len'

Code clean-up.

* ps/simplify-normalize-path-copy-len:
  path: factor out skip_slashes() in normalize_path_copy_len()
maint
Junio C Hamano 2026-03-03 11:08:12 -08:00
commit 07ecbfa8fe
1 changed files with 13 additions and 6 deletions

19
path.c
View File

@ -1112,6 +1112,14 @@ const char *remove_leading_path(const char *in, const char *prefix)
* 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;
@ -1129,8 +1137,7 @@ int normalize_path_copy_len(char *dst, const char *src, int *prefix_len)
}
dst0 = dst;

while (is_dir_sep(*src))
src++;
src = skip_slashes(src);

for (;;) {
char c = *src;
@ -1150,8 +1157,7 @@ int normalize_path_copy_len(char *dst, const char *src, int *prefix_len)
} 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]) {
@ -1161,8 +1167,7 @@ int normalize_path_copy_len(char *dst, const char *src, int *prefix_len)
} else if (is_dir_sep(src[2])) {
/* (4) */
src += 3;
while (is_dir_sep(*src))
src++;
src = skip_slashes(src);
goto up_one;
}
}
@ -1182,6 +1187,8 @@ int normalize_path_copy_len(char *dst, const char *src, int *prefix_len)

up_one:
/*
* strip the last component
*
* dst0..dst is prefix portion, and dst[-1] is '/';
* go up one level.
*/