brintos

brintos / linux-shallow public Read only

0
0
Text · 17.4 KiB · ee87fef Raw
737 lines · c
1#include <linux/init.h>2#include <linux/kernel.h>3#include <linux/module.h>4 5#define for_each_test(i, test)	\6	for (i = 0; i < ARRAY_SIZE(test); i++)7 8struct test_fail {9	const char *str;10	unsigned int base;11};12 13#define DEFINE_TEST_FAIL(test)	\14	const struct test_fail test[] __initconst15 16#define DECLARE_TEST_OK(type, test_type)	\17	test_type {				\18		const char *str;		\19		unsigned int base;		\20		type expected_res;		\21	}22 23#define DEFINE_TEST_OK(type, test)	\24	const type test[] __initconst25 26#define TEST_FAIL(fn, type, fmt, test)					\27{									\28	unsigned int i;							\29									\30	for_each_test(i, test) {					\31		const struct test_fail *t = &test[i];			\32		type tmp;						\33		int rv;							\34									\35		tmp = 0;						\36		rv = fn(t->str, t->base, &tmp);				\37		if (rv >= 0) {						\38			WARN(1, "str '%s', base %u, expected -E, got %d/" fmt "\n",	\39				t->str, t->base, rv, tmp);		\40			continue;					\41		}							\42	}								\43}44 45#define TEST_OK(fn, type, fmt, test)					\46{									\47	unsigned int i;							\48									\49	for_each_test(i, test) {					\50		const typeof(test[0]) *t = &test[i];			\51		type res;						\52		int rv;							\53									\54		rv = fn(t->str, t->base, &res);				\55		if (rv != 0) {						\56			WARN(1, "str '%s', base %u, expected 0/" fmt ", got %d\n",	\57				t->str, t->base, t->expected_res, rv);	\58			continue;					\59		}							\60		if (res != t->expected_res) {				\61			WARN(1, "str '%s', base %u, expected " fmt ", got " fmt "\n",	\62				t->str, t->base, t->expected_res, res);	\63			continue;					\64		}							\65	}								\66}67 68static void __init test_kstrtoull_ok(void)69{70	DECLARE_TEST_OK(unsigned long long, struct test_ull);71	static DEFINE_TEST_OK(struct test_ull, test_ull_ok) = {72		{"0",	10,	0ULL},73		{"1",	10,	1ULL},74		{"127",	10,	127ULL},75		{"128",	10,	128ULL},76		{"129",	10,	129ULL},77		{"255",	10,	255ULL},78		{"256",	10,	256ULL},79		{"257",	10,	257ULL},80		{"32767",	10,	32767ULL},81		{"32768",	10,	32768ULL},82		{"32769",	10,	32769ULL},83		{"65535",	10,	65535ULL},84		{"65536",	10,	65536ULL},85		{"65537",	10,	65537ULL},86		{"2147483647",	10,	2147483647ULL},87		{"2147483648",	10,	2147483648ULL},88		{"2147483649",	10,	2147483649ULL},89		{"4294967295",	10,	4294967295ULL},90		{"4294967296",	10,	4294967296ULL},91		{"4294967297",	10,	4294967297ULL},92		{"9223372036854775807",	10,	9223372036854775807ULL},93		{"9223372036854775808",	10,	9223372036854775808ULL},94		{"9223372036854775809",	10,	9223372036854775809ULL},95		{"18446744073709551614",	10,	18446744073709551614ULL},96		{"18446744073709551615",	10,	18446744073709551615ULL},97 98		{"00",		8,	00ULL},99		{"01",		8,	01ULL},100		{"0177",	8,	0177ULL},101		{"0200",	8,	0200ULL},102		{"0201",	8,	0201ULL},103		{"0377",	8,	0377ULL},104		{"0400",	8,	0400ULL},105		{"0401",	8,	0401ULL},106		{"077777",	8,	077777ULL},107		{"0100000",	8,	0100000ULL},108		{"0100001",	8,	0100001ULL},109		{"0177777",	8,	0177777ULL},110		{"0200000",	8,	0200000ULL},111		{"0200001",	8,	0200001ULL},112		{"017777777777",	8,	017777777777ULL},113		{"020000000000",	8,	020000000000ULL},114		{"020000000001",	8,	020000000001ULL},115		{"037777777777",	8,	037777777777ULL},116		{"040000000000",	8,	040000000000ULL},117		{"040000000001",	8,	040000000001ULL},118		{"0777777777777777777777",	8,	0777777777777777777777ULL},119		{"01000000000000000000000",	8,	01000000000000000000000ULL},120		{"01000000000000000000001",	8,	01000000000000000000001ULL},121		{"01777777777777777777776",	8,	01777777777777777777776ULL},122		{"01777777777777777777777",	8,	01777777777777777777777ULL},123 124		{"0x0",		16,	0x0ULL},125		{"0x1",		16,	0x1ULL},126		{"0x7f",	16,	0x7fULL},127		{"0x80",	16,	0x80ULL},128		{"0x81",	16,	0x81ULL},129		{"0xff",	16,	0xffULL},130		{"0x100",	16,	0x100ULL},131		{"0x101",	16,	0x101ULL},132		{"0x7fff",	16,	0x7fffULL},133		{"0x8000",	16,	0x8000ULL},134		{"0x8001",	16,	0x8001ULL},135		{"0xffff",	16,	0xffffULL},136		{"0x10000",	16,	0x10000ULL},137		{"0x10001",	16,	0x10001ULL},138		{"0x7fffffff",	16,	0x7fffffffULL},139		{"0x80000000",	16,	0x80000000ULL},140		{"0x80000001",	16,	0x80000001ULL},141		{"0xffffffff",	16,	0xffffffffULL},142		{"0x100000000",	16,	0x100000000ULL},143		{"0x100000001",	16,	0x100000001ULL},144		{"0x7fffffffffffffff",	16,	0x7fffffffffffffffULL},145		{"0x8000000000000000",	16,	0x8000000000000000ULL},146		{"0x8000000000000001",	16,	0x8000000000000001ULL},147		{"0xfffffffffffffffe",	16,	0xfffffffffffffffeULL},148		{"0xffffffffffffffff",	16,	0xffffffffffffffffULL},149 150		{"0\n",	0,	0ULL},151	};152	TEST_OK(kstrtoull, unsigned long long, "%llu", test_ull_ok);153}154 155static void __init test_kstrtoull_fail(void)156{157	static DEFINE_TEST_FAIL(test_ull_fail) = {158		{"",	0},159		{"",	8},160		{"",	10},161		{"",	16},162		{"\n",	0},163		{"\n",	8},164		{"\n",	10},165		{"\n",	16},166		{"\n0",	0},167		{"\n0",	8},168		{"\n0",	10},169		{"\n0",	16},170		{"+",	0},171		{"+",	8},172		{"+",	10},173		{"+",	16},174		{"-",	0},175		{"-",	8},176		{"-",	10},177		{"-",	16},178		{"0x",	0},179		{"0x",	16},180		{"0X",	0},181		{"0X",	16},182		{"0 ",	0},183		{"1+",	0},184		{"1-",	0},185		{" 2",	0},186		/* base autodetection */187		{"0x0z",	0},188		{"0z",		0},189		{"a",		0},190		/* digit >= base */191		{"2",	2},192		{"8",	8},193		{"a",	10},194		{"A",	10},195		{"g",	16},196		{"G",	16},197		/* overflow */198		{"10000000000000000000000000000000000000000000000000000000000000000",	2},199		{"2000000000000000000000",	8},200		{"18446744073709551616",	10},201		{"10000000000000000",	16},202		/* negative */203		{"-0", 0},204		{"-0", 8},205		{"-0", 10},206		{"-0", 16},207		{"-1", 0},208		{"-1", 8},209		{"-1", 10},210		{"-1", 16},211		/* sign is first character if any */212		{"-+1", 0},213		{"-+1", 8},214		{"-+1", 10},215		{"-+1", 16},216		/* nothing after \n */217		{"0\n0", 0},218		{"0\n0", 8},219		{"0\n0", 10},220		{"0\n0", 16},221		{"0\n+", 0},222		{"0\n+", 8},223		{"0\n+", 10},224		{"0\n+", 16},225		{"0\n-", 0},226		{"0\n-", 8},227		{"0\n-", 10},228		{"0\n-", 16},229		{"0\n ", 0},230		{"0\n ", 8},231		{"0\n ", 10},232		{"0\n ", 16},233	};234	TEST_FAIL(kstrtoull, unsigned long long, "%llu", test_ull_fail);235}236 237static void __init test_kstrtoll_ok(void)238{239	DECLARE_TEST_OK(long long, struct test_ll);240	static DEFINE_TEST_OK(struct test_ll, test_ll_ok) = {241		{"0",	10,	0LL},242		{"1",	10,	1LL},243		{"127",	10,	127LL},244		{"128",	10,	128LL},245		{"129",	10,	129LL},246		{"255",	10,	255LL},247		{"256",	10,	256LL},248		{"257",	10,	257LL},249		{"32767",	10,	32767LL},250		{"32768",	10,	32768LL},251		{"32769",	10,	32769LL},252		{"65535",	10,	65535LL},253		{"65536",	10,	65536LL},254		{"65537",	10,	65537LL},255		{"2147483647",	10,	2147483647LL},256		{"2147483648",	10,	2147483648LL},257		{"2147483649",	10,	2147483649LL},258		{"4294967295",	10,	4294967295LL},259		{"4294967296",	10,	4294967296LL},260		{"4294967297",	10,	4294967297LL},261		{"9223372036854775807",	10,	9223372036854775807LL},262 263		{"-0",	10,	0LL},264		{"-1",	10,	-1LL},265		{"-2",	10,	-2LL},266		{"-9223372036854775808",	10,	LLONG_MIN},267	};268	TEST_OK(kstrtoll, long long, "%lld", test_ll_ok);269}270 271static void __init test_kstrtoll_fail(void)272{273	static DEFINE_TEST_FAIL(test_ll_fail) = {274		{"9223372036854775808",	10},275		{"9223372036854775809",	10},276		{"18446744073709551614",	10},277		{"18446744073709551615",	10},278		{"-9223372036854775809",	10},279		{"-18446744073709551614",	10},280		{"-18446744073709551615",	10},281		/* sign is first character if any */282		{"-+1", 0},283		{"-+1", 8},284		{"-+1", 10},285		{"-+1", 16},286	};287	TEST_FAIL(kstrtoll, long long, "%lld", test_ll_fail);288}289 290static void __init test_kstrtou64_ok(void)291{292	DECLARE_TEST_OK(u64, struct test_u64);293	static DEFINE_TEST_OK(struct test_u64, test_u64_ok) = {294		{"0",	10,	0},295		{"1",	10,	1},296		{"126",	10,	126},297		{"127",	10,	127},298		{"128",	10,	128},299		{"129",	10,	129},300		{"254",	10,	254},301		{"255",	10,	255},302		{"256",	10,	256},303		{"257",	10,	257},304		{"32766",	10,	32766},305		{"32767",	10,	32767},306		{"32768",	10,	32768},307		{"32769",	10,	32769},308		{"65534",	10,	65534},309		{"65535",	10,	65535},310		{"65536",	10,	65536},311		{"65537",	10,	65537},312		{"2147483646",	10,	2147483646},313		{"2147483647",	10,	2147483647},314		{"2147483648",	10,	2147483648ULL},315		{"2147483649",	10,	2147483649ULL},316		{"4294967294",	10,	4294967294ULL},317		{"4294967295",	10,	4294967295ULL},318		{"4294967296",	10,	4294967296ULL},319		{"4294967297",	10,	4294967297ULL},320		{"9223372036854775806",	10,	9223372036854775806ULL},321		{"9223372036854775807",	10,	9223372036854775807ULL},322		{"9223372036854775808",	10,	9223372036854775808ULL},323		{"9223372036854775809",	10,	9223372036854775809ULL},324		{"18446744073709551614",	10,	18446744073709551614ULL},325		{"18446744073709551615",	10,	18446744073709551615ULL},326	};327	TEST_OK(kstrtou64, u64, "%llu", test_u64_ok);328}329 330static void __init test_kstrtou64_fail(void)331{332	static DEFINE_TEST_FAIL(test_u64_fail) = {333		{"-2",	10},334		{"-1",	10},335		{"18446744073709551616",	10},336		{"18446744073709551617",	10},337	};338	TEST_FAIL(kstrtou64, u64, "%llu", test_u64_fail);339}340 341static void __init test_kstrtos64_ok(void)342{343	DECLARE_TEST_OK(s64, struct test_s64);344	static DEFINE_TEST_OK(struct test_s64, test_s64_ok) = {345		{"-128",	10,	-128},346		{"-127",	10,	-127},347		{"-1",	10,	-1},348		{"0",	10,	0},349		{"1",	10,	1},350		{"126",	10,	126},351		{"127",	10,	127},352		{"128",	10,	128},353		{"129",	10,	129},354		{"254",	10,	254},355		{"255",	10,	255},356		{"256",	10,	256},357		{"257",	10,	257},358		{"32766",	10,	32766},359		{"32767",	10,	32767},360		{"32768",	10,	32768},361		{"32769",	10,	32769},362		{"65534",	10,	65534},363		{"65535",	10,	65535},364		{"65536",	10,	65536},365		{"65537",	10,	65537},366		{"2147483646",	10,	2147483646},367		{"2147483647",	10,	2147483647},368		{"2147483648",	10,	2147483648LL},369		{"2147483649",	10,	2147483649LL},370		{"4294967294",	10,	4294967294LL},371		{"4294967295",	10,	4294967295LL},372		{"4294967296",	10,	4294967296LL},373		{"4294967297",	10,	4294967297LL},374		{"9223372036854775806",	10,	9223372036854775806LL},375		{"9223372036854775807",	10,	9223372036854775807LL},376	};377	TEST_OK(kstrtos64, s64, "%lld", test_s64_ok);378}379 380static void __init test_kstrtos64_fail(void)381{382	static DEFINE_TEST_FAIL(test_s64_fail) = {383		{"9223372036854775808",	10},384		{"9223372036854775809",	10},385		{"18446744073709551614",	10},386		{"18446744073709551615",	10},387		{"18446744073709551616",	10},388		{"18446744073709551617",	10},389	};390	TEST_FAIL(kstrtos64, s64, "%lld", test_s64_fail);391}392 393static void __init test_kstrtou32_ok(void)394{395	DECLARE_TEST_OK(u32, struct test_u32);396	static DEFINE_TEST_OK(struct test_u32, test_u32_ok) = {397		{"0",	10,	0},398		{"1",	10,	1},399		{"126",	10,	126},400		{"127",	10,	127},401		{"128",	10,	128},402		{"129",	10,	129},403		{"254",	10,	254},404		{"255",	10,	255},405		{"256",	10,	256},406		{"257",	10,	257},407		{"32766",	10,	32766},408		{"32767",	10,	32767},409		{"32768",	10,	32768},410		{"32769",	10,	32769},411		{"65534",	10,	65534},412		{"65535",	10,	65535},413		{"65536",	10,	65536},414		{"65537",	10,	65537},415		{"2147483646",	10,	2147483646},416		{"2147483647",	10,	2147483647},417		{"2147483648",	10,	2147483648U},418		{"2147483649",	10,	2147483649U},419		{"4294967294",	10,	4294967294U},420		{"4294967295",	10,	4294967295U},421	};422	TEST_OK(kstrtou32, u32, "%u", test_u32_ok);423}424 425static void __init test_kstrtou32_fail(void)426{427	static DEFINE_TEST_FAIL(test_u32_fail) = {428		{"-2",	10},429		{"-1",	10},430		{"4294967296",	10},431		{"4294967297",	10},432		{"9223372036854775806",	10},433		{"9223372036854775807",	10},434		{"9223372036854775808",	10},435		{"9223372036854775809",	10},436		{"18446744073709551614",	10},437		{"18446744073709551615",	10},438		{"18446744073709551616",	10},439		{"18446744073709551617",	10},440	};441	TEST_FAIL(kstrtou32, u32, "%u", test_u32_fail);442}443 444static void __init test_kstrtos32_ok(void)445{446	DECLARE_TEST_OK(s32, struct test_s32);447	static DEFINE_TEST_OK(struct test_s32, test_s32_ok) = {448		{"-128",	10,	-128},449		{"-127",	10,	-127},450		{"-1",	10,	-1},451		{"0",	10,	0},452		{"1",	10,	1},453		{"126",	10,	126},454		{"127",	10,	127},455		{"128",	10,	128},456		{"129",	10,	129},457		{"254",	10,	254},458		{"255",	10,	255},459		{"256",	10,	256},460		{"257",	10,	257},461		{"32766",	10,	32766},462		{"32767",	10,	32767},463		{"32768",	10,	32768},464		{"32769",	10,	32769},465		{"65534",	10,	65534},466		{"65535",	10,	65535},467		{"65536",	10,	65536},468		{"65537",	10,	65537},469		{"2147483646",	10,	2147483646},470		{"2147483647",	10,	2147483647},471	};472	TEST_OK(kstrtos32, s32, "%d", test_s32_ok);473}474 475static void __init test_kstrtos32_fail(void)476{477	static DEFINE_TEST_FAIL(test_s32_fail) = {478		{"2147483648",	10},479		{"2147483649",	10},480		{"4294967294",	10},481		{"4294967295",	10},482		{"4294967296",	10},483		{"4294967297",	10},484		{"9223372036854775806",	10},485		{"9223372036854775807",	10},486		{"9223372036854775808",	10},487		{"9223372036854775809",	10},488		{"18446744073709551614",	10},489		{"18446744073709551615",	10},490		{"18446744073709551616",	10},491		{"18446744073709551617",	10},492	};493	TEST_FAIL(kstrtos32, s32, "%d", test_s32_fail);494}495 496static void __init test_kstrtou16_ok(void)497{498	DECLARE_TEST_OK(u16, struct test_u16);499	static DEFINE_TEST_OK(struct test_u16, test_u16_ok) = {500		{"0",	10,	0},501		{"1",	10,	1},502		{"126",	10,	126},503		{"127",	10,	127},504		{"128",	10,	128},505		{"129",	10,	129},506		{"254",	10,	254},507		{"255",	10,	255},508		{"256",	10,	256},509		{"257",	10,	257},510		{"32766",	10,	32766},511		{"32767",	10,	32767},512		{"32768",	10,	32768},513		{"32769",	10,	32769},514		{"65534",	10,	65534},515		{"65535",	10,	65535},516	};517	TEST_OK(kstrtou16, u16, "%hu", test_u16_ok);518}519 520static void __init test_kstrtou16_fail(void)521{522	static DEFINE_TEST_FAIL(test_u16_fail) = {523		{"-2",	10},524		{"-1",	10},525		{"65536",	10},526		{"65537",	10},527		{"2147483646",	10},528		{"2147483647",	10},529		{"2147483648",	10},530		{"2147483649",	10},531		{"4294967294",	10},532		{"4294967295",	10},533		{"4294967296",	10},534		{"4294967297",	10},535		{"9223372036854775806",	10},536		{"9223372036854775807",	10},537		{"9223372036854775808",	10},538		{"9223372036854775809",	10},539		{"18446744073709551614",	10},540		{"18446744073709551615",	10},541		{"18446744073709551616",	10},542		{"18446744073709551617",	10},543	};544	TEST_FAIL(kstrtou16, u16, "%hu", test_u16_fail);545}546 547static void __init test_kstrtos16_ok(void)548{549	DECLARE_TEST_OK(s16, struct test_s16);550	static DEFINE_TEST_OK(struct test_s16, test_s16_ok) = {551		{"-130",	10,	-130},552		{"-129",	10,	-129},553		{"-128",	10,	-128},554		{"-127",	10,	-127},555		{"-1",	10,	-1},556		{"0",	10,	0},557		{"1",	10,	1},558		{"126",	10,	126},559		{"127",	10,	127},560		{"128",	10,	128},561		{"129",	10,	129},562		{"254",	10,	254},563		{"255",	10,	255},564		{"256",	10,	256},565		{"257",	10,	257},566		{"32766",	10,	32766},567		{"32767",	10,	32767},568	};569	TEST_OK(kstrtos16, s16, "%hd", test_s16_ok);570}571 572static void __init test_kstrtos16_fail(void)573{574	static DEFINE_TEST_FAIL(test_s16_fail) = {575		{"32768",	10},576		{"32769",	10},577		{"65534",	10},578		{"65535",	10},579		{"65536",	10},580		{"65537",	10},581		{"2147483646",	10},582		{"2147483647",	10},583		{"2147483648",	10},584		{"2147483649",	10},585		{"4294967294",	10},586		{"4294967295",	10},587		{"4294967296",	10},588		{"4294967297",	10},589		{"9223372036854775806",	10},590		{"9223372036854775807",	10},591		{"9223372036854775808",	10},592		{"9223372036854775809",	10},593		{"18446744073709551614",	10},594		{"18446744073709551615",	10},595		{"18446744073709551616",	10},596		{"18446744073709551617",	10},597	};598	TEST_FAIL(kstrtos16, s16, "%hd", test_s16_fail);599}600 601static void __init test_kstrtou8_ok(void)602{603	DECLARE_TEST_OK(u8, struct test_u8);604	static DEFINE_TEST_OK(struct test_u8, test_u8_ok) = {605		{"0",	10,	0},606		{"1",	10,	1},607		{"126",	10,	126},608		{"127",	10,	127},609		{"128",	10,	128},610		{"129",	10,	129},611		{"254",	10,	254},612		{"255",	10,	255},613	};614	TEST_OK(kstrtou8, u8, "%hhu", test_u8_ok);615}616 617static void __init test_kstrtou8_fail(void)618{619	static DEFINE_TEST_FAIL(test_u8_fail) = {620		{"-2",	10},621		{"-1",	10},622		{"256",	10},623		{"257",	10},624		{"32766",	10},625		{"32767",	10},626		{"32768",	10},627		{"32769",	10},628		{"65534",	10},629		{"65535",	10},630		{"65536",	10},631		{"65537",	10},632		{"2147483646",	10},633		{"2147483647",	10},634		{"2147483648",	10},635		{"2147483649",	10},636		{"4294967294",	10},637		{"4294967295",	10},638		{"4294967296",	10},639		{"4294967297",	10},640		{"9223372036854775806",	10},641		{"9223372036854775807",	10},642		{"9223372036854775808",	10},643		{"9223372036854775809",	10},644		{"18446744073709551614",	10},645		{"18446744073709551615",	10},646		{"18446744073709551616",	10},647		{"18446744073709551617",	10},648	};649	TEST_FAIL(kstrtou8, u8, "%hhu", test_u8_fail);650}651 652static void __init test_kstrtos8_ok(void)653{654	DECLARE_TEST_OK(s8, struct test_s8);655	static DEFINE_TEST_OK(struct test_s8, test_s8_ok) = {656		{"-128",	10,	-128},657		{"-127",	10,	-127},658		{"-1",	10,	-1},659		{"0",	10,	0},660		{"1",	10,	1},661		{"126",	10,	126},662		{"127",	10,	127},663	};664	TEST_OK(kstrtos8, s8, "%hhd", test_s8_ok);665}666 667static void __init test_kstrtos8_fail(void)668{669	static DEFINE_TEST_FAIL(test_s8_fail) = {670		{"-130",	10},671		{"-129",	10},672		{"128",	10},673		{"129",	10},674		{"254",	10},675		{"255",	10},676		{"256",	10},677		{"257",	10},678		{"32766",	10},679		{"32767",	10},680		{"32768",	10},681		{"32769",	10},682		{"65534",	10},683		{"65535",	10},684		{"65536",	10},685		{"65537",	10},686		{"2147483646",	10},687		{"2147483647",	10},688		{"2147483648",	10},689		{"2147483649",	10},690		{"4294967294",	10},691		{"4294967295",	10},692		{"4294967296",	10},693		{"4294967297",	10},694		{"9223372036854775806",	10},695		{"9223372036854775807",	10},696		{"9223372036854775808",	10},697		{"9223372036854775809",	10},698		{"18446744073709551614",	10},699		{"18446744073709551615",	10},700		{"18446744073709551616",	10},701		{"18446744073709551617",	10},702	};703	TEST_FAIL(kstrtos8, s8, "%hhd", test_s8_fail);704}705 706static int __init test_kstrtox_init(void)707{708	test_kstrtoull_ok();709	test_kstrtoull_fail();710	test_kstrtoll_ok();711	test_kstrtoll_fail();712 713	test_kstrtou64_ok();714	test_kstrtou64_fail();715	test_kstrtos64_ok();716	test_kstrtos64_fail();717 718	test_kstrtou32_ok();719	test_kstrtou32_fail();720	test_kstrtos32_ok();721	test_kstrtos32_fail();722 723	test_kstrtou16_ok();724	test_kstrtou16_fail();725	test_kstrtos16_ok();726	test_kstrtos16_fail();727 728	test_kstrtou8_ok();729	test_kstrtou8_fail();730	test_kstrtos8_ok();731	test_kstrtos8_fail();732	return -EINVAL;733}734module_init(test_kstrtox_init);735MODULE_DESCRIPTION("Module test for kstrto*() APIs");736MODULE_LICENSE("Dual BSD/GPL");737