summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2005-09-09 21:29:23 +0000
committerNick Mathewson <nickm@torproject.org>2005-09-09 21:29:23 +0000
commit2f6eb10fb415050968a3b314ab488d305813cb59 (patch)
tree3cb88077c7fa13141896038a1cc93e79ba267421
parent1ea5d312e5b34d408e26d8348279e5a6de1133a9 (diff)
downloadtor-2f6eb10fb415050968a3b314ab488d305813cb59.tar.gz
tor-2f6eb10fb415050968a3b314ab488d305813cb59.zip
Implement tor_listdir on windows. Untested.
svn:r4971
-rw-r--r--src/common/util.c27
1 files changed, 26 insertions, 1 deletions
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;
}