Subject: [PATCH v3 3/5] Move offset_1st_component() to path.c

From: =?UTF-8?q?Nguy=E1=BB=85n=20Th=C3=A1i=20Ng=E1=BB=8Dc=20Duy?= <[email-masked]>
Date: Tue, 16 Feb 2010 12:22:08 +0700

The implementation is also lightly modified to use is_dir_sep()
instead of hardcoding '/'.

Signed-off-by: Nguyễn Thái Ngọc Duy <[email-masked]>
---
  On Mon, Feb 15, 2010 at 08:43:41PM +0100, Johannes Sixt wrote:
  > Nguyễn Thái Ngọc Duy schrieb:
  >> +int offset_1st_component(const char *path)
  >> +{
  >> +	if (has_dos_drive_prefix(path))
  >> +		return 2 + (path[2] == '/');
  >> +	return *path == '/';
  >> +}
  >
  > I'd have expected that you future-proofed this function by using 
  > is_dir_sep() or even use your previous implementation of is_root_path 
  > (because this implementation is a bit cryptic).
  >
  > But if the new callers of this function will only pass the results of 
  > normalize_path_copy() and getcwd() (both return only forward-slashes on 
  > Windows), then I'm fine with this version. Do they?

  They do. But future-proofing can never be a bad thing.

 cache.h     |    1 +
 path.c      |   10 ++++++++++
 sha1_file.c |    7 -------
 3 files changed, 11 insertions(+), 7 deletions(-)

diff --git a/cache.h b/cache.h
index d478eff..ff23cd1 100644
--- a/cache.h
+++ b/cache.h
@@ -675,6 +675,7 @@ int normalize_path_copy(char *dst, const char *src);
 int longest_ancestor_length(const char *path, const char *prefix_list);
 char *strip_path_suffix(const char *path, const char *suffix);
 int daemon_avoid_alias(const char *path);
+int offset_1st_component(const char *path);
 
 /* Read and unpack a sha1 file into memory, write memory to a sha1 file */
 extern int sha1_object_info(const unsigned char *, unsigned long *);
diff --git a/path.c b/path.c
index 0005df3..6304805 100644
--- a/path.c
+++ b/path.c
@@ -649,3 +649,13 @@ int daemon_avoid_alias(const char *p)
 		}
 	}
 }
+
+int offset_1st_component(const char *path)
+{
+	int len = 0;
+	if (has_dos_drive_prefix(path))
+		len += 2;
+	if (is_dir_sep(path[len]))
+		return len++;
+	return len;
+}
diff --git a/sha1_file.c b/sha1_file.c
index 657825e..52052b9 100644
--- a/sha1_file.c
+++ b/sha1_file.c
@@ -35,13 +35,6 @@ static size_t sz_fmt(size_t s) { return s; }
 
 const unsigned char null_sha1[20];
 
-static inline int offset_1st_component(const char *path)
-{
-	if (has_dos_drive_prefix(path))
-		return 2 + (path[2] == '/');
-	return *path == '/';
-}
-
 int safe_create_leading_directories(char *path)
 {
 	char *pos = path + offset_1st_component(path);
-- 
1.7.0.195.g637a2