/* 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;
}
