>Martin Sebor wrote: > >PING? > >The sign extension issue is still there. I don't want it to >get forgotten. > >
It was not forgotten. I decided to re-add the inline functions to avoid having to cast to unsigned char all over the place. http://svn.apache.org/viewvc?view=rev&revision=643214 Travis >Martin Sebor wrote: >> >> [EMAIL PROTECTED] wrote: >>> Author: vitek >>> Date: Fri Mar 28 14:28:41 2008 >>> New Revision: 642397 >>> >>> URL: http://svn.apache.org/viewvc?rev=642397&view=rev >>> Log: >>> >>> 2008-03-28 Travis Vitek <[EMAIL PROTECTED]> >>> >>> STDCXX-714 >>> * tests/src/braceexp.cpp: Remove _rw_isspace(), >_rw_isupper() and >>> _rw_islower(). Use appropriate C library calls instead. >>> >>> STDCXX-716 >>> * tests/src/locale.cpp: Remove _rw_isspace(), _rw_toupper() and >>> _rw_tolower(). Use appropriate C library calls instead. >> >> >> Travis, the isxxx() functions take an int argument and that their >> domain is the values between 0 and UCHAR_MAX plus EOF (and their >> behavior is undefined otherwise -- IIRC, the Microsoft functions >> abort in the undefined case). When passed a plain char, the >> argument is subject to sign extension where the type signed and >> values between CHAR_MIN and -1 are invalid. To make sure the >> functions always behave correctly it's best to cast the argument >> to unsigned char. >> >> Martin >> >>> >>> >>> Modified: >>> stdcxx/trunk/tests/src/braceexp.cpp >>> stdcxx/trunk/tests/src/locale.cpp >>> >>> Modified: stdcxx/trunk/tests/src/braceexp.cpp >>> URL: >>> >http://svn.apache.org/viewvc/stdcxx/trunk/tests/src/braceexp.cp >p?rev=642397&r1=642396&r2=642397&view=diff >>> >=============================================================== >=============== >>> --- stdcxx/trunk/tests/src/braceexp.cpp (original) >>> +++ stdcxx/trunk/tests/src/braceexp.cpp Fri Mar 28 14:28:41 2008 >>> @@ -3,55 +3,14 @@ >>> >>> #include <stdlib.h> // for malloc(), free() >>> #include <string.h> // for memcpy() >>> +#include <ctype.h> // for isspace() >>> #include <assert.h> // for assert() >>> >>> #include <rw_braceexp.h> >>> >>> -inline int _rw_is_lower (int ch) >>> -{ >>> - switch (ch) { >>> - case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': >>> - case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': >>> - case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': >>> - case 's': case 't': case 'u': case 'v': case 'w': case 'x': >>> - case 'y': case 'z': >>> - return 1; >>> - } >>> - >>> - return 0; >>> -} >>> - >>> -inline int _rw_is_upper (int ch) >>> -{ >>> - switch (ch) { >>> - case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': >>> - case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': >>> - case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': >>> - case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': >>> - case 'Y': case 'Z': >>> - return 1; >>> - } >>> - >>> - return 0; >>> -} >>> - >>> -inline int _rw_is_space (int ch) >>> -{ >>> - switch (ch) >>> - { >>> - case '\n': >>> - case '\r': >>> - case '\t': >>> - case ' ': >>> - return 1; >>> - } >>> - >>> - return 0; >>> -} >>> - >>> inline int _rw_is_not_space (int ch) >>> { >>> - return !_rw_is_space (ch); >>> + return !isspace (ch); >>> } >>> >>> // search `beg' to `end' for a character that `fn' >>> @@ -696,8 +655,8 @@ >>> char cend = beg [4]; >>> >>> // only works if sequence characters are both lowercase or >>> uppercase. >>> - const int both_are_lower = _rw_is_lower (cbeg) && _rw_is_lower >>> (cend); >>> - const int both_are_upper = _rw_is_upper (cbeg) && _rw_is_upper >>> (cend); >>> + const int both_are_lower = islower (cbeg) && islower (cend); >>> + const int both_are_upper = isupper (cbeg) && isupper (cend); >>> >>> if (! (both_are_lower || both_are_upper)) >>> return 0; >>> @@ -1050,7 +1009,7 @@ >>> >>> while (tok_beg) >>> { >>> - const char* tok_end = _rw_find_match (tok_beg, end, >>> _rw_is_space); >>> + const char* tok_end = _rw_find_match (tok_beg, >end, isspace); >>> if (!tok_end) >>> tok_end = end; >>> >>> >>> Modified: stdcxx/trunk/tests/src/locale.cpp >>> URL: >>> >http://svn.apache.org/viewvc/stdcxx/trunk/tests/src/locale.cpp? >rev=642397&r1=642396&r2=642397&view=diff >>> >=============================================================== >=============== >>> --- stdcxx/trunk/tests/src/locale.cpp (original) >>> +++ stdcxx/trunk/tests/src/locale.cpp Fri Mar 28 14:28:41 2008 >>> @@ -951,59 +951,6 @@ >>> struct _rw_locale_entry* next; >>> }; >>> >>> -static int >>> -_rw_toupper (int chr) >>> -{ >>> - //if (chr < 'a' || 'z' < chr) >>> - // return chr; >>> - //return chr - 'a' + 'A'; >>> - switch (chr) >>> - { >>> - case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': >>> - case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': >>> - case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': >>> - case 's': case 't': case 'u': case 'v': case 'w': case 'x': >>> - case 'y': case 'z': >>> - return chr - 'a' + 'A'; >>> - } >>> - >>> - return chr; >>> -} >>> - >>> -static int >>> -_rw_tolower (int chr) >>> -{ >>> - //if (chr < 'A' || 'Z' < chr) >>> - // return chr; >>> - //return chr - 'A' + 'a'; >>> - switch (chr) >>> - { >>> - case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': >>> - case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': >>> - case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': >>> - case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': >>> - case 'Y': case 'Z': >>> - return chr - 'A' + 'a'; >>> - } >>> - >>> - return chr; >>> -} >>> - >>> -static int >>> -_rw_isspace (int chr) >>> -{ >>> - switch (chr) >>> - { >>> - case '\r': >>> - case '\n': >>> - case '\t': >>> - case ' ': >>> - return 1; >>> - } >>> - >>> - return 0; >>> -} >>> - >>> struct _rw_locale_array { >>> _rw_locale_entry* entries; >>> _RWSTD_SIZE_T count; >>> @@ -1205,7 +1152,7 @@ >>> for (const char* charset = nl_langinfo (CODESET); >>> *charset; >>> ++charset) { >>> - codeset [i++] = _rw_toupper (*charset); >>> + codeset [i++] = toupper (*charset); >>> } >>> >>> codeset [i] = '\0'; >>> @@ -1225,7 +1172,7 @@ >>> *encoding++ = '\0'; >>> >>> for (int n = 0; encoding [n]; ++n) >>> - encoding [n] = _rw_toupper (encoding [n]); >>> + encoding [n] = toupper (encoding [n]); >>> } >>> >>> char* country = strrchr (locale, '_'); >>> @@ -1233,13 +1180,13 @@ >>> *country++ = '\0'; >>> >>> for (int n = 0; country [n]; ++n) >>> - country [n] = _rw_toupper (country [n]); >>> + country [n] = toupper (country [n]); >>> } >>> >>> char* language = locale; >>> >>> for (int n = 0; language [n]; ++n) >>> - language [n] = _rw_tolower (language [n]); >>> + language [n] = tolower (language [n]); >>> >>> // use mapping databases to find the canonical >>> // names for each part of the locale name >>> @@ -1296,7 +1243,7 @@ >>> >>> // the canonical name for lookup >>> sprintf (entry->canonical_name, "%s-%s-%d-%s", >>> - planguage, pcountry, MB_CUR_MAX, pencoding); >>> + planguage, pcountry, int >(MB_CUR_MAX), pencoding); >>> >>> size += 1; >>> } >>> @@ -1527,7 +1474,7 @@ >>> >>> char* key = table_data + offset; >>> >>> - const int len = strcspn (key, "\r\n"); >>> + const size_t len = strcspn (key, "\r\n"); >>> key [len] = '\0'; >>> >>> // skip the newline if it is there >>> @@ -1541,27 +1488,27 @@ >>> // make upper or lower case as requested >>> if (upper_or_lower < 0) { >>> for (char* s = key; *s; ++s) >>> - *s = _rw_tolower (*s); >>> + *s = tolower (*s); >>> } >>> else if (0 < upper_or_lower) { >>> for (char* s = key; *s; ++s) >>> - *s = _rw_toupper (*s); >>> + *s = toupper (*s); >>> } >>> >>> // if first character of new line is not >whitespace, then we >>> have a new >>> // canonical name token >>> - if (!_rw_isspace (*key)) { >>> + if (!isspace (*key)) { >>> >>> canonical_name = key; >>> >>> // increment key past cannonical name >>> for (/**/; *key; ++key) >>> - if (_rw_isspace (*key)) >>> + if (isspace (*key)) >>> break; >>> } >>> >>> // kill whitespace >>> - while (_rw_isspace (*key)) >>> + while (isspace (*key)) >>> *key++ = '\0'; >>> >>> // key points to first non-whitespace after >canonical name >>> @@ -1582,11 +1529,11 @@ >>> *key++ = '\0'; >>> >>> // kill any whitespace before comma >>> - for (char* bey = key - 1; _rw_isspace >(*bey); --bey) >>> + for (char* bey = key - 1; isspace (*bey); --bey) >>> *bey = '\0'; >>> >>> // kill whitespace after comma >>> - while (_rw_isspace (*key)) >>> + while (isspace (*key)) >>> *key++ = '\0'; >>> >>> // ensure we have enough entries >>> >>> >>> >> >> >> > >-- >View this message in context: >http://www.nabble.com/Re%3A-svn-commit%3A-r642397---in--stdcxx- >trunk-tests-src%3A-braceexp.cpp-locale.cpp-tp16375460p16421931.html >Sent from the stdcxx-dev mailing list archive at Nabble.com. > >
