From 2f6eb10fb415050968a3b314ab488d305813cb59 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Fri, 9 Sep 2005 21:29:23 +0000 Subject: [PATCH] Implement tor_listdir on windows. Untested. svn:r4971 --- src/common/util.c | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/src/common/util.c b/src/common/util.c index 8f908fdf4e..821bfc8213 100644 --- a/src/common/util.c +++ b/src/common/util.c @@ -1125,8 +1125,32 @@ char *expand_filename(const char *filename) smartlist_t * tor_listdir(const char *dirname) { - DIR *d; smartlist_t *result; +#ifdef MS_WINDOWS + char *pattern; + HANDLE handle; + WIN32_FIND_DATA findData; + size_t pattern_len = strlen(dirname)+16; + pattern = tor_malloc(pattern_len); + tor_snprintf(pattern, pattern_len, "%s\\*", dirname); + if (!(handle = FindFirstFile(pattern, &findData))) { + tor_free(pattern); + return NULL; + } + result = smartlist_create(); + while (1) { + smartlist_add(findData.cFileName); + if (!FindNextFile(handle, &findData)) { + if (GetLastError() != ERROR_NO_MORE_FILES) { + log_fn(LOG_WARN, "Error reading directory."); + } + break; + } + } + FindClose(handle); + tor_free(pattern); +#else + DIR *d; struct dirent *de; if (!(d = opendir(dirname))) return NULL; @@ -1139,6 +1163,7 @@ tor_listdir(const char *dirname) smartlist_add(result, tor_strdup(de->d_name)); } closedir(d); +#endif return result; }