Skip to content

Commit 4789424

Browse files
authored
Merge pull request #1987 from compnerd/load-the-data
StringsEncoding: correct bitmap loading
2 parents 448641f + e4aafa7 commit 4789424

File tree

1 file changed

+36
-24
lines changed

1 file changed

+36
-24
lines changed

CoreFoundation/StringEncodings.subproj/CFUniChar.c

Lines changed: 36 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ extern void _CFGetFrameworkPath(wchar_t *path, int maxLength);
4242

4343
#if DEPLOYMENT_TARGET_MACOSX || DEPLOYMENT_TARGET_EMBEDDED
4444
#define USE_MACHO_SEGMENT 1
45-
#elif DEPLOYMENT_RUNTIME_SWIFT && (DEPLOYMENT_TARGET_LINUX || DEPLOYMENT_TARGET_FREEBSD)
45+
#elif DEPLOYMENT_RUNTIME_SWIFT && (DEPLOYMENT_TARGET_LINUX || DEPLOYMENT_TARGET_FREEBSD || DEPLOYMENT_TARGET_WINDOWS)
4646
#define USE_RAW_SYMBOL 1
4747
#endif
4848

@@ -301,46 +301,38 @@ static bool __CFUniCharLoadBytesFromFile(const wchar_t *fileName, const void **b
301301
#else
302302
#error Unknown or unspecified DEPLOYMENT_TARGET
303303
#endif
304-
305-
#if DEPLOYMENT_TARGET_MACOSX || DEPLOYMENT_TARGET_EMBEDDED || DEPLOYMENT_TARGET_EMBEDDED_MINI || DEPLOYMENT_TARGET_LINUX || DEPLOYMENT_TARGET_FREEBSD
306-
static bool __CFUniCharLoadFile(const char *bitmapName, const void **bytes, int64_t *fileSize) {
307-
#elif DEPLOYMENT_TARGET_WINDOWS
308-
static bool __CFUniCharLoadFile(const wchar_t *bitmapName, const void **bytes, int64_t *fileSize) {
304+
305+
#if __CF_BIG_ENDIAN__
306+
#define CF_UNICODE_DATA_SYM __CFUnicodeDataB
309307
#else
310-
#error Unknown or unspecified DEPLOYMENT_TARGET
308+
#define CF_UNICODE_DATA_SYM __CFUnicodeDataL
311309
#endif
310+
311+
#if DEPLOYMENT_TARGET_MACOSX || DEPLOYMENT_TARGET_EMBEDDED || DEPLOYMENT_TARGET_EMBEDDED_MINI || DEPLOYMENT_TARGET_LINUX || DEPLOYMENT_TARGET_FREEBSD
312+
static bool __CFUniCharLoadFile(const char *bitmapName, const void **bytes, int64_t *fileSize) {
312313
#if USE_MACHO_SEGMENT
313-
*bytes = __CFGetSectDataPtr("__UNICODE", bitmapName, NULL);
314+
*bytes = __CFGetSectDataPtr("__UNICODE", bitmapName, NULL);
314315

315316
if (NULL != fileSize) *fileSize = 0;
316317

317318
return *bytes ? true : false;
318319
#elif USE_RAW_SYMBOL
319320
extern void *__CFCharacterSetBitmapData;
320-
#if __CF_BIG_ENDIAN__
321-
extern void *__CFUnicodeDataB;
322-
#else
323-
extern void *__CFUnicodeDataL;
324-
#endif
321+
extern void *CF_UNICODE_DATA_SYM;
325322
extern void *__CFUniCharPropertyDatabase;
326-
323+
327324
if (strcmp(bitmapName, CF_UNICHAR_BITMAP_FILE) == 0) {
328325
*bytes = &__CFCharacterSetBitmapData;
329326
} else if (strcmp(bitmapName, MAPPING_TABLE_FILE) == 0) {
330-
#if __CF_BIG_ENDIAN__
331-
*bytes = &__CFUnicodeDataB;
332-
#else
333-
*bytes = &__CFUnicodeDataL;
334-
#endif
327+
*bytes = &CF_UNICODE_DATA_SYM;
335328
} else if (strcmp(bitmapName, PROP_DB_FILE) == 0) {
336329
*bytes = &__CFUniCharPropertyDatabase;
337330
}
338-
331+
339332
if (NULL != fileSize) *fileSize = 0;
340-
333+
341334
return *bytes ? true : false;
342335
#else
343-
#if DEPLOYMENT_TARGET_MACOSX || DEPLOYMENT_TARGET_EMBEDDED || DEPLOYMENT_TARGET_EMBEDDED_MINI || DEPLOYMENT_TARGET_LINUX || DEPLOYMENT_TARGET_FREEBSD
344336
char cpath[MAXPATHLEN];
345337
__CFUniCharCharacterSetPath(cpath);
346338
strlcat(cpath, bitmapName, MAXPATHLEN);
@@ -349,16 +341,36 @@ static bool __CFUniCharLoadFile(const wchar_t *bitmapName, const void **bytes, i
349341
bool result = __CFUniCharLoadBytesFromFile(possiblyFrameworkRootedCPath, bytes, fileSize);
350342
if (needToFree) free((void *)possiblyFrameworkRootedCPath);
351343
return result;
344+
#endif
345+
}
352346
#elif DEPLOYMENT_TARGET_WINDOWS
347+
static bool __CFUniCharLoadFile(const wchar_t *bitmapName, const void **bytes, int64_t *fileSize) {
348+
#if USE_RAW_SYMBOL
349+
extern void *__CFCharacterSetBitmapData;
350+
extern void *CF_UNICODE_DATA_SYM;
351+
extern void *__CFUniCharPropertyDatabase;
352+
353+
if (wcscmp(bitmapName, CF_UNICHAR_BITMAP_FILE) == 0) {
354+
*bytes = &__CFCharacterSetBitmapData;
355+
} else if (wcscmp(bitmapName, MAPPING_TABLE_FILE) == 0) {
356+
*bytes = &CF_UNICODE_DATA_SYM;
357+
} else if (wcscmp(bitmapName, PROP_DB_FILE) == 0) {
358+
*bytes = &__CFUniCharPropertyDatabase;
359+
}
360+
361+
if (NULL != fileSize) *fileSize = 0;
362+
363+
return *bytes ? true : false;
364+
#else
353365
wchar_t wpath[MAXPATHLEN];
354366
__CFUniCharCharacterSetPath(wpath);
355367
wcsncat(wpath, bitmapName, MAXPATHLEN);
356368
return __CFUniCharLoadBytesFromFile(wpath, bytes, fileSize);
369+
#endif
370+
}
357371
#else
358372
#error Unknown or unspecified DEPLOYMENT_TARGET
359373
#endif
360-
#endif
361-
}
362374

363375
// Bitmap functions
364376
/*

0 commit comments

Comments
 (0)