diff options
author | Meudwy <meudwy@meudwy.uk> | 2023-07-25 14:28:09 +0100 |
---|---|---|
committer | Leah Neukirchen <leah@vuxu.org> | 2023-07-27 14:08:05 +0200 |
commit | 07d064fc116cf5a72fd47632a0b8bd041df6a870 (patch) | |
tree | 2b9736818edd895871d32e040c28afc5610efb88 /mdirs.c | |
parent | 75de7d47da797b5cf6e7a859a1bff030f7b571a3 (diff) | |
download | mblaze-07d064fc116cf5a72fd47632a0b8bd041df6a870.tar.gz mblaze-07d064fc116cf5a72fd47632a0b8bd041df6a870.tar.xz mblaze-07d064fc116cf5a72fd47632a0b8bd041df6a870.zip |
mdirs: add Maildir profile key
When `mdirs` is executed without any arguments, look for the `Maildir` key in the profile and use that instead (if set). Closes: #245 [via git-merge-pr]
Diffstat (limited to 'mdirs.c')
-rw-r--r-- | mdirs.c | 41 |
1 files changed, 38 insertions, 3 deletions
diff --git a/mdirs.c b/mdirs.c index 5f49906..89ebab5 100644 --- a/mdirs.c +++ b/mdirs.c @@ -3,8 +3,10 @@ #include <dirent.h> #include <limits.h> +#include <pwd.h> #include <stdio.h> #include <stdlib.h> +#include <string.h> #include <unistd.h> #include "blaze822.h" @@ -72,6 +74,33 @@ mdirs(char *fpath) closedir(dir); } +char * +profile_maildir() +{ + char *f = blaze822_home_file("profile"); + struct message *config = blaze822(f); + char *maildir; + static char path[PATH_MAX]; + + if (!config) + return 0; + + if (!(maildir = blaze822_hdr(config, "maildir"))) + return 0; + + if (strncmp(maildir, "~/", 2) == 0) { + const char *home = getenv("HOME"); + if (!home) { + struct passwd *pw = getpwuid(getuid()); + home = pw ? pw->pw_dir : "/dev/null/homeless"; + } + snprintf(path, sizeof path, "%s/%s", home, maildir+2); + maildir = path; + } + + return maildir; +} + int main(int argc, char *argv[]) { @@ -86,11 +115,17 @@ usage: exit(1); } - if (argc == optind) - goto usage; - xpledge("stdio rpath", ""); + if (argc == optind) { + char *maildir = profile_maildir(); + if (maildir) { + mdirs(maildir); + return 0; + } + goto usage; + } + char toplevel[PATH_MAX]; if (!getcwd(toplevel, sizeof toplevel)) { perror("mdirs: getcwd"); |