From 507f4e664d34731200d40ea92547d1743e913651 Mon Sep 17 00:00:00 2001 From: Alexander Zubkov Date: Sun, 12 Dec 2021 17:45:39 +0100 Subject: [PATCH] error() function is glibc-specific, make own implementation --- lib.c | 20 +++++++++++++++++--- lib.h | 6 ++++++ plageq.c | 5 +++-- plagmax.c | 5 +++-- 4 files changed, 29 insertions(+), 7 deletions(-) diff --git a/lib.c b/lib.c index fbca71d..fa512eb 100644 --- a/lib.c +++ b/lib.c @@ -2,12 +2,26 @@ #include #include #include -#include #include +#include #include "config.h" #include "lib.h" +const char *program_invocation_name; + +void error(int status, int errnum, const char *fmt, ...) { + va_list ap; + va_start(ap, fmt); + fflush(stdout); + fprintf(stderr, "%s: ", program_invocation_name); + vfprintf(stderr, fmt, ap); + if (errnum) fprintf(stderr, ": %s", strerror(errnum)); + fprintf(stderr, "\n"); + if(status) exit(status); + va_end(ap); +} + void bits2ip4(bits b, mask_t m, char *s, int size) { // convert bits to in4_addr struct in4_addr ip; @@ -62,7 +76,7 @@ void ip42bits(char *s, bits b, mask_t *m) { } // convert ip to binary struct in4_addr ip; - if (!inet_pton(AF_INET, s, &ip)) error(1, errno, "ip42bits"); + if (inet_pton(AF_INET, s, &ip) < 1) error(1, errno, "ip42bits"); // convert binary ip to bits for (int i = 0; i < 4; ++i) { for (int j = 0; j < 8; ++j) { @@ -87,7 +101,7 @@ void ip62bits(char *s, bits b, mask_t *m) { } // convert ip to binary struct in6_addr ip; - if (!inet_pton(AF_INET6, s, &ip)) error(1, errno, "ip62bits"); + if (inet_pton(AF_INET6, s, &ip) < 1) error(1, errno, "ip62bits"); // convert binary ip to bits for (int i = 0; i < 16; ++i) { for (int j = 0; j < 8; ++j) { diff --git a/lib.h b/lib.h index 3a38514..60a39c9 100644 --- a/lib.h +++ b/lib.h @@ -20,4 +20,10 @@ void ip62bits(char *s, bits b, mask_t *m); #define MIN(a,b) (((a)<(b))?(a):(b)) #define MAX(a,b) (((a)>(b))?(a):(b)) +extern const char *program_invocation_name; + +#define init_err() { program_invocation_name = argv[0]; } + +void error(int status, int errnum, const char *fmt, ...); + #endif /* !LIB_H */ diff --git a/plageq.c b/plageq.c index a743a5b..5feec61 100644 --- a/plageq.c +++ b/plageq.c @@ -1,7 +1,6 @@ #include #include #include -#include #include #include "config.h" @@ -191,7 +190,9 @@ double nodes2mb(pos_t n) { return sizeof(struct node) * (double)n / (double)(1 << 20); } -int main(void) { +int main(int argc, const char *argv[]) { + init_err(); + bit_t b[IPMAXLEN]; mask_t m; char s[BUFLEN]; diff --git a/plagmax.c b/plagmax.c index 95f0ed5..9c8d699 100644 --- a/plagmax.c +++ b/plagmax.c @@ -1,7 +1,6 @@ #include #include #include -#include #include #include "config.h" @@ -173,7 +172,9 @@ double nodes2mb(pos_t n) { return sizeof(struct node) * (double)n / (double)(1 << 20); } -int main(void) { +int main(int argc, const char *argv[]) { + init_err(); + bit_t b[IPMAXLEN]; mask_t m; char s[BUFLEN];