X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=uip%2Fspost.c;h=0679ac6bb6fa20a637d4cdfad1c68dc85376ca66;hp=db16f38281caf858e837073d7ffb30275e12b7d5;hb=240013872c392fe644bd4f79382d9f5314b4ea60;hpb=18017df38ebb626f6eed6f339641fd1298c326e7 diff --git a/uip/spost.c b/uip/spost.c index db16f38..0679ac6 100644 --- a/uip/spost.c +++ b/uip/spost.c @@ -1,13 +1,13 @@ /* - * spost.c -- feed messages to sendmail - * - * This is a simpler, faster, replacement for "post" for use - * when "sendmail" is the transport system. - * - * This code is Copyright (c) 2002, by the authors of nmh. See the - * COPYRIGHT file in the root directory of the nmh distribution for - * complete copyright information. - */ +** spost.c -- feed messages to sendmail +** +** This is a simpler, faster, replacement for "post" for use +** when "sendmail" is the transport system. +** +** This code is Copyright (c) 2002, by the authors of nmh. See the +** COPYRIGHT file in the root directory of the nmh distribution for +** complete copyright information. +*/ #include #include @@ -60,13 +60,13 @@ struct swit switches[] = { { "debug", -5 }, #define DISTSW 18 { "dist", -4 }, /* interface from dist */ -#define PUSHSW 22 /* fork to sendmail then exit */ +#define PUSHSW 19 /* fork to sendmail then exit */ { "push", -4 }, -#define NPUSHSW 23 /* exec sendmail */ +#define NPUSHSW 20 /* exec sendmail */ { "nopush", -6 }, -#define LIBSW 24 +#define LIBSW 21 { "library directory", -7 }, -#define ANNOSW 25 +#define ANNOSW 22 { "idanno number", -6 }, { NULL, 0 } }; @@ -165,34 +165,34 @@ static FILE *out; /* output (temp) file */ extern char *sendmail; /* - * external prototypes - */ -extern char *getfullname (void); -extern char *getusername (void); +** external prototypes +*/ +extern char *getfullname(void); +extern char *getusername(void); extern boolean draft_from_masquerading; /* defined in mts.c */ /* - * static prototypes - */ -static void putfmt (char *, char *, FILE *); -static void start_headers (void); -static void finish_headers (FILE *); -static int get_header (char *, struct headers *); -static void putadr (char *, struct mailname *); -static int putone (char *, int, int); -static void insert_fcc (struct headers *, unsigned char *); -static void file (char *); -static void fcc (char *, char *); +** static prototypes +*/ +static void putfmt(char *, char *, FILE *); +static void start_headers(void); +static void finish_headers(FILE *); +static int get_header(char *, struct headers *); +static void putadr(char *, struct mailname *); +static int putone(char *, int, int); +static void insert_fcc(struct headers *, unsigned char *); +static void file(char *); +static void fcc(char *, char *); #if 0 -static void die (char *, char *, ...); -static void make_bcc_file (void); +static void die(char *, char *, ...); +static void make_bcc_file(void); #endif int -main (int argc, char **argv) +main(int argc, char **argv) { int state, i, pid, compnum; char *cp, *msg = NULL, **argp, **arguments; @@ -202,32 +202,32 @@ main (int argc, char **argv) #ifdef LOCALE setlocale(LC_ALL, ""); #endif - invo_name = r1bindex (argv[0], '/'); + invo_name = mhbasename(argv[0]); /* foil search of user profile/context */ - if (context_foil (NULL) == -1) - done (1); + if (context_foil(NULL) == -1) + done(1); - mts_init (invo_name); - arguments = getarguments (invo_name, argc, argv, 0); + mts_init(invo_name); + arguments = getarguments(invo_name, argc, argv, 0); argp = arguments; while ((cp = *argp++)) { if (*cp == '-') { - switch (smatch (++cp, switches)) { + switch (smatch(++cp, switches)) { case AMBIGSW: - ambigsw (cp, switches); - done (1); + ambigsw(cp, switches); + done(1); case UNKWNSW: - adios (NULL, "-%s unknown", cp); + adios(NULL, "-%s unknown", cp); case HELPSW: - snprintf (buf, sizeof(buf), "%s [switches] file", invo_name); - print_help (buf, switches, 1); - done (1); + snprintf(buf, sizeof(buf), "%s [switches] file", invo_name); + print_help(buf, switches, 1); + done(1); case VERSIONSW: print_version(invo_name); - done (1); + done(1); case DEBUGSW: debug++; @@ -238,8 +238,9 @@ main (int argc, char **argv) continue; case FILTSW: - if (!(filter = *argp++) || *filter == '-') - adios (NULL, "missing argument to %s", argp[-2]); + if (!(filter = *argp++) || + *filter == '-') + adios(NULL, "missing argument to %s", argp[-2]); continue; case NFILTSW: filter = NULL; @@ -282,13 +283,14 @@ main (int argc, char **argv) case ALIASW: if (!(cp = *argp++) || *cp == '-') - adios (NULL, "missing argument to %s", argp[-2]); - if (aliasflg < 0) - alias (AliasFile);/* load default aka's */ + adios(NULL, "missing argument to %s", argp[-2]); + if (aliasflg < 0) { + /* load default aka's */ + alias(AliasFile); + } aliasflg = 1; if ((state = alias(cp)) != AK_OK) - adios (NULL, "aliasing error in file %s - %s", - cp, akerror(state) ); + adios(NULL, "aliasing error in file %s - %s", cp, akerror(state) ); continue; case NALIASW: aliasflg = 0; @@ -296,126 +298,127 @@ main (int argc, char **argv) case WIDTHSW: if (!(cp = *argp++) || *cp == '-') - adios (NULL, "missing argument to %s", argp[-2]); - outputlinelen = atoi (cp); + adios(NULL, "missing argument to %s", argp[-2]); + outputlinelen = atoi(cp); if (outputlinelen <= 10) outputlinelen = 72; continue; case LIBSW: if (!(cp = *argp++) || *cp == '-') - adios (NULL, "missing argument to %s", argp[-2]); + adios(NULL, "missing argument to %s", argp[-2]); /* create a minimal context */ - if (context_foil (cp) == -1) + if (context_foil(cp) == -1) done(1); continue; case ANNOSW: /* -idanno switch ignored */ if (!(cp = *argp++) || *cp == '-') - adios (NULL, "missing argument to %s", argp[-2]); + adios(NULL, "missing argument to %s", argp[-2]); continue; } } if (msg) - adios (NULL, "only one message at a time!"); + adios(NULL, "only one message at a time!"); else msg = cp; } if (aliasflg < 0) - alias (AliasFile); /* load default aka's */ + alias(AliasFile); /* load default aka's */ if (!msg) - adios (NULL, "usage: %s [switches] file", invo_name); + adios(NULL, "usage: %s [switches] file", invo_name); - if ((in = fopen (msg, "r")) == NULL) - adios (msg, "unable to open"); + if ((in = fopen(msg, "r")) == NULL) + adios(msg, "unable to open"); - start_headers (); + start_headers(); if (debug) { verbose++; out = stdout; } else { #ifdef HAVE_MKSTEMP - if ((out = fdopen( mkstemp (tmpfil), "w" )) == NULL ) - adios (tmpfil, "unable to create"); + if ((out = fdopen( mkstemp(tmpfil), "w" )) == NULL ) + adios(tmpfil, "unable to create"); #else - mktemp (tmpfil); - if ((out = fopen (tmpfil, "w")) == NULL) - adios (tmpfil, "unable to create"); - chmod (tmpfil, 0600); + mktemp(tmpfil); + if ((out = fopen(tmpfil, "w")) == NULL) + adios(tmpfil, "unable to create"); + chmod(tmpfil, 0600); #endif } hdrtab = (msgstate == normal) ? NHeaders : RHeaders; for (compnum = 1, state = FLD;;) { - switch (state = m_getfld (state, name, buf, sizeof(buf), in)) { + switch (state = m_getfld(state, name, buf, sizeof(buf), in)) { case FLD: compnum++; - putfmt (name, buf, out); + putfmt(name, buf, out); continue; case FLDPLUS: compnum++; - cp = add (buf, cp); + cp = add(buf, cp); while (state == FLDPLUS) { - state = m_getfld (state, name, buf, sizeof(buf), in); - cp = add (buf, cp); + state = m_getfld(state, name, buf, + sizeof(buf), in); + cp = add(buf, cp); } - putfmt (name, cp, out); - free (cp); + putfmt(name, cp, out); + free(cp); continue; case BODY: - finish_headers (out); - fprintf (out, "\n%s", buf); + finish_headers(out); + fprintf(out, "\n%s", buf); while (state == BODY) { - state = m_getfld (state, name, buf, sizeof(buf), in); - fputs (buf, out); + state = m_getfld(state, name, buf, + sizeof(buf), in); + fputs(buf, out); } break; case FILEEOF: - finish_headers (out); + finish_headers(out); break; case LENERR: case FMTERR: - adios (NULL, "message format error in component #%d", - compnum); + adios(NULL, "message format error in component #%d", compnum); default: - adios (NULL, "getfld() returned %d", state); + adios(NULL, "getfld() returned %d", state); } break; } - fclose (in); + fclose(in); if (backflg) { - strncpy (buf, m_backup (msg), sizeof(buf)); - if (rename (msg, buf) == NOTOK) - advise (buf, "unable to rename %s to", msg); + strncpy(buf, m_backup(msg), sizeof(buf)); + if (rename(msg, buf) == NOTOK) + advise(buf, "unable to rename %s to", msg); } if (debug) { - done (0); + done(0); } else - fclose (out); + fclose(out); - file (tmpfil); + file(tmpfil); /* - * re-open the temp file, unlink it and exec sendmail, giving it - * the msg temp file as std in. - */ - if ( freopen( tmpfil, "r", stdin) == NULL) - adios (tmpfil, "can't reopen for sendmail"); + ** re-open the temp file, unlink it and exec sendmail, giving it + ** the msg temp file as std in. + */ + if (freopen(tmpfil, "r", stdin) == NULL) + adios(tmpfil, "can't reopen for sendmail"); if (rmflg) - unlink (tmpfil); + unlink(tmpfil); argp = sargv; *argp++ = "send-mail"; @@ -432,8 +435,9 @@ main (int argc, char **argv) sleep(5); switch (pid) { case NOTOK: - fprintf (verbose ? stdout : stderr, "%s: can't fork to %s\n", - invo_name, sendmail); + fprintf(verbose ? stdout : stderr, + "%s: can't fork to %s\n", + invo_name, sendmail); exit(-1); case OK: /* we're the child .. */ @@ -442,15 +446,15 @@ main (int argc, char **argv) exit(0); } } - execv ( sendmail, sargv); - adios ( sendmail, "can't exec"); + execv(sendmail, sargv); + adios(sendmail, "can't exec"); return 0; /* dead code to satisfy the compiler */ } /* DRAFT GENERATION */ static void -putfmt (char *name, char *str, FILE *out) +putfmt(char *name, char *str, FILE *out) { int i; char *cp, *pp; @@ -459,8 +463,8 @@ putfmt (char *name, char *str, FILE *out) while (*str == ' ' || *str == '\t') str++; - if ((i = get_header (name, hdrtab)) == NOTOK) { - fprintf (out, "%s: %s", name, str); + if ((i = get_header(name, hdrtab)) == NOTOK) { + fprintf(out, "%s: %s", name, str); return; } @@ -468,23 +472,24 @@ putfmt (char *name, char *str, FILE *out) if (hdr->flags & HIGN) return; if (hdr->flags & HBAD) { - advise (NULL, "illegal header line -- %s:", name); + advise(NULL, "illegal header line -- %s:", name); badmsg++; return; } msgflags |= hdr->set; if (hdr->flags & HSUB) - subject = subject ? add (str, add ("\t", subject)) : getcpy (str); + subject = subject ? add(str, add("\t", subject)) : + getcpy(str); if (hdr->flags & HFCC) { if ((cp = strrchr(str, '\n'))) *cp = 0; for (cp = pp = str; (cp = strchr(pp, ',')); pp = cp) { *cp++ = 0; - insert_fcc (hdr, pp); + insert_fcc(hdr, pp); } - insert_fcc (hdr, pp); + insert_fcc(hdr, pp); return; } @@ -497,12 +502,13 @@ putfmt (char *name, char *str, FILE *out) if (*str != '\n' && *str != '\0') { if (aliasflg && hdr->flags & HTRY) { - /* this header contains address(es) that we have to do - * alias expansion on. Because of the saved state in - * getname we have to put all the addresses into a list. - * We then let putadr munch on that list, possibly - * expanding aliases. - */ + /* + ** this header contains address(es) that we have to do + ** alias expansion on. Because of the saved state in + ** getname we have to put all the addresses into a + ** list. We then let putadr munch on that list, + ** possibly expanding aliases. + **/ register struct mailname *f = 0; register struct mailname *mp = 0; @@ -521,114 +527,122 @@ putfmt (char *name, char *str, FILE *out) putadr( name, f ); } else { /* - * The author(s) of spost decided that alias - * substitution wasn't necessary for the non-HTRY - * headers. Unfortunately, one of those headers - * is "From:", and having alias substitution - * work on that is extremely useful for someone - * with a lot of POP3 email accounts or aliases. - * post supports aliasing of "From:"... - * - * Since "From:"-processing is incompletely - * implemented in this unsupported and - * undocumented spost backend, I'm not - * going to take the time to implement my new - * draft-From:-based email address masquerading. - * If I do ever implement it here, I'd almost - * certainly want to implement "From:" line - * alias processing as well. - * -- Dan Harkless - */ - fprintf (out, "%s: %s", name, str ); + ** The author(s) of spost decided that alias + ** substitution wasn't necessary for the non-HTRY + ** headers. Unfortunately, one of those headers + ** is "From:", and having alias substitution + ** work on that is extremely useful for someone + ** with a lot of POP3 email accounts or aliases. + ** post supports aliasing of "From:"... + ** + ** Since "From:"-processing is incompletely + ** implemented in this unsupported and + ** undocumented spost backend, I'm not + ** going to take the time to implement my new + ** draft-From:-based email address masquerading. + ** If I do ever implement it here, I'd almost + ** certainly want to implement "From:" line + ** alias processing as well. + ** -- Dan Harkless + */ + fprintf(out, "%s: %s", name, str ); } } } static void -start_headers (void) +start_headers(void) { char *cp; char sigbuf[BUFSIZ]; strncpy(from, getusername(), sizeof(from)); - if ((cp = getfullname ()) && *cp) { - strncpy (sigbuf, cp, sizeof(sigbuf)); - snprintf (signature, sizeof(signature), "%s <%s>", sigbuf, from); + if ((cp = getfullname()) && *cp) { + strncpy(sigbuf, cp, sizeof(sigbuf)); + snprintf(signature, sizeof(signature), "%s <%s>", + sigbuf, from); } else - snprintf (signature, sizeof(signature), "%s", from); + snprintf(signature, sizeof(signature), "%s", from); } static void -finish_headers (FILE *out) +finish_headers(FILE *out) { switch (msgstate) { case normal: if (!(msgflags & MDAT)) - fprintf (out, "Date: %s\n", dtimenow (0)); + fprintf(out, "Date: %s\n", dtimenow(0)); if (msgflags & MFRM) { - /* There was already a From: in the draft. Don't add one. */ + /* + ** There was already a From: in the draft. + ** Don't add one. + */ if (!draft_from_masquerading) /* - * mts.conf didn't contain - * "masquerade:[...]draft_from[...]" - * so we'll reveal the user's - * actual account@thismachine - * address in a Sender: header - * (and use it as the envelope - * From: later). - */ - fprintf (out, "Sender: %s\n", from); + ** mts.conf didn't contain + ** "masquerade:[...]draft_from[...]" + ** so we'll reveal the user's + ** actual account@thismachine + ** address in a Sender: header + ** (and use it as the envelope + ** From: later). + */ + fprintf(out, "Sender: %s\n", from); } else - fprintf (out, "From: %s\n", signature); + fprintf(out, "From: %s\n", signature); #ifdef notdef if (!(msgflags & MVIS)) - fprintf (out, "Bcc: Blind Distribution List: ;\n"); + fprintf(out, "Bcc: Blind Distribution List: ;\n"); #endif /* notdef */ break; case resent: if (!(msgflags & MRDT)) - fprintf (out, "Resent-Date: %s\n", dtimenow(0)); + fprintf(out, "Resent-Date: %s\n", dtimenow(0)); if (msgflags & MRFM) { - /* There was already a Resent-From: in draft. Don't add one. */ + /* + ** There was already a Resent-From: in draft. + ** Don't add one. + */ if (!draft_from_masquerading) /* - * mts.conf didn't contain - * "masquerade:[...]draft_from[...]" - * so we'll reveal the user's - * actual account@thismachine - * address in a Sender: header - * (and use it as the envelope - * From: later). - */ - fprintf (out, "Resent-Sender: %s\n", from); + ** mts.conf didn't contain + ** "masquerade:[...]draft_from[...]" + ** so we'll reveal the user's + ** actual account@thismachine + ** address in a Sender: header + ** (and use it as the envelope + ** From: later). + */ + fprintf(out, "Resent-Sender: %s\n", + from); } else /* Construct a Resent-From: header. */ - fprintf (out, "Resent-From: %s\n", signature); + fprintf(out, "Resent-From: %s\n", signature); #ifdef notdef if (!(msgflags & MVIS)) - fprintf (out, "Resent-Bcc: Blind Re-Distribution List: ;\n"); + fprintf(out, "Resent-Bcc: Blind Re-Distribution List: ;\n"); #endif /* notdef */ break; } if (badmsg) - adios (NULL, "re-format message and try again"); + adios(NULL, "re-format message and try again"); } static int -get_header (char *header, struct headers *table) +get_header(char *header, struct headers *table) { struct headers *h; for (h = table; h->value; h++) - if (!mh_strcasecmp (header, h->value)) + if (!mh_strcasecmp(header, h->value)) return (h - table); return NOTOK; @@ -636,38 +650,38 @@ get_header (char *header, struct headers *table) /* - * output the address list for header "name". The address list - * is a linked list of mailname structs. "nl" points to the head - * of the list. Alias substitution should be done on nl. - */ +** output the address list for header "name". The address list +** is a linked list of mailname structs. "nl" points to the head +** of the list. Alias substitution should be done on nl. +*/ static void -putadr (char *name, struct mailname *nl) +putadr(char *name, struct mailname *nl) { register struct mailname *mp, *mp2; register int linepos; register char *cp; int namelen; - fprintf (out, "%s: ", name); + fprintf(out, "%s: ", name); namelen = strlen(name) + 2; linepos = namelen; for (mp = nl; mp; ) { if (linepos > MAX_SM_FIELD) { - fprintf (out, "\n%s: ", name); - linepos = namelen; + fprintf(out, "\n%s: ", name); + linepos = namelen; } if (mp->m_nohost) { /* a local name - see if it's an alias */ cp = akvalue(mp->m_mbox); if (cp == mp->m_mbox) /* wasn't an alias - use what the user typed */ - linepos = putone( mp->m_text, linepos, namelen ); + linepos = putone(mp->m_text, linepos, namelen); else /* an alias - expand it */ while ((cp = getname(cp))) { if (linepos > MAX_SM_FIELD) { - fprintf (out, "\n%s: ", name); + fprintf(out, "\n%s: ", name); linepos = namelen; } mp2 = getm( cp, NULL, 0, AD_HOST, NULL); @@ -691,7 +705,7 @@ putadr (char *name, struct mailname *nl) } static int -putone (char *adr, int pos, int indent) +putone(char *adr, int pos, int indent) { register int len; static int linepos; @@ -699,12 +713,11 @@ putone (char *adr, int pos, int indent) len = strlen( adr ); if (pos == indent) linepos = pos; - else if ( linepos+len > outputlinelen ) { - fprintf ( out, ",\n%*s", indent, ""); + else if (linepos+len > outputlinelen) { + fprintf( out, ",\n%*s", indent, ""); linepos = indent; pos += indent + 2; - } - else { + } else { fputs( ", ", out ); linepos += 2; pos += 2; @@ -717,13 +730,13 @@ putone (char *adr, int pos, int indent) static void -insert_fcc (struct headers *hdr, unsigned char *pp) +insert_fcc(struct headers *hdr, unsigned char *pp) { unsigned char *cp; - for (cp = pp; isspace (*cp); cp++) + for (cp = pp; isspace(*cp); cp++) continue; - for (pp += strlen (pp) - 1; pp > cp && isspace (*pp); pp--) + for (pp += strlen(pp) - 1; pp > cp && isspace(*pp); pp--) continue; if (pp >= cp) *++pp = 0; @@ -731,15 +744,15 @@ insert_fcc (struct headers *hdr, unsigned char *pp) return; if (fccind >= FCCS) - adios (NULL, "too many %ss", hdr->value); - fccfold[fccind++] = getcpy (cp); + adios(NULL, "too many %ss", hdr->value); + fccfold[fccind++] = getcpy(cp); } #if 0 /* BCC GENERATION */ static void -make_bcc_file (void) +make_bcc_file(void) { pid_t child_id; int fd, i, status; @@ -749,49 +762,49 @@ make_bcc_file (void) #ifdef HAVE_MKSTEMP fd = mkstemp(bccfil); if (fd == -1 || (out = fdopen(fd, "w")) == NULL) - adios (bccfil, "unable to create"); + adios(bccfil, "unable to create"); #else - mktemp (bccfil); - if ((out = fopen (bccfil, "w")) == NULL) - adios (bccfil, "unable to create"); + mktemp(bccfil); + if ((out = fopen(bccfil, "w")) == NULL) + adios(bccfil, "unable to create"); #endif - chmod (bccfil, 0600); + chmod(bccfil, 0600); - fprintf (out, "Date: %s\n", dtimenow (0)); + fprintf(out, "Date: %s\n", dtimenow(0)); if (msgflags & MFRM) { /* There was already a From: in the draft. Don't add one. */ if (!draft_from_masquerading) /* - * mts.conf didn't contain "masquerade:[...]draft_from[...]" - * so we'll reveal the user's actual account@thismachine - * address in a Sender: header (and use it as the envelope - * From: later). - */ - fprintf (out, "Sender: %s\n", from); + ** mts.conf didn't contain "masquerade:[...]draft_from[...]" + ** so we'll reveal the user's actual account@thismachine + ** address in a Sender: header (and use it as the envelope + ** From: later). + */ + fprintf(out, "Sender: %s\n", from); } else - /* Construct a From: header. */ - fprintf (out, "From: %s\n", signature); + /* Construct a From: header. */ + fprintf(out, "From: %s\n", signature); if (subject) - fprintf (out, "Subject: %s", subject); - fprintf (out, "BCC:\n\n------- Blind-Carbon-Copy\n\n"); - fflush (out); + fprintf(out, "Subject: %s", subject); + fprintf(out, "BCC:\n\n------- Blind-Carbon-Copy\n\n"); + fflush(out); if (filter == NULL) { - if ((fd = open (tmpfil, O_RDONLY)) == NOTOK) - adios (NULL, "unable to re-open"); - cpydgst (fd, fileno (out), tmpfil, bccfil); - close (fd); + if ((fd = open(tmpfil, O_RDONLY)) == NOTOK) + adios(NULL, "unable to re-open"); + cpydgst(fd, fileno(out), tmpfil, bccfil); + close(fd); } else { - vec[0] = r1bindex (mhlproc, '/'); + vec[0] = mhbasename(mhlproc); for (i = 0; (child_id = vfork()) == NOTOK && i < 5; i++) - sleep (5); + sleep(5); switch (child_id) { case NOTOK: - adios ("vfork", "unable to"); + adios("vfork", "unable to"); case OK: - dup2 (fileno (out), 1); + dup2(fileno(out), 1); i = 1; vec[i++] = "-forward"; @@ -800,26 +813,27 @@ make_bcc_file (void) vec[i++] = tmpfil; vec[i] = NULL; - execvp (mhlproc, vec); - adios (mhlproc, "unable to exec"); + execvp(mhlproc, vec); + adios(mhlproc, "unable to exec"); default: if (status = pidwait(child_id, OK)) - admonish (NULL, "%s lost (status=0%o)", vec[0], status); + admonish(NULL, "%s lost (status=0%o)", + vec[0], status); break; } } - fseek (out, 0L, SEEK_END); - fprintf (out, "\n------- End of Blind-Carbon-Copy\n"); - fclose (out); + fseek(out, 0L, SEEK_END); + fprintf(out, "\n------- End of Blind-Carbon-Copy\n"); + fclose(out); } #endif /* if 0 */ /* FCC INTERACTION */ static void -file (char *path) +file(char *path) { int i; @@ -827,67 +841,71 @@ file (char *path) return; for (i = 0; i < fccind; i++) - fcc (path, fccfold[i]); + fcc(path, fccfold[i]); } static void -fcc (char *file, char *folder) +fcc(char *file, char *folder) { pid_t child_id; int i, status; char fold[BUFSIZ]; if (verbose) - printf ("%sFcc: %s\n", msgstate == resent ? "Resent-" : "", folder); - fflush (stdout); + printf("%sFcc: %s\n", msgstate == resent ? "Resent-" : "", + folder); + fflush(stdout); for (i = 0; (child_id = vfork()) == NOTOK && i < 5; i++) - sleep (5); + sleep(5); switch (child_id) { case NOTOK: if (!verbose) - fprintf (stderr, " %sFcc %s: ", - msgstate == resent ? "Resent-" : "", folder); - fprintf (verbose ? stdout : stderr, "no forks, so not ok\n"); + fprintf(stderr, " %sFcc %s: ", + msgstate == resent ? + "Resent-" : "", folder); + fprintf(verbose ? stdout : stderr, "no forks, so not ok\n"); break; case OK: - snprintf (fold, sizeof(fold), "%s%s", + snprintf(fold, sizeof(fold), "%s%s", *folder == '+' || *folder == '@' ? "" : "+", folder); - execlp (fileproc, r1bindex (fileproc, '/'), + execlp(fileproc, mhbasename(fileproc), "-link", "-file", file, fold, NULL); - _exit (-1); + _exit(-1); default: if ((status = pidwait(child_id, OK))) { if (!verbose) - fprintf (stderr, " %sFcc %s: ", - msgstate == resent ? "Resent-" : "", folder); - fprintf (verbose ? stdout : stderr, - " errored (0%o)\n", status); + fprintf(stderr, " %sFcc %s: ", + msgstate == resent ? + "Resent-" : "", + folder); + fprintf(verbose ? stdout : stderr, + " errored (0%o)\n", status); } } - fflush (stdout); + fflush(stdout); } #if 0 /* - * TERMINATION - */ +** TERMINATION +*/ static void -die (char *what, char *fmt, ...) +die(char *what, char *fmt, ...) { va_list ap; va_start(ap, fmt); - advertise (what, NULL, fmt, ap); + advertise(what, NULL, fmt, ap); va_end(ap); - done (1); + done(1); } #endif