URI:
       tcat_mail.c - 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
       ---
       tcat_mail.c (1190B)
       ---
            1 #include "common.h"
            2 #include "send.h"
            3 
            4 
            5 /* dispose of local addresses */
            6 int
            7 cat_mail(dest *dp, message *mp)
            8 {
            9         Biobuf *fp;
           10         char *rcvr, *cp;
           11         Mlock *l;
           12         String *tmp, *s;
           13         int i, n;
           14 
           15         s = unescapespecial(s_clone(dp->repl1));
           16         if (nflg) {
           17                 if(!xflg)
           18                         print("cat >> %s\n", s_to_c(s));
           19                 else
           20                         print("%s\n", s_to_c(dp->addr));
           21                 s_free(s);
           22                 return 0;
           23         }
           24         for(i = 0;; i++){
           25                 l = syslock(s_to_c(s));
           26                 if(l == 0)
           27                         return refuse(dp, mp, "can't lock mail file", 0, 0);
           28 
           29                 fp = sysopen(s_to_c(s), "al", MBOXMODE);
           30                 if(fp)
           31                         break;
           32                 tmp = s_append(0, s_to_c(s));
           33                 s_append(tmp, ".tmp");
           34                 fp = sysopen(s_to_c(tmp), "al", MBOXMODE);
           35                 if(fp){
           36                         syslog(0, "mail", "error: used %s", s_to_c(tmp));
           37                         s_free(tmp);
           38                         break;
           39                 }
           40                 s_free(tmp);
           41                 sysunlock(l);
           42                 if(i >= 5)
           43                         return refuse(dp, mp, "mail file cannot be opened", 0, 0);
           44                 sleep(1000);
           45         }
           46         s_free(s);
           47         n = m_print(mp, fp, (char *)0, 1);
           48         if (Bprint(fp, "\n") < 0 || Bflush(fp) < 0 || n < 0){
           49                 sysclose(fp);
           50                 sysunlock(l);
           51                 return refuse(dp, mp, "error writing mail file", 0, 0);
           52         }
           53         sysclose(fp);
           54         sysunlock(l);
           55         rcvr = s_to_c(dp->addr);
           56         if(cp = strrchr(rcvr, '!'))
           57                 rcvr = cp+1;
           58         logdelivery(dp, rcvr, mp);
           59         return 0;
           60 }