summaryrefslogtreecommitdiff
path: root/abspath.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2008-09-09 08:27:07 (GMT)
committerJunio C Hamano <gitster@pobox.com>2008-09-09 16:27:45 (GMT)
commit90b4a71c493bf24f11b5edee8a519110624a6bea (patch)
treebc6b950d4b19ba1aee1292970571ad8744b1267b /abspath.c
parent10708a994a632c392ab58aa7d11e49b322aa1505 (diff)
downloadgit-90b4a71c493bf24f11b5edee8a519110624a6bea.zip
git-90b4a71c493bf24f11b5edee8a519110624a6bea.tar.gz
git-90b4a71c493bf24f11b5edee8a519110624a6bea.tar.bz2
is_directory(): a generic helper function
A simple "grep -e stat --and -e S_ISDIR" revealed there are many open-coded implementations of this function. Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'abspath.c')
-rw-r--r--abspath.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/abspath.c b/abspath.c
index 0d56124..8194ce1 100644
--- a/abspath.c
+++ b/abspath.c
@@ -1,5 +1,16 @@
#include "cache.h"
+/*
+ * Do not use this for inspecting *tracked* content. When path is a
+ * symlink to a directory, we do not want to say it is a directory when
+ * dealing with tracked content in the working tree.
+ */
+int is_directory(const char *path)
+{
+ struct stat st;
+ return (!stat(path, &st) && S_ISDIR(st.st_mode));
+}
+
/* We allow "recursive" symbolic links. Only within reason, though. */
#define MAXDEPTH 5
@@ -17,7 +28,7 @@ const char *make_absolute_path(const char *path)
die ("Too long path: %.*s", 60, path);
while (depth--) {
- if (stat(buf, &st) || !S_ISDIR(st.st_mode)) {
+ if (!is_directory(buf)) {
char *last_slash = strrchr(buf, '/');
if (last_slash) {
*last_slash = '\0';