From 8b94548472d4d37a5b1aadbbb3dc3938cec10624 Mon Sep 17 00:00:00 2001 From: 0x1eef <0x1eef@protonmail.com> Date: Mon, 4 Mar 2024 23:54:35 -0300 Subject: [PATCH] Utilize `stdbool.h` --- README.md | 8 ++++---- include/isinetaddr.h | 7 ++++--- src/iscidraddr4.c | 9 +++++---- src/isinetaddr4.c | 15 ++++++++------- src/isinetaddr6.c | 22 +++++++++++++--------- 5 files changed, 34 insertions(+), 27 deletions(-) diff --git a/README.md b/README.md index 63b7e11..49a4afd 100644 --- a/README.md +++ b/README.md @@ -10,8 +10,8 @@ extend [testcases](test/) that help verify safety and correctness. ### IPv4 The following example demonstrates the `isinetaddr4` function with -both valid and invalid inputs. The `isinetaddr4` function returns 1 -when the input given is a valid IPv4 address, and otherwise returns 0. +both valid and invalid inputs. The `isinetaddr4` function returns `true` +when the input given is a valid IPv4 address, and otherwise returns `false`. ```C #include @@ -121,8 +121,8 @@ foobar is an invalid IPv4 address. ### IPv6 The following example demonstrates the `isinetaddr6` function with -both valid and invalid inputs. The `isinetaddr6` function returns 1 -when the input given is a valid IPv6 address, and otherwise returns 0. +both valid and invalid inputs. The `isinetaddr6` function returns `true` +when the input given is a valid IPv6 address, and otherwise returns `false`. ```C #include diff --git a/include/isinetaddr.h b/include/isinetaddr.h index c27a890..a20659c 100644 --- a/include/isinetaddr.h +++ b/include/isinetaddr.h @@ -1,4 +1,5 @@ #pragma once -int isinetaddr4(const char *str); -int iscidraddr4(const char *str); -int isinetaddr6(const char *str); +#include +bool isinetaddr4(const char *str); +bool iscidraddr4(const char *str); +bool isinetaddr6(const char *str); diff --git a/src/iscidraddr4.c b/src/iscidraddr4.c index 49ec68b..806b6ee 100644 --- a/src/iscidraddr4.c +++ b/src/iscidraddr4.c @@ -2,10 +2,11 @@ #include #include #include +#include -static int in_range(char buf[4], int min, int max); +static bool in_range(char buf[4], int min, int max); -int +bool iscidraddr4(const char *str) { size_t offset = 0; @@ -29,14 +30,14 @@ iscidraddr4(const char *str) } } -static int +static bool in_range(char buf[4], int min, int max) { char *err; long r; errno = 0; if (strnlen(buf, 1) == 0) { - return 0; + return false; } else { r = strtol(buf, &err, 10); return *err == '\0' && errno == 0 && (r >= min && r <= max); diff --git a/src/isinetaddr4.c b/src/isinetaddr4.c index e5d604e..20b955e 100644 --- a/src/isinetaddr4.c +++ b/src/isinetaddr4.c @@ -1,6 +1,7 @@ #include #include #include +#include #include static const int MAX_BUFLEN = 3; @@ -8,9 +9,9 @@ static const int MAX_OCTETS = 4; static const int MAX_DIGITLEN = 12; static const int MAX_STRLEN = 16; static const char SEP = '.'; -static int within_range(char buf[MAX_BUFLEN]); +static bool within_range(char buf[MAX_BUFLEN]); -int +bool isinetaddr4(const char *str) { char buf[MAX_BUFLEN + 1]; @@ -21,31 +22,31 @@ isinetaddr4(const char *str) for (size_t i = 0; i < len; i++) { if (str[i] == SEP) { if (octets == MAX_OCTETS || buflen == 0) { - return 0; + return false; } else { buflen = 0; bzero(buf, MAX_BUFLEN); } } else if (isdigit(str[i])) { if (buflen == MAX_BUFLEN) { - return 0; + return false; } else { buf[buflen++] = str[i]; digits++; if (!within_range(buf)) { - return 0; + return false; } else if (str[i-1] == SEP) { octets++; } } } else { - return 0; + return false; } } return octets == MAX_OCTETS && digits <= MAX_DIGITLEN; } -static int +static bool within_range(char buf[MAX_BUFLEN]) { int n = atoi(buf); diff --git a/src/isinetaddr6.c b/src/isinetaddr6.c index 218339f..036b48d 100644 --- a/src/isinetaddr6.c +++ b/src/isinetaddr6.c @@ -1,6 +1,7 @@ #include #include #include +#include #include static const int MAX_DIGITLEN = 4; @@ -9,24 +10,27 @@ static const int MAX_HEXDIGITS = 32; static const int MAX_STRLEN = 40; static const char SEP = ':'; -static int has_consecutive_chars(const char *str, char c, int n); +static bool has_consecutive_chars(const char *str, char c, int n); static char* expand(const char *str, size_t strlen, char *new_str, size_t headlen); static size_t get_offset(char *tail); -int +bool isinetaddr6(const char *str) { int hextets = 1, digitlen = 0, hexdigits = 0; size_t len = (str == NULL ? 0 : strnlen(str, MAX_STRLEN)); + if (len == 0) { + return false; + } else if (strncasecmp(str, "::ffff", 6) == 0) { + return isinetaddr4(&str[7]); + } for (size_t i = 0; i < len; i++) { if (has_consecutive_chars(&str[i], SEP, 3)) { - return 0; - } else if (i == 0 && strncasecmp(str, "::ffff", 6) == 0) { - return isinetaddr4(&str[7]); + return false; } else if (has_consecutive_chars(&str[i], SEP, 2)) { if (i == 0 && isinetaddr4(&str[3])) { - return 1; + return true; } else { char new_str[MAX_STRLEN]; return isinetaddr6(expand(str, len, new_str, i)); @@ -37,18 +41,18 @@ isinetaddr6(const char *str) digitlen++; hexdigits++; if (digitlen > MAX_DIGITLEN) { - return 0; + return false; } else if (str[i-1] == SEP) { hextets++; } } else { - return 0; + return false; } } return hextets == MAX_HEXTETS && hexdigits <= MAX_HEXDIGITS; } -static int +static bool has_consecutive_chars(const char *str, char c, int n) { for (int i = 0; i < n; i++) {