Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(440)

Unified Diff: source/common/icuplug.cpp

Issue 845603002: Update ICU to 54.1 step 1 (Closed) Base URL: https://chromium.googlesource.com/chromium/deps/icu.git@master
Patch Set: remove unusued directories Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « source/common/icuplug.c ('k') | source/common/listformatter.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: source/common/icuplug.cpp
diff --git a/source/common/icuplug.c b/source/common/icuplug.cpp
similarity index 93%
rename from source/common/icuplug.c
rename to source/common/icuplug.cpp
index 0c38be1c51e461ce399145faefd975441882d69d..135eb92597439a7deb25bb0336260dfda36c1640 100644
--- a/source/common/icuplug.c
+++ b/source/common/icuplug.cpp
@@ -1,7 +1,7 @@
/*
******************************************************************************
*
-* Copyright (C) 2009-2012, International Business Machines
+* Copyright (C) 2009-2014, International Business Machines
* Corporation and others. All Rights Reserved.
*
******************************************************************************
@@ -24,6 +24,9 @@
#define _POSIX_SOURCE
#include <cics.h> /* 12 Nov 2011 JAM iscics() function */
#endif
+#include "charstr.h"
+
+using namespace icu;
#ifndef UPLUG_TRACE
#define UPLUG_TRACE 0
@@ -699,7 +702,7 @@ static char plugin_file[2048] = "";
U_INTERNAL const char* U_EXPORT2
uplug_getPluginFile() {
-#if U_ENABLE_DYLOAD
+#if U_ENABLE_DYLOAD && !UCONFIG_NO_FILE_IO
return plugin_file;
#else
return NULL;
@@ -711,26 +714,30 @@ U_CAPI void U_EXPORT2
uplug_init(UErrorCode *status) {
#if !U_ENABLE_DYLOAD
(void)status; /* unused */
-#else
- const char *plugin_dir;
+#elif !UCONFIG_NO_FILE_IO
+ CharString plugin_dir;
+ const char *env = getenv("ICU_PLUGINS");
if(U_FAILURE(*status)) return;
- plugin_dir = getenv("ICU_PLUGINS");
+ if(env != NULL) {
+ plugin_dir.append(env, -1, *status);
+ }
+ if(U_FAILURE(*status)) return;
#if defined(DEFAULT_ICU_PLUGINS)
- if(plugin_dir == NULL || !*plugin_dir) {
- plugin_dir = DEFAULT_ICU_PLUGINS;
+ if(plugin_dir.isEmpty()) {
+ plugin_dir.append(DEFAULT_ICU_PLUGINS, -1, *status);
}
#endif
#if UPLUG_TRACE
- DBG((stderr, "ICU_PLUGINS=%s\n", plugin_dir));
+ DBG((stderr, "ICU_PLUGINS=%s\n", plugin_dir.data()));
#endif
- if(plugin_dir != NULL && *plugin_dir) {
+ if(!plugin_dir.isEmpty()) {
FILE *f;
-
+ CharString pluginFile;
#ifdef OS390BATCH
/* There are potentially a lot of ways to implement a plugin directory on OS390/zOS */
/* Keeping in mind that unauthorized file access is logged, monitored, and enforced */
@@ -739,17 +746,37 @@ uplug_init(UErrorCode *status) {
/* SYS1.PARMLIB or setting an environment variable "ICU_PLUGIN_PATH" (?). The */
/* DDNAME can be connected to a file in the HFS if need be. */
- uprv_strncpy(plugin_file,"//DD:ICUPLUG", 2047); /* JAM 20 Oct 2011 */
+ pluginFile.append("//DD:ICUPLUG", -1, *status); /* JAM 20 Oct 2011 */
#else
- uprv_strncpy(plugin_file, plugin_dir, 2047);
- uprv_strncat(plugin_file, U_FILE_SEP_STRING,2047);
- uprv_strncat(plugin_file, "icuplugins",2047);
- uprv_strncat(plugin_file, U_ICU_VERSION_SHORT ,2047);
- uprv_strncat(plugin_file, ".txt" ,2047);
+ pluginFile.append(plugin_dir, *status);
+ pluginFile.append(U_FILE_SEP_STRING, -1, *status);
+ pluginFile.append("icuplugins", -1, *status);
+ pluginFile.append(U_ICU_VERSION_SHORT, -1, *status);
+ pluginFile.append(".txt", -1, *status);
+#endif
+
+#if UPLUG_TRACE
+ DBG((stderr, "status=%s\n", u_errorName(*status)));
#endif
+
+ if(U_FAILURE(*status)) {
+ return;
+ }
+ if((size_t)pluginFile.length() > (sizeof(plugin_file)-1)) {
+ *status = U_BUFFER_OVERFLOW_ERROR;
+#if UPLUG_TRACE
+ DBG((stderr, "status=%s\n", u_errorName(*status)));
+#endif
+ return;
+ }
+
+ /* plugin_file is not used for processing - it is only used
+ so that uplug_getPluginFile() works (i.e. icuinfo)
+ */
+ uprv_strncpy(plugin_file, pluginFile.data(), sizeof(plugin_file));
#if UPLUG_TRACE
- DBG((stderr, "pluginfile= %s\n", plugin_file));
+ DBG((stderr, "pluginfile= %s len %d/%d\n", plugin_file, (int)strlen(plugin_file), (int)sizeof(plugin_file)));
#endif
#ifdef __MVS__
@@ -760,7 +787,7 @@ uplug_init(UErrorCode *status) {
else
#endif
{
- f = fopen(plugin_file, "r");
+ f = fopen(pluginFile.data(), "r");
}
if(f != NULL) {
« no previous file with comments | « source/common/icuplug.c ('k') | source/common/listformatter.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698