|  | #include <stdio.h> | 
|  | #include <string.h> | 
|  | #include <netinet/in.h> | 
|  |  | 
|  |  | 
|  | static int | 
|  | do_test (void) | 
|  | { | 
|  | int result = 0; | 
|  | char buf[16]; | 
|  | memset (buf, '\0', 16); | 
|  |  | 
|  | if (! IN6_IS_ADDR_UNSPECIFIED (buf)) | 
|  | { | 
|  | puts ("positive IN6_IS_ADDR_UNSPECIFIED failed"); | 
|  | result = 1; | 
|  | } | 
|  | for (size_t i = 0; i < 16; ++i) | 
|  | { | 
|  | buf[i] = 1; | 
|  | if (IN6_IS_ADDR_UNSPECIFIED (buf)) | 
|  | { | 
|  | printf ("negative IN6_IS_ADDR_UNSPECIFIED with byte %zu failed\n", | 
|  | i); | 
|  | result = 1; | 
|  | } | 
|  | buf[i] = 0; | 
|  | } | 
|  |  | 
|  | if (IN6_IS_ADDR_LOOPBACK (buf)) | 
|  | { | 
|  | puts ("negative IN6_IS_ADDR_UNSPECIFIED failed"); | 
|  | result = 1; | 
|  | } | 
|  | buf[15] = 1; | 
|  | if (! IN6_IS_ADDR_LOOPBACK (buf)) | 
|  | { | 
|  | puts ("positive IN6_IS_ADDR_UNSPECIFIED failed"); | 
|  | result = 1; | 
|  | } | 
|  | buf[15] = 0; | 
|  |  | 
|  | buf[0] = 0xfe; | 
|  | buf[1] = 0x80; | 
|  | if (! IN6_IS_ADDR_LINKLOCAL (buf)) | 
|  | { | 
|  | puts ("positive IN6_IS_ADDR_LINKLOCAL failed"); | 
|  | result = 1; | 
|  | } | 
|  | for (size_t i = 1; i < 16; ++i) | 
|  | { | 
|  | buf[i] ^= 1; | 
|  | if (! IN6_IS_ADDR_LINKLOCAL (buf)) | 
|  | { | 
|  | printf ("positive IN6_IS_ADDR_LINKLOCAL byte %zu failed\n", i); | 
|  | result = 1; | 
|  | } | 
|  | buf[i] ^= 1; | 
|  | } | 
|  | buf[0] = 0xff; | 
|  | buf[1] = 0x80; | 
|  | if (IN6_IS_ADDR_LINKLOCAL (buf)) | 
|  | { | 
|  | puts ("negative IN6_IS_ADDR_LINKLOCAL failed"); | 
|  | result = 1; | 
|  | } | 
|  | buf[0] = 0xfe; | 
|  | buf[1] = 0xc0; | 
|  | if (IN6_IS_ADDR_LINKLOCAL (buf)) | 
|  | { | 
|  | puts ("negative IN6_IS_ADDR_LINKLOCAL #2 failed"); | 
|  | result = 1; | 
|  | } | 
|  |  | 
|  | buf[0] = 0xfe; | 
|  | buf[1] = 0xc0; | 
|  | if (! IN6_IS_ADDR_SITELOCAL (buf)) | 
|  | { | 
|  | puts ("positive IN6_IS_ADDR_SITELOCAL failed"); | 
|  | result = 1; | 
|  | } | 
|  | for (size_t i = 1; i < 16; ++i) | 
|  | { | 
|  | buf[i] ^= 1; | 
|  | if (! IN6_IS_ADDR_SITELOCAL (buf)) | 
|  | { | 
|  | printf ("positive IN6_IS_ADDR_SITELOCAL byte %zu failed\n", i); | 
|  | result = 1; | 
|  | } | 
|  | buf[i] ^= 1; | 
|  | } | 
|  | buf[0] = 0xff; | 
|  | buf[1] = 0x80; | 
|  | if (IN6_IS_ADDR_SITELOCAL (buf)) | 
|  | { | 
|  | puts ("negative IN6_IS_ADDR_SITELOCAL failed"); | 
|  | result = 1; | 
|  | } | 
|  | buf[0] = 0xf8; | 
|  | buf[1] = 0xc0; | 
|  | if (IN6_IS_ADDR_SITELOCAL (buf)) | 
|  | { | 
|  | puts ("negative IN6_IS_ADDR_SITELOCAL #2 failed"); | 
|  | result = 1; | 
|  | } | 
|  |  | 
|  | memset (buf, '\0', 16); | 
|  | buf[10] = 0xff; | 
|  | buf[11] = 0xff; | 
|  | if (! IN6_IS_ADDR_V4MAPPED (buf)) | 
|  | { | 
|  | puts ("positive IN6_IS_ADDR_V4MAPPED failed"); | 
|  | result = 1; | 
|  | } | 
|  | for (size_t i = 12; i < 16; ++i) | 
|  | { | 
|  | buf[i] ^= 1; | 
|  | if (! IN6_IS_ADDR_V4MAPPED (buf)) | 
|  | { | 
|  | printf ("positive IN6_IS_ADDR_V4MAPPED byte %zu failed\n", i); | 
|  | result = 1; | 
|  | } | 
|  | buf[i] ^= 1; | 
|  | } | 
|  | for (size_t i = 0; i < 12; ++i) | 
|  | { | 
|  | buf[i] ^= 1; | 
|  | if (IN6_IS_ADDR_V4MAPPED (buf)) | 
|  | { | 
|  | printf ("negative IN6_IS_ADDR_V4MAPPED byte %zu failed\n", i); | 
|  | result = 1; | 
|  | } | 
|  | buf[i] ^= 1; | 
|  | } | 
|  |  | 
|  | memset (buf, '\0', 16); | 
|  | for (size_t i = 12; i < 16; ++i) | 
|  | { | 
|  | buf[i] ^= 2; | 
|  | if (! IN6_IS_ADDR_V4COMPAT (buf)) | 
|  | { | 
|  | printf ("positive IN6_IS_ADDR_V4COMPAT byte %zu failed\n", i); | 
|  | result = 1; | 
|  | } | 
|  | buf[i] ^= 2; | 
|  | } | 
|  | for (size_t i = 0; i < 12; ++i) | 
|  | { | 
|  | buf[i] ^= 1; | 
|  | if (IN6_IS_ADDR_V4COMPAT (buf)) | 
|  | { | 
|  | printf ("negative IN6_IS_ADDR_V4COMPAT byte %zu failed\n", i); | 
|  | result = 1; | 
|  | } | 
|  | buf[i] ^= 1; | 
|  | } | 
|  | if (IN6_IS_ADDR_V4COMPAT (buf)) | 
|  | { | 
|  | puts ("negative IN6_IS_ADDR_V4COMPAT #2 failed"); | 
|  | result = 1; | 
|  | } | 
|  | buf[15] = 1; | 
|  | if (IN6_IS_ADDR_V4COMPAT (buf)) | 
|  | { | 
|  | puts ("negative IN6_IS_ADDR_V4COMPAT #3 failed"); | 
|  | result = 1; | 
|  | } | 
|  |  | 
|  | return result; | 
|  | } | 
|  |  | 
|  | #define TEST_FUNCTION do_test () | 
|  | #include "../test-skeleton.c" |