diff options
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"); |