|  | /* Basic tests for custom printf strings, such as %i (ipaddr) and %r */ | 
|  |  | 
|  | #include <stdlib.h> | 
|  | #include <stdio.h> | 
|  | #include <parlib/parlib.h> | 
|  | #include <unistd.h> | 
|  | #include <signal.h> | 
|  | #include <parlib/printf-ext.h> | 
|  | #include <fcntl.h> | 
|  | #include <sys/types.h> | 
|  | #include <sys/stat.h> | 
|  |  | 
|  | uint8_t v4addr[] = { | 
|  | 0, 0, 0, 0, | 
|  | 0, 0, 0, 0, | 
|  | 0, 0, 0xff, 0xff, | 
|  | 192, 168, 0, 2 | 
|  | }; | 
|  |  | 
|  | uint8_t v6addr[] = { | 
|  | 0xfe, 0x80, 0, 0, | 
|  | 0, 0, 0, 0, | 
|  | 0x20, 0x0, 0x0a, 0xff, | 
|  | 0xfe, 0xa7, 0x0f, 0x7c | 
|  | }; | 
|  |  | 
|  | uint8_t v6mask[] = { | 
|  | 0xff, 0xff, 0xff, 0xff, | 
|  | 0xff, 0xff, 0xff, 0xff, | 
|  | 0xff, 0xff, 0xff, 0xff, | 
|  | 255, 255, 192, 0 | 
|  | }; | 
|  |  | 
|  | uint8_t ethaddr[] = { | 
|  | 0x90, 0xe6, 0xba, 0x12, 0x48, 0x64 | 
|  | }; | 
|  |  | 
|  | int main(int argc, char **argv) | 
|  | { | 
|  | int ret; | 
|  | if (register_printf_specifier('i', printf_ipaddr, printf_ipaddr_info)) | 
|  | printf("Failed to register 'i'\n"); | 
|  | if (register_printf_specifier('M', printf_ipmask, printf_ipmask_info)) | 
|  | printf("Failed to register 'M'\n"); | 
|  | if (register_printf_specifier('E', printf_ethaddr, printf_ethaddr_info)) | 
|  | printf("Failed to register 'E'\n"); | 
|  | if (register_printf_specifier('H', printf_hexdump, printf_hexdump_info)) | 
|  | printf("Failed to register 'H'\n"); | 
|  |  | 
|  | printf("IPv4 addr %i\n", v4addr); | 
|  | printf("IPv6 addr %i\n", v6addr); | 
|  | printf("IPv6 mask %M\n", v6mask); | 
|  | printf("IPv4 addr as mask %M\n", v4addr); | 
|  | printf("IPv6 addr as mask %M\n", v6addr); | 
|  | printf("ethaddr %E\n", ethaddr); | 
|  | printf("ethaddr null %E\n", 0); | 
|  | printf("IPv6 addr as hex (4 bytes only): %.4H\n", v6addr); | 
|  | printf("IPv6 addr as hex: %.*H\n", COUNT_OF(v6addr), v6addr); | 
|  |  | 
|  | ret = open("/9/proc/no/such/file", 0, 0); | 
|  | printf("Open ret %d, errstr: %r\n", ret); | 
|  | printf("%s %i %M %d %s %r %E\n", "testing a few,", v6addr, v6mask, 1337, | 
|  | "more cowbell", ethaddr); | 
|  |  | 
|  | printf("Done\n"); | 
|  | return 0; | 
|  | } |