Fix gitfo_isdir() in Win32 systems

Because adhering to the POSIX standards is overrated.

Signed-off-by: Vicent Marti <tanoku@gmail.com>
This commit is contained in:
Vicent Marti 2010-11-23 15:18:53 +02:00
parent 6b1eab3976
commit 43e380a88c

View File

@ -56,7 +56,25 @@ int gitfo_write(git_file fd, void *buf, size_t cnt)
int gitfo_isdir(const char *path) int gitfo_isdir(const char *path)
{ {
struct stat st; 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; GIT_SUCCESS : GIT_ENOTFOUND;
} }