diff options
author | Junio C Hamano <gitster@pobox.com> | 2008-09-09 01:27:07 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2008-09-09 09:27:45 -0700 |
commit | 90b4a71c493bf24f11b5edee8a519110624a6bea (patch) | |
tree | bc6b950d4b19ba1aee1292970571ad8744b1267b /abspath.c | |
parent | 10708a994a632c392ab58aa7d11e49b322aa1505 (diff) | |
download | git-90b4a71c493bf24f11b5edee8a519110624a6bea.tar.gz |
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.c | 13 |
1 files changed, 12 insertions, 1 deletions
@@ -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'; |