Index: osl/unx/nlsupport.c =================================================================== RCS file: /cvs/porting/sal/osl/unx/nlsupport.c,v retrieving revision 1.14.2.3 diff -u -r1.14.2.3 nlsupport.c --- osl/unx/nlsupport.c 21 May 2002 13:22:11 -0000 1.14.2.3 +++ osl/unx/nlsupport.c 2 Oct 2002 21:01:31 -0000 @@ -63,10 +63,16 @@ #include #include -#if defined(LINUX) || defined(SOLARIS) || defined(IRIX) || defined(NETBSD) +#if defined(LINUX) || defined(SOLARIS) || defined(IRIX) || defined(NETBSD) || defined(MACOSX) #include +#ifndef MACOSX #include #include +#else +#ifdef BUILD_OS_APPLEOSX +#include +#endif +#endif #endif /*****************************************************************************/ @@ -241,7 +247,7 @@ return NULL; } -#if defined(LINUX) || defined(SOLARIS) || defined(IRIX) || defined(NETBSD) +#if defined(LINUX) || defined(SOLARIS) || defined(IRIX) || defined(NETBSD) || defined(MACOSX) /* * This implementation of osl_getTextEncodingFromLocale maps @@ -315,7 +321,7 @@ { "sjis", RTL_TEXTENCODING_SHIFT_JIS }, /* Japan */ }; -#elif defined(LINUX) || defined(NETBSD) +#elif defined(LINUX) || defined(NETBSD) || defined(MACOSX) const _pair _nl_language_list[] = { { "ANSI_X3.110-1983", RTL_TEXTENCODING_DONTKNOW }, /* ISO-IR-99 NAPLPS */ @@ -496,10 +502,110 @@ { "WIN-SAMI-2", RTL_TEXTENCODING_DONTKNOW } /* WS2 */ }; -#endif /* ifdef LINUX || NETBSD */ +#endif /* ifdef LINUX || NETBSD || MACOSX */ + +#ifdef MACOSX +/* MacOS X has some special names for some of its encodings. These encoding names are + * returned by CFStringConvertEncodingToIANACharSetName() when given a CFTextEncoding + * argument from one of the ones in CFStringEncodingExt.h in the CoreFoundation framework. + */ +const _pair _macxp_language_list[] = { + { "X-MAC-JAPANESE", RTL_TEXTENCODING_EUC_JP }, /* kCFStringEncodingMacJapanese */ + { "X-MAC-TRAD-CHINESE", RTL_TEXTENCODING_APPLE_CHINTRAD }, /* kCFStringEncodingMacChineseTrad */ + { "X-MAC-KOREAN", RTL_TEXTENCODING_EUC_KR }, /* kCFStringEncodingMacKorean */ + { "X-MAC-ARABIC", RTL_TEXTENCODING_APPLE_ARABIC }, /* kCFStringEncodingMacArabic */ + { "X-MAC-HEBREW", RTL_TEXTENCODING_APPLE_HEBREW }, /* kCFStringEncodingMacHebrew */ + { "X-MAC-GREEK", RTL_TEXTENCODING_APPLE_GREEK }, /* kCFStringEncodingMacGreek */ + { "X-MAC-CYRILLIC", RTL_TEXTENCODING_APPLE_CYRILLIC }, /* kCFStringEncodingMacCyrillic */ + { "X-MAC-DEVANAGARI", RTL_TEXTENCODING_APPLE_DEVANAGARI }, /* kCFStringEncodingMacDevanagari */ + { "X-MAC-GURMUKHI", RTL_TEXTENCODING_APPLE_GURMUKHI }, /* kCFStringEncodingMacGurmukhi */ + { "X-MAC-GUJARATI", RTL_TEXTENCODING_APPLE_GUJARATI }, /* kCFStringEncodingMacGujarati */ + { "X-MAC-ORIYA", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingMacOriya */ + { "X-MAC-BENGALI", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingMacBengali */ + { "X-MAC-TAMIL", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingMacTamil */ + { "X-MAC-TELUGU", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingMacTelugu */ + { "X-MAC-KANNADA", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingMacKannada */ + { "X-MAC-MALAYALAM", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingMacMalayalam */ + { "X-MAC-SINHALESE", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingMacSinhalese */ + { "X-MAC-BURMESE", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingMacBurmese */ + { "X-MAC-KHMER", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingMacKhmer */ + { "X-MAC-THAI", RTL_TEXTENCODING_APPLE_THAI }, /* kCFStringEncodingMacThai */ + { "X-MAC-LAOTIAN", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingMacLaotian */ + { "X-MAC-GEORGIAN", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingMacGeorgian */ + { "X-MAC-ARMENIAN", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingMacArmenian */ + { "X-MAC-SIMP-CHINESE", RTL_TEXTENCODING_APPLE_CHINSIMP }, /* kCFStringEncodingMacChineseSimp */ + { "X-MAC-TIBETAN", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingMacTibetan */ + { "X-MAC-MONGOLIAN", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingMacMongolian */ + { "X-MAC-ETHIOPIC", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingMacEthiopic */ + { "X-MAC-CENTRALEURROMAN", RTL_TEXTENCODING_APPLE_CENTEURO }, /* kCFStringEncodingMacCentralEurRoman */ + { "X-MAC-VIETNAMESE", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingMacVietnamese */ + { "X-MAC-EXTARABIC", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingMacExtArabic */ + { "X-MAC-SYMBOL", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingMacSymbol */ + { "X-MAC-DINGBATS", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingMacDingbats */ + { "X-MAC-TURKISH", RTL_TEXTENCODING_APPLE_TURKISH }, /* kCFStringEncodingMacTurkish */ + { "X-MAC-CROATIAN", RTL_TEXTENCODING_APPLE_CROATIAN }, /* kCFStringEncodingMacCroatian */ + { "X-MAC-ICELANDIC", RTL_TEXTENCODING_APPLE_ICELAND }, /* kCFStringEncodingMacIcelandic */ + { "X-MAC-ROMANIAN", RTL_TEXTENCODING_APPLE_ROMANIAN }, /* kCFStringEncodingMacRomanian */ + { "UNICODE-2-0", RTL_TEXTENCODING_DONTKNOW }, /* */ + { "X-MAC-FARSI", RTL_TEXTENCODING_APPLE_FARSI }, /* kCFStringEncodingMacFarsi */ + { "X-MAC-UKRAINIAN", RTL_TEXTENCODING_APPLE_UKRAINIAN }, /* kCFStringEncodingMacUkrainian */ + { "X-MAC-VT100", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingMacVT100 */ + { "macintosh", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingMacHFS */ + { "UTF-16BE", RTL_TEXTENCODING_UNICODE }, /* kCFStringEncodingUnicode */ + { "UNICODE-1-1", RTL_TEXTENCODING_DONTKNOW }, /* */ + { "UNICODE-1-1", RTL_TEXTENCODING_DONTKNOW }, /* */ + { "UNICODE-2-0", RTL_TEXTENCODING_DONTKNOW }, /* */ + { "csUnicode", RTL_TEXTENCODING_DONTKNOW }, /* */ + { "CP437", RTL_TEXTENCODING_IBM_437 }, /* kCFStringEncodingDOSLatinUS */ + { "CP737", RTL_TEXTENCODING_IBM_737 }, /* kCFStringEncodingDOSGreek */ + { "CP775", RTL_TEXTENCODING_IBM_775 }, /* kCFStringEncodingDOSBalticRim */ + { "CP850", RTL_TEXTENCODING_IBM_850 }, /* kCFStringEncodingDOSLatin1 */ + { "CP852", RTL_TEXTENCODING_IBM_852 }, /* kCFStringEncodingDOSGreek1 */ + { "CP857", RTL_TEXTENCODING_IBM_857 }, /* kCFStringEncodingDOSTurkish */ + { "CP861", RTL_TEXTENCODING_IBM_861 }, /* kCFStringEncodingDOSIcelandic */ + { "cp864", RTL_TEXTENCODING_IBM_864 }, /* kCFStringEncodingDOSArabic */ + { "CP866", RTL_TEXTENCODING_IBM_866 }, /* kCFStringEncodingDOSRussian */ + { "CP874", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingDOSThai */ + { "CP932", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingDOSJapanese */ + { "CP936", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingDOSChineseSimplif */ + { "CP949", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingDOSKorean */ + { "CP950", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingDOSChineseTrad */ + { "WINDOWS-1252", RTL_TEXTENCODING_MS_1252 }, /* kCFStringEncodingWindowsLatin1 */ + { "WINDOWS-1250", RTL_TEXTENCODING_MS_1250 }, /* kCFStringEncodingWindowsLatin2 */ + { "WINDOWS-1251", RTL_TEXTENCODING_MS_1251 }, /* kCFStringEncodingWindowsCyrillic */ + { "WINDOWS-1253", RTL_TEXTENCODING_MS_1253 }, /* kCFStringEncodingWindowsGreek */ + { "WINDOWS-1254", RTL_TEXTENCODING_MS_1254 }, /* kCFStringEncodingWindowsLatin5 */ + { "WINDOWS-1255", RTL_TEXTENCODING_MS_1255 }, /* kCFStringEncodingWindowsHebrew */ + { "WINDOWS-1256", RTL_TEXTENCODING_MS_1256 }, /* kCFStringEncodingWindowsArabic */ + { "WINDOWS-1257", RTL_TEXTENCODING_MS_1257 }, /* kCFStringEncodingWindowsBalticRim */ + { "WINDOWS-1258", RTL_TEXTENCODING_MS_1258 }, /* kCFStringEncodingWindowsVietnamese */ + { "US-ASCII", RTL_TEXTENCODING_ASCII_US }, /* kCFStringEncodingASCII */ + { "JIS_C6226-1983", RTL_TEXTENCODING_GB_2312 }, /* kCFStringEncodingJIS_X0208_90 */ + { "csISO58GB231280", RTL_TEXTENCODING_GB_2312 }, /* kCFStringEncodingGB_2312_80 */ + { "X-GBK", RTL_TEXTENCODING_GBK }, /* kCFStringEncodingGBK_95 */ + { "csKSC56011987", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingKSC_5601_87 */ + { "ISO-2022-JP", RTL_TEXTENCODING_ISO_2022_JP }, /* kCFStringEncodingISO_2022_JP */ + { "ISO-2022-CN", RTL_TEXTENCODING_ISO_2022_CN }, /* kCFStringEncodingISO_2022_CN */ + { "ISO-2022-CN-EXT", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingISO_2022_CN_EXT */ + { "ISO-2022-KR", RTL_TEXTENCODING_ISO_2022_KR }, /* kCFStringEncodingISO_2022_KR */ + { "EUC-JP", RTL_TEXTENCODING_EUC_JP }, /* kCFStringEncodingEUC_JP */ + { "EUC-CN", RTL_TEXTENCODING_EUC_CN }, /* kCFStringEncodingEUC_CN */ + { "EUC-TW", RTL_TEXTENCODING_EUC_TW }, /* kCFStringEncodingEUC_TW */ + { "EUC-KR", RTL_TEXTENCODING_EUC_KR }, /* kCFStringEncodingEUC_KR */ + { "SHIFT_JIS", RTL_TEXTENCODING_SHIFT_JIS }, /* kCFStringEncodingShiftJIS */ + { "KOI8-R", RTL_TEXTENCODING_KOI8_R }, /* kCFStringEncodingKOI8_R */ + { "X-MAC-ROMAN-LATIN1", RTL_TEXTENCODING_APPLE_ROMAN }, /* kCFStringEncodingMacRomanLatin1 */ + { "HZ-GB-2312", RTL_TEXTENCODING_GB_2312 }, /* kCFStringEncodingHZ_GB_2312 */ + { "Big5-HKSCS", RTL_TEXTENCODING_BIG5_HKSCS }, /* kCFStringEncodingBig5_HKSCS_1999 */ + { "X-NEXTSTEP", RTL_TEXTENCODING_DONTKNOW }, /* kCFStringEncodingNextStepLatin */ + { "cp037", RTL_TEXTENCODING_DONTKNOW } /* kCFStringEncodingEBCDIC_CP037 */ +/* ___________ Add more encodings here ___________ */ +}; +#endif /* ifdef MACOSX */ static pthread_mutex_t aLocalMutex = PTHREAD_MUTEX_INITIALIZER; +#ifndef MACOSX /*****************************************************************************/ /* return the text encoding corresponding to the given locale /*****************************************************************************/ @@ -577,8 +683,9 @@ void _imp_getProcessLocale( rtl_Locale ** ppLocale ) { + char * locale; - + /* basic thread safeness */ pthread_mutex_lock( &aLocalMutex ); @@ -618,38 +725,279 @@ return ret; } -#elif defined(MACOSX) /* ifdef LINUX || SOLARIS || NETBSD */ +#else /* ifndef MACOSX */ /* - * FIXME: the MacOS X implemetation is missing + * + * MacOS X specific Locale manipulation code + * */ - + +#include +#include +#include + +void macxp_ConvertCFEncodingToIANACharSetName( char *buffer, unsigned int bufferLen, CFStringEncoding cfEncoding ); + /*****************************************************************************/ /* return the text encoding corresponding to the given locale /*****************************************************************************/ - rtl_TextEncoding osl_getTextEncodingFromLocale( rtl_Locale * pLocale ) { - return RTL_TEXTENCODING_DONTKNOW; + const _pair *pLanguage = 0; + char *pEncoding; + char sEncoding[ 64 ] = ""; + CFStringEncoding sCFSysEncoding; + CFStringRef sCFEncodingName; + const unsigned int nMembers = sizeof(_macxp_language_list) / sizeof(_pair); + + /* For retrieving the CoreFoundation text encoding, the process goes like + * this: + * 1) On MacOS X this will be the first language listed in the + * Language tab of the International preference pane. + * 2) On Darwin 5 the value is currently hardwired to + * kCFStringEncodingMacRoman. + */ + sCFSysEncoding = CFStringGetSystemEncoding(); + #ifdef BUILD_OS_APPLEOSX + /* Use MacOS X routines to get the charset name for us */ + sCFEncodingName = CFStringConvertEncodingToIANACharSetName( sCFSysEncoding ); + CFStringGetCString( sCFEncodingName, sEncoding, 32, sCFSysEncoding); + #else + /* + * Darwin doesn't have a CFStringConvertEncodingToIANACharSetName(), + * so we call our own replacement + */ + macxp_ConvertCFEncodingToIANACharSetName( sEncoding, 32, sCFSysEncoding ); + #endif + + pLanguage = _pair_search( pEncoding, _macxp_language_list, nMembers ); + + OSL_ASSERT( pLanguage && ( RTL_TEXTENCODING_DONTKNOW != pLanguage->value ) ); + + /* + * a matching item in our list provides a mapping from codeset to + * rtl-codeset + */ + if ( pLanguage != NULL ) + return pLanguage->value; + + return RTL_TEXTENCODING_DONTKNOW; } /*****************************************************************************/ /* return the current process locale /*****************************************************************************/ - void _imp_getProcessLocale( rtl_Locale ** ppLocale ) { - *ppLocale = _parse_locale( "C" ); +#ifdef BUILD_OS_APPLEOSX + static const char *locale = NULL; + JNIEnv *env = NULL; + JavaVM *jvm = NULL; + JavaVMInitArgs vm_args; + jclass aClass = NULL; + jmethodID aMethod = NULL; + jobject aLocale = NULL; + jstring sLocale = NULL; + jboolean bCopy = JNI_TRUE; +#endif /* ifdef BUILD_OS_APPLEOSX */ + + /* basic thread safeness */ + pthread_mutex_lock( &aLocalMutex ); + +#ifdef BUILD_OS_APPLEOSX + /* Only fetch the locale once and cache it */ + if ( NULL == locale ) + { + /* specify Java 2 */ + vm_args.version = JNI_VERSION_1_2; + vm_args.options = NULL; + vm_args.nOptions = 0; + vm_args.ignoreUnrecognized = JNI_TRUE; + + /* get default JVM args */ + JNI_GetDefaultJavaVMInitArgs( &vm_args ); + + /* create the Java VM */ + if ( JNI_CreateJavaVM( &jvm, (void *)&env, &vm_args ) == JNI_OK ) + { + /* get the current locale */ + aClass = (*env)->FindClass( env, "java.util.Locale" ); + if ( aClass ) + aMethod = (*env)->GetStaticMethodID( env, aClass, "getDefault", "()Ljava/util/Locale;" ); + if ( aMethod ) + aLocale = (*env)->CallStaticObjectMethod( env, aClass, aMethod ); + if ( aClass ) + aMethod = (*env)->GetMethodID( env, aClass, "toString", "()Ljava/lang/String;" ); + if ( aMethod ) + sLocale = (jstring)( (*env)->CallObjectMethod( env, aLocale, aMethod) ); + if ( sLocale ) + locale = (*env)->GetStringUTFChars( env, sLocale, &bCopy ); + + /* Destroy the JVM */ + (*jvm)->DestroyJavaVM( jvm ); + } +#endif /* ifdef BUILD_OS_APPLEOSX */ + + /* handle the case where the Java method of finding locale fails */ + if ( NULL == locale ) + { + /* simulate behavior of setlocale */ + locale = getenv( "LC_ALL" ); + + if( NULL == locale ) + locale = getenv( "LC_CTYPE" ); + + if( NULL == locale ) + locale = getenv( "LANG" ); + + if( NULL == locale ) + locale = "C"; + } + + *ppLocale = _parse_locale( locale ); + } + + /* return the locale */ + *ppLocale = _parse_locale( locale ); + + pthread_mutex_unlock( &aLocalMutex ); + } /*****************************************************************************/ /* set the current process locale /*****************************************************************************/ - int _imp_setProcessLocale( rtl_Locale * pLocale ) { - return 0; + /* There is not yet any way to set the locale of a process + * on Darwin or MacOS X through BSD layer functions. + * + * On MacOS X locale and language are set by the user through + * the International pane of the System Preferences application. + * + * FIXME when this can be done. + */ + return 0; } + +/*****************************************************************************/ +/* Get a charset name from a CoreFoundation text encoding number +/*****************************************************************************/ +void macxp_ConvertCFEncodingToIANACharSetName( char *buffer, unsigned int bufferLen, CFStringEncoding cfEncoding ) +{ + switch( cfEncoding ) + { + case 0: strncpy( buffer, "MACINTOSH", 31 ); break; /* kCFStringEncodingMacRoman */ + case 1: strncpy( buffer, "X-MAC-JAPANESE", 31 ); break; /* kCFStringEncodingMacJapanese */ + case 2: strncpy( buffer, "X-MAC-TRAD-CHINESE", 31 ); break; /* kCFStringEncodingMacChineseTrad */ + case 3: strncpy( buffer, "X-MAC-KOREAN", 31 ); break; /* kCFStringEncodingMacKorean */ + case 4: strncpy( buffer, "X-MAC-ARABIC", 31 ); break; /* kCFStringEncodingMacArabic */ + case 5: strncpy( buffer, "X-MAC-HEBREW", 31 ); break; /* kCFStringEncodingMacHebrew */ + case 6: strncpy( buffer, "X-MAC-GREEK", 31 ); break; /* kCFStringEncodingMacGreek */ + case 7: strncpy( buffer, "X-MAC-CYRILLIC", 31 ); break; /* kCFStringEncodingMacCyrillic */ + case 9: strncpy( buffer, "X-MAC-DEVANAGARI", 31 ); break; /* kCFStringEncodingMacDevanagari */ + case 10: strncpy( buffer, "X-MAC-GURMUKHI", 31 ); break; /* kCFStringEncodingMacGurmukhi */ + case 11: strncpy( buffer, "X-MAC-GUJARATI", 31 ); break; /* kCFStringEncodingMacGujarati */ + case 12: strncpy( buffer, "X-MAC-ORIYA", 31 ); break; /* kCFStringEncodingMacOriya */ + case 13: strncpy( buffer, "X-MAC-BENGALI", 31 ); break; /* kCFStringEncodingMacBengali */ + case 14: strncpy( buffer, "X-MAC-TAMIL", 31 ); break; /* kCFStringEncodingMacTamil */ + case 15: strncpy( buffer, "X-MAC-TELUGU", 31 ); break; /* kCFStringEncodingMacTamil */ + case 16: strncpy( buffer, "X-MAC-KANNADA", 31 ); break; /* kCFStringEncodingMacKannada */ + case 17: strncpy( buffer, "X-MAC-MALAYALAM", 31 ); break; /* kCFStringEncodingMacMalayalam */ + case 18: strncpy( buffer, "X-MAC-SINHALESE", 31 ); break; /* kCFStringEncodingMacSinhalese */ + case 19: strncpy( buffer, "X-MAC-BURMESE", 31 ); break; /* kCFStringEncodingMacBurmese */ + case 20: strncpy( buffer, "X-MAC-KHMER", 31 ); break; /* kCFStringEncodingMacKhmer */ + case 21: strncpy( buffer, "X-MAC-THAI", 31 ); break; /* kCFStringEncodingMacThai */ + case 22: strncpy( buffer, "X-MAC-LAOTIAN", 31 ); break; /* kCFStringEncodingMacLaotian */ + case 23: strncpy( buffer, "X-MAC-GEORGIAN", 31 ); break; /* kCFStringEncodingMacGeorgian */ + case 24: strncpy( buffer, "X-MAC-ARMENIAN", 31 ); break; /* kCFStringEncodingMacArmenian */ + case 25: strncpy( buffer, "X-MAC-SIMP-CHINESE", 31 ); break; /* kCFStringEncodingMacChineseSimp */ + case 26: strncpy( buffer, "X-MAC-TIBETAN", 31 ); break; /* kCFStringEncodingMacTibetan */ + case 27: strncpy( buffer, "X-MAC-MONGOLIAN", 31 ); break; /* kCFStringEncodingMacMongolian */ + case 28: strncpy( buffer, "X-MAC-ETHIOPIC", 31 ); break; /* kCFStringEncodingMacEthiopic */ + case 29: strncpy( buffer, "X-MAC-CENTRALEURROMAN", 31 ); break; /* kCFStringEncodingMacCentralEurRoman */ + case 30: strncpy( buffer, "X-MAC-VIETNAMESE", 31 ); break; /* kCFStringEncodingMacVietnamese */ + case 31: strncpy( buffer, "X-MAC-EXTARABIC", 31 ); break; /* kCFStringEncodingMacExtArabic */ + case 33: strncpy( buffer, "X-MAC-SYMBOL", 31 ); break; /* kCFStringEncodingMacSymbol */ + case 34: strncpy( buffer, "X-MAC-DINGBATS", 31 ); break; /* kCFStringEncodingMacDingbats */ + case 35: strncpy( buffer, "X-MAC-TURKISH", 31 ); break; /* kCFStringEncodingMacTurkish */ + case 36: strncpy( buffer, "X-MAC-CROATIAN", 31 ); break; /* kCFStringEncodingMacCroatian */ + case 37: strncpy( buffer, "X-MAC-ICELANDIC", 31 ); break; /* kCFStringEncodingMacIcelandic */ + case 38: strncpy( buffer, "X-MAC-ROMANIAN", 31 ); break; /* kCFStringEncodingMacRomanian */ + case 126: strncpy( buffer, "UNICODE-2-0", 31 ); break; /* */ + case 140: strncpy( buffer, "X-MAC-FARSI", 31 ); break; /* kCFStringEncodingMacFarsi */ + case 152: strncpy( buffer, "X-MAC-UKRAINIAN", 31 ); break; /* kCFStringEncodingMacUkrainian */ + case 252: strncpy( buffer, "X-MAC-VT100", 31 ); break; /* kCFStringEncodingMacVT100 */ + case 255: strncpy( buffer, "macintosh", 31 ); break; /* kCFStringEncodingMacHFS */ + case 256: strncpy( buffer, "UTF-16BE", 31 ); break; /* kCFStringEncodingUnicode */ + case 257: strncpy( buffer, "UNICODE-1-1", 31 ); break; /* */ + case 258: strncpy( buffer, "UNICODE-1-1", 31 ); break; /* */ + case 259: strncpy( buffer, "UNICODE-2-0", 31 ); break; /* */ + case 260: strncpy( buffer, "csUnicode", 31 ); break; /* */ + case 513: strncpy( buffer, "ISO-8859-1", 31 ); break; /* kCFStringEncodingISOLatin1 */ + case 514: strncpy( buffer, "ISO-8859-2", 31 ); break; /* kCFStringEncodingISOLatin2 */ + case 515: strncpy( buffer, "ISO-8859-3", 31 ); break; /* kCFStringEncodingISOLatin3 */ + case 516: strncpy( buffer, "ISO-8859-4", 31 ); break; /* kCFStringEncodingISOLatin4 */ + case 517: strncpy( buffer, "ISO-8859-5", 31 ); break; /* kCFStringEncodingISOLatinCyrillic */ + case 518: strncpy( buffer, "ISO-8859-6", 31 ); break; /* kCFStringEncodingISOLatinArabic */ + case 519: strncpy( buffer, "ISO-8859-7", 31 ); break; /* kCFStringEncodingISOLatinGreek */ + case 520: strncpy( buffer, "ISO-8859-8", 31 ); break; /* kCFStringEncodingISOLatinHebrew */ + case 521: strncpy( buffer, "ISO-8859-9", 31 ); break; /* kCFStringEncodingISOLatin5 */ + case 522: strncpy( buffer, "ISO-8859-10", 31 ); break; /* kCFStringEncodingISOLatin6 */ + case 523: strncpy( buffer, "ISO-8859-11", 31 ); break; /* kCFStringEncodingISOLatinThai */ + case 525: strncpy( buffer, "ISO-8859-13", 31 ); break; /* kCFStringEncodingISOLatin7 */ + case 526: strncpy( buffer, "ISO-8859-14", 31 ); break; /* kCFStringEncodingISOLatin8 */ + case 527: strncpy( buffer, "ISO-8859-15", 31 ); break; /* kCFStringEncodingISOLatin9 */ + case 1024: strncpy( buffer, "CP437", 31 ); break; /* kCFStringEncodingDOSLatinUS */ + case 1029: strncpy( buffer, "CP737", 31 ); break; /* kCFStringEncodingDOSGreek */ + case 1030: strncpy( buffer, "CP775", 31 ); break; /* kCFStringEncodingDOSBalticRim */ + case 1040: strncpy( buffer, "CP850", 31 ); break; /* kCFStringEncodingDOSLatin1 */ + case 1042: strncpy( buffer, "CP852", 31 ); break; /* kCFStringEncodingDOSGreek1 */ + case 1044: strncpy( buffer, "CP857", 31 ); break; /* kCFStringEncodingDOSTurkish */ + case 1046: strncpy( buffer, "CP861", 31 ); break; /* kCFStringEncodingDOSIcelandic */ + case 1049: strncpy( buffer, "cp864", 31 ); break; /* kCFStringEncodingDOSArabic */ + case 1051: strncpy( buffer, "CP866", 31 ); break; /* kCFStringEncodingDOSRussian */ + case 1053: strncpy( buffer, "CP874", 31 ); break; /* kCFStringEncodingDOSThai */ + case 1056: strncpy( buffer, "CP932", 31 ); break; /* kCFStringEncodingDOSJapanese */ + case 1057: strncpy( buffer, "CP936", 31 ); break; /* kCFStringEncodingDOSChineseSimplif */ + case 1058: strncpy( buffer, "CP949", 31 ); break; /* kCFStringEncodingDOSKorean */ + case 1059: strncpy( buffer, "CP950", 31 ); break; /* kCFStringEncodingDOSChineseTrad */ + case 1280: strncpy( buffer, "WINDOWS-1252", 31 ); break; /* kCFStringEncodingWindowsLatin1 */ + case 1281: strncpy( buffer, "WINDOWS-1250", 31 ); break; /* kCFStringEncodingWindowsLatin2 */ + case 1282: strncpy( buffer, "WINDOWS-1251", 31 ); break; /* kCFStringEncodingWindowsCyrillic */ + case 1283: strncpy( buffer, "WINDOWS-1253", 31 ); break; /* kCFStringEncodingWindowsGreek */ + case 1284: strncpy( buffer, "WINDOWS-1254", 31 ); break; /* kCFStringEncodingWindowsLatin5 */ + case 1285: strncpy( buffer, "WINDOWS-1255", 31 ); break; /* kCFStringEncodingWindowsHebrew */ + case 1286: strncpy( buffer, "WINDOWS-1256", 31 ); break; /* kCFStringEncodingWindowsArabic */ + case 1287: strncpy( buffer, "WINDOWS-1257", 31 ); break; /* kCFStringEncodingWindowsBalticRim */ + case 1288: strncpy( buffer, "WINDOWS-1258", 31 ); break; /* kCFStringEncodingWindowsVietnamese */ + case 1536: strncpy( buffer, "US-ASCII", 31 ); break; /* kCFStringEncodingASCII */ + case 1570: strncpy( buffer, "JIS_C6226-1983", 31 ); break; /* kCFStringEncodingJIS_X0208_90 */ + case 1584: strncpy( buffer, "csISO58GB231280", 31 ); break; /* kCFStringEncodingGB_2312_80 */ + case 1585: strncpy( buffer, "X-GBK", 31 ); break; /* kCFStringEncodingGBK_95 */ + case 1600: strncpy( buffer, "csKSC56011987", 31 ); break; /* kCFStringEncodingKSC_5601_87 */ + case 2080: strncpy( buffer, "ISO-2022-JP", 31 ); break; /* kCFStringEncodingISO_2022_JP */ + case 2096: strncpy( buffer, "ISO-2022-CN", 31 ); break; /* kCFStringEncodingISO_2022_CN */ + case 2097: strncpy( buffer, "ISO-2022-CN-EXT", 31 ); break; /* kCFStringEncodingISO_2022_CN_EXT */ + case 2112: strncpy( buffer, "ISO-2022-KR", 31 ); break; /* kCFStringEncodingISO_2022_KR */ + case 2336: strncpy( buffer, "EUC-JP", 31 ); break; /* kCFStringEncodingEUC_JP */ + case 2352: strncpy( buffer, "EUC-CN", 31 ); break; /* kCFStringEncodingEUC_CN */ + case 2353: strncpy( buffer, "EUC-TW", 31 ); break; /* kCFStringEncodingEUC_TW */ + case 2368: strncpy( buffer, "EUC-KR", 31 ); break; /* kCFStringEncodingEUC_KR */ + case 2561: strncpy( buffer, "SHIFT_JIS", 31 ); break; /* kCFStringEncodingShiftJIS */ + case 2562: strncpy( buffer, "KOI8-R", 31 ); break; /* kCFStringEncodingKOI8_R */ + case 2563: strncpy( buffer, "BIG5", 31 ); break; /* kCFStringEncodingBig5 */ + case 2564: strncpy( buffer, "X-MAC-ROMAN-LATIN1", 31 ); break; /* kCFStringEncodingMacRomanLatin1 */ + case 2565: strncpy( buffer, "HZ-GB-2312", 31 ); break; /* kCFStringEncodingHZ_GB_2312 */ + case 2566: strncpy( buffer, "Big5-HKSCS", 31 ); break; /* kCFStringEncodingBig5_HKSCS_1999 */ + case 2817: strncpy( buffer, "X-NEXTSTEP", 31 ); break; /* kCFStringEncodingNextStepLatin */ + case 3074: strncpy( buffer, "cp037", 31 ); break; /* kCFStringEncodingEBCDIC_CP037 */ + default: strncpy( buffer, "", 31 ); break; /* Not listed */ + } +} +#endif /* ifndef MACOSX */ + #else /* ifdef LINUX || SOLARIS || MACOSX || NETBSD */ Index: osl/unx/system.c =================================================================== RCS file: /cvs/porting/sal/osl/unx/system.c,v retrieving revision 1.6 diff -u -r1.6 system.c --- osl/unx/system.c 20 Aug 2002 15:49:46 -0000 1.6 +++ osl/unx/system.c 2 Oct 2002 21:01:31 -0000 @@ -78,8 +78,27 @@ #include #include - +/* [ed] 9/1/02 On OS 10.2 and higher, the OS headers define this function slightly differently. + A fourth argument is expected, a struct passwd **. We still want to make our own definition, + however, so when we run on 10.1 we can still locate the symbol in our own libraries. So + if we're building on 10.2, simply change the prototype to match the expected system + prototype and provide the duplicate symbol. + */ +#ifdef MACOSX +#ifdef BUILD_OS_APPLEOSX +#if (BUILD_OS_MAJOR >= 10) && (BUILD_OS_MINOR >= 2) +int getpwnam_r(const char* name, struct passwd* s, char* buffer, size_t size, struct passwd **ignore ) +#else /* BUILD_OS_MAJOR && BUILD_OS_MINOR */ +/* previous versions of MacOS X...10.0/1. Use old prototype */ +struct passwd *getpwnam_r(const char* name, struct passwd* s, char* buffer, int size ) +#endif /* BUILD_OS_MAJOR && BUILD_OS_MINOR */ +#else /* BUILD_OS_APPLE_OSX */ +/* configure didn't take, or we're building on darwin. Fallback on old prototype */ +struct passwd *getpwnam_r(const char* name, struct passwd* s, char* buffer, int size ) +#endif /* BUILD_OS_APPLEOSX */ +#else /* MACOSX */ struct passwd *getpwnam_r(const char* name, struct passwd* s, char* buffer, int size ) +#endif /* MACOSX */ { struct passwd* res; @@ -131,7 +150,19 @@ pthread_mutex_unlock(&getrtl_mutex); - return res; +#ifdef MACOSX +#ifdef BUILD_OS_APPLEOSX +#if (BUILD_OS_MAJOR >= 10) && (BUILD_OS_MINOR >= 2) + return((int)res); +#else + return(res); +#endif /* BUILD_OS_MAJOR && BUILD_OS_MINOR */ +#else /* BUILD_OS_APPLEOSX */ + return(res); +#endif /* BUILD_OS_APPLEOSX */ +#else /* MACOSX */ + return(res); +#endif /* MACOSX */ } #if defined(NETBSD) || defined(MACOSX) Index: osl/unx/thread.c =================================================================== RCS file: /cvs/porting/sal/osl/unx/thread.c,v retrieving revision 1.22 diff -u -r1.22 thread.c --- osl/unx/thread.c 13 Aug 2002 11:39:25 -0000 1.22 +++ osl/unx/thread.c 2 Oct 2002 21:01:32 -0000 @@ -278,7 +278,9 @@ { pThreadImpl->m_Flags &= ~THREADIMPL_FLAGS_ATTACHED; +#ifndef MACOSX pthread_detach(pThreadImpl->m_hThread); +#endif } pthread_mutex_unlock(&pThreadImpl->m_HandleLock); Index: util/makefile.mk =================================================================== RCS file: /cvs/porting/sal/util/makefile.mk,v retrieving revision 1.18.2.1 diff -u -r1.18.2.1 makefile.mk --- util/makefile.mk 17 Mar 2002 11:51:30 -0000 1.18.2.1 +++ util/makefile.mk 2 Oct 2002 21:01:33 -0000 @@ -157,6 +157,9 @@ .IF "$(OS)"=="NETBSD" SHL1STDLIBS+= -Wl,--whole-archive -lgnu_readdir_r -Wl,--no-whole-archive .ENDIF # OS == NETBSD +.IF "$(OS)"=="MACOSX" +SHL1STDLIBS+= -framework JavaVM +.ENDIF # OS == MACOSX .ENDIF # GUI == UNX