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