1254219Scy#include <fcntl.h> 2254219Scy#include <sys/ioctl.h> 3254219Scy#include "ipf.h" 4254219Scy 5254219Scyvoid 6254219Scyipf_perror(err, string) 7254219Scy int err; 8254219Scy char *string; 9254219Scy{ 10254219Scy if (err == 0) 11254219Scy fprintf(stderr, "%s\n", string); 12254219Scy else 13254219Scy fprintf(stderr, "%s %s\n", string, ipf_strerror(err)); 14254219Scy} 15254219Scy 16254219Scyint 17254219Scyipf_perror_fd(fd, iocfunc, string) 18254219Scy int fd; 19254219Scy ioctlfunc_t iocfunc; 20254219Scy char *string; 21254219Scy{ 22254219Scy int save; 23254219Scy int realerr; 24254219Scy 25254219Scy save = errno; 26254219Scy if ((*iocfunc)(fd, SIOCIPFINTERROR, &realerr) == -1) 27254219Scy realerr = 0; 28254219Scy 29254219Scy errno = save; 30254219Scy fprintf(stderr, "%d:", realerr); 31254219Scy ipf_perror(realerr, string); 32254219Scy return realerr ? realerr : save; 33254219Scy 34254219Scy} 35254219Scy 36254219Scyvoid 37254219Scyipferror(fd, msg) 38254219Scy int fd; 39254219Scy char *msg; 40254219Scy{ 41254219Scy if (fd >= 0) { 42254219Scy ipf_perror_fd(fd, ioctl, msg); 43254219Scy } else { 44254219Scy fprintf(stderr, "0:"); 45254219Scy perror(msg); 46254219Scy } 47254219Scy} 48