- Timestamp:
- Apr 8, 2007, 7:07:36 PM (18 years ago)
- Location:
- branches/libc-0.6/src/emx
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/libc-0.6/src/emx/include/InnoTekLIBC/locale.h
r2511 r3053 237 237 /** String collation information. */ 238 238 extern __LIBC_LOCALECOLLATE __libc_gLocaleCollate; 239 /** String collation information forthe default 'C'/'POSIX' locale. */ 240 extern const __LIBC_LOCALECOLLATE __libc_gLocaleCollateDefault; 239 241 /** Character case conversion tables. */ 240 242 extern __LIBC_LOCALECTYPE __libc_GLocaleCtype; … … 242 244 extern const __LIBC_LOCALECTYPE __libc_GLocaleCtypeDefault; 243 245 /** Cached Unicode (__wchar_t) case conversion tables and flags. */ 244 extern __LIBC_LOCALEWCTYPE __libc_GLocaleWCtype;246 extern __LIBC_LOCALEWCTYPE __libc_GLocaleWCtype; 245 247 /** Locale information structure. */ 246 248 extern __LIBC_LOCALELCONV __libc_gLocaleLconv; -
branches/libc-0.6/src/emx/src/lib/locale/locale_collate.c
r3003 r3053 75 75 }; 76 76 77 78 /** String collation information for the 'C'/'POSIX' default locale. */ 79 const __LIBC_LOCALECOLLATE __libc_gLocaleCollateDefault = 80 { 81 .auchWeight = 82 { 83 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 84 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 85 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 86 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 87 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 88 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 89 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 90 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 91 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 92 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 93 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 94 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 95 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 96 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 97 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 98 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 99 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 100 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 101 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 102 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 103 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 104 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 105 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 106 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 107 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 108 250, 251, 252, 253, 254, 255 109 }, 110 .au2MBCSPrefixs = 111 { /* 01 */ 112 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 113 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 114 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 115 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 116 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 117 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 118 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 119 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 120 }, 121 .uobj = 0, 122 .lobj = 0, 123 .mbcs = 0 124 }; 125 -
branches/libc-0.6/src/emx/src/lib/locale/setlocale.c
r2511 r3053 221 221 static int query_mbcs(UconvObject uobj, char *mbcs, unsigned char *au2MBCSPrefixs); 222 222 223 static int localeCollateDo(__LIBC_PLOCALECOLLATE pCollate, UconvObject uobj, LocaleObject lobj );223 static int localeCollateDo(__LIBC_PLOCALECOLLATE pCollate, UconvObject uobj, LocaleObject lobj, const char *pszLocale); 224 224 static void localeCollateFree(__LIBC_PLOCALECOLLATE pCollate); 225 225 static inline unsigned char Transform(LocaleObject lobj, UconvObject uobj, … … 384 384 * @param uobj The UconvObject to use. Collate is responsible for freeing it. 385 385 * @param lobj The LocaleObject to use. Collate is responsible for freeing it. 386 */ 387 static int localeCollateDo(__LIBC_PLOCALECOLLATE pCollate, UconvObject uobj, LocaleObject lobj) 386 * @param pszLocale Pointer to the locale base specifier. 387 */ 388 static int localeCollateDo(__LIBC_PLOCALECOLLATE pCollate, UconvObject uobj, LocaleObject lobj, const char *pszLocale) 388 389 { 389 390 int rc; … … 391 392 /* Cleanup in case of some special LC_ALL call. */ 392 393 localeCollateFree(pCollate); 394 395 /* 396 * For "C" / "POSIX" we can simply use the static default locale. 397 */ 398 if ( IS_C_LOCALE(pszLocale) 399 || IS_POSIX_LOCALE(pszLocale)) 400 { 401 memcpy(pCollate, &__libc_gLocaleCollateDefault, sizeof(*pCollate)); 402 return 0; 403 } 393 404 394 405 /* … … 435 446 aCW[i].len = sizeof(aCW[i].ucsWeight) / sizeof(aCW[i].ucsWeight[0]); 436 447 } 448 449 /* Workaround for bug / undocumented UniStrxfrm feature. See strxfrm.c & mozilla sources. */ 450 aCW[i].len = MIN(aCW[i].len * 2, sizeof(aCW[i].ucsWeight) / sizeof(aCW[i].ucsWeight[0])); 451 while (!aCW[i].ucsWeight[aCW[i].len - 1]) 452 aCW[i].len--; 437 453 } 438 454 … … 505 521 * @param uobj The UconvObject to use. Ctype is responsible for freeing it. 506 522 * @param lobj The LocaleObject to use. Ctype is responsible for freeing it. 523 * @param pszLocale Pointer to the locale base specifier. 507 524 * @param pszCodeset The codeset used. 508 525 */ … … 1221 1238 * @returns negated errno on failure. 1222 1239 * @param pszCodepage Pointer to where the codepage specifier starts. 1240 * @param pszLocale Pointer to the locale base specifier. 1241 * @param lobj The locale object handle. 1223 1242 * @param pucsCodepage Where to store the code page. 1224 1243 * @param cucCodepage Number of UniChar's in the buffer. … … 1396 1415 { 1397 1416 case LC_COLLATE: 1398 rc = localeCollateDo(&pTemp->Collate, uobj, lobj );1417 rc = localeCollateDo(&pTemp->Collate, uobj, lobj, pszLocale); 1399 1418 fFree = rc != 0; 1400 1419 break;
Note:
See TracChangeset
for help on using the changeset viewer.