From 830388a728a73c63bb85a59e603333bd210af6ca Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Thu, 21 Jun 2012 20:07:32 -0700 Subject: [PATCH] Clone: non-empty-dir test, now for Win32. --- src/clone.c | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/src/clone.c b/src/clone.c index 7790049cb..9e6f58da8 100644 --- a/src/clone.c +++ b/src/clone.c @@ -6,7 +6,10 @@ */ #include + +#ifndef GIT_WIN32 #include +#endif #include "git2/clone.h" #include "git2/remote.h" @@ -184,8 +187,15 @@ static bool is_dot_or_dotdot(const char *name) /* TODO: p_opendir, p_closedir */ static bool path_is_okay(const char *path) { - DIR *dir; +#ifdef GIT_WIN32 + HANDLE hFind = INVALID_HANDLE_VALUE; + wchar_t *wbuf; + WIN32_FIND_DATAW ffd; +#else + DIR *dir = NULL; struct dirent *e; +#endif + bool retval = true; /* The path must either not exist, or be an empty directory */ @@ -197,6 +207,16 @@ static bool path_is_okay(const char *path) return false; } +#ifdef GIT_WIN32 + wbuf = gitwin_to_utf16(path); + gitwin_append_utf16(wbuf, "\\*", 2); + hFind = FindFirstFileW(wbuf, &ffd); + if (INVALID_HANDLE_VALUE != hFind) { + retval = false; + FindClose(hFind); + } + git__free(wbuf); +#else dir = opendir(path); if (!dir) { giterr_set(GITERR_OS, "Couldn't open '%s'", path); @@ -211,8 +231,9 @@ static bool path_is_okay(const char *path) break; } } - closedir(dir); +#endif + return retval; }