summaryrefslogtreecommitdiffstats
path: root/contrib/ipfilter/lib/ipf_perror.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/ipfilter/lib/ipf_perror.c')
-rw-r--r--contrib/ipfilter/lib/ipf_perror.c47
1 files changed, 47 insertions, 0 deletions
diff --git a/contrib/ipfilter/lib/ipf_perror.c b/contrib/ipfilter/lib/ipf_perror.c
new file mode 100644
index 0000000..85a1b1d
--- /dev/null
+++ b/contrib/ipfilter/lib/ipf_perror.c
@@ -0,0 +1,47 @@
+#include <fcntl.h>
+#include <sys/ioctl.h>
+#include "ipf.h"
+
+void
+ipf_perror(err, string)
+ int err;
+ char *string;
+{
+ if (err == 0)
+ fprintf(stderr, "%s\n", string);
+ else
+ fprintf(stderr, "%s %s\n", string, ipf_strerror(err));
+}
+
+int
+ipf_perror_fd(fd, iocfunc, string)
+ int fd;
+ ioctlfunc_t iocfunc;
+ char *string;
+{
+ int save;
+ int realerr;
+
+ save = errno;
+ if ((*iocfunc)(fd, SIOCIPFINTERROR, &realerr) == -1)
+ realerr = 0;
+
+ errno = save;
+ fprintf(stderr, "%d:", realerr);
+ ipf_perror(realerr, string);
+ return realerr ? realerr : save;
+
+}
+
+void
+ipferror(fd, msg)
+ int fd;
+ char *msg;
+{
+ if (fd >= 0) {
+ ipf_perror_fd(fd, ioctl, msg);
+ } else {
+ fprintf(stderr, "0:");
+ perror(msg);
+ }
+}
OpenPOWER on IntegriCloud