git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[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?= <pclouds@gmail.com>
Date
Feb 16, 2010, 05:22 UTC
Message-ID
<20100216052208.GA18438@do>
In-Reply-To
<4B79A3ED.4090308@kdbg.org>

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

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
---
  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
Previous: Johannes SixtNext: Johannes Sixt
Message 5 of 8 in “make_absolute_path(): Do not append redundant slash”
  1. 1/5 make_absolute_path(): Do not append redundant slashNguyễn Thái Ngọc Duy, Feb 14, 2010
  2. 2/5 init-db, rev-parse --git-dir: do not append redundant slashNguyễn Thái Ngọc Duy, Feb 14, 2010
  3. 3/5 Move offset_1st_component() to path.cNguyễn Thái Ngọc Duy, Feb 14, 2010
  4. Johannes SixtFeb 15, 2010
  5. 3/5 Move offset_1st_component() to path.c=?UTF-8?q?Nguy=E1=BB=85n=20Th=C3=A1i=20Ng=E1=BB=8Dc=20Duy?=, Feb 16, 2010
  6. Johannes SixtFeb 16, 2010
  7. 4/5 Support working directory located at rootNguyễn Thái Ngọc Duy, Feb 14, 2010
  8. 5/5 Add test for using Git at root of file systemNguyễn Thái Ngọc Duy, Feb 14, 2010

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.