Me again, Here's a patch to fix ctypes. There was an off-by-one correction that looks like it isn't needed. Boundary conditions and single-entry items, like isspace(), now work for me. mh -- Martin Hicks Wild Open Source Inc. mort@wildopensource.com 613-266-2296 # This is a BitKeeper generated patch for the following project: # Project Name: The kernel C library # This patch format is intended for GNU patch command version 2.5 or higher. # This patch includes the following deltas: # ChangeSet 1.248 -> 1.249 # klibc/include/ctype.h 1.1 -> 1.2 # # The following is the BitKeeper ChangeSet Log # -------------------------------------------- # 03/11/24 mort@green.i.bork.org 1.249 # Fix ctypes. There was an off-by-one correction that wasn't necessary. # -------------------------------------------- # diff -Nru a/klibc/include/ctype.h b/klibc/include/ctype.h --- a/klibc/include/ctype.h Mon Nov 24 15:37:03 2003 +++ b/klibc/include/ctype.h Mon Nov 24 15:37:03 2003 @@ -35,13 +35,13 @@ __ctype_inline int isalnum(int __c) { - return __ctypes[__c+1] & + return __ctypes[__c] & (__ctype_upper|__ctype_lower|__ctype_digit); } __ctype_inline int isalpha(int __c) { - return __ctypes[__c+1] & + return __ctypes[__c] & (__ctype_upper|__ctype_lower); } @@ -57,48 +57,48 @@ __ctype_inline int iscntrl(int __c) { - return (__c >= 0) && !(__ctypes[__c+1] & __ctype_print); + return (__c >= 0) && !(__ctypes[__c] & __ctype_print); } __ctype_inline int isdigit(int __c) { - return __ctypes[__c+1] & __ctype_digit; + return __ctypes[__c] & __ctype_digit; } __ctype_inline int isgraph(int __c) { - return __ctypes[__c+1] & + return __ctypes[__c] & (__ctype_upper|__ctype_lower|__ctype_digit|__ctype_punct); } __ctype_inline int islower(int __c) { - return __ctypes[__c+1] & __ctype_lower; + return __ctypes[__c] & __ctype_lower; } __ctype_inline int isprint(int __c) { - return __ctypes[__c+1] & __ctype_print; + return __ctypes[__c] & __ctype_print; } __ctype_inline int ispunct(int __c) { - return __ctypes[__c+1] & __ctype_punct; + return __ctypes[__c] & __ctype_punct; } __ctype_inline int isspace(int __c) { - return __ctypes[__c+1] & __ctype_space; + return __ctypes[__c] & __ctype_space; } __ctype_inline int isupper(int __c) { - return __ctypes[__c+1] & __ctype_upper; + return __ctypes[__c] & __ctype_upper; } __ctype_inline int isxdigit(int __c) { - return __ctypes[__c+1] & __ctype_xdigit; + return __ctypes[__c] & __ctype_xdigit; } #define _toupper(__c) ((__c) & ~0x20)
H. Peter Anvin
2003-Nov-24 13:22 UTC
[klibc] Re: [PATCH] fix off-by-one correction in ctypes
Martin Hicks wrote:> Me again, > > Here's a patch to fix ctypes. There was an off-by-one correction that > looks like it isn't needed. Boundary conditions and single-entry items, > like isspace(), now work for me. >No, that correction is very much needed. However, the table was broken; it was fixed in the CVS tree and 0.82. -hpa