diff options
Diffstat (limited to 'lib/test-kstrtox.c')
| -rw-r--r-- | lib/test-kstrtox.c | 739 | 
1 files changed, 739 insertions, 0 deletions
diff --git a/lib/test-kstrtox.c b/lib/test-kstrtox.c new file mode 100644 index 00000000000..bea3f3fa3f0 --- /dev/null +++ b/lib/test-kstrtox.c @@ -0,0 +1,739 @@ +#include <linux/init.h> +#include <linux/kernel.h> +#include <linux/module.h> + +#define for_each_test(i, test)	\ +	for (i = 0; i < sizeof(test) / sizeof(test[0]); i++) + +struct test_fail { +	const char *str; +	unsigned int base; +}; + +#define DEFINE_TEST_FAIL(test)	\ +	const struct test_fail test[] __initconst + +#define DECLARE_TEST_OK(type, test_type)	\ +	test_type {				\ +		const char *str;		\ +		unsigned int base;		\ +		type expected_res;		\ +	} + +#define DEFINE_TEST_OK(type, test)	\ +	const type test[] __initconst + +#define TEST_FAIL(fn, type, fmt, test)					\ +{									\ +	unsigned int i;							\ +									\ +	for_each_test(i, test) {					\ +		const struct test_fail *t = &test[i];			\ +		type tmp;						\ +		int rv;							\ +									\ +		tmp = 0;						\ +		rv = fn(t->str, t->base, &tmp);				\ +		if (rv >= 0) {						\ +			WARN(1, "str '%s', base %u, expected -E, got %d/" fmt "\n",	\ +				t->str, t->base, rv, tmp);		\ +			continue;					\ +		}							\ +	}								\ +} + +#define TEST_OK(fn, type, fmt, test)					\ +{									\ +	unsigned int i;							\ +									\ +	for_each_test(i, test) {					\ +		const typeof(test[0]) *t = &test[i];			\ +		type res;						\ +		int rv;							\ +									\ +		rv = fn(t->str, t->base, &res);				\ +		if (rv != 0) {						\ +			WARN(1, "str '%s', base %u, expected 0/" fmt ", got %d\n",	\ +				t->str, t->base, t->expected_res, rv);	\ +			continue;					\ +		}							\ +		if (res != t->expected_res) {				\ +			WARN(1, "str '%s', base %u, expected " fmt ", got " fmt "\n",	\ +				t->str, t->base, t->expected_res, res);	\ +			continue;					\ +		}							\ +	}								\ +} + +static void __init test_kstrtoull_ok(void) +{ +	DECLARE_TEST_OK(unsigned long long, struct test_ull); +	static DEFINE_TEST_OK(struct test_ull, test_ull_ok) = { +		{"0",	10,	0ULL}, +		{"1",	10,	1ULL}, +		{"127",	10,	127ULL}, +		{"128",	10,	128ULL}, +		{"129",	10,	129ULL}, +		{"255",	10,	255ULL}, +		{"256",	10,	256ULL}, +		{"257",	10,	257ULL}, +		{"32767",	10,	32767ULL}, +		{"32768",	10,	32768ULL}, +		{"32769",	10,	32769ULL}, +		{"65535",	10,	65535ULL}, +		{"65536",	10,	65536ULL}, +		{"65537",	10,	65537ULL}, +		{"2147483647",	10,	2147483647ULL}, +		{"2147483648",	10,	2147483648ULL}, +		{"2147483649",	10,	2147483649ULL}, +		{"4294967295",	10,	4294967295ULL}, +		{"4294967296",	10,	4294967296ULL}, +		{"4294967297",	10,	4294967297ULL}, +		{"9223372036854775807",	10,	9223372036854775807ULL}, +		{"9223372036854775808",	10,	9223372036854775808ULL}, +		{"9223372036854775809",	10,	9223372036854775809ULL}, +		{"18446744073709551614",	10,	18446744073709551614ULL}, +		{"18446744073709551615",	10,	18446744073709551615ULL}, + +		{"00",		8,	00ULL}, +		{"01",		8,	01ULL}, +		{"0177",	8,	0177ULL}, +		{"0200",	8,	0200ULL}, +		{"0201",	8,	0201ULL}, +		{"0377",	8,	0377ULL}, +		{"0400",	8,	0400ULL}, +		{"0401",	8,	0401ULL}, +		{"077777",	8,	077777ULL}, +		{"0100000",	8,	0100000ULL}, +		{"0100001",	8,	0100001ULL}, +		{"0177777",	8,	0177777ULL}, +		{"0200000",	8,	0200000ULL}, +		{"0200001",	8,	0200001ULL}, +		{"017777777777",	8,	017777777777ULL}, +		{"020000000000",	8,	020000000000ULL}, +		{"020000000001",	8,	020000000001ULL}, +		{"037777777777",	8,	037777777777ULL}, +		{"040000000000",	8,	040000000000ULL}, +		{"040000000001",	8,	040000000001ULL}, +		{"0777777777777777777777",	8,	0777777777777777777777ULL}, +		{"01000000000000000000000",	8,	01000000000000000000000ULL}, +		{"01000000000000000000001",	8,	01000000000000000000001ULL}, +		{"01777777777777777777776",	8,	01777777777777777777776ULL}, +		{"01777777777777777777777",	8,	01777777777777777777777ULL}, + +		{"0x0",		16,	0x0ULL}, +		{"0x1",		16,	0x1ULL}, +		{"0x7f",	16,	0x7fULL}, +		{"0x80",	16,	0x80ULL}, +		{"0x81",	16,	0x81ULL}, +		{"0xff",	16,	0xffULL}, +		{"0x100",	16,	0x100ULL}, +		{"0x101",	16,	0x101ULL}, +		{"0x7fff",	16,	0x7fffULL}, +		{"0x8000",	16,	0x8000ULL}, +		{"0x8001",	16,	0x8001ULL}, +		{"0xffff",	16,	0xffffULL}, +		{"0x10000",	16,	0x10000ULL}, +		{"0x10001",	16,	0x10001ULL}, +		{"0x7fffffff",	16,	0x7fffffffULL}, +		{"0x80000000",	16,	0x80000000ULL}, +		{"0x80000001",	16,	0x80000001ULL}, +		{"0xffffffff",	16,	0xffffffffULL}, +		{"0x100000000",	16,	0x100000000ULL}, +		{"0x100000001",	16,	0x100000001ULL}, +		{"0x7fffffffffffffff",	16,	0x7fffffffffffffffULL}, +		{"0x8000000000000000",	16,	0x8000000000000000ULL}, +		{"0x8000000000000001",	16,	0x8000000000000001ULL}, +		{"0xfffffffffffffffe",	16,	0xfffffffffffffffeULL}, +		{"0xffffffffffffffff",	16,	0xffffffffffffffffULL}, + +		{"0\n",	0,	0ULL}, +	}; +	TEST_OK(kstrtoull, unsigned long long, "%llu", test_ull_ok); +} + +static void __init test_kstrtoull_fail(void) +{ +	static DEFINE_TEST_FAIL(test_ull_fail) = { +		{"",	0}, +		{"",	8}, +		{"",	10}, +		{"",	16}, +		{"\n",	0}, +		{"\n",	8}, +		{"\n",	10}, +		{"\n",	16}, +		{"\n0",	0}, +		{"\n0",	8}, +		{"\n0",	10}, +		{"\n0",	16}, +		{"+",	0}, +		{"+",	8}, +		{"+",	10}, +		{"+",	16}, +		{"-",	0}, +		{"-",	8}, +		{"-",	10}, +		{"-",	16}, +		{"0x",	0}, +		{"0x",	16}, +		{"0X",	0}, +		{"0X",	16}, +		{"0 ",	0}, +		{"1+",	0}, +		{"1-",	0}, +		{" 2",	0}, +		/* base autodetection */ +		{"0x0z",	0}, +		{"0z",		0}, +		{"a",		0}, +		/* digit >= base */ +		{"2",	2}, +		{"8",	8}, +		{"a",	10}, +		{"A",	10}, +		{"g",	16}, +		{"G",	16}, +		/* overflow */ +		{"10000000000000000000000000000000000000000000000000000000000000000",	2}, +		{"2000000000000000000000",	8}, +		{"18446744073709551616",	10}, +		{"10000000000000000",	16}, +		/* negative */ +		{"-0", 0}, +		{"-0", 8}, +		{"-0", 10}, +		{"-0", 16}, +		{"-1", 0}, +		{"-1", 8}, +		{"-1", 10}, +		{"-1", 16}, +		/* sign is first character if any */ +		{"-+1", 0}, +		{"-+1", 8}, +		{"-+1", 10}, +		{"-+1", 16}, +		/* nothing after \n */ +		{"0\n0", 0}, +		{"0\n0", 8}, +		{"0\n0", 10}, +		{"0\n0", 16}, +		{"0\n+", 0}, +		{"0\n+", 8}, +		{"0\n+", 10}, +		{"0\n+", 16}, +		{"0\n-", 0}, +		{"0\n-", 8}, +		{"0\n-", 10}, +		{"0\n-", 16}, +		{"0\n ", 0}, +		{"0\n ", 8}, +		{"0\n ", 10}, +		{"0\n ", 16}, +	}; +	TEST_FAIL(kstrtoull, unsigned long long, "%llu", test_ull_fail); +} + +static void __init test_kstrtoll_ok(void) +{ +	DECLARE_TEST_OK(long long, struct test_ll); +	static DEFINE_TEST_OK(struct test_ll, test_ll_ok) = { +		{"0",	10,	0LL}, +		{"1",	10,	1LL}, +		{"127",	10,	127LL}, +		{"128",	10,	128LL}, +		{"129",	10,	129LL}, +		{"255",	10,	255LL}, +		{"256",	10,	256LL}, +		{"257",	10,	257LL}, +		{"32767",	10,	32767LL}, +		{"32768",	10,	32768LL}, +		{"32769",	10,	32769LL}, +		{"65535",	10,	65535LL}, +		{"65536",	10,	65536LL}, +		{"65537",	10,	65537LL}, +		{"2147483647",	10,	2147483647LL}, +		{"2147483648",	10,	2147483648LL}, +		{"2147483649",	10,	2147483649LL}, +		{"4294967295",	10,	4294967295LL}, +		{"4294967296",	10,	4294967296LL}, +		{"4294967297",	10,	4294967297LL}, +		{"9223372036854775807",	10,	9223372036854775807LL}, + +		{"-1",	10,	-1LL}, +		{"-2",	10,	-2LL}, +		{"-9223372036854775808",	10,	LLONG_MIN}, +	}; +	TEST_OK(kstrtoll, long long, "%lld", test_ll_ok); +} + +static void __init test_kstrtoll_fail(void) +{ +	static DEFINE_TEST_FAIL(test_ll_fail) = { +		{"9223372036854775808",	10}, +		{"9223372036854775809",	10}, +		{"18446744073709551614",	10}, +		{"18446744073709551615",	10}, +		{"-9223372036854775809",	10}, +		{"-18446744073709551614",	10}, +		{"-18446744073709551615",	10}, +		/* negative zero isn't an integer in Linux */ +		{"-0",	0}, +		{"-0",	8}, +		{"-0",	10}, +		{"-0",	16}, +		/* sign is first character if any */ +		{"-+1", 0}, +		{"-+1", 8}, +		{"-+1", 10}, +		{"-+1", 16}, +	}; +	TEST_FAIL(kstrtoll, long long, "%lld", test_ll_fail); +} + +static void __init test_kstrtou64_ok(void) +{ +	DECLARE_TEST_OK(u64, struct test_u64); +	static DEFINE_TEST_OK(struct test_u64, test_u64_ok) = { +		{"0",	10,	0}, +		{"1",	10,	1}, +		{"126",	10,	126}, +		{"127",	10,	127}, +		{"128",	10,	128}, +		{"129",	10,	129}, +		{"254",	10,	254}, +		{"255",	10,	255}, +		{"256",	10,	256}, +		{"257",	10,	257}, +		{"32766",	10,	32766}, +		{"32767",	10,	32767}, +		{"32768",	10,	32768}, +		{"32769",	10,	32769}, +		{"65534",	10,	65534}, +		{"65535",	10,	65535}, +		{"65536",	10,	65536}, +		{"65537",	10,	65537}, +		{"2147483646",	10,	2147483646}, +		{"2147483647",	10,	2147483647}, +		{"2147483648",	10,	2147483648ULL}, +		{"2147483649",	10,	2147483649ULL}, +		{"4294967294",	10,	4294967294ULL}, +		{"4294967295",	10,	4294967295ULL}, +		{"4294967296",	10,	4294967296ULL}, +		{"4294967297",	10,	4294967297ULL}, +		{"9223372036854775806",	10,	9223372036854775806ULL}, +		{"9223372036854775807",	10,	9223372036854775807ULL}, +		{"9223372036854775808",	10,	9223372036854775808ULL}, +		{"9223372036854775809",	10,	9223372036854775809ULL}, +		{"18446744073709551614",	10,	18446744073709551614ULL}, +		{"18446744073709551615",	10,	18446744073709551615ULL}, +	}; +	TEST_OK(kstrtou64, u64, "%llu", test_u64_ok); +} + +static void __init test_kstrtou64_fail(void) +{ +	static DEFINE_TEST_FAIL(test_u64_fail) = { +		{"-2",	10}, +		{"-1",	10}, +		{"18446744073709551616",	10}, +		{"18446744073709551617",	10}, +	}; +	TEST_FAIL(kstrtou64, u64, "%llu", test_u64_fail); +} + +static void __init test_kstrtos64_ok(void) +{ +	DECLARE_TEST_OK(s64, struct test_s64); +	static DEFINE_TEST_OK(struct test_s64, test_s64_ok) = { +		{"-128",	10,	-128}, +		{"-127",	10,	-127}, +		{"-1",	10,	-1}, +		{"0",	10,	0}, +		{"1",	10,	1}, +		{"126",	10,	126}, +		{"127",	10,	127}, +		{"128",	10,	128}, +		{"129",	10,	129}, +		{"254",	10,	254}, +		{"255",	10,	255}, +		{"256",	10,	256}, +		{"257",	10,	257}, +		{"32766",	10,	32766}, +		{"32767",	10,	32767}, +		{"32768",	10,	32768}, +		{"32769",	10,	32769}, +		{"65534",	10,	65534}, +		{"65535",	10,	65535}, +		{"65536",	10,	65536}, +		{"65537",	10,	65537}, +		{"2147483646",	10,	2147483646}, +		{"2147483647",	10,	2147483647}, +		{"2147483648",	10,	2147483648LL}, +		{"2147483649",	10,	2147483649LL}, +		{"4294967294",	10,	4294967294LL}, +		{"4294967295",	10,	4294967295LL}, +		{"4294967296",	10,	4294967296LL}, +		{"4294967297",	10,	4294967297LL}, +		{"9223372036854775806",	10,	9223372036854775806LL}, +		{"9223372036854775807",	10,	9223372036854775807LL}, +	}; +	TEST_OK(kstrtos64, s64, "%lld", test_s64_ok); +} + +static void __init test_kstrtos64_fail(void) +{ +	static DEFINE_TEST_FAIL(test_s64_fail) = { +		{"9223372036854775808",	10}, +		{"9223372036854775809",	10}, +		{"18446744073709551614",	10}, +		{"18446744073709551615",	10}, +		{"18446744073709551616",	10}, +		{"18446744073709551617",	10}, +	}; +	TEST_FAIL(kstrtos64, s64, "%lld", test_s64_fail); +} + +static void __init test_kstrtou32_ok(void) +{ +	DECLARE_TEST_OK(u32, struct test_u32); +	static DEFINE_TEST_OK(struct test_u32, test_u32_ok) = { +		{"0",	10,	0}, +		{"1",	10,	1}, +		{"126",	10,	126}, +		{"127",	10,	127}, +		{"128",	10,	128}, +		{"129",	10,	129}, +		{"254",	10,	254}, +		{"255",	10,	255}, +		{"256",	10,	256}, +		{"257",	10,	257}, +		{"32766",	10,	32766}, +		{"32767",	10,	32767}, +		{"32768",	10,	32768}, +		{"32769",	10,	32769}, +		{"65534",	10,	65534}, +		{"65535",	10,	65535}, +		{"65536",	10,	65536}, +		{"65537",	10,	65537}, +		{"2147483646",	10,	2147483646}, +		{"2147483647",	10,	2147483647}, +		{"2147483648",	10,	2147483648U}, +		{"2147483649",	10,	2147483649U}, +		{"4294967294",	10,	4294967294U}, +		{"4294967295",	10,	4294967295U}, +	}; +	TEST_OK(kstrtou32, u32, "%u", test_u32_ok); +} + +static void __init test_kstrtou32_fail(void) +{ +	static DEFINE_TEST_FAIL(test_u32_fail) = { +		{"-2",	10}, +		{"-1",	10}, +		{"4294967296",	10}, +		{"4294967297",	10}, +		{"9223372036854775806",	10}, +		{"9223372036854775807",	10}, +		{"9223372036854775808",	10}, +		{"9223372036854775809",	10}, +		{"18446744073709551614",	10}, +		{"18446744073709551615",	10}, +		{"18446744073709551616",	10}, +		{"18446744073709551617",	10}, +	}; +	TEST_FAIL(kstrtou32, u32, "%u", test_u32_fail); +} + +static void __init test_kstrtos32_ok(void) +{ +	DECLARE_TEST_OK(s32, struct test_s32); +	static DEFINE_TEST_OK(struct test_s32, test_s32_ok) = { +		{"-128",	10,	-128}, +		{"-127",	10,	-127}, +		{"-1",	10,	-1}, +		{"0",	10,	0}, +		{"1",	10,	1}, +		{"126",	10,	126}, +		{"127",	10,	127}, +		{"128",	10,	128}, +		{"129",	10,	129}, +		{"254",	10,	254}, +		{"255",	10,	255}, +		{"256",	10,	256}, +		{"257",	10,	257}, +		{"32766",	10,	32766}, +		{"32767",	10,	32767}, +		{"32768",	10,	32768}, +		{"32769",	10,	32769}, +		{"65534",	10,	65534}, +		{"65535",	10,	65535}, +		{"65536",	10,	65536}, +		{"65537",	10,	65537}, +		{"2147483646",	10,	2147483646}, +		{"2147483647",	10,	2147483647}, +	}; +	TEST_OK(kstrtos32, s32, "%d", test_s32_ok); +} + +static void __init test_kstrtos32_fail(void) +{ +	static DEFINE_TEST_FAIL(test_s32_fail) = { +		{"2147483648",	10}, +		{"2147483649",	10}, +		{"4294967294",	10}, +		{"4294967295",	10}, +		{"4294967296",	10}, +		{"4294967297",	10}, +		{"9223372036854775806",	10}, +		{"9223372036854775807",	10}, +		{"9223372036854775808",	10}, +		{"9223372036854775809",	10}, +		{"18446744073709551614",	10}, +		{"18446744073709551615",	10}, +		{"18446744073709551616",	10}, +		{"18446744073709551617",	10}, +	}; +	TEST_FAIL(kstrtos32, s32, "%d", test_s32_fail); +} + +static void __init test_kstrtou16_ok(void) +{ +	DECLARE_TEST_OK(u16, struct test_u16); +	static DEFINE_TEST_OK(struct test_u16, test_u16_ok) = { +		{"0",	10,	0}, +		{"1",	10,	1}, +		{"126",	10,	126}, +		{"127",	10,	127}, +		{"128",	10,	128}, +		{"129",	10,	129}, +		{"254",	10,	254}, +		{"255",	10,	255}, +		{"256",	10,	256}, +		{"257",	10,	257}, +		{"32766",	10,	32766}, +		{"32767",	10,	32767}, +		{"32768",	10,	32768}, +		{"32769",	10,	32769}, +		{"65534",	10,	65534}, +		{"65535",	10,	65535}, +	}; +	TEST_OK(kstrtou16, u16, "%hu", test_u16_ok); +} + +static void __init test_kstrtou16_fail(void) +{ +	static DEFINE_TEST_FAIL(test_u16_fail) = { +		{"-2",	10}, +		{"-1",	10}, +		{"65536",	10}, +		{"65537",	10}, +		{"2147483646",	10}, +		{"2147483647",	10}, +		{"2147483648",	10}, +		{"2147483649",	10}, +		{"4294967294",	10}, +		{"4294967295",	10}, +		{"4294967296",	10}, +		{"4294967297",	10}, +		{"9223372036854775806",	10}, +		{"9223372036854775807",	10}, +		{"9223372036854775808",	10}, +		{"9223372036854775809",	10}, +		{"18446744073709551614",	10}, +		{"18446744073709551615",	10}, +		{"18446744073709551616",	10}, +		{"18446744073709551617",	10}, +	}; +	TEST_FAIL(kstrtou16, u16, "%hu", test_u16_fail); +} + +static void __init test_kstrtos16_ok(void) +{ +	DECLARE_TEST_OK(s16, struct test_s16); +	static DEFINE_TEST_OK(struct test_s16, test_s16_ok) = { +		{"-130",	10,	-130}, +		{"-129",	10,	-129}, +		{"-128",	10,	-128}, +		{"-127",	10,	-127}, +		{"-1",	10,	-1}, +		{"0",	10,	0}, +		{"1",	10,	1}, +		{"126",	10,	126}, +		{"127",	10,	127}, +		{"128",	10,	128}, +		{"129",	10,	129}, +		{"254",	10,	254}, +		{"255",	10,	255}, +		{"256",	10,	256}, +		{"257",	10,	257}, +		{"32766",	10,	32766}, +		{"32767",	10,	32767}, +	}; +	TEST_OK(kstrtos16, s16, "%hd", test_s16_ok); +} + +static void __init test_kstrtos16_fail(void) +{ +	static DEFINE_TEST_FAIL(test_s16_fail) = { +		{"32768",	10}, +		{"32769",	10}, +		{"65534",	10}, +		{"65535",	10}, +		{"65536",	10}, +		{"65537",	10}, +		{"2147483646",	10}, +		{"2147483647",	10}, +		{"2147483648",	10}, +		{"2147483649",	10}, +		{"4294967294",	10}, +		{"4294967295",	10}, +		{"4294967296",	10}, +		{"4294967297",	10}, +		{"9223372036854775806",	10}, +		{"9223372036854775807",	10}, +		{"9223372036854775808",	10}, +		{"9223372036854775809",	10}, +		{"18446744073709551614",	10}, +		{"18446744073709551615",	10}, +		{"18446744073709551616",	10}, +		{"18446744073709551617",	10}, +	}; +	TEST_FAIL(kstrtos16, s16, "%hd", test_s16_fail); +} + +static void __init test_kstrtou8_ok(void) +{ +	DECLARE_TEST_OK(u8, struct test_u8); +	static DEFINE_TEST_OK(struct test_u8, test_u8_ok) = { +		{"0",	10,	0}, +		{"1",	10,	1}, +		{"126",	10,	126}, +		{"127",	10,	127}, +		{"128",	10,	128}, +		{"129",	10,	129}, +		{"254",	10,	254}, +		{"255",	10,	255}, +	}; +	TEST_OK(kstrtou8, u8, "%hhu", test_u8_ok); +} + +static void __init test_kstrtou8_fail(void) +{ +	static DEFINE_TEST_FAIL(test_u8_fail) = { +		{"-2",	10}, +		{"-1",	10}, +		{"256",	10}, +		{"257",	10}, +		{"32766",	10}, +		{"32767",	10}, +		{"32768",	10}, +		{"32769",	10}, +		{"65534",	10}, +		{"65535",	10}, +		{"65536",	10}, +		{"65537",	10}, +		{"2147483646",	10}, +		{"2147483647",	10}, +		{"2147483648",	10}, +		{"2147483649",	10}, +		{"4294967294",	10}, +		{"4294967295",	10}, +		{"4294967296",	10}, +		{"4294967297",	10}, +		{"9223372036854775806",	10}, +		{"9223372036854775807",	10}, +		{"9223372036854775808",	10}, +		{"9223372036854775809",	10}, +		{"18446744073709551614",	10}, +		{"18446744073709551615",	10}, +		{"18446744073709551616",	10}, +		{"18446744073709551617",	10}, +	}; +	TEST_FAIL(kstrtou8, u8, "%hhu", test_u8_fail); +} + +static void __init test_kstrtos8_ok(void) +{ +	DECLARE_TEST_OK(s8, struct test_s8); +	static DEFINE_TEST_OK(struct test_s8, test_s8_ok) = { +		{"-128",	10,	-128}, +		{"-127",	10,	-127}, +		{"-1",	10,	-1}, +		{"0",	10,	0}, +		{"1",	10,	1}, +		{"126",	10,	126}, +		{"127",	10,	127}, +	}; +	TEST_OK(kstrtos8, s8, "%hhd", test_s8_ok); +} + +static void __init test_kstrtos8_fail(void) +{ +	static DEFINE_TEST_FAIL(test_s8_fail) = { +		{"-130",	10}, +		{"-129",	10}, +		{"128",	10}, +		{"129",	10}, +		{"254",	10}, +		{"255",	10}, +		{"256",	10}, +		{"257",	10}, +		{"32766",	10}, +		{"32767",	10}, +		{"32768",	10}, +		{"32769",	10}, +		{"65534",	10}, +		{"65535",	10}, +		{"65536",	10}, +		{"65537",	10}, +		{"2147483646",	10}, +		{"2147483647",	10}, +		{"2147483648",	10}, +		{"2147483649",	10}, +		{"4294967294",	10}, +		{"4294967295",	10}, +		{"4294967296",	10}, +		{"4294967297",	10}, +		{"9223372036854775806",	10}, +		{"9223372036854775807",	10}, +		{"9223372036854775808",	10}, +		{"9223372036854775809",	10}, +		{"18446744073709551614",	10}, +		{"18446744073709551615",	10}, +		{"18446744073709551616",	10}, +		{"18446744073709551617",	10}, +	}; +	TEST_FAIL(kstrtos8, s8, "%hhd", test_s8_fail); +} + +static int __init test_kstrtox_init(void) +{ +	test_kstrtoull_ok(); +	test_kstrtoull_fail(); +	test_kstrtoll_ok(); +	test_kstrtoll_fail(); + +	test_kstrtou64_ok(); +	test_kstrtou64_fail(); +	test_kstrtos64_ok(); +	test_kstrtos64_fail(); + +	test_kstrtou32_ok(); +	test_kstrtou32_fail(); +	test_kstrtos32_ok(); +	test_kstrtos32_fail(); + +	test_kstrtou16_ok(); +	test_kstrtou16_fail(); +	test_kstrtos16_ok(); +	test_kstrtos16_fail(); + +	test_kstrtou8_ok(); +	test_kstrtou8_fail(); +	test_kstrtos8_ok(); +	test_kstrtos8_fail(); +	return -EINVAL; +} +module_init(test_kstrtox_init); +MODULE_LICENSE("Dual BSD/GPL");  | 
