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