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

📄 err.c

📁 操作系统SunOS 4.1.3版本的源码
💻 C
字号:
/* * Copyright (c) 1988 Regents of the University of California. * All rights reserved. * * Redistribution and use in source and binary forms are permitted * provided that this notice is preserved and that due credit is given * to the University of California at Berkeley. The name of the University * may not be used to endorse or promote products derived from this * software without specific prior written permission. This software * is provided ``as is'' without express or implied warranty. * *  Sendmail *  Copyright (c) 1983  Eric P. Allman *  Berkeley, California */# include "sendmail.h"# include <errno.h>SCCSID(@(#)err.c 1.1 92/07/30 SMI); /* from UCB 5.8 3/13/88 *//***  SYSERR -- Print error message.****	Prints an error message via printf to the diagnostic**	output.  If LOG is defined, it logs it also.****	Parameters:**		f -- the format string**		a, b, c, d, e -- parameters****	Returns:**		none**		Through TopFrame if QuickAbort is set.****	Side Effects:**		increments Errors.**		sets ExitStat.*/# ifdef lintint	sys_nerr;char	*sys_errlist[];# endif lintchar	MsgBuf[BUFSIZ*2];	/* text of most recent message *//*VARARGS1*/syserr(fmt, a, b, c, d, e)	char *fmt;{	register char *p;	int olderrno = errno;	extern char Arpa_PSyserr[];	extern char Arpa_TSyserr[];	/* format and output the error message */	if (olderrno == 0)		p = Arpa_PSyserr;	else		p = Arpa_TSyserr;	fmtmsg(MsgBuf, (char *) NULL, p, olderrno, fmt, a, b, c, d, e);	puterrmsg(MsgBuf);	/* determine exit status if not already set */	if (ExitStat == EX_OK)	{		if (olderrno == 0)			ExitStat = EX_SOFTWARE;		else			ExitStat = EX_OSERR;	}# ifdef LOG	if (LogLevel > 0)		syslog(LOG_CRIT, "%s: SYSERR: %s",			CurEnv->e_id == NULL ? "NOQUEUE" : CurEnv->e_id,			&MsgBuf[4]);# endif LOG	errno = 0;	if (QuickAbort)		longjmp(TopFrame, 2);}/***  USRERR -- Signal user error.****	This is much like syserr except it is for user errors.****	Parameters:**		fmt, a, b, c, d -- printf strings****	Returns:**		none**		Through TopFrame if QuickAbort is set.****	Side Effects:**		increments Errors.*//*VARARGS1*/usrerr(fmt, a, b, c, d, e)	char *fmt;{	extern char SuprErrs;	extern char Arpa_Usrerr[];	extern int errno;	if (SuprErrs)		return;	fmtmsg(MsgBuf, CurEnv->e_to, Arpa_Usrerr, errno, fmt, a, b, c, d, e);	puterrmsg(MsgBuf);	if (QuickAbort)		longjmp(TopFrame, 1);}/***  MESSAGE -- print message (not necessarily an error)****	Parameters:**		num -- the default ARPANET error number (in ascii)**		msg -- the message (printf fmt) -- if it begins**			with a digit, this number overrides num.**		a, b, c, d, e -- printf arguments****	Returns:**		none****	Side Effects:**		none.*//*VARARGS2*/message(num, msg, a, b, c, d, e)	register char *num;	register char *msg;{	errno = 0;	fmtmsg(MsgBuf, CurEnv->e_to, num, 0, msg, a, b, c, d, e);	putmsg(MsgBuf, FALSE);}/***  NMESSAGE -- print message (not necessarily an error)****	Just like "message" except it never puts the to... tag on.****	Parameters:**		num -- the default ARPANET error number (in ascii)**		msg -- the message (printf fmt) -- if it begins**			with three digits, this number overrides num.**		a, b, c, d, e -- printf arguments****	Returns:**		none****	Side Effects:**		none.*//*VARARGS2*/nmessage(num, msg, a, b, c, d, e)	register char *num;	register char *msg;{	errno = 0;	fmtmsg(MsgBuf, (char *) NULL, num, 0, msg, a, b, c, d, e);	putmsg(MsgBuf, FALSE);}/***  PUTMSG -- output error message to transcript and channel****	Parameters:**		msg -- message to output (in SMTP format).**		holdmsg -- if TRUE, don't output a copy of the message to**			our output channel.****	Returns:**		none.****	Side Effects:**		Outputs msg to the transcript.**		If appropriate, outputs it to the channel.**		Deletes SMTP reply code number as appropriate.*/putmsg(msg, holdmsg)	char *msg;	bool holdmsg;{	/* output to transcript if serious */	if (CurEnv->e_xfp != NULL && (msg[0] == '4' || msg[0] == '5'))		fprintf(CurEnv->e_xfp, "%s\n", msg);	/* output to channel if appropriate */	if (!holdmsg && (Verbose || msg[0] != '0'))	{		(void) fflush(stdout);		if (OpMode == MD_SMTP || OpMode == MD_ARPAFTP)			fprintf(OutChannel, "%s\r\n", msg);		else			fprintf(OutChannel, "%s\n", &msg[4]);		(void) fflush(OutChannel);	}}/***  PUTERRMSG -- like putmsg, but does special processing for error messages****	Parameters:**		msg -- the message to output.****	Returns:**		none.****	Side Effects:**		Sets the fatal error bit in the envelope as appropriate.*/puterrmsg(msg)	char *msg;{	/* output the message as usual */	putmsg(msg, HoldErrs);	/* signal the error */	Errors++;	if (msg[0] == '5')		CurEnv->e_flags |= EF_FATALERRS;}/***  FMTMSG -- format a message into buffer.****	Parameters:**		eb -- error buffer to get result.**		to -- the recipient tag for this message.**		num -- arpanet error number.**		en -- the error number to display.**		fmt -- format of string.**		a, b, c, d, e -- arguments.****	Returns:**		none.****	Side Effects:**		none.*//*VARARGS5*/staticfmtmsg(eb, to, num, eno, fmt, a, b, c, d, e)	register char *eb;	char *to;	char *num;	int eno;	char *fmt;{	char del;	/* output the reply code */	if (isdigit(fmt[0]) && isdigit(fmt[1]) && isdigit(fmt[2]))	{		num = fmt;		fmt += 4;	}	if (num[3] == '-')		del = '-';	else		del = ' ';	(void) sprintf(eb, "%3.3s%c", num, del);	eb += 4;	/* output the file name and line number */	if (FileName != NULL)	{		(void) sprintf(eb, "%s: line %d: ", FileName, LineNumber);		eb += strlen(eb);	}	/* output the "to" person */	if (to != NULL && to[0] != '\0')	{		(void) sprintf(eb, "%s... ", to);		while (*eb != '\0')			*eb++ &= 0177;	}	/* output the message */	(void) sprintf(eb, fmt, a, b, c, d, e);	while (*eb != '\0')		*eb++ &= 0177;	/* output the error code, if any */	if (eno != 0)	{		extern char *errstring();		(void) sprintf(eb, ": %s", errstring(eno));		eb += strlen(eb);	}}/***  ERRSTRING -- return string description of error code****	Parameters:**		errno -- the error number to translate****	Returns:**		A string description of errno.****	Side Effects:**		none.*/char *errstring(errno)	int errno;{	extern char *sys_errlist[];	extern int sys_nerr;	static char buf[100];# ifdef SMTP	extern char *SmtpPhase;# endif SMTP# ifdef DAEMON# ifdef VMUNIX	/*	**  Handle special network error codes.	**	**	These are 4.2/4.3bsd specific; they should be in daemon.c.	*/	switch (errno)	{	  case ETIMEDOUT:	  case ECONNRESET:		(void) strcpy(buf, sys_errlist[errno]);		if (SmtpPhase != NULL)		{			(void) strcat(buf, " during ");			(void) strcat(buf, SmtpPhase);		}		if (CurHostName != NULL)		{			(void) strcat(buf, " with ");			(void) strcat(buf, CurHostName);		}		return (buf);	  case EHOSTDOWN:		if (CurHostName == NULL)			break;		(void) sprintf(buf, "Host %s is down", CurHostName);		return (buf);	  case ECONNREFUSED:		if (CurHostName == NULL)			break;		(void) sprintf(buf, "Connection refused by %s", CurHostName);		return (buf);	  case ENAMESER:		if (CurHostName == NULL)			break;		(void) sprintf(buf, "Name Server Failure for %s", CurHostName);		return (buf);	}# endif VMUNIX# endif DAEMON	if (errno > 0 && errno < sys_nerr)		return (sys_errlist[errno]);	(void) sprintf(buf, "Error %d", errno);	return (buf);}

⌨️ 快捷键说明

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