What about doing ? ----
unsigned char ch; while (*p) { ch = (unsigned char)*p++; header[i++] = toupper(ch); } 2007/7/3, Ron Egyed <[EMAIL PROTECTED]>:
FYI, The following code in the sc_for_req_header function in module jk_ajp_common was getting a pointer error on version V5R4 of i5/OS (AS400). while (*p) header[i++] = toupper((unsigned char)*p++); IBM provided two solutions to this problem. I tried the 2nd solution of wrapping the toupper in parenthesis and the code works correctly when compiled with LOCALE(*LOCALEUTF). IBM's explanation. . . The reason for the different behavior is that the toupper() routine is implemented as a macro within the header file and the parameter is evaluated twice for the *LOCALEUTF version of the routine. The standard indicates that the routines within <ctype.h> may be implemented as macros - http://www.opengroup.org/onlinepubs/007908799/xsh/ctype.h.html Any routine which may be implemented as a macro is allowed to evaluate the parameter any number of times and thus using code like xxx(*p++) where xxx is a runtime routine is not portable. The standard does not state this for every routine which may be a macro, but it is true in all macro cases. Here is an example within the standard which explicitly states this fact for the getc() routine - http://www.opengroup.org/onlinepubs/007908799/xsh/getc.html . Here is an excerpt from that web page: Because it may be implemented as a macro, getc() may treat incorrectly a stream argument with side effects. In particular, getc(*f++) will not necessarily work as expected. Therefore, use of this function should be preceded by "#undef getc" in such situations; fgetc() could also be used. This yields the following solutions for such code: 1) use #undef toupper after <ctype.h> is included. 2) a second solution is to wrap the toupper call in parenthesis - e.g. (toupper)((unsigned char)*p++) Either of these solutions can be used to 'disable' the macro version and allow both methods to work correctly.
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]