diff options
Diffstat (limited to 'data.c')
| -rw-r--r-- | data.c | 34 |
1 files changed, 32 insertions, 2 deletions
| @@ -7,6 +7,9 @@ | |||
| 7 | 7 | ||
| 8 | #include "snac.h" | 8 | #include "snac.h" |
| 9 | 9 | ||
| 10 | #include <glob.h> | ||
| 11 | |||
| 12 | |||
| 10 | int srv_open(char *basedir) | 13 | int 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 | ||
| 64 | void snac_free(snac *snac) | 67 | void 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 | ||
| 137 | d_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 | |||