From 43e380a88ceb0eb5d1b94f2e5736bc7e8e4f4176 Mon Sep 17 00:00:00 2001 From: Vicent Marti Date: Tue, 23 Nov 2010 15:18:53 +0200 Subject: [PATCH] Fix gitfo_isdir() in Win32 systems Because adhering to the POSIX standards is overrated. Signed-off-by: Vicent Marti --- src/fileops.c | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/fileops.c b/src/fileops.c index e0a5ff461..210e7d6e7 100644 --- a/src/fileops.c +++ b/src/fileops.c @@ -56,7 +56,25 @@ int gitfo_write(git_file fd, void *buf, size_t cnt) int gitfo_isdir(const char *path) { struct stat st; - return (path && gitfo_stat(path, &st) == 0 && S_ISDIR(st.st_mode)) ? + int len, stat_error; + + if (!path) + return GIT_ENOTFOUND; + + len = strlen(path); + + /* win32: stat path for folders cannot end in a slash */ + if (path[len - 1] == '/') { + char *path_fixed = NULL; + path_fixed = git__strdup(path); + path_fixed[len - 1] = 0; + stat_error = gitfo_stat(path_fixed, &st); + free(path_fixed); + } else { + stat_error = gitfo_stat(path, &st); + } + + return (stat_error == 0 && S_ISDIR(st.st_mode)) ? GIT_SUCCESS : GIT_ENOTFOUND; }