X-Git-Url: https://pd.if.org/git/?a=blobdiff_plain;f=functions%2F_PDCLIB%2Fstrtox_main.c;fp=functions%2F_PDCLIB%2Fstrtox_main.c;h=0000000000000000000000000000000000000000;hb=4a0f7be8a12d4572aafa8484a06624c6962d5bd2;hp=86b6d42e18c4f05470a9f06c258de965b200dcf5;hpb=da7af311e101d691c9e7020495d01948c7611296;p=pdclib.old diff --git a/functions/_PDCLIB/strtox_main.c b/functions/_PDCLIB/strtox_main.c deleted file mode 100644 index 86b6d42..0000000 --- a/functions/_PDCLIB/strtox_main.c +++ /dev/null @@ -1,87 +0,0 @@ -/* $Id$ */ - -/* _PDCLIB_strtox_main( const char * *, int, _PDCLIB_uintmax_t, _PDCLIB_uintmax_t, int ) - - This file is part of the Public Domain C Library (PDCLib). - Permission is granted to use, modify, and / or redistribute at will. -*/ - -#include -#include -#include -#include - -#ifndef REGTEST -#include <_PDCLIB_int.h> -_PDCLIB_uintmax_t _PDCLIB_strtox_main( const char ** p, unsigned int base, uintmax_t error, uintmax_t limval, int limdigit, char * sign ) -{ - _PDCLIB_uintmax_t rc = 0; - int digit = -1; - const char * x; - while ( ( x = memchr( _PDCLIB_digits, tolower(**p), base ) ) != NULL ) - { - digit = x - _PDCLIB_digits; - if ( ( rc < limval ) || ( ( rc == limval ) && ( digit <= limdigit ) ) ) - { - rc = rc * base + (unsigned)digit; - ++(*p); - } - else - { - errno = ERANGE; - /* TODO: Only if endptr != NULL - but do we really want *another* parameter? */ - /* TODO: Earlier version was missing tolower() here but was not caught by tests */ - while ( memchr( _PDCLIB_digits, tolower(**p), base ) != NULL ) ++(*p); - /* TODO: This is ugly, but keeps caller from negating the error value */ - *sign = '+'; - return error; - } - } - if ( digit == -1 ) - { - *p = NULL; - return 0; - } - return rc; -} -#endif - -#ifdef TEST -#include <_PDCLIB_test.h> -#include - -int main( void ) -{ -#ifndef REGTEST - const char * p; - char test[] = "123_"; - char fail[] = "xxx"; - char sign = '-'; - /* basic functionality */ - p = test; - errno = 0; - TESTCASE( _PDCLIB_strtox_main( &p, 10u, (uintmax_t)999, (uintmax_t)12, 3, &sign ) == 123 ); - TESTCASE( errno == 0 ); - TESTCASE( p == &test[3] ); - /* proper functioning to smaller base */ - p = test; - TESTCASE( _PDCLIB_strtox_main( &p, 8u, (uintmax_t)999, (uintmax_t)12, 3, &sign ) == 0123 ); - TESTCASE( errno == 0 ); - TESTCASE( p == &test[3] ); - /* overflowing subject sequence must still return proper endptr */ - p = test; - TESTCASE( _PDCLIB_strtox_main( &p, 4u, (uintmax_t)999, (uintmax_t)1, 2, &sign ) == 999 ); - TESTCASE( errno == ERANGE ); - TESTCASE( p == &test[3] ); - TESTCASE( sign == '+' ); - /* testing conversion failure */ - errno = 0; - p = fail; - sign = '-'; - TESTCASE( _PDCLIB_strtox_main( &p, 10u, (uintmax_t)999, (uintmax_t)99, 8, &sign ) == 0 ); - TESTCASE( p == NULL ); -#endif - return TEST_RESULTS; -} - -#endif