]> git.ipfire.org Git - thirdparty/git.git/commitdiff
path: factor out skip_slashes() in normalize_path_copy_len()
authorPushkar Singh <pushkarkumarsingh1970@gmail.com>
Sat, 21 Feb 2026 11:05:12 +0000 (11:05 +0000)
committerJunio C Hamano <gitster@pobox.com>
Sun, 22 Feb 2026 05:25:56 +0000 (21:25 -0800)
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>
path.c

diff --git a/path.c b/path.c
index d726537622cda67f222229358b8b7edd25c34f1b..1772fcb21c15cd32fe320643c3a454526949ea2c 100644 (file)
--- 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.
                 */