⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 whatnowsbr.c

📁 早期freebsd实现
💻 C
📖 第 1 页 / 共 2 页
字号:
    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 + -