default 3 лет назад
Родитель
Сommit
5e438f8353
3 измененных файлов с 47 добавлено и 2 удалено
  1. 32 2
      data.c
  2. 14 0
      main.c
  3. 1 0
      snac.h

+ 32 - 2
data.c

@@ -7,6 +7,9 @@
 
 #include "snac.h"
 
+#include <glob.h>
+
+
 int srv_open(char *basedir)
 /* opens a server */
 {
@@ -61,7 +64,7 @@ int srv_open(char *basedir)
 }
 
 
-void snac_free(snac *snac)
+void user_free(snac *snac)
 /* frees a user snac */
 {
     free(snac->uid);
@@ -125,9 +128,36 @@ int user_open(snac *snac, char *uid)
         srv_log(xs_fmt("invalid user '%s'", uid));
 
     if (!ret)
-        snac_free(snac);
+        user_free(snac);
 
     return ret;
 }
 
 
+d_char *user_list(void)
+/* returns the list of user ids */
+{
+    d_char *list;
+    xs *spec;
+    glob_t globbuf;
+
+    globbuf.gl_offs = 1;
+
+    list = xs_list_new();
+    spec = xs_fmt("%s/user/*", srv_basedir); /**/
+
+    if (glob(spec, 0, NULL, &globbuf) == 0) {
+        int n;
+        char *p;
+
+        for (n = 0; (p = globbuf.gl_pathv[n]) != NULL; n++) {
+            if ((p = strrchr(p, '/')) != NULL)
+                list = xs_list_append(list, p + 1);
+        }
+    }
+
+    globfree(&globbuf);
+
+    return list;
+}
+

+ 14 - 0
main.c

@@ -16,5 +16,19 @@ int main(int argc, char *argv[])
     user_open(&snac, "mike");
     snac_log(&snac, xs_str_new("ok"));
 
+    {
+        xs *list = user_list();
+        char *p, *uid;
+
+        p = list;
+        while (xs_list_iter(&p, &uid)) {
+            user_open(&snac, uid);
+
+            printf("%s (%s)\n", uid, xs_dict_get(snac.config, "name"));
+
+            user_free(&snac);
+        }
+    }
+
     return 0;
 }

+ 1 - 0
snac.h

@@ -28,6 +28,7 @@ typedef struct _snac {
 
 int user_open(snac *snac, char *uid);
 void user_free(snac *snac);
+d_char *user_list(void);
 
 void snac_debug(snac *snac, int level, d_char *str);
 #define snac_log(snac, str) snac_debug(snac, 0, str)