xref: /original-bsd/usr.sbin/sendmail/src/err.c (revision d25e1985)
1 # include <stdio.h>
2 # include "dlvrmail.h"
3 # ifdef LOG
4 # include <log.h>
5 # endif LOG
6 
7 static char	SccsId[] = "@(#)err.c	1.3	08/02/80";
8 
9 /*
10 **  ERR -- Print error message.
11 **
12 **	Prints an error message via printf to the diagnostic
13 **	output.  If LOG is defined, it logs it also.
14 **
15 **	Parameters:
16 **		f -- the format string
17 **		a, b, c, d, e -- parameters
18 **
19 **	Returns:
20 **		-1 always
21 **
22 **	Side Effects:
23 **		Sets Error.
24 **		Sets ExitStat.
25 */
26 
27 /*VARARGS1*/
28 syserr(fmt, a, b, c, d, e)
29 	char *fmt;
30 {
31 	extern int errno;
32 	static char errbuf[MAXLINE+1];
33 	register char *p;
34 	extern char *sys_errlist[];
35 	extern int sys_nerr;
36 
37 	sprintf(errbuf, fmt, a, b, c, d, e);
38 	if (errno != 0)
39 	{
40 		p = &errbuf[strlen(errbuf)];
41 		if (errno < sys_nerr && errno > 0)
42 			sprintf(p, ": %s", sys_errlist[errno]);
43 		else
44 			sprintf(p, ": error %d", errno);
45 	}
46 	printf("delivermail: %s\n", errbuf);
47 	Error++;
48 
49 	/* determine exit status if not already set */
50 	if (ExitStat == EX_OK)
51 	{
52 		if (errno == 0)
53 			ExitStat = EX_SOFTWARE;
54 		else
55 			ExitStat = EX_UNAVAIL;
56 	}
57 
58 # ifdef LOG
59 	logmsg(LOG_ERR, "%s->%s: %s", From.q_paddr, To, errbuf);
60 # endif LOG
61 	errno = 0;
62 	return (-1);
63 }
64 /*
65 **  USRERR -- Signal user error.
66 **
67 **	This is much like syserr except it is for user errors.
68 **
69 **	Parameters:
70 **		fmt, a, b, c, d -- printf strings
71 **
72 **	Returns:
73 **		-1
74 **
75 **	Side Effects:
76 **		sets Error.
77 */
78 
79 /*VARARGS1*/
80 usrerr(fmt, a, b, c, d, e)
81 	char *fmt;
82 {
83 	extern char SuprErrs;
84 
85 	if (SuprErrs)
86 		return;
87 
88 	Error++;
89 	if (To != NULL)
90 		printf("%s... ", To);
91 	printf(fmt, a, b, c, d, e);
92 	printf("\n");
93 	return (-1);
94 }
95