diff options
Diffstat (limited to 'sbin/ipf/libipf/ipf_perror.c')
| -rw-r--r-- | sbin/ipf/libipf/ipf_perror.c | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/sbin/ipf/libipf/ipf_perror.c b/sbin/ipf/libipf/ipf_perror.c new file mode 100644 index 000000000000..2c612afe2be3 --- /dev/null +++ b/sbin/ipf/libipf/ipf_perror.c @@ -0,0 +1,40 @@ +#include <fcntl.h> +#include <sys/ioctl.h> +#include "ipf.h" + +void +ipf_perror(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( 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(int fd, char *msg) +{ + if (fd >= 0) { + ipf_perror_fd(fd, ioctl, msg); + } else { + fprintf(stderr, "0:"); + perror(msg); + } +} |
