diff --git a/README.md b/README.md index 49a4afd..6548cda 100644 --- a/README.md +++ b/README.md @@ -1,71 +1,44 @@ ## About -isinetaddr is a simple C library that provides an interface that can -be used to validate an IPv(4|6) address (with optional -support for CIDR notation included). The library is guided by easy to -extend [testcases](test/) that help verify safety and correctness. +isinetaddr is a clang library that provides a set of functions for +IP address validation. The library is guided by [testcases](test/) +that help verify safety and correctness. ## Examples -### IPv4 +### isinetaddr4 -The following example demonstrates the `isinetaddr4` function with -both valid and invalid inputs. The `isinetaddr4` function returns `true` -when the input given is a valid IPv4 address, and otherwise returns `false`. +The `isinetaddr4` function returns `true` when given a valid IPv4 address: ```C #include #include #include -const char *valid[] = { "127.0.0.1", "1.1.1.1", "0.0.0.0" }; -const char *invalid[] = { "foobar", "0.0.0.0.0", NULL }; -void validate(const char *str); +const char *ipv4[] = { + /* valid */ + "127.0.0.1", "1.1.1.1", "0.0.0.0", + /* invalid */ + "0.0.0.0.0", "foobar" +}; int main(void) { - printf("// valid\n"); - for (int i = 0; i < 3; i++) { - validate(valid[i]); - } - printf("// invalid\n"); - for (int i = 0; i < 3; i++) { - validate(invalid[i]); - } - return EXIT_SUCCESS; -} - -void -validate(const char *str) -{ - if (isinetaddr4(str)) { - printf("%s is a valid IPv4 address.\n", str); - } else { - printf("%s is an invalid IPv4 address.\n", str); + for (int i = 0; i < 5; i++) { + if (isinetaddr4(ipv4[i])) { + printf("%s is a valid IPv4 address.\n", ipv4[i]); + } else { + printf("%s is an invalid IPv4 address.\n", ipv4[i]); + } } + return (EXIT_SUCCESS); } ``` -Expected output: +### iscidraddr4 -``` -$ cc -Iinclude src/*.c share/isinetaddr/examples/isinetaddr4.c -o example -$ ./example -// valid -127.0.0.1 is a valid IPv4 address. -1.1.1.1 is a valid IPv4 address. -0.0.0.0 is a valid IPv4 address. -// invalid -foobar is an invalid IPv4 address. -0.0.0.0.0 is an invalid IPv4 address. -(null) is an invalid IPv4 address. -``` - -### CIDR notation (IPv4) - -The `iscidraddr4` function supports the same feature set as `isinetaddr4`, and -in addition supports +The `iscidraddr4` function supports the same features as `isinetaddr4` plus [CIDR notation](https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing#CIDR_notation). The following example builds on the previous example: @@ -74,109 +47,62 @@ The following example builds on the previous example: #include #include -const char *valid[] = { "127.0.0.1", "192.168.2.1/32", "192.168.2.1/0" }; -const char *invalid[] = { "foobar", "0.0.0.0.0", "192.168.2.1/33" }; -void validate(const char *str); +const char *ipv4[] = { + /* valid */ + "127.0.0.1", "192.168.2.1/32", "192.168.2.1/0", + /* invalid */ + "192.168.2.1/33", "foobar" +}; int main(void) { - printf("// valid\n"); - for (int i = 0; i < 3; i++) { - validate(valid[i]); - } - printf("// invalid\n"); - for (int i = 0; i < 3; i++) { - validate(invalid[i]); - } - return EXIT_SUCCESS; -} - -void -validate(const char *str) -{ - if (iscidraddr4(str)) { - printf("%s is a valid IPv4 address.\n", str); - } else { - printf("%s is an invalid IPv4 address.\n", str); + for (int i = 0; i < 5; i++) { + if (iscidraddr4(ipv4[i])) { + printf("%s is a valid IPv4 address.\n", ipv4[i]); + } else { + printf("%s is an invalid IPv4 address.\n", ipv4[i]); + } } + return (EXIT_SUCCESS); } ``` -Expected output: +### isinetaddr6 -``` -$ cc -Iinclude src/*.c share/isinetaddr/examples/iscidraddr4.c -o example -$ ./example -// valid -127.0.0.1 is a valid IPv4 address. -192.168.2.1/32 is a valid IPv4 address. -192.168.2.1/0 is a valid IPv4 address. -// invalid -foobar is an invalid IPv4 address. -0.0.0.0.0 is an invalid IPv4 address. -192.168.2.1/33 is an invalid IPv4 address. -``` - -### IPv6 - -The following example demonstrates the `isinetaddr6` function with -both valid and invalid inputs. The `isinetaddr6` function returns `true` -when the input given is a valid IPv6 address, and otherwise returns `false`. +The `isinetaddr6` function returns `true` when given a valid IPv6 address: ```C #include #include #include -const char *valid[] = { "::", "::1", "0000:0000:0000:0000:0000:0000:0000:0000" }; -const char *invalid[] = { "foobar", "00:::0", NULL }; -void validate(const char *str); +const char *ipv6[] = { + /* valid */ + "::", "::1", "0000:0000:0000:0000:0000:0000:0000:0000", + /* invalid */ + "foobar", "00:::0" +}; + int main(void) { - printf("// valid\n"); - for (int i = 0; i < 3; i++) { - validate(valid[i]); + for (int i = 0; i < 5; i++) { + if (isinetaddr6(ipv6[i])) { + printf("%s is a valid IPv4 address.\n", ipv6[i]); + } else { + printf("%s is an invalid IPv4 address.\n", ipv6[i]); + } } - printf("// invalid\n"); - for (int i = 0; i < 3; i++) { - validate(invalid[i]); - } - return EXIT_SUCCESS; + return (EXIT_SUCCESS); } - -void -validate(const char *str) -{ - if (isinetaddr6(str)) { - printf("%s is a valid IPv6 address.\n", str); - } else { - printf("%s is an invalid IPv6 address.\n", str); - } -} -``` - -Expected output: - -``` -$ cc -Iinclude src/*.c share/isinetaddr/examples/isinetaddr6.c -o example -$ ./example -// valid -:: is a valid IPv6 address. -::1 is a valid IPv6 address. -0000:0000:0000:0000:0000:0000:0000:0000 is a valid IPv6 address. -// invalid -foobar is an invalid IPv6 address. -00:::0 is an invalid IPv6 address. -(null) is an invalid IPv6 address. ``` ## Sources -* [Source code (GitHub)](https://github.com/0x1eef/isinetaddr#readme) -* [Source code (GitLab)](https://gitlab.com/0x1eef/isinetaddr#about) +* [GitHub](https://github.com/0x1eef/isinetaddr#readme) +* [GitLab](https://gitlab.com/0x1eef/isinetaddr#about) ## License diff --git a/share/isinetaddr/examples/iscidraddr4.c b/share/isinetaddr/examples/iscidraddr4.c index 025c3ed..a9d24d1 100644 --- a/share/isinetaddr/examples/iscidraddr4.c +++ b/share/isinetaddr/examples/iscidraddr4.c @@ -2,30 +2,22 @@ #include #include -const char *valid[] = { "127.0.0.1", "192.168.2.1/32", "192.168.2.1/0" }; -const char *invalid[] = { "foobar", "0.0.0.0.0", "192.168.2.1/33" }; -void validate(const char *str); +const char *ipv4[] = { + /* valid */ + "127.0.0.1", "192.168.2.1/32", "192.168.2.1/0", + /* invalid */ + "192.168.2.1/33", "foobar" +}; int main(void) { - printf("// valid\n"); - for (int i = 0; i < 3; i++) { - validate(valid[i]); - } - printf("// invalid\n"); - for (int i = 0; i < 3; i++) { - validate(invalid[i]); - } - return EXIT_SUCCESS; -} - -void -validate(const char *str) -{ - if (iscidraddr4(str)) { - printf("%s is a valid IPv4 address.\n", str); - } else { - printf("%s is an invalid IPv4 address.\n", str); + for (int i = 0; i < 5; i++) { + if (iscidraddr4(ipv4[i])) { + printf("%s is a valid IPv4 address.\n", ipv4[i]); + } else { + printf("%s is an invalid IPv4 address.\n", ipv4[i]); + } } + return (EXIT_SUCCESS); } diff --git a/share/isinetaddr/examples/isinetaddr4.c b/share/isinetaddr/examples/isinetaddr4.c index 5517fe0..81cddb4 100644 --- a/share/isinetaddr/examples/isinetaddr4.c +++ b/share/isinetaddr/examples/isinetaddr4.c @@ -2,30 +2,22 @@ #include #include -const char *valid[] = { "127.0.0.1", "1.1.1.1", "0.0.0.0" }; -const char *invalid[] = { "foobar", "0.0.0.0.0", NULL }; -void validate(const char *str); +const char *ipv4[] = { + /* valid */ + "127.0.0.1", "1.1.1.1", "0.0.0.0", + /* invalid */ + "0.0.0.0.0", "foobar" +}; int main(void) { - printf("// valid\n"); - for (int i = 0; i < 3; i++) { - validate(valid[i]); - } - printf("// invalid\n"); - for (int i = 0; i < 3; i++) { - validate(invalid[i]); - } - return EXIT_SUCCESS; -} - -void -validate(const char *str) -{ - if (isinetaddr4(str)) { - printf("%s is a valid IPv4 address.\n", str); - } else { - printf("%s is an invalid IPv4 address.\n", str); + for (int i = 0; i < 5; i++) { + if (isinetaddr4(ipv4[i])) { + printf("%s is a valid IPv4 address.\n", ipv4[i]); + } else { + printf("%s is an invalid IPv4 address.\n", ipv4[i]); + } } + return (EXIT_SUCCESS); } diff --git a/share/isinetaddr/examples/isinetaddr6.c b/share/isinetaddr/examples/isinetaddr6.c index cd7aca6..5b1dad6 100644 --- a/share/isinetaddr/examples/isinetaddr6.c +++ b/share/isinetaddr/examples/isinetaddr6.c @@ -2,30 +2,23 @@ #include #include -const char *valid[] = { "::", "::1", "0000:0000:0000:0000:0000:0000:0000:0000" }; -const char *invalid[] = { "foobar", "00:::0", NULL }; -void validate(const char *str); +const char *ipv6[] = { + /* valid */ + "::", "::1", "0000:0000:0000:0000:0000:0000:0000:0000", + /* invalid */ + "foobar", "00:::0" +}; + int main(void) { - printf("// valid\n"); - for (int i = 0; i < 3; i++) { - validate(valid[i]); - } - printf("// invalid\n"); - for (int i = 0; i < 3; i++) { - validate(invalid[i]); - } - return EXIT_SUCCESS; -} - -void -validate(const char *str) -{ - if (isinetaddr6(str)) { - printf("%s is a valid IPv6 address.\n", str); - } else { - printf("%s is an invalid IPv6 address.\n", str); + for (int i = 0; i < 5; i++) { + if (isinetaddr6(ipv6[i])) { + printf("%s is a valid IPv4 address.\n", ipv6[i]); + } else { + printf("%s is an invalid IPv4 address.\n", ipv6[i]); + } } + return (EXIT_SUCCESS); }