#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/module.h>
#define for_each_test(i, test) \
for (i = 0 ; i < ARRAY_SIZE(test); 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 , 0 ULL},
{"1" , 10 , 1 ULL},
{"127" , 10 , 127 ULL},
{"128" , 10 , 128 ULL},
{"129" , 10 , 129 ULL},
{"255" , 10 , 255 ULL},
{"256" , 10 , 256 ULL},
{"257" , 10 , 257 ULL},
{"32767" , 10 , 32767 ULL},
{"32768" , 10 , 32768 ULL},
{"32769" , 10 , 32769 ULL},
{"65535" , 10 , 65535 ULL},
{"65536" , 10 , 65536 ULL},
{"65537" , 10 , 65537 ULL},
{"2147483647" , 10 , 2147483647 ULL},
{"2147483648" , 10 , 2147483648 ULL},
{"2147483649" , 10 , 2147483649 ULL},
{"4294967295" , 10 , 4294967295 ULL},
{"4294967296" , 10 , 4294967296 ULL},
{"4294967297" , 10 , 4294967297 ULL},
{"9223372036854775807" , 10 , 9223372036854775807 ULL},
{"9223372036854775808" , 10 , 9223372036854775808 ULL},
{"9223372036854775809" , 10 , 9223372036854775809 ULL},
{"18446744073709551614" , 10 , 18446744073709551614 ULL},
{"18446744073709551615" , 10 , 18446744073709551615 ULL},
{"00" , 8 , 00 ULL},
{"01" , 8 , 01 ULL},
{"0177" , 8 , 0177 ULL},
{"0200" , 8 , 0200 ULL},
{"0201" , 8 , 0201 ULL},
{"0377" , 8 , 0377 ULL},
{"0400" , 8 , 0400 ULL},
{"0401" , 8 , 0401 ULL},
{"077777" , 8 , 077777 ULL},
{"0100000" , 8 , 0100000 ULL},
{"0100001" , 8 , 0100001 ULL},
{"0177777" , 8 , 0177777 ULL},
{"0200000" , 8 , 0200000 ULL},
{"0200001" , 8 , 0200001 ULL},
{"017777777777" , 8 , 017777777777 ULL},
{"020000000000" , 8 , 020000000000 ULL},
{"020000000001" , 8 , 020000000001 ULL},
{"037777777777" , 8 , 037777777777 ULL},
{"040000000000" , 8 , 040000000000 ULL},
{"040000000001" , 8 , 040000000001 ULL},
{"0777777777777777777777" , 8 , 0777777777777777777777 ULL},
{"01000000000000000000000" , 8 , 01000000000000000000000 ULL},
{"01000000000000000000001" , 8 , 01000000000000000000001 ULL},
{"01777777777777777777776" , 8 , 01777777777777777777776 ULL},
{"01777777777777777777777" , 8 , 01777777777777777777777 ULL},
{"0x0" , 16 , 0 x0ULL},
{"0x1" , 16 , 0 x1ULL},
{"0x7f" , 16 , 0 x7fULL},
{"0x80" , 16 , 0 x80ULL},
{"0x81" , 16 , 0 x81ULL},
{"0xff" , 16 , 0 xffULL},
{"0x100" , 16 , 0 x100ULL},
{"0x101" , 16 , 0 x101ULL},
{"0x7fff" , 16 , 0 x7fffULL},
{"0x8000" , 16 , 0 x8000ULL},
{"0x8001" , 16 , 0 x8001ULL},
{"0xffff" , 16 , 0 xffffULL},
{"0x10000" , 16 , 0 x10000ULL},
{"0x10001" , 16 , 0 x10001ULL},
{"0x7fffffff" , 16 , 0 x7fffffffULL},
{"0x80000000" , 16 , 0 x80000000ULL},
{"0x80000001" , 16 , 0 x80000001ULL},
{"0xffffffff" , 16 , 0 xffffffffULL},
{"0x100000000" , 16 , 0 x100000000ULL},
{"0x100000001" , 16 , 0 x100000001ULL},
{"0x7fffffffffffffff" , 16 , 0 x7fffffffffffffffULL},
{"0x8000000000000000" , 16 , 0 x8000000000000000ULL},
{"0x8000000000000001" , 16 , 0 x8000000000000001ULL},
{"0xfffffffffffffffe" , 16 , 0 xfffffffffffffffeULL},
{"0xffffffffffffffff" , 16 , 0 xffffffffffffffffULL},
{"0\n" , 0 , 0 ULL},
};
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 , 0 LL},
{"1" , 10 , 1 LL},
{"127" , 10 , 127 LL},
{"128" , 10 , 128 LL},
{"129" , 10 , 129 LL},
{"255" , 10 , 255 LL},
{"256" , 10 , 256 LL},
{"257" , 10 , 257 LL},
{"32767" , 10 , 32767 LL},
{"32768" , 10 , 32768 LL},
{"32769" , 10 , 32769 LL},
{"65535" , 10 , 65535 LL},
{"65536" , 10 , 65536 LL},
{"65537" , 10 , 65537 LL},
{"2147483647" , 10 , 2147483647 LL},
{"2147483648" , 10 , 2147483648 LL},
{"2147483649" , 10 , 2147483649 LL},
{"4294967295" , 10 , 4294967295 LL},
{"4294967296" , 10 , 4294967296 LL},
{"4294967297" , 10 , 4294967297 LL},
{"9223372036854775807" , 10 , 9223372036854775807 LL},
{"-0" , 10 , 0 LL},
{"-1" , 10 , -1 LL},
{"-2" , 10 , -2 LL},
{"-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 },
/* 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 , 2147483648 ULL},
{"2147483649" , 10 , 2147483649 ULL},
{"4294967294" , 10 , 4294967294 ULL},
{"4294967295" , 10 , 4294967295 ULL},
{"4294967296" , 10 , 4294967296 ULL},
{"4294967297" , 10 , 4294967297 ULL},
{"9223372036854775806" , 10 , 9223372036854775806 ULL},
{"9223372036854775807" , 10 , 9223372036854775807 ULL},
{"9223372036854775808" , 10 , 9223372036854775808 ULL},
{"9223372036854775809" , 10 , 9223372036854775809 ULL},
{"18446744073709551614" , 10 , 18446744073709551614 ULL},
{"18446744073709551615" , 10 , 18446744073709551615 ULL},
};
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 , 2147483648 LL},
{"2147483649" , 10 , 2147483649 LL},
{"4294967294" , 10 , 4294967294 LL},
{"4294967295" , 10 , 4294967295 LL},
{"4294967296" , 10 , 4294967296 LL},
{"4294967297" , 10 , 4294967297 LL},
{"9223372036854775806" , 10 , 9223372036854775806 LL},
{"9223372036854775807" , 10 , 9223372036854775807 LL},
};
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 , 2147483648 U},
{"2147483649" , 10 , 2147483649 U},
{"4294967294" , 10 , 4294967294 U},
{"4294967295" , 10 , 4294967295 U},
};
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_DESCRIPTION("Module test for kstrto*() APIs" );
MODULE_LICENSE("Dual BSD/GPL" );
Messung V0.5 in Prozent C=95 H=92 G=93