URI: 
       tfixes - plan9port - [fork] Plan 9 from user space
  HTML git clone git://src.adamsgaard.dk/plan9port
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit 3b5862ee5ab4452c8b5de2d062d713c843ee1e4f
   DIR parent 0932b4841652fb8251100fceb4178f36bcde3131
  HTML Author: rsc <devnull@localhost>
       Date:   Tue, 14 Feb 2006 19:41:36 +0000
       
       fixes
       
       Diffstat:
         M src/cmd/acme/mail/dat.h             |       2 ++
         M src/cmd/acme/mail/mail.c            |      12 +++++-------
         M src/cmd/acme/mail/mesg.c            |      69 ++++++++++++++++++-------------
       
       3 files changed, 47 insertions(+), 36 deletions(-)
       ---
   DIR diff --git a/src/cmd/acme/mail/dat.h b/src/cmd/acme/mail/dat.h
       t@@ -63,6 +63,7 @@ struct Message
                char                *to;
                char                *cc;
                char                *replyto;
       +        char                *sender;
                char                *date;
                char                *subject;
                char                *type;
       t@@ -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;
   DIR diff --git a/src/cmd/acme/mail/mail.c b/src/cmd/acme/mail/mail.c
       t@@ -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;
       t@@ -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] == '/')
       t@@ -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){
   DIR diff --git a/src/cmd/acme/mail/mesg.c b/src/cmd/acme/mail/mesg.c
       t@@ -45,15 +45,6 @@ char *goodtypes[] = {
                nil,
        };
        
       -struct{
       -        char *type;
       -        char        *ext;
       -} exts[] = {
       -        "image/gif",        ".gif",
       -        "image/jpeg",        ".jpg",
       -        nil, nil
       -};
       -
        char *okheaders[] =
        {
                "From:",
       t@@ -109,10 +100,10 @@ mkaddrs(char *t)
                for(i=0; i+1<nf; i+=2){
                        if(i > 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);
       t@@ -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);
       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);
                        }
       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)
       t@@ -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;
                                                                }
       t@@ -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 "";
        }
        
       t@@ -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);
                }
        }
       t@@ -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)
       t@@ -1158,6 +1162,13 @@ tokenizec(char *str, char **args, int max, char *splitc)
                                }
                        }
                }
       +        for(i=0; i<na; i++){
       +                while(*args[i] && strchr(" \t\r\n", *args[i]))
       +                        args[i]++;
       +                p = args[i]+strlen(args[i]);
       +                while(p>args[i] && strchr(" \t\r\n", *(p-1)))
       +                        *--p = 0;
       +        }
                return na;
        }