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 */
* IN THE SOFTWARE.
*/
+#include <err.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
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);
+}