Add a 2LS for VMMs
[akaros.git] / tests / printf-ext.c
1 /* Basic tests for custom printf strings, such as %i (ipaddr) and %r */
2
3 #include <stdlib.h>
4 #include <stdio.h>
5 #include <parlib/parlib.h>
6 #include <unistd.h>
7 #include <signal.h>
8 #include <parlib/printf-ext.h>
9 #include <fcntl.h>
10 #include <sys/types.h>
11 #include <sys/stat.h>
12
13 uint8_t v4addr[] = {
14         0, 0, 0, 0,
15         0, 0, 0, 0,
16         0, 0, 0xff, 0xff,
17         192, 168, 0, 2
18 };
19
20 uint8_t v6addr[] = {
21         0xfe, 0x80, 0, 0,
22         0, 0, 0, 0,
23         0x20, 0x0, 0x0a, 0xff,
24         0xfe, 0xa7, 0x0f, 0x7c
25 };
26
27 uint8_t v6mask[] = {
28         0xff, 0xff, 0xff, 0xff,
29         0xff, 0xff, 0xff, 0xff,
30         0xff, 0xff, 0xff, 0xff,
31         255, 255, 192, 0
32 };
33
34 uint8_t ethaddr[] = {
35         0x90, 0xe6, 0xba, 0x12, 0x48, 0x64
36 };
37
38 int main(int argc, char **argv)
39 {
40         int ret;
41         if (register_printf_specifier('i', printf_ipaddr, printf_ipaddr_info))
42                 printf("Failed to register 'i'\n");
43         if (register_printf_specifier('M', printf_ipmask, printf_ipmask_info))
44                 printf("Failed to register 'M'\n");
45         if (register_printf_specifier('E', printf_ethaddr, printf_ethaddr_info))
46                 printf("Failed to register 'E'\n");
47
48         printf("IPv4 addr %i\n", v4addr);
49         printf("IPv6 addr %i\n", v6addr);
50         printf("IPv6 mask %M\n", v6mask);
51         printf("IPv4 addr as mask %M\n", v4addr);
52         printf("IPv6 addr as mask %M\n", v6addr);
53         printf("ethaddr %E\n", ethaddr);
54         printf("ethaddr null %E\n", 0);
55
56         ret = open("/9/proc/no/such/file", 0, 0);
57         printf("Open ret %d, errstr: %r\n", ret);
58         printf("%s %i %M %d %s %r %E\n", "testing a few,", v6addr, v6mask, 1337,
59                "more cowbell", ethaddr);
60
61         printf("Done\n");
62         return 0;
63 }