plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

deliver.c (1104B)


      1 #include "dat.h"
      2 #include <thread.h>
      3 #include "common.h"
      4 
      5 void
      6 usage(void)
      7 {
      8 	fprint(2, "usage: %s recipient fromaddr-file mbox\n", argv0);
      9 	threadexitsall("usage");
     10 }
     11 
     12 void
     13 main(int argc, char **argv)
     14 {
     15 	int fd;
     16 	char now[30];
     17 	Addr *a;
     18 	char *deliveredto;
     19 	Mlock *l;
     20 	int bytes;
     21 
     22 	ARGBEGIN{
     23 	}ARGEND;
     24 
     25 	if(argc != 3)
     26 		usage();
     27 
     28 	deliveredto = strrchr(argv[0], '!');
     29 	if(deliveredto == nil)
     30 		deliveredto = argv[0];
     31 	else
     32 		deliveredto++;
     33 	a = readaddrs(argv[1], nil);
     34 	if(a == nil)
     35 		sysfatal("missing from address");
     36 
     37 	l = syslock(argv[2]);
     38 
     39 	/* append to mbox */
     40 	fd = open(argv[2], OWRITE);
     41 	if(fd < 0)
     42 		sysfatal("opening mailbox: %r");
     43 	seek(fd, 0, 2);
     44 	strncpy(now, ctime(time(0)), sizeof(now));
     45 	now[28] = 0;
     46 	if(fprint(fd, "From %s %s\n", a->val, now) < 0)
     47 		sysfatal("writing mailbox: %r");
     48 
     49 	/* copy message handles escapes and any needed new lines */
     50 	bytes = appendfiletombox(0, fd);
     51 	if(bytes < 0)
     52 		sysfatal("writing mailbox: %r");
     53 
     54 	close(fd);
     55 	sysunlock(l);
     56 
     57 	/* log it */
     58 	syslog(0, "mail", "delivered %s From %s %s (%s) %d", deliveredto,
     59 		a->val, now, argv[0], bytes);
     60 	exits(0);
     61 }