📄 whatnowsbr.c
字号:
if ((cp = m_find ("automhnproc")) && !getenv ("NOMHNPROC") && mhnfile (file) && (i = editfile (&cp, NULLVP, file, NOUSE, NULLMP, NULLCP, NULLCP))) return 0;#endif if (strcmp (sp = r1bindex (sendproc, '/'), "send") == 0) { cp = invo_name; sendit (invo_name = sp, arg, file, pushsw); invo_name = cp; return 1; } m_update (); (void) fflush (stdout); for (i = 0; (child_id = vfork ()) == NOTOK && i < 5; i++) sleep (5); switch (child_id) { case NOTOK: advise (NULLCP, "unable to fork, so sending directly..."); case OK: vecp = 0; vec[vecp++] = invo_name; if (pushsw) vec[vecp++] = "-push"; if (arg) while (*arg) vec[vecp++] = *arg++; vec[vecp++] = file; vec[vecp] = NULL; execvp (sendproc, vec); fprintf (stderr, "unable to exec "); perror (sendproc); _exit (-1); default: if (pidwait (child_id, OK) == 0) done (0); return 1; }}/* */#ifdef MIME#include "../h/mhn.h"static int mhnfile (msgnam)char *msgnam;{ int state; char buf[BUFSIZ], name[NAMESZ]; FILE *fp; if ((fp = fopen (msgnam, "r")) == NULL) return 0; for (state = FLD;;) switch (state = m_getfld (state, name, buf, sizeof buf, fp)) { case FLD: case FLDPLUS: case FLDEOF: if (uprf (name, XXX_FIELD_PRF)) { (void) fclose (fp); return 0; } while (state == FLDPLUS) state = m_getfld (state, name, buf, sizeof buf, fp); break; case BODY: do { register char *bp; for (bp = buf; *bp; bp++) if (*bp != ' ' && *bp != '\t' && *bp != '\n') { (void) fclose (fp); return 1; } state = m_getfld (state, name, buf, sizeof buf, fp); } while (state == BODY); /* and fall... */ default: (void) fclose (fp); return 0; }}#endif /* MIME *//* */static struct swit sendswitches[] = {#define ALIASW 0 "alias aliasfile", 0,#define DEBUGSW 1 "debug", -5,#define ENCRSW 2 "encrypt",#ifndef TMA -7,#else /* TMA */ 0,#endif /* TMA */#define NENCRSW 3 "noencrypt",#ifndef TMA -9,#else /* TMA */ 0,#endif /* TMA */#define FILTSW 4 "filter filterfile", 0,#define NFILTSW 5 "nofilter", 0,#define FRMTSW 6 "format", 0,#define NFRMTSW 7 "noformat", 0,#define FORWSW 8 "forward", 0,#define NFORWSW 9 "noforward", 0,#define MIMESW 10 "mime", MIMEminc(-4),#define NMIMESW 11 "nomime", MIMEminc(-6),#define MSGDSW 12 "msgid", 0,#define NMSGDSW 13 "nomsgid", 0,#define SPSHSW 14 "push", 0,#define NSPSHSW 15 "nopush", 0,#define SPLITSW 16 "split seconds", MIMEminc(-5),#define UNIQSW 17 "unique", -6,#define NUNIQSW 18 "nounique", -8,#define VERBSW 19 "verbose", 0,#define NVERBSW 20 "noverbose", 0,#define WATCSW 21 "watch", 0,#define NWATCSW 22 "nowatch", 0,#define WIDTHSW 23 "width columns", 0,#define SHELPSW 24 "help", 4,#define MAILSW 25 "mail", -4,#define SAMLSW 26 "saml", -4,#define SSNDSW 27 "send", -4,#define SOMLSW 28 "soml", -4,#define CLIESW 29 "client host", -6,#define SERVSW 30 "server host", -6,#define SNOOPSW 31 "snoop", -5,#define SDRFSW 32 "draftfolder +folder", -6,#define SDRMSW 33 "draftmessage msg", -6,#define SNDRFSW 34 "nodraftfolder", -3, NULL, 0};/* */extern int debugsw; /* from sendsbr.c */extern int forwsw;extern int inplace;extern int pushsw;extern int splitsw;extern int unique;extern int verbsw;extern char *altmsg; /* .. */extern char *annotext;extern char *distfile;/* */static sendit (sp, arg, file, pushed)register char *sp, **arg, *file;int pushed;{#ifndef lint int distsw = 0;#endif /* not lint */ int vecp = 1; char *cp, buf[100], **ap, **argp, *arguments[MAXARGS], *vec[MAXARGS]; struct stat st;#ifdef UCI FILE *fp;#endif /* UCI */ if (arg) (void) copyip (arg, vec); if ((cp = m_find (sp)) != NULL) { ap = brkstring (cp = getcpy (cp), " ", "\n"); ap = copyip (ap, arguments); } else ap = arguments; if (arg) (void) copyip (vec, ap); argp = arguments; debugsw = 0, forwsw = 1, inplace = 0, unique = 0; altmsg = annotext = distfile = NULL; vec[vecp++] = "-library"; vec[vecp++] = getcpy (m_maildir (""));/* */ while (cp = *argp++) { if (*cp == '-') switch (smatch (++cp, sendswitches)) { case AMBIGSW: ambigsw (cp, sendswitches); return; case UNKWNSW: advise (NULLCP, "-%s unknown\n", cp); return; case SHELPSW: (void) sprintf (buf, "%s [switches]", sp); help (buf, sendswitches); return; case SPSHSW: pushed++; continue; case NSPSHSW: pushed = 0; continue; case SPLITSW: if (!(cp = *argp++) || sscanf (cp, "%d", &splitsw) != 1) { advise (NULLCP, "missing argument to %s", argp[-2]); return; } continue; case UNIQSW: unique++; continue; case NUNIQSW: unique = 0; continue; case FORWSW: forwsw++; continue; case NFORWSW: forwsw = 0; continue; case VERBSW: verbsw++; vec[vecp++] = --cp; continue; case NVERBSW: verbsw = 0; vec[vecp++] = --cp; continue; case DEBUGSW: debugsw++; /* fall */ case NFILTSW: case FRMTSW: case NFRMTSW: case MIMESW: case NMIMESW: case MSGDSW: case NMSGDSW: case WATCSW: case NWATCSW: case MAILSW: case SAMLSW: case SSNDSW: case SOMLSW: case ENCRSW: case NENCRSW: case SNOOPSW: vec[vecp++] = --cp; continue; case ALIASW: case FILTSW: case WIDTHSW: case CLIESW: case SERVSW: vec[vecp++] = --cp; if (!(cp = *argp++) || *cp == '-') { advise (NULLCP, "missing argument to %s", argp[-2]); return; } vec[vecp++] = cp; continue; case SDRFSW: case SDRMSW: if (!(cp = *argp++) || *cp == '-') { advise (NULLCP, "missing argument to %s", argp[-2]); return; } case SNDRFSW: continue; } advise (NULLCP, "usage: %s [switches]", sp); return; } if (cp = m_find ("Aliasfile")) { /* allow Aliasfile: profile entry */ char *dp = NULL; for (ap = brkstring(dp = getcpy(cp), " ", "\n"); ap && *ap; ap++) { vec[vecp++] = "-alias"; vec[vecp++] = *ap; } }/* */#ifdef TMA if ((cp = getenv ("KDS")) == NULL || *cp == NULL) if ((cp = m_find ("kdsproc")) && *cp) (void) m_putenv ("KDS", cp); if ((cp = getenv ("TMADB")) == NULL || *cp == NULL) if ((cp = m_find ("tmadb")) && *cp) (void) m_putenv ("TMADB", m_maildir (cp));#endif /* TMA */ if ((cp = getenv ("SIGNATURE")) == NULL || *cp == 0) if ((cp = m_find ("signature")) && *cp) (void) m_putenv ("SIGNATURE", cp);#ifdef UCI else { (void) sprintf (buf, "%s/.signature", mypath); if ((fp = fopen (buf, "r")) != NULL && fgets (buf, sizeof buf, fp) != NULL) { (void) fclose (fp); if (cp = index (buf, '\n')) *cp = 0; (void) m_putenv ("SIGNATURE", buf); } }#endif /* UCI */ if ((annotext = getenv ("mhannotate")) == NULL || *annotext == 0) annotext = NULL; if ((altmsg = getenv ("mhaltmsg")) == NULL || *altmsg == 0) altmsg = NULL; if (annotext && ((cp = getenv ("mhinplace")) != NULL && *cp != 0)) inplace = atoi (cp); if ((cp = getenv ("mhdist")) && *cp#ifndef lint && (distsw = atoi (cp))#endif /* not lint */ && altmsg) { vec[vecp++] = "-dist"; distfile = getcpy (m_scratch (altmsg, invo_name)); if (link (altmsg, distfile) == NOTOK) adios (distfile, "unable to link %s to", altmsg); } else distfile = NULL; if (altmsg == NULL || stat (altmsg, &st) == NOTOK) st.st_mtime = 0, st.st_dev = 0, st.st_ino = 0; if (pushsw = pushed) push (); vec[0] = r1bindex (postproc, '/'); closefds (3); if (sendsbr (vec, vecp, file, &st) == OK) done (0);}/* WHOM */static int whomfile (arg, file)register char **arg, *file;{ int pid; register int vecp; char *vec[MAXARGS]; m_update (); (void) fflush (stdout); switch (pid = vfork ()) { case NOTOK: advise ("fork", "unable to"); return 1; case OK: vecp = 0; vec[vecp++] = r1bindex (whomproc, '/'); vec[vecp++] = file; if (arg) while (*arg) vec[vecp++] = *arg++; vec[vecp] = NULL; execvp (whomproc, vec); fprintf (stderr, "unable to exec "); perror (whomproc); _exit (-1); /* NOTREACHED */ default: return (pidwait (pid, NOTOK) & 0377 ? 1 : 0); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -