aboutsummaryrefslogtreecommitdiff
path: root/path.c
diff options
context:
space:
mode:
authorPushkar Singh <pushkarkumarsingh1970@gmail.com>2026-02-21 11:05:12 +0000
committerJunio C Hamano <gitster@pobox.com>2026-02-21 21:25:56 -0800
commit40b30f245d57f89215f89c29b72e8b557f09b82a (patch)
tree5cd9936acc0853ac248dadde78e3c3313bd9e0c9 /path.c
parent7c02d39fc2ed2702223c7674f73150d9a7e61ba4 (diff)
downloadgit-40b30f245d57f89215f89c29b72e8b557f09b82a.tar.xz
path: factor out skip_slashes() in normalize_path_copy_len()
Extract skip_slashes() to avoid repeating the same is_dir_sep() loop in multiple places inside normalize_path_copy_len(). Keep the dot-component handling inline to preserve the original control flow and readability, as suggested in review. No functional changes. Behavior verified with t0060-path-utils.sh. Signed-off-by: Pushkar Singh <pushkarkumarsingh1970@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'path.c')
-rw-r--r--path.c19
1 files changed, 13 insertions, 6 deletions
diff --git a/path.c b/path.c
index d726537622..1772fcb21c 100644
--- a/path.c
+++ b/path.c
@@ -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.
*/