From 3b5862ee5ab4452c8b5de2d062d713c843ee1e4f Mon Sep 17 00:00:00 2001 From: rsc Date: Tue, 14 Feb 2006 19:41:36 +0000 Subject: fixes --- src/cmd/acme/mail/dat.h | 2 ++ src/cmd/acme/mail/mail.c | 12 ++++----- src/cmd/acme/mail/mesg.c | 69 ++++++++++++++++++++++++++++-------------------- 3 files changed, 47 insertions(+), 36 deletions(-) (limited to 'src/cmd/acme/mail') diff --git a/src/cmd/acme/mail/dat.h b/src/cmd/acme/mail/dat.h index c601ac19..4d8d3cdf 100644 --- a/src/cmd/acme/mail/dat.h +++ b/src/cmd/acme/mail/dat.h @@ -63,6 +63,7 @@ struct Message char *to; char *cc; char *replyto; + char *sender; char *date; char *subject; char *type; @@ -158,6 +159,7 @@ extern CFid *plumbseemailfd; extern char *home; extern char *outgoing; extern char *mailboxdir; +extern char *mboxname; extern char *user; extern char deleted[]; extern int wctlfd; diff --git a/src/cmd/acme/mail/mail.c b/src/cmd/acme/mail/mail.c index 83238598..ac74b634 100644 --- a/src/cmd/acme/mail/mail.c +++ b/src/cmd/acme/mail/mail.c @@ -60,12 +60,10 @@ removeupasfs(void) int ismaildir(char *s) { - char buf[256]; Dir *d; int ret; - snprint(buf, sizeof buf, "%s%s", maildir, s); - d = dirstat(buf); + d = fsdirstat(mailfs, s); if(d == nil) return 0; ret = d->qid.type & QTDIR; @@ -122,9 +120,9 @@ threadmain(int argc, char *argv[]) if(argc>2 || i==0) usage(); /* see if the name is that of an existing /mail/fs directory */ - if(argc==1 && strchr(argv[0], '/')==0 && ismaildir(argv[0])){ + if(argc==1 && argv[0][0] != '/' && ismaildir(argv[0])){ name = argv[0]; - mboxname = eappend(estrdup(maildir), "", name); + mboxname = estrdup(name); newdir = 0; }else{ if(argv[0][i-1] == '/') @@ -159,9 +157,9 @@ threadmain(int argc, char *argv[]) if(outgoing == nil) outgoing = estrstrdup(mailboxdir, "/outgoing"); - mbox.ctlfd = fsopen(mailfs, "mbox/ctl", OWRITE); + mbox.ctlfd = fsopen(mailfs, estrstrdup(mboxname, "/ctl"), OWRITE); if(mbox.ctlfd == nil) - error("can't open %s: %r", "mbox/ctl"); + error("can't open %s: %r", estrstrdup(mboxname, "/ctl")); fsname = estrdup(name); if(newdir && argc > 0){ diff --git a/src/cmd/acme/mail/mesg.c b/src/cmd/acme/mail/mesg.c index d54b7fb2..9c4e0bb4 100644 --- a/src/cmd/acme/mail/mesg.c +++ b/src/cmd/acme/mail/mesg.c @@ -45,15 +45,6 @@ char *goodtypes[] = { nil, }; -struct{ - char *type; - char *ext; -} exts[] = { - "image/gif", ".gif", - "image/jpeg", ".jpg", - nil, nil -}; - char *okheaders[] = { "From:", @@ -109,10 +100,10 @@ mkaddrs(char *t) for(i=0; i+1 0) fmtprint(&fmt, ", "); - if(f[i][0] == 0 || strcmp(f[i], f[i+1]) == 0) + // if(f[i][0] == 0 || strcmp(f[i], f[i+1]) == 0) fmtprint(&fmt, "%s", f[i+1]); - else - fmtprint(&fmt, "%s <%s>", f[i], f[i+1]); + // else + // fmtprint(&fmt, "%s <%s>", f[i], f[i+1]); } free(f); return fmtstrflush(&fmt); @@ -137,15 +128,18 @@ loadinfo(Message *m, char *dir) if(strcmp(s, "from") == 0){ free(m->from); m->from = mkaddrs(t); + }else if(strcmp(s, "sender") == 0){ + free(m->sender); + m->sender = mkaddrs(t); }else if(strcmp(s, "to") == 0){ free(m->to); - m->from = mkaddrs(t); + m->to = mkaddrs(t); }else if(strcmp(s, "cc") == 0){ free(m->cc); - m->from = mkaddrs(t); + m->cc = mkaddrs(t); }else if(strcmp(s, "replyto") == 0){ free(m->replyto); - m->from = mkaddrs(t); + m->replyto = mkaddrs(t); }else if(strcmp(s, "subject") == 0){ free(m->subject); m->subject = estrdup(t); @@ -155,7 +149,7 @@ loadinfo(Message *m, char *dir) }else if(strcmp(s, "unixdate") == 0 && (t=strchr(t, ' ')) != nil){ free(m->date); m->date = estrdup(t+1); - }else if(strcmp(s, "messageid") == 0){ + }else if(strcmp(s, "digest") == 0){ free(m->digest); m->digest = estrdup(t); } @@ -163,14 +157,20 @@ loadinfo(Message *m, char *dir) } free(s); free(data); + if(m->replyto == nil){ + if(m->sender) + m->replyto = estrdup(m->sender); + else if(m->from) + m->replyto = estrdup(m->from); + else + m->replyto = estrdup(""); + } if(m->from == nil) m->from = estrdup(""); if(m->to == nil) m->to = estrdup(""); if(m->cc == nil) m->cc = estrdup(""); - if(m->replyto == nil) - m->replyto = estrdup(""); if(m->subject == nil) m->subject = estrdup(""); if(m->type == nil) @@ -955,9 +955,9 @@ mesgctl(void *v) s += strlen(mbox.name); if(strstr(s, "body") != nil){ /* strip any known extensions */ - for(i=0; exts[i].ext!=nil; i++){ - j = strlen(exts[i].ext); - if(strlen(s)>j && strcmp(s+strlen(s)-j, exts[i].ext)==0){ + for(i=0; ports[i].suffix!=nil; i++){ + j = strlen(ports[i].suffix); + if(strlen(s)>j && strcmp(s+strlen(s)-j, ports[i].suffix)==0){ s[strlen(s)-j] = '\0'; break; } @@ -1014,9 +1014,9 @@ ext(char *type) { int i; - for(i=0; exts[i].type!=nil; i++) - if(strcmp(type, exts[i].type)==0) - return exts[i].ext; + for(i=0; ports[i].type!=nil; i++) + if(strcmp(type, ports[i].type)==0) + return ports[i].suffix; return ""; } @@ -1027,13 +1027,13 @@ mimedisplay(Message *m, char *name, char *rootdir, Window *w, int fileonly) if(strcmp(m->disposition, "file")==0 || strlen(m->filename)!=0 || !fileonly){ if(strlen(m->filename) == 0) - dest = estrstrdup("a.", ext(m->type)); + dest = estrstrdup("a", ext(m->type)); else dest = estrdup(m->filename); if(m->filename[0] != '/') dest = egrow(estrdup(home), "/", dest); - fsprint(w->body, "\t9p read mail/%sbody%s > %s\n", - name, ext(m->type), dest); + fsprint(w->body, "\t9p read mail/%s/%sbody > %s\n", + mboxname, name, dest); free(dest); } } @@ -1137,11 +1137,15 @@ mesgload(Message *m, char *rootdir, char *file, Window *w) int tokenizec(char *str, char **args, int max, char *splitc) { - int na; + int i, na; int intok = 0; + char *p; if(max <= 0) - return 0; + return 0; + +// if(strchr(str, ',') || strchr(str, '"') || strchr(str, '<') || strchr(str, '(')) +// splitc = ","; for(na=0; *str != '\0';str++){ if(strchr(splitc, *str) == nil){ if(intok) @@ -1158,6 +1162,13 @@ tokenizec(char *str, char **args, int max, char *splitc) } } } + for(i=0; iargs[i] && strchr(" \t\r\n", *(p-1))) + *--p = 0; + } return na; } -- cgit v1.2.3