diff options
author | rsc <devnull@localhost> | 2006-02-09 20:52:31 +0000 |
---|---|---|
committer | rsc <devnull@localhost> | 2006-02-09 20:52:31 +0000 |
commit | 3f8c36d6dc30334bbff4f90e182812e9bd94153c (patch) | |
tree | e57edecb2c08d6ee17598344bdcb22f733977d1d /src/cmd/acme/mail/mail.c | |
parent | 330e487a1d3e2c65fc1132e8752f95e4fa4857df (diff) | |
download | plan9port-3f8c36d6dc30334bbff4f90e182812e9bd94153c.tar.gz plan9port-3f8c36d6dc30334bbff4f90e182812e9bd94153c.tar.bz2 plan9port-3f8c36d6dc30334bbff4f90e182812e9bd94153c.zip |
changes
Diffstat (limited to 'src/cmd/acme/mail/mail.c')
-rw-r--r-- | src/cmd/acme/mail/mail.c | 94 |
1 files changed, 46 insertions, 48 deletions
diff --git a/src/cmd/acme/mail/mail.c b/src/cmd/acme/mail/mail.c index 9942868c..0ce7ac97 100644 --- a/src/cmd/acme/mail/mail.c +++ b/src/cmd/acme/mail/mail.c @@ -4,12 +4,11 @@ #include <thread.h> #include <plumb.h> #include <ctype.h> -#include <9pclient.h> /* jpc */ +#include <9pclient.h> #include "dat.h" -char *maildir = "/mail/fs/"; /* mountpoint of mail file system */ -char *mailtermdir = "/mnt/term/mail/fs/"; /* alternate mountpoint */ -char *mboxname = "mbox"; /* mailboxdir/mboxname is mail spool file */ +char *maildir = "/mail/"; /* mountpoint of mail file system */ +char *mboxname = "INBOX"; /* mailboxdir/mboxname is mail spool file */ char *mailboxdir = nil; /* nil == /mail/box/$user */ char *fsname; /* filesystem for mailboxdir/mboxname is at maildir/fsname */ char *user; @@ -37,8 +36,8 @@ void plumbsendthread(void*); int shortmenu; -CFsys *upasfs; /*jpc */ -CFsys *acmefs; /*jpc */ +CFsys *mailfs; +CFsys *acmefs; void usage(void) @@ -55,7 +54,7 @@ removeupasfs(void) if(strcmp(mboxname, "mbox") == 0) return; snprint(buf, sizeof buf, "close %s", mboxname); - write(mbox.ctlfd, buf, strlen(buf)); + fswrite(mbox.ctlfd, buf, strlen(buf)); } int @@ -90,11 +89,6 @@ threadmain(int argc, char *argv[]) plumbseemailfd = plumbopen("seemail", OREAD|OCEXEC); plumbshowmailfd = plumbopen("showmail", OREAD|OCEXEC); - /* jpc */ - acmefs = nsmount("acme",nil); - upasfs = nsmount("upasfs", nil); - /* jpc end */ - shortmenu = 0; ARGBEGIN{ case 's': @@ -113,13 +107,14 @@ threadmain(int argc, char *argv[]) usage(); }ARGEND - name = "mbox"; + acmefs = nsmount("acme",nil); + if(acmefs == nil) + error("cannot mount acme: %r"); + mailfs = nsmount("mail", nil); + if(mailfs == nil) + error("cannot mount mail: %r"); - /* bind the terminal /mail/fs directory over the local one */ - if(access(maildir, 0)<0 && access(mailtermdir, 0)==0) { - /* jpc - bind(mailtermdir, maildir, MAFTER); */ - fprint(2,"jpc: trying to bind(mailtermdir, maildir, MAFTER)\n"); - } + name = "INBOX"; newdir = 1; if(argc > 0){ @@ -154,27 +149,31 @@ threadmain(int argc, char *argv[]) user = getenv("user"); if(user == nil) user = "none"; + home = getenv("home"); + if(home == nil) + home = getenv("HOME"); + if(home == nil) + error("can't find $home"); if(mailboxdir == nil) - mailboxdir = estrstrdup(unsharp("#9/mail/box/"), user); + mailboxdir = estrstrdup(home, "/mail"); if(outgoing == nil) outgoing = estrstrdup(mailboxdir, "/outgoing"); - // s = estrstrdup(maildir, "ctl"); - mbox.ctlfd = fsopenfd(upasfs,"ctl", ORDWR|OCEXEC); - if(mbox.ctlfd < 0) - error("can't open %s: %r\n", s); + mbox.ctlfd = fsopen(mailfs, "INBOX/ctl", OWRITE); + if(mbox.ctlfd == nil) + error("can't open %s: %r", "INBOX/ctl"); fsname = estrdup(name); if(newdir && argc > 0){ s = emalloc(5+strlen(mailboxdir)+strlen(mboxname)+strlen(name)+10+1); for(i=0; i<10; i++){ sprint(s, "open %s/%s %s", mailboxdir, mboxname, fsname); - if(write(mbox.ctlfd, s, strlen(s)) >= 0) + if(fswrite(mbox.ctlfd, s, strlen(s)) >= 0) break; err[0] = '\0'; errstr(err, sizeof err); if(strstr(err, "mbox name in use") == nil) - error("can't create directory %s for mail: %s\n", name, err); + error("can't create directory %s for mail: %s", name, err); free(fsname); fsname = emalloc(strlen(name)+10); sprint(fsname, "%s-%d", name, i); @@ -186,7 +185,6 @@ threadmain(int argc, char *argv[]) s = estrstrdup(fsname, "/"); mbox.name = estrstrdup(maildir, s); - // mbox.name = "/mail/fs/mbox/"; mbox.level= 0; readmbox(&mbox, maildir, s); home = getenv("home"); @@ -212,13 +210,13 @@ threadmain(int argc, char *argv[]) mbox.w = wbox; mesgmenu(wbox, &mbox); - // sleep(100); winclean(wbox); - wctlfd = open("/dev/wctl", OWRITE|OCEXEC); /* for acme window */ +/* wctlfd = open("/dev/wctl", OWRITE|OCEXEC); /* for acme window */ + wctlfd = -1; cplumb = chancreate(sizeof(Plumbmsg*), 0); cplumbshow = chancreate(sizeof(Plumbmsg*), 0); - if(strcmp(name, "mbox") == 0){ + if(strcmp(name, "INBOX") == 0){ /* * Avoid creating multiple windows to send mail by only accepting * sendmail plumb messages if we're reading the main mailbox. @@ -282,24 +280,18 @@ void newmesg(char *name, char *digest) { Dir *d; - char* tmp; - if(strncmp(name, mbox.name, strlen(mbox.name)) != 0) { + if(strncmp(name, mbox.name, strlen(mbox.name)) != 0) return; /* message is about another mailbox */ - } - if(mesglookupfile(&mbox, name, digest) != nil) { + if(mesglookupfile(&mbox, name, digest) != nil) return; - } - if (strncmp(name,"/mail/fs/",strlen("/mail/fs/"))==0) { - tmp = name+strlen("/mail/fs/"); - } - d = fsdirstat(upasfs,tmp); - if(d == nil) { + if(strncmp(name, "/mail/", 6) == 0) + name += 6; + d = fsdirstat(mailfs, name); + if(d == nil) return; - } - if(mesgadd(&mbox, mbox.name, d, digest)) { + if(mesgadd(&mbox, mbox.name, d, digest)) mesgmenunew(wbox, &mbox); - } free(d); } @@ -307,13 +299,17 @@ void showmesg(char *name, char *digest) { char *n; - - if(strncmp(name, mbox.name, strlen(mbox.name)) != 0) + char *mb; + + mb = mbox.name; + if(strncmp(mb, "/mail/", 6) == 0) + mb += 6; + if(strncmp(name, mb, strlen(mb)) != 0) return; /* message is about another mailbox */ - n = estrdup(name+strlen(mbox.name)); + n = estrdup(name+strlen(mb)); if(n[strlen(n)-1] != '/') n = egrow(n, "/", nil); - mesgopen(&mbox, mbox.name, name+strlen(mbox.name), nil, 1, digest); + mesgopen(&mbox, mbox.name, name+strlen(mb), nil, 1, digest); free(n); } @@ -356,10 +352,11 @@ plumbthread(void) } void -plumbshowthread(void* v) +plumbshowthread(void *v) { Plumbmsg *m; + USED(v); threadsetname("plumbshowthread"); while((m = recvp(cplumbshow)) != nil){ showmesg(m->data, plumblookup(m->attr, "digest")); @@ -369,10 +366,11 @@ plumbshowthread(void* v) } void -plumbsendthread(void* v) +plumbsendthread(void *v) { Plumbmsg *m; + USED(v); threadsetname("plumbsendthread"); while((m = recvp(cplumbsend)) != nil){ mkreply(nil, "Mail", m->data, m->attr, nil); |