/*++ Function: PAL_towupper See MSDN --*/ wchar_16 __cdecl PAL_towupper( wchar_16 c ) { #if HAVE_COREFOUNDATION PERF_ENTRY(towupper); ENTRY("towupper (c=%d)\n", c); if (!PAL_iswupper(c)) { CFMutableStringRef cfString = CFStringCreateMutable( kCFAllocatorDefault, 1); if (cfString != NULL) { CFStringAppendCharacters(cfString, (const UniChar*)&c, 1); CFStringUppercase(cfString, NULL); c = CFStringGetCharacterAtIndex(cfString, 0); CFRelease(cfString); } } LOGEXIT("towupper returns int %d\n", c ); PERF_EXIT(towupper); return c; #else /* HAVE_COREFOUNDATION */ UnicodeDataRec dataRec; PERF_ENTRY(towupper); ENTRY("towupper (c=%d)\n", c); if (!GetUnicodeData(c, &dataRec)) { TRACE( "Unable to retrieve unicode data for the character %c.\n", c ); LOGEXIT("towupper returns int %d\n", c ); PERF_EXIT(towupper); return c; } if ( (dataRec.C1_TYPE_FLAGS & C1_UPPER) || (dataRec.nOpposingCase == 0 )) { LOGEXIT("towupper returns int %d\n", c ); PERF_EXIT(towupper); return c; } else { LOGEXIT("towupper returns int %d\n", dataRec.nOpposingCase ); PERF_EXIT(towupper); return dataRec.nOpposingCase; } #endif /* HAVE_COREFOUNDATION */ }
/*++ Function: PAL_iswalpha See MSDN --*/ int __cdecl PAL_iswalpha( wchar_16 c ) { ENTRY( "PAL_iswalpha (c=%d)\n", c); if ( PAL_iswupper( c ) || PAL_iswlower( c ) ) { LOGEXIT( "PAL_iswalpha returns 1.\n" ); return 1; } LOGEXIT( "PAL_iswalpha returns 0.\n" ); return 0; }