summaryrefslogtreecommitdiffstats
path: root/thirdparty/icu4c/common/umapfile.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'thirdparty/icu4c/common/umapfile.cpp')
-rw-r--r--thirdparty/icu4c/common/umapfile.cpp200
1 files changed, 1 insertions, 199 deletions
diff --git a/thirdparty/icu4c/common/umapfile.cpp b/thirdparty/icu4c/common/umapfile.cpp
index 8dddf0e78d..b58ac37f4d 100644
--- a/thirdparty/icu4c/common/umapfile.cpp
+++ b/thirdparty/icu4c/common/umapfile.cpp
@@ -63,7 +63,7 @@ typedef HANDLE MemoryMap;
# define IS_MAP(map) ((map)!=nullptr)
-#elif MAP_IMPLEMENTATION==MAP_POSIX || MAP_IMPLEMENTATION==MAP_390DLL
+#elif MAP_IMPLEMENTATION==MAP_POSIX
typedef size_t MemoryMap;
# define IS_MAP(map) ((map)!=0)
@@ -76,18 +76,6 @@ typedef HANDLE MemoryMap;
# ifndef MAP_FAILED
# define MAP_FAILED ((void*)-1)
# endif
-
-# if MAP_IMPLEMENTATION==MAP_390DLL
- /* No memory mapping for 390 batch mode. Fake it using dll loading. */
-# include <dll.h>
-# include "cstring.h"
-# include "cmemory.h"
-# include "unicode/udata.h"
-# define LIB_PREFIX "lib"
-# define LIB_SUFFIX ".dll"
- /* This is inconvenient until we figure out what to do with U_ICUDATA_NAME in utypes.h */
-# define U_ICUDATA_ENTRY_NAME "icudt" U_ICU_VERSION_SHORT U_LIB_SUFFIX_C_NAME_STRING "_dat"
-# endif
#elif MAP_IMPLEMENTATION==MAP_STDIO
# include <stdio.h>
# include "cmemory.h"
@@ -339,192 +327,6 @@ typedef HANDLE MemoryMap;
pData->pHeader = nullptr;
}
}
-
-
-#elif MAP_IMPLEMENTATION==MAP_390DLL
- /* 390 specific Library Loading.
- * This is the only platform left that dynamically loads an ICU Data Library.
- * All other platforms use .data files when dynamic loading is required, but
- * this turn out to be awkward to support in 390 batch mode.
- *
- * The idea here is to hide the fact that 390 is using dll loading from the
- * rest of ICU, and make it look like there is file loading happening.
- *
- */
-
- static char *strcpy_returnEnd(char *dest, const char *src)
- {
- while((*dest=*src)!=0) {
- ++dest;
- ++src;
- }
- return dest;
- }
-
- /*------------------------------------------------------------------------------
- *
- * computeDirPath given a user-supplied path of an item to be opened,
- * compute and return
- * - the full directory path to be used
- * when opening the file.
- * - Pointer to null at end of above returned path
- *
- * Parameters:
- * path: input path. Buffer is not altered.
- * pathBuffer: Output buffer. Any contents are overwritten.
- *
- * Returns:
- * Pointer to null termination in returned pathBuffer.
- *
- * TODO: This works the way ICU historically has, but the
- * whole data fallback search path is so complicated that
- * probably almost no one will ever really understand it,
- * the potential for confusion is large. (It's not just
- * this one function, but the whole scheme.)
- *
- *------------------------------------------------------------------------------*/
- static char *uprv_computeDirPath(const char *path, char *pathBuffer)
- {
- char *finalSlash; /* Ptr to last dir separator in input path, or null if none. */
- int32_t pathLen; /* Length of the returned directory path */
-
- finalSlash = 0;
- if (path != 0) {
- finalSlash = uprv_strrchr(path, U_FILE_SEP_CHAR);
- }
-
- *pathBuffer = 0;
- if (finalSlash == 0) {
- /* No user-supplied path.
- * Copy the ICU_DATA path to the path buffer and return that*/
- const char *icuDataDir;
- icuDataDir=u_getDataDirectory();
- if(icuDataDir!=nullptr && *icuDataDir!=0) {
- return strcpy_returnEnd(pathBuffer, icuDataDir);
- } else {
- /* there is no icuDataDir either. Just return the empty pathBuffer. */
- return pathBuffer;
- }
- }
-
- /* User supplied path did contain a directory portion.
- * Copy it to the output path buffer */
- pathLen = (int32_t)(finalSlash - path + 1);
- uprv_memcpy(pathBuffer, path, pathLen);
- *(pathBuffer+pathLen) = 0;
- return pathBuffer+pathLen;
- }
-
-
-# define DATA_TYPE "dat"
-
- U_CFUNC UBool uprv_mapFile(UDataMemory *pData, const char *path, UErrorCode *status) {
- const char *inBasename;
- char *basename;
- char pathBuffer[1024];
- const DataHeader *pHeader;
- dllhandle *handle;
- void *val=0;
-
- if (U_FAILURE(*status)) {
- return false;
- }
-
- inBasename=uprv_strrchr(path, U_FILE_SEP_CHAR);
- if(inBasename==nullptr) {
- inBasename = path;
- } else {
- inBasename++;
- }
- basename=uprv_computeDirPath(path, pathBuffer);
- if(uprv_strcmp(inBasename, U_ICUDATA_NAME".dat") != 0) {
- /* must mmap file... for build */
- int fd;
- int length;
- struct stat mystat;
- void *data;
- UDataMemory_init(pData); /* Clear the output struct. */
-
- /* determine the length of the file */
- if(stat(path, &mystat)!=0 || mystat.st_size<=0) {
- return false;
- }
- length=mystat.st_size;
-
- /* open the file */
- fd=open(path, O_RDONLY);
- if(fd==-1) {
- return false;
- }
-
- /* get a view of the mapping */
- data=mmap(0, length, PROT_READ, MAP_PRIVATE, fd, 0);
- close(fd); /* no longer needed */
- if(data==MAP_FAILED) {
- // Possibly check the errorno value for ENOMEM, and report U_MEMORY_ALLOCATION_ERROR?
- return false;
- }
- pData->map = (char *)data + length;
- pData->pHeader=(const DataHeader *)data;
- pData->mapAddr = data;
- return true;
- }
-
-# ifdef OS390BATCH
- /* ### hack: we still need to get u_getDataDirectory() fixed
- for OS/390 (batch mode - always return "//"? )
- and this here straightened out with LIB_PREFIX and LIB_SUFFIX (both empty?!)
- This is probably due to the strange file system on OS/390. It's more like
- a database with short entry names than a typical file system. */
- /* U_ICUDATA_NAME should always have the correct name */
- /* BUT FOR BATCH MODE IT IS AN EXCEPTION BECAUSE */
- /* THE FIRST THREE LETTERS ARE PREASSIGNED TO THE */
- /* PROJECT!!!!! */
- uprv_strcpy(pathBuffer, "IXMI" U_ICU_VERSION_SHORT "DA");
-# else
- /* set up the library name */
- uprv_strcpy(basename, LIB_PREFIX U_LIBICUDATA_NAME U_ICU_VERSION_SHORT LIB_SUFFIX);
-# endif
-
-# ifdef UDATA_DEBUG
- fprintf(stderr, "dllload: %s ", pathBuffer);
-# endif
-
- handle=dllload(pathBuffer);
-
-# ifdef UDATA_DEBUG
- fprintf(stderr, " -> %08X\n", handle );
-# endif
-
- if(handle != nullptr) {
- /* we have a data DLL - what kind of lookup do we need here? */
- /* try to find the Table of Contents */
- UDataMemory_init(pData); /* Clear the output struct. */
- val=dllqueryvar((dllhandle*)handle, U_ICUDATA_ENTRY_NAME);
- if(val == 0) {
- /* failed... so keep looking */
- return false;
- }
-# ifdef UDATA_DEBUG
- fprintf(stderr, "dllqueryvar(%08X, %s) -> %08X\n", handle, U_ICUDATA_ENTRY_NAME, val);
-# endif
-
- pData->pHeader=(const DataHeader *)val;
- return true;
- } else {
- return false; /* no handle */
- }
- }
-
- U_CFUNC void uprv_unmapFile(UDataMemory *pData) {
- if(pData!=nullptr && pData->map!=nullptr) {
- uprv_free(pData->map);
- pData->map = nullptr;
- pData->mapAddr = nullptr;
- pData->pHeader = nullptr;
- }
- }
-
#else
# error MAP_IMPLEMENTATION is set incorrectly
#endif