]> git.ipfire.org Git - thirdparty/mlmmj.git/commitdiff
subscribers: add a function to factorize code between sub and unsub
authorBaptiste Daroussin <bapt@FreeBSD.org>
Thu, 28 Oct 2021 09:56:59 +0000 (11:56 +0200)
committerBaptiste Daroussin <bapt@FreeBSD.org>
Thu, 28 Oct 2021 10:07:26 +0000 (12:07 +0200)
include/subscriberfuncs.h
src/subscriberfuncs.c

index 57f99cca59b9297c7feca772b2836c27e8aaff3e..647ea776e9fe2fa07e69000b287483d63588821d 100644 (file)
@@ -27,5 +27,6 @@
 off_t find_subscriber(int fd, const char *address);
 int is_subbed_in(const char *subddirname, const char *address);
 enum subtype is_subbed(const char *listdir, const char *address, int both);
+int open_subscriber_directory(struct mlmmj_list *list, enum subtype typesub, const char **subdir);
 
 #endif /* SUBSCRIBERFUNC_H */
index dde942d51198085820f06706791cd3fa3612370d..4b963239a99488d0306223ab2086d076cf41fbfc 100644 (file)
@@ -21,6 +21,7 @@
  * IN THE SOFTWARE.
  */
 
+#include <err.h>
 #include <stdio.h>
 #include <string.h>
 #include <ctype.h>
@@ -182,3 +183,26 @@ enum subtype is_subbed(const char *listdir, const char *address, int both)
 
        return typesub;
 }
+
+int
+open_subscriber_directory(struct mlmmj_list *list, enum subtype typesub, const char **subdir)
+{
+       int fd;
+       switch (typesub) {
+       default:
+       case SUB_NORMAL:
+               *subdir = "subscribers.d";
+               break;
+       case SUB_DIGEST:
+               *subdir = "digesters.d";
+               break;
+       case SUB_NOMAIL:
+               *subdir = "nomailsubs.d";
+               break;
+       }
+
+       fd = openat(list->fd, *subdir, O_DIRECTORY|O_CLOEXEC);
+       if (fd == -1)
+               err(EXIT_FAILURE, "Unable to open %s/%s", list->dir, *subdir);
+       return (fd);
+}