On Fri, Jun 28, 2013 at 03:32:42PM +0900, Akira TAGOH wrote: > On Wed, Jun 26, 2013 at 12:15 AM, Thomas Klausner <wiz@xxxxxxxxxx> wrote: > > And a few warnings because the is* macros on NetBSD only accept EOF or > > unsigned char. These are usually fixed by adding casts, i.e. > > "isspace((unsigned char)foo)". > > > > GEN fc-case > > fc-case.c:217:10: warning: array subscript is of type 'char' [-Wchar-subscripts] > > if (!isxdigit (line[0])) > > ^~~~~~~~~~~~~~~~~~ > > /usr/include/sys/ctype_inline.h:58:45: note: expanded from macro 'isxdigit' > > #define isxdigit(c) ((int)((_ctype_tab_ + 1)[(c)] & _CTYPE_X)) > > ^~~~ > > 1 warning generated. > > shouldn't this issue be rather fixed in macro to deal with the > subscript as integer because of C99 and POSIX spec? Here's a part of the isdigit man page by the Open Group for IEEE Std 1003.1, 2013 Edition: "The c argument is an int, the value of which the application shall ensure is a character representable as an unsigned char or equal to the value of the macro EOF. If the argument has any other value, the behavior is undefined." http://pubs.opengroup.org/onlinepubs/9699919799/functions/isdigit.html In C99, AFAICT, the sentence is quite similar: "In all cases the argument is an int, the value of which shall be representable as an unsigned char or shall equal the value of the macro EOF. If the argument has any other value, the behavior is undefined." Here's a part of from ctype(3) on NetBSD: CAVEATS The first argument of these functions is of type int, but only a very restricted subset of values are actually valid. The argument must either be the value of the macro EOF (which has a negative value), or must be a non-negative value within the range representable as unsigned char. Passing invalid values leads to undefined behavior. Values of type int that were returned by getc(3), fgetc(3), and similar functions or macros are already in the correct range, and may be safely passed to these ctype functions without any casts. Values of type char or signed char must first be cast to unsigned char, to ensure that the values are within the correct range. The result should then be cast to int to avoid warnings from some compilers. Casting a negative-valued char or signed char directly to int will produce a negative-valued int, which will be outside the range of allowed values (unless it happens to be equal to EOF, but even that would not give the desired result). http://netbsd.gw.com/cgi-bin/man-cgi?ctype++NetBSD-current Cheers, Thomas _______________________________________________ Fontconfig mailing list Fontconfig@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/fontconfig