summaryrefslogtreecommitdiff
path: root/data.c
diff options
context:
space:
mode:
Diffstat (limited to 'data.c')
-rw-r--r--data.c34
1 files changed, 32 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 @@
7 7
8#include "snac.h" 8#include "snac.h"
9 9
10#include <glob.h>
11
12
10int srv_open(char *basedir) 13int srv_open(char *basedir)
11/* opens a server */ 14/* opens a server */
12{ 15{
@@ -61,7 +64,7 @@ int srv_open(char *basedir)
61} 64}
62 65
63 66
64void snac_free(snac *snac) 67void user_free(snac *snac)
65/* frees a user snac */ 68/* frees a user snac */
66{ 69{
67 free(snac->uid); 70 free(snac->uid);
@@ -125,9 +128,36 @@ int user_open(snac *snac, char *uid)
125 srv_log(xs_fmt("invalid user '%s'", uid)); 128 srv_log(xs_fmt("invalid user '%s'", uid));
126 129
127 if (!ret) 130 if (!ret)
128 snac_free(snac); 131 user_free(snac);
129 132
130 return ret; 133 return ret;
131} 134}
132 135
133 136
137d_char *user_list(void)
138/* returns the list of user ids */
139{
140 d_char *list;
141 xs *spec;
142 glob_t globbuf;
143
144 globbuf.gl_offs = 1;
145
146 list = xs_list_new();
147 spec = xs_fmt("%s/user/*", srv_basedir); /**/
148
149 if (glob(spec, 0, NULL, &globbuf) == 0) {
150 int n;
151 char *p;
152
153 for (n = 0; (p = globbuf.gl_pathv[n]) != NULL; n++) {
154 if ((p = strrchr(p, '/')) != NULL)
155 list = xs_list_append(list, p + 1);
156 }
157 }
158
159 globfree(&globbuf);
160
161 return list;
162}
163