xref: /netbsd-src/external/bsd/ipf/dist/lib/ipf_perror.c (revision c9d5dc6c77aa32fd07899a7a63638e95ffa433dd)
1*c9d5dc6cSdarrenr /*	$NetBSD: ipf_perror.c,v 1.1.1.2 2012/07/22 13:44:39 darrenr Exp $	*/
2bc4097aaSchristos 
3*c9d5dc6cSdarrenr #include <fcntl.h>
4*c9d5dc6cSdarrenr #include <sys/ioctl.h>
5bc4097aaSchristos #include "ipf.h"
6bc4097aaSchristos 
7bc4097aaSchristos void
ipf_perror(err,string)8bc4097aaSchristos ipf_perror(err, string)
9bc4097aaSchristos 	int err;
10bc4097aaSchristos 	char *string;
11bc4097aaSchristos {
12bc4097aaSchristos 	if (err == 0)
13bc4097aaSchristos 		fprintf(stderr, "%s\n", string);
14bc4097aaSchristos 	else
15bc4097aaSchristos 		fprintf(stderr, "%s %s\n", string, ipf_strerror(err));
16bc4097aaSchristos }
17*c9d5dc6cSdarrenr 
18*c9d5dc6cSdarrenr int
ipf_perror_fd(fd,iocfunc,string)19*c9d5dc6cSdarrenr ipf_perror_fd(fd, iocfunc, string)
20*c9d5dc6cSdarrenr 	int fd;
21*c9d5dc6cSdarrenr 	ioctlfunc_t iocfunc;
22*c9d5dc6cSdarrenr 	char *string;
23*c9d5dc6cSdarrenr {
24*c9d5dc6cSdarrenr 	int save;
25*c9d5dc6cSdarrenr 	int realerr;
26*c9d5dc6cSdarrenr 
27*c9d5dc6cSdarrenr 	save = errno;
28*c9d5dc6cSdarrenr 	if ((*iocfunc)(fd, SIOCIPFINTERROR, &realerr) == -1)
29*c9d5dc6cSdarrenr 		realerr = 0;
30*c9d5dc6cSdarrenr 
31*c9d5dc6cSdarrenr 	errno = save;
32*c9d5dc6cSdarrenr 	fprintf(stderr, "%d:", realerr);
33*c9d5dc6cSdarrenr 	ipf_perror(realerr, string);
34*c9d5dc6cSdarrenr 	return realerr ? realerr : save;
35*c9d5dc6cSdarrenr 
36*c9d5dc6cSdarrenr }
37*c9d5dc6cSdarrenr 
38*c9d5dc6cSdarrenr void
ipferror(fd,msg)39*c9d5dc6cSdarrenr ipferror(fd, msg)
40*c9d5dc6cSdarrenr 	int fd;
41*c9d5dc6cSdarrenr 	char *msg;
42*c9d5dc6cSdarrenr {
43*c9d5dc6cSdarrenr 	if (fd >= 0) {
44*c9d5dc6cSdarrenr 		ipf_perror_fd(fd, ioctl, msg);
45*c9d5dc6cSdarrenr 	} else {
46*c9d5dc6cSdarrenr 		fprintf(stderr, "0:");
47*c9d5dc6cSdarrenr 		perror(msg);
48*c9d5dc6cSdarrenr 	}
49*c9d5dc6cSdarrenr }
50