diff options
| -rw-r--r-- | include/stdlib.h | 2 | ||||
| -rw-r--r-- | libc/stdlib/stdlib.c | 3 | ||||
| -rw-r--r-- | test/.gitignore | 1 | ||||
| -rw-r--r-- | test/stdlib/teststrtoq.c | 89 | 
4 files changed, 94 insertions, 1 deletions
diff --git a/include/stdlib.h b/include/stdlib.h index ce92ccd28..300edf04a 100644 --- a/include/stdlib.h +++ b/include/stdlib.h @@ -214,7 +214,7 @@ __END_NAMESPACE_STD  /* Convert a string to a quadword integer.  */  __extension__ -extern long long int strtoq (__const char *__restrict __nptr, +extern quad_t strtoq (__const char *__restrict __nptr,  			     char **__restrict __endptr, int __base)       __THROW __nonnull ((1)) __wur;  /* Convert a string to an unsigned quadword integer.  */ diff --git a/libc/stdlib/stdlib.c b/libc/stdlib/stdlib.c index ad0c4aac0..4d608eeac 100644 --- a/libc/stdlib/stdlib.c +++ b/libc/stdlib/stdlib.c @@ -342,6 +342,9 @@ extern __typeof(__XL_NPP(strtol)) __XL_NPP(strtoll);  libc_hidden_proto(__XL_NPP(strtoll))  strong_alias(__XL_NPP(strtol),__XL_NPP(strtoll))  libc_hidden_def(__XL_NPP(strtoll)) +#if !defined(L_strtol_l) +strong_alias(strtol,strtoq) +#endif  #endif  #endif diff --git a/test/.gitignore b/test/.gitignore index 605d16d55..991ce5f85 100644 --- a/test/.gitignore +++ b/test/.gitignore @@ -256,6 +256,7 @@ stdlib/test-canon  stdlib/test-canon2  stdlib/teston_exit  stdlib/teststrtol +stdlib/teststrtoq  string/bug-strcoll1  string/bug-strncat1  string/bug-strpbrk1 diff --git a/test/stdlib/teststrtoq.c b/test/stdlib/teststrtoq.c new file mode 100644 index 000000000..6e1a4cbc6 --- /dev/null +++ b/test/stdlib/teststrtoq.c @@ -0,0 +1,89 @@ + +#include <stdlib.h> +#include <stdio.h> + + +const char *strings[]={ +	/* some simple stuff */ +	"0", "1", "10", +	"100", "1000", "10000", "100000", "1000000", +	"10000000", "100000000", "1000000000", + +	/* negative */ +	"-0", "-1", "-10", +	"-100", "-1000", "-10000", "-100000", "-1000000", +	"-10000000", "-100000000", "-1000000000", + +	/* test base>10 */ +	"a", "b", "f", "g", "z", + +	/* test hex */ +	"0x0", "0x1", "0xa", "0xf", "0x10", + +	/* test octal */ +	"00", "01", "07", "08", "0a", "010", + +	/* other */ +	"0x8000000", + +	/* check overflow cases: (for 32 bit) */ +	"2147483645", +	"2147483646", +	"2147483647", +	"2147483648", +	"2147483649", +	"-2147483645", +	"-2147483646", +	"-2147483647", +	"-2147483648", +	"-2147483649", +	"4294967293", +	"4294967294", +	"4294967295", +	"4294967296", +	"4294967297", +	"-4294967293", +	"-4294967294", +	"-4294967295", +	"-4294967296", +	"-4294967297", + +	/* bad input tests */ +	"", +	"00", +	"0x", +	"0x0", +	"-", +	"+", +	" ", +	" -", +	" - 0", +}; +int n_tests=sizeof(strings)/sizeof(strings[0]); + + + +void do_test(int base); +void do_test(int base) +{ +	int i; +	quad_t n; +	char *endptr; + +	for(i=0;i<n_tests;i++){ +		n=strtoq(strings[i],&endptr,base); +		printf("strtoq(\"%s\",%d) len=%lu res=%qd\n", +			strings[i],base,(unsigned long)(endptr-strings[i]),n); +	} +} + +int main(int argc,char *argv[]) +{ +	do_test(0); +	do_test(8); +	do_test(10); +	do_test(16); +	do_test(36); + +	return 0; +}  | 
