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