浏览代码

Add directory listing functions to util.[ch]. Watch the features creep!

svn:r4906
Nick Mathewson 20 年之前
父节点
当前提交
b6a13b6cdf
共有 2 个文件被更改,包括 27 次插入0 次删除
  1. 26 0
      src/common/util.c
  2. 1 0
      src/common/util.h

+ 26 - 0
src/common/util.c

@@ -19,10 +19,13 @@ const char util_c_id[] = "$Id$";
 #include "log.h"
 #include "crypto.h"
 #include "torint.h"
+#include "container.h"
 
 #ifdef MS_WINDOWS
 #include <io.h>
 #include <direct.h>
+#else
+#include <dirent.h>
 #endif
 
 #ifdef HAVE_CTYPE_H
@@ -1106,6 +1109,29 @@ char *expand_filename(const char *filename)
   }
 }
 
+/** Return a new list containing the filenames in the directory <b>dirname</b>.
+ * Return NULL on error or if <b>dirname</b> is not a directory.
+ */
+smartlist_t *
+tor_listdir(const char *dirname)
+{
+  DIR *d;
+  smartlist_t *result;
+  struct dirent *de;
+  if (!(d = opendir(dirname)))
+    return NULL;
+
+  result = smartlist_create();
+  while ((de = readdir(d))) {
+    if (!strcmp(de->d_name, ".") ||
+        !strcmp(de->d_name, ".."))
+      continue;
+    smartlist_add(result, tor_strdup(de->d_name));
+  }
+  closedir(d);
+  return result;
+}
+
 /* =====
  * Net helpers
  * ===== */

+ 1 - 0
src/common/util.h

@@ -123,6 +123,7 @@ int write_bytes_to_file(const char *fname, const char *str, size_t len,
 char *read_file_to_str(const char *filename, int bin);
 char *parse_line_from_str(char *line, char **key_out, char **value_out);
 char *expand_filename(const char *filename);
+struct smartlist_t *tor_listdir(const char *dirname);
 
 /* Net helpers */
 int is_internal_IP(uint32_t ip);