[PATCH 2/9] Add functions get_relative_cwd() and is_inside_dir()

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Johannes Schindelin
Date: Sunday, July 29, 2007 - 4:24 pm

The function get_relative_cwd() works just as getcwd(), only that it
takes an absolute path as additional parameter, returning the prefix
of the current working directory relative to the given path.  If the
cwd is no subdirectory of the given path, it returns NULL.

is_inside_dir() is just a trivial wrapper over get_relative_cwd().

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
 dir.c |   30 ++++++++++++++++++++++++++++++
 dir.h |    3 +++
 2 files changed, 33 insertions(+), 0 deletions(-)

diff --git a/dir.c b/dir.c
index 8d8faf5..ef67d6f 100644
--- a/dir.c
+++ b/dir.c
@@ -642,3 +642,33 @@ file_exists(const char *f)
   struct stat sb;
   return stat(f, &sb) == 0;
 }
+
+char *get_relative_cwd(char *buffer, int size, const char *dir)
+{
+	char *cwd = buffer;
+
+	if (!dir)
+		return 0;
+
+	if (!getcwd(buffer, size))
+		return 0;
+
+	if (!is_absolute_path(dir))
+		dir = make_absolute_path(dir);
+
+	while (*dir && *dir == *cwd) {
+		dir++;
+		cwd++;
+	}
+	if (*dir)
+		return NULL;
+	if (*cwd == '/')
+		return cwd + 1;
+	return cwd;
+}
+
+int is_inside_dir(const char *dir)
+{
+	char buffer[PATH_MAX];
+	return get_relative_cwd(buffer, sizeof(buffer), dir) != NULL;
+}
diff --git a/dir.h b/dir.h
index ec0e8ab..f55a87b 100644
--- a/dir.h
+++ b/dir.h
@@ -61,4 +61,7 @@ extern void add_exclude(const char *string, const char *base,
 extern int file_exists(const char *);
 extern struct dir_entry *dir_add_name(struct dir_struct *dir, const char *pathname, int len);
 
+extern char *get_relative_cwd(char *buffer, int size, const char *dir);
+extern int is_inside_dir(const char *dir);
+
 #endif
-- 
1.5.3.rc3.28.g1406


-
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
[PATCH 0/9] work-tree clean ups, Johannes Schindelin, (Sun Jul 29, 4:23 pm)
[PATCH 1/9] Add is_absolute_path() and make_absolute_path(), Johannes Schindelin, (Sun Jul 29, 4:24 pm)
[PATCH 2/9] Add functions get_relative_cwd() and is_inside ..., Johannes Schindelin, (Sun Jul 29, 4:24 pm)
[PATCH 3/9] white space fixes in setup.c, Johannes Schindelin, (Sun Jul 29, 4:24 pm)
[PATCH 4/9] Clean up work-tree handling, Johannes Schindelin, (Sun Jul 29, 4:25 pm)
[PATCH 5/9] Add set_git_dir() function, Johannes Schindelin, (Sun Jul 29, 4:25 pm)
[PATCH 6/9] work-trees are allowed inside a git-dir, Johannes Schindelin, (Sun Jul 29, 4:25 pm)
[PATCH 7/9] init: use get_git_work_tree() instead of rolli ..., Johannes Schindelin, (Sun Jul 29, 4:25 pm)
[PATCH 8/9] Fix t1501 for updated work-tree logic, Johannes Schindelin, (Sun Jul 29, 4:26 pm)
[PATCH 9/9] Fix t1500 for sane work-tree behavior, Johannes Schindelin, (Sun Jul 29, 4:26 pm)
[UNWANTED PATCH] Die if core.bare = true and core.worktree ..., Johannes Schindelin, (Sun Jul 29, 4:29 pm)
Re: [PATCH 0/9] work-tree clean ups, Johannes Schindelin, (Tue Jul 31, 5:28 pm)
[PATCH 1/4] Add is_absolute_path() and make_absolute_path(), Johannes Schindelin, (Tue Jul 31, 5:28 pm)
[PATCH 2/4] Add functions get_relative_cwd() and is_inside ..., Johannes Schindelin, (Tue Jul 31, 5:29 pm)
[PATCH 3/4] Add set_git_dir() function, Johannes Schindelin, (Tue Jul 31, 5:29 pm)
[PATCH 4/4] Clean up work-tree handling, Johannes Schindelin, (Tue Jul 31, 5:30 pm)
Re: [PATCH 0/9] work-tree clean ups, Junio C Hamano, (Tue Jul 31, 5:55 pm)
Re: [PATCH 0/9] work-tree clean ups, Johannes Schindelin, (Tue Jul 31, 6:13 pm)
Re: [PATCH 4/4] Clean up work-tree handling, Junio C Hamano, (Tue Jul 31, 10:17 pm)
Re: [PATCH 4/4] Clean up work-tree handling, Junio C Hamano, (Wed Aug 1, 1:59 am)
Re: [PATCH 0/9] work-tree clean ups, Johannes Schindelin, (Wed Aug 1, 3:56 am)
Re: [PATCH 2/4] Add functions get_relative_cwd() and is_in ..., Johannes Schindelin, (Wed Aug 1, 4:38 am)
Re: [PATCH 4/4] Clean up work-tree handling, Johannes Schindelin, (Wed Aug 1, 4:46 am)
Re: [PATCH 4/4] Clean up work-tree handling, Johannes Schindelin, (Wed Aug 1, 4:53 am)
[NOT-SERIOUS PATCH] Make get_relative_cwd() not accept NUL ..., Johannes Schindelin, (Wed Aug 1, 8:26 am)
[PATCH] get_relative_cwd(): clarify why it handles dir == NULL, Johannes Schindelin, (Wed Aug 1, 11:26 am)
Re: [PATCH 4/4] Clean up work-tree handling, Junio C Hamano, (Thu Aug 2, 12:04 am)