summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordefault <nobody@localhost>2022-10-03 10:51:52 +0200
committerdefault <nobody@localhost>2022-10-03 10:51:52 +0200
commit53c62db73d1f72d82113bf716e6e6fa4a7811b8c (patch)
tree39aa19cc9d25d9f9b605908967d01ee6e9c638c9
parentc67bb8d966496ca22d8c7b90161e365e40fb591a (diff)
Use xs_glob() in user_list().
-rw-r--r--data.c37
1 files changed, 25 insertions, 12 deletions
diff --git a/data.c b/data.c
index 8c07a7b..cf266fb 100644
--- a/data.c
+++ b/data.c
@@ -144,25 +144,29 @@ int user_open(snac *snac, char *uid)
}
-d_char *user_list(void)
-/* returns the list of user ids */
+d_char *xs_glob_n(const char *spec, int basename, int reverse, int max)
+/* does a globbing and returns the found files */
{
- d_char *list;
- xs *spec;
glob_t globbuf;
-
- globbuf.gl_offs = 1;
-
- list = xs_list_new();
- spec = xs_fmt("%s/user/" "*", srv_basedir);
+ d_char *list = xs_list_new();
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);
+ if (reverse) {
+ }
+ else {
+ for (n = 0; n < max && (p = globbuf.gl_pathv[n]) != NULL; n++) {
+ if (basename) {
+ if ((p = strrchr(p, '/')) == NULL)
+ continue;
+
+ p++;
+ }
+
+ list = xs_list_append(list, p);
+ }
}
}
@@ -170,6 +174,15 @@ d_char *user_list(void)
return list;
}
+#define xs_glob(spec, basename, reverse) xs_glob_n(spec, basename, reverse, 0xfffffff)
+
+
+d_char *user_list(void)
+/* returns the list of user ids */
+{
+ xs *spec = xs_fmt("%s/user/" "*", srv_basedir);
+ return xs_glob(spec, 1, 0);
+}
double mtime(char *fn)