From 08954fa672853e5da6a470f53147932f8b8772cd Mon Sep 17 00:00:00 2001 From: Ali Gholami Rudi Date: Sat, 21 Nov 2009 19:31:02 +0330 Subject: [PATCH] mailx: support ',', '.' and '+box' in file cmd --- mailx.c | 48 ++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 40 insertions(+), 8 deletions(-) diff --git a/mailx.c b/mailx.c index 41a1ffe..19d0ba8 100644 --- a/mailx.c +++ b/mailx.c @@ -241,12 +241,44 @@ static void sum_mbox(void) print(msg); } +static int has_mail(char *path) +{ + struct stat st; + if (stat(path, &st) == -1) + return 0; + return st.st_mtime > st.st_atime; +} + +static int mbox_path(char *path, char *addr) +{ + char *s = path; + int i; + if (*addr == '+') { + s = put_str(s, FOLDER); + s = put_str(s, addr + 1); + } + if (*addr == ',') { + for (i = 0; i < ARRAY_SIZE(boxes); i++) { + if (has_mail(boxes[i])) { + s = put_str(s, boxes[i]); + break; + } + } + } + if (!strcmp(".", addr) && mbox) + s = put_str(s, mbox->path); + if (s == path && *addr) + s = put_str(s, addr); + return s - path; +} + static void cmd_fold(char *args) { char filename[MAXLINE]; args = cut_word(filename, args); if (*filename) { - if (is_mbox(filename)) { + char path[MAXPATHLEN]; + if (mbox_path(path, filename) && is_mbox(path)) { close_mbox(); open_mbox(filename); } @@ -258,7 +290,6 @@ static void cmd_fold(char *args) static void cmd_inc(char *args) { char msg[MAXLINE]; - struct stat st; int new = mbox_inc(mbox); char *s; int i; @@ -269,9 +300,7 @@ static void cmd_inc(char *args) print(msg); } for (i = 0; i < ARRAY_SIZE(boxes); i++) { - if (stat(boxes[i], &st) == -1) - continue; - if (st.st_mtime > st.st_atime) { + if (has_mail(boxes[i])) { char *box = strrchr(boxes[i], '/'); s = msg; box = box ? box + 1 : boxes[i]; @@ -334,9 +363,12 @@ int main(int argc, char *argv[]) if (!strcmp("-f", argv[i])) filename = argv[++i]; if (filename) { - open_mbox(filename); - loop(); - close_mbox(); + char path[MAXPATHLEN]; + if (mbox_path(path, filename) && is_mbox(path)) { + open_mbox(path); + loop(); + close_mbox(); + } } return 0; } -- 2.11.4.GIT