#include "tests.h"
#include <asm/unistd.h>

#ifdef __NR_reboot

# include <stdio.h>
# include <linux/reboot.h>
# include <unistd.h>

# define INVALID_MAGIC 319887762
# define INVALID_CMD 0x01234568

# define STR32 "AbCdEfGhIjKlMnOpQrStUvWxYz012345"
# define STR128 STR32 STR32 STR32 STR32

int
main(void)
{
	static const kernel_ulong_t bogus_magic1 =
		(kernel_ulong_t) 0xFFFFFFFFFFFFFFFFULL;
	static const kernel_ulong_t bogus_magic2 =
		(kernel_ulong_t) 0xdeadfacefa57beefULL;
	static const kernel_ulong_t bogus_cmd =
		(kernel_ulong_t) 0xbadda7a09caffee1ULL;
	static const char buf[] = "reboot";
	static const char str256_buf[] = STR128 STR128;

	long rc;
	char *str256 = tail_memdup(str256_buf, sizeof(str256_buf) - 1);

	rc = syscall(__NR_reboot, 0, 0, 0, 0);
	printf("reboot(0 /* LINUX_REBOOT_MAGIC_??? */, "
	       "0 /* LINUX_REBOOT_MAGIC_??? */, "
	       "LINUX_REBOOT_CMD_CAD_OFF) = %s\n",
	       sprintrc(rc));

	rc = syscall(__NR_reboot, bogus_magic1, bogus_magic2, bogus_cmd, -1);
	printf("reboot(%#x /* LINUX_REBOOT_MAGIC_??? */, "
	       "%#x /* LINUX_REBOOT_MAGIC_??? */, "
	       "%#x /* LINUX_REBOOT_CMD_??? */) = %s\n",
	       (unsigned int) bogus_magic1, (unsigned int) bogus_magic2,
	       (unsigned int) bogus_cmd, sprintrc(rc));

	rc = syscall(__NR_reboot, LINUX_REBOOT_MAGIC1,
			  INVALID_MAGIC, LINUX_REBOOT_CMD_RESTART2, buf);
	printf("reboot(LINUX_REBOOT_MAGIC1, %#x /* LINUX_REBOOT_MAGIC_??? */,"
	       " LINUX_REBOOT_CMD_RESTART2, \"%s\") = %s\n",
	       INVALID_MAGIC, buf, sprintrc(rc));

	rc = syscall(__NR_reboot, LINUX_REBOOT_MAGIC1,
		     LINUX_REBOOT_MAGIC2, INVALID_CMD);
	printf("reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2,"
	       " %#x /* LINUX_REBOOT_CMD_??? */) = %s\n",
	       INVALID_CMD, sprintrc(rc));

	rc = syscall(__NR_reboot, INVALID_MAGIC, LINUX_REBOOT_MAGIC2A,
			  LINUX_REBOOT_CMD_RESTART2, str256);
	printf("reboot(%#x /* LINUX_REBOOT_MAGIC_??? */, LINUX_REBOOT_MAGIC2A, "
	       "LINUX_REBOOT_CMD_RESTART2, \"%.255s\"...) = %s\n",
	       INVALID_MAGIC, str256, sprintrc(rc));

	rc = syscall(__NR_reboot, INVALID_MAGIC, LINUX_REBOOT_MAGIC2B,
			  LINUX_REBOOT_CMD_RESTART2, str256 + 1);
	printf("reboot(%#x /* LINUX_REBOOT_MAGIC_??? */, LINUX_REBOOT_MAGIC2B, "
	       "LINUX_REBOOT_CMD_RESTART2, \"%.255s\"...) = %s\n",
	       INVALID_MAGIC, str256 + 1, sprintrc(rc));

	rc = syscall(__NR_reboot, INVALID_MAGIC, LINUX_REBOOT_MAGIC2C,
			  LINUX_REBOOT_CMD_RESTART2, str256 + 2);
	printf("reboot(%#x /* LINUX_REBOOT_MAGIC_??? */, LINUX_REBOOT_MAGIC2C, "
	       "LINUX_REBOOT_CMD_RESTART2, %p) = %s\n",
	       INVALID_MAGIC, str256 + 2, sprintrc(rc));

	str256[255] = '\0';
	rc = syscall(__NR_reboot, INVALID_MAGIC, bogus_magic1,
			  LINUX_REBOOT_CMD_RESTART2, str256);
	printf("reboot(%#x /* LINUX_REBOOT_MAGIC_??? */, "
	       "%#x /* LINUX_REBOOT_MAGIC_??? */, "
	       "LINUX_REBOOT_CMD_RESTART2, \"%.255s\"...) = %s\n",
	       INVALID_MAGIC, (unsigned int) bogus_magic1, str256,
	       sprintrc(rc));

	rc = syscall(__NR_reboot, INVALID_MAGIC, bogus_magic1,
			  LINUX_REBOOT_CMD_RESTART2, str256 + 1);
	printf("reboot(%#x /* LINUX_REBOOT_MAGIC_??? */, "
	       "%#x /* LINUX_REBOOT_MAGIC_??? */, "
	       "LINUX_REBOOT_CMD_RESTART2, \"%.254s\") = %s\n",
	       INVALID_MAGIC, (unsigned int) bogus_magic1, str256 + 1,
	       sprintrc(rc));

	puts("+++ exited with 0 +++");
	return 0;
}

#else

SKIP_MAIN_UNDEFINED("__NR_reboot")

#endif
