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

📄 addrsbr.c

📁 早期freebsd实现
💻 C
📖 第 1 页 / 共 2 页
字号:
	    mp -> m_type = UUCPHOST;	    goto got_host;	}#endif /* not MMDFMTS */	if (up && uleq (dfhost, LocalName ())		&& uleq (up, host)) {/* uucpaddr@<uucp> [local] */	    if (pp = index (mbox, '!')) {		*pp++ = NULL;		mp -> m_host = getcpy (mbox);		mp -> m_mbox = getcpy (pp);	    }	    else {		mp -> m_host = getcpy (SystemName ());		mp -> m_mbox = getcpy (mbox);	    }	    mp -> m_type = UUCPHOST;	    goto got_host;	}#endif /* MF */	mp -> m_mbox = getcpy (mbox);	mp -> m_host = getcpy (host);    }    else {	if (pp = index (mbox, '!')) {	    *pp++ = '\0';	    mp -> m_mbox = getcpy (pp);	    mp -> m_host = getcpy (mbox);	    mp -> m_type = UUCPHOST;	}	else {	    mp -> m_nohost = 1;	    mp -> m_mbox = getcpy (mbox);#ifdef	DUMB	    if (route == NULL && dftype == LOCALHOST) {		mp -> m_host = NULLCP;		mp -> m_type = dftype;	    }	    else#endif /* DUMB */	    {		mp -> m_host = route ? NULLCP : getcpy (dfhost);		mp -> m_type = route ? NETHOST : dftype;	    }	}	goto got_host;    }/*  */    if (wanthost == AD_NHST)	mp -> m_type = uleq (LocalName (), mp -> m_host)	    ? LOCALHOST : NETHOST;#ifdef	DUMB    else	mp -> m_type = uleq (LocalName (), mp -> m_host) ? LOCALHOST		: NETHOST;#else /* not DUMB */    else	if (pp = OfficialName (mp -> m_host)) {    got_real_host: ;	    free (mp -> m_host);	    mp -> m_host = getcpy (pp);	    mp -> m_type = uleq (LocalName (), mp -> m_host) ? LOCALHOST		    : NETHOST;	}	else {	    if (dp = index (mp -> m_host, '.')) {		*dp = NULL;		if (pp = OfficialName (mp -> m_host))		    goto got_real_host;		*dp = '.';	    }	    mp -> m_type = BADHOST;	}#endif /* not DUMB */got_host: ;    if (route)	mp -> m_path = getcpy (route);    mp -> m_ingrp = ingrp;    if (grp)	mp -> m_gname = getcpy (grp);    if (note)	mp -> m_note = getcpy (note);#endif /* not BERK */    return mp;}/*  */void	mnfree (mp)register struct mailname *mp;{    if (!mp)	return;    if (mp -> m_text)	free (mp -> m_text);    if (mp -> m_pers)	free (mp -> m_pers);    if (mp -> m_mbox)	free (mp -> m_mbox);    if (mp -> m_host)	free (mp -> m_host);    if (mp -> m_path)	free (mp -> m_path);    if (mp -> m_gname)	free (mp -> m_gname);    if (mp -> m_note)	free (mp -> m_note);#ifdef	MHMTS    if (mp -> m_aka)	free (mp -> m_aka);#endif /* MHMTS */    free ((char *) mp);}/*  */char   *auxformat (mp, extras)register struct mailname   *mp;int	extras;{#ifndef	BERK#ifdef	MF    char   *up = UucpChan ();#endif /* MF */    static char addr[BUFSIZ];#endif /* not BERK */    static char buffer[BUFSIZ];#ifdef	BERK    /* this "if" is a crufty hack to handle "visible" aliases */    if (mp->m_pers && !extras)	(void) sprintf (buffer, "%s <%s>", mp->m_pers, mp->m_mbox);    else	(void) strcpy (buffer, mp -> m_text);#else /* not BERK */#ifdef	MF    if (up && mp -> m_type == UUCPHOST)#ifdef	MMDFMTS	(void) sprintf (addr, "%s!%s%%%s@%s", mp -> m_host, mp -> m_mbox,		up, LocalName ());#else /* not MMDFMTS */	(void) sprintf (addr, "%s@%s.%s", mp -> m_mbox, mp -> m_host, up);#endif /* not MMDFMTS */    else #endif /* MF */#ifdef	DUMB	if (mp -> m_nohost)	    (void) strcpy (addr, mp -> m_mbox ? mp -> m_mbox : "");	else#endif /* DUMB */#ifndef	BANG	if (mp -> m_type != UUCPHOST)	    (void) sprintf (addr, mp -> m_host ? "%s%s@%s" : "%s%s",		mp -> m_path ? mp -> m_path : "", mp -> m_mbox, mp -> m_host);	else#endif /* not BANG */	    (void) sprintf (addr, "%s!%s", mp -> m_host, mp -> m_mbox);    if (!extras)	return addr;    if (mp -> m_pers || mp -> m_path)	if (mp -> m_note)	    (void) sprintf (buffer, "%s %s <%s>",		    legal_person (mp -> m_pers ? mp -> m_pers : mp -> m_mbox),		    mp -> m_note, addr);	else	    (void) sprintf (buffer, "%s <%s>",		    legal_person (mp -> m_pers ? mp -> m_pers : mp -> m_mbox),		    addr);    else	if (mp -> m_note)	    (void) sprintf (buffer, "%s %s", addr, mp -> m_note);	else	    (void) strcpy (buffer, addr);#endif /* not BERK */    return buffer;}/*  */#if	defined(BERK) || (defined(DUMB) && !defined(MMDFMTS) && !defined(SMTP))#define	REALLYDUMB#else#undef	REALLYDUMB#endifchar   *adrsprintf (local, domain)char   *local,       *domain;{    static char addr[BUFSIZ];    if (local == NULL)#ifdef	REALLYDUMB	return getusr ();    else#endif /* REALLYDUMB */	local = getusr ();    if (domain == NULL)#ifdef	REALLYDUMB	return local;    else#endif /* REALLYDUMB */	domain = LocalName ();#ifndef	BANG    (void) sprintf (addr, "%s@%s", local, domain);#else /* BANG */    (void) sprintf (addr, "%s!%s", domain, local);#endif /* BANG */    return addr;}/*  */#define	W_NIL	0x0000#define	W_MBEG	0x0001#define	W_MEND	0x0002#define	W_MBOX	(W_MBEG | W_MEND)#define	W_HBEG	0x0004#define	W_HEND	0x0008#define	W_HOST	(W_HBEG | W_HEND)#define	WBITS	"\020\01MBEG\02MEND\03HBEG\04HEND"int	ismymbox (np)register struct mailname *np;{    int     oops;    register int    len,                    i;    register char  *cp;#ifndef	BERK    register char  *pp;    char    buffer[BUFSIZ];#endif /* not BERK */    register struct mailname   *mp;    static char *am = NULL;    static struct mailname  mq={NULL};    /* if this is the first call, init. alternate mailboxes list */    if (am == NULL) {	mq.m_next = NULL;	mq.m_mbox = getusr ();	if ((am = m_find ("alternate-mailboxes")) == NULL)	    am = getusr ();	else {	    mp = &mq;	    oops = 0;	    while (cp = getname (am))		if ((mp -> m_next = getm (cp, NULLCP, 0, AD_NAME, NULLCP))			== NULL)		    admonish (NULLCP, "illegal address: %s", cp), oops++;		else {		    mp = mp -> m_next;		    mp -> m_type = W_NIL;#ifdef	BERK		    /* check for wildcards on the mailbox name and		       set m_type accordingly. */		    mp -> m_ingrp = strlen (mp -> m_mbox);		    if (*(mp -> m_mbox) == '*') {			mp -> m_type |= W_MBEG;			mp -> m_mbox++;			--mp -> m_ingrp;		    }		    if (mp -> m_mbox[mp -> m_ingrp - 1] == '*') {			mp -> m_type |= W_MEND;			mp -> m_ingrp--;			mp -> m_mbox[mp -> m_ingrp] = 0;		    }#else /* not BERK */		    /* owing to screwy munging, wildcarding is a great idea		       even under #ifndef BERK, so... */		    mp -> m_type = W_NIL;		    if (*mp -> m_mbox == '*')			mp -> m_type |= W_MBEG, mp -> m_mbox++;		    if (*(cp = mp -> m_mbox + strlen (mp -> m_mbox) - 1)			    == '*')			mp -> m_type |= W_MEND, *cp = '\0';		    if (mp -> m_host) {			if (*mp -> m_host == '*')			    mp -> m_type |= W_HBEG, mp -> m_host++;			if (*(cp = mp -> m_host + strlen (mp -> m_host) - 1)				== '*')			    mp -> m_type |= W_HEND, *cp = '\0';		    }		    if ((cp = getenv ("MHWDEBUG")) && *cp)			fprintf (stderr, "mbox=\"%s\" host=\"%s\" %s\n",			    mp -> m_mbox, mp -> m_host,			    sprintb (buffer, (unsigned) mp -> m_type, WBITS));#endif /* not BERK */		}	    if (oops)		advise (NULLCP, "please fix the %s: entry in your %s file",			"alternate-mailboxes", mh_profile);	}    }    if (np == NULL) /* XXX */	return 0;    #ifdef	BERK    cp = np -> m_mbox;    if (strcmp (cp, mq.m_mbox) == 0)	return 1;#else /* not BERK */    switch (np -> m_type) {	case NETHOST:	    len = strlen (cp = LocalName ());	    if (!uprf (np -> m_host, cp) || np -> m_host[len] != '.')		break;	    goto local_test;	case UUCPHOST:	    if (!uleq (np -> m_host, SystemName ()))		break;		/* fall */	case LOCALHOST:local_test: ;	    if (uleq (np -> m_mbox, mq.m_mbox))		return 1;	    break;	default:	    break;    }#endif /* not BERK */#ifdef	BERK    len = strlen (cp);    for (mp = &mq; mp = mp -> m_next;)	if (len >= mp -> m_ingrp)	    switch (mp -> m_type) {		case W_NIL: 	/* no wildcards */		    if (strcmp (cp, mp -> m_mbox) == 0)			return 1;		    break;		case W_MBEG: 	/* wildcard at beginning */		    if (strcmp (&cp[len - mp -> m_ingrp], mp -> m_mbox) == 0)			return 1;		    break;		case W_MEND: 	/* wildcard at end */		    if (strncmp (cp, mp -> m_mbox, mp -> m_ingrp) == 0)			return 1;		    break;		case W_MBEG | W_MEND: /* wildcard at beginning & end */		    for (i = 0; i <= len - mp -> m_ingrp; i++)			if (strncmp (&cp[i], mp -> m_mbox, mp -> m_ingrp) == 0)			    return 1;	    }#else /* not BERK */    for (mp = &mq; mp = mp -> m_next;) {	if (np -> m_mbox == NULL)	    continue;	if ((len = strlen (cp = np -> m_mbox))		< (i = strlen (pp = mp -> m_mbox)))	    continue;	switch (mp -> m_type & W_MBOX) {	    case W_NIL: 		if (!uleq (cp, pp))		    continue;		break;	    case W_MBEG: 		if (!uleq (cp + len - i, pp))		    continue;		break;	    case W_MEND: 		if (!uprf (cp, pp))		    continue;		break;	    case W_MBEG | W_MEND: 		if (stringdex (pp, cp) < 0)		    continue;		break;	}	if (mp -> m_nohost)	    return 1;	if (np -> m_host == NULL)	    continue;	if ((len = strlen (cp = np -> m_host))		< (i = strlen (pp = mp -> m_host)))	    continue;	switch (mp -> m_type & W_HOST) {	    case W_NIL: 		if (!uleq (cp, pp))		    continue;		break;	    case W_HBEG: 		if (!uleq (cp + len - i, pp))		    continue;		break;	    case W_HEND: 		if (!uprf (cp, pp))		    continue;		break;	    case W_HBEG | W_HEND: 		if (stringdex (pp, cp) < 0)		    continue;		break;	}	return 1;    }#endif /* not BERK */    return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -