summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data.c34
-rw-r--r--main.c14
-rw-r--r--snac.h1
3 files changed, 47 insertions, 2 deletions
diff --git a/data.c b/data.c
index 4782c2e..3b0cb72 100644
--- a/data.c
+++ b/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;
+}
+
diff --git a/main.c b/main.c
index b81f13c..163fd8f 100644
--- a/main.c
+++ b/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;
}
diff --git a/snac.h b/snac.h
index cef8cc3..ee33848 100644
--- a/snac.h
+++ b/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)