]> git.saurik.com Git - apple/icu.git/blobdiff - icuSources/common/ures_cnv.c
ICU-8.11.tar.gz
[apple/icu.git] / icuSources / common / ures_cnv.c
index 9326ef127be14cda1f23e3e1f568d53863039b8d..c9729019df6d0a4abd526880cf9246c06d701148 100644 (file)
@@ -1,7 +1,7 @@
 /*
 *******************************************************************************
 *
-*   Copyright (C) 1997-2004, International Business Machines
+*   Copyright (C) 1997-2006, International Business Machines
 *   Corporation and others.  All Rights Reserved.
 *
 *******************************************************************************
 U_CAPI UResourceBundle * U_EXPORT2
 ures_openU(const UChar *myPath, 
            const char *localeID, 
-           UErrorCode *status) {
-    char path[2048];
+           UErrorCode *status)
+{
+    char pathBuffer[1024];
     int32_t length;
+    char *path = pathBuffer;
 
     if(status==NULL || U_FAILURE(*status)) {
         return NULL;
     }
     if(myPath==NULL) {
-        *status=U_ILLEGAL_ARGUMENT_ERROR;
-        return NULL;
+        path = NULL;
     }
-
-    length=u_strlen(myPath);
-    if(length>=sizeof(path)) {
-        *status=U_ILLEGAL_ARGUMENT_ERROR;
-        return NULL;
-    } else if(uprv_isInvariantUString(myPath, length)) {
-        /*
-         * the invariant converter is sufficient for package and tree names
-         * and is more efficient
-         */
-        u_UCharsToChars(myPath, path, length+1); /* length+1 to include the NUL */
-    } else {
-#if !UCONFIG_NO_CONVERSION
-        /* use the default converter to support variant-character paths */
-        UConverter *cnv=u_getDefaultConverter(status);
-        if(U_FAILURE(*status)) {
-            return NULL;
-        }
-
-        length=ucnv_fromUChars(cnv, path, (int32_t)sizeof(path), myPath, length, status);
-        u_releaseDefaultConverter(cnv);
-        if(U_FAILURE(*status)) {
-            return NULL;
-        }
-        if(length>=sizeof(path)) {
-            /* not NUL-terminated - path too long */
+    else {
+        length=u_strlen(myPath);
+        if(length>=sizeof(pathBuffer)) {
             *status=U_ILLEGAL_ARGUMENT_ERROR;
             return NULL;
-        }
+        } else if(uprv_isInvariantUString(myPath, length)) {
+            /*
+             * the invariant converter is sufficient for package and tree names
+             * and is more efficient
+             */
+            u_UCharsToChars(myPath, path, length+1); /* length+1 to include the NUL */
+        } else {
+#if !UCONFIG_NO_CONVERSION
+            /* use the default converter to support variant-character paths */
+            UConverter *cnv=u_getDefaultConverter(status);
+            length=ucnv_fromUChars(cnv, path, (int32_t)sizeof(pathBuffer), myPath, length, status);
+            u_releaseDefaultConverter(cnv);
+            if(U_FAILURE(*status)) {
+                return NULL;
+            }
+            if(length>=sizeof(pathBuffer)) {
+                /* not NUL-terminated - path too long */
+                *status=U_ILLEGAL_ARGUMENT_ERROR;
+                return NULL;
+            }
 #else
-        /* the default converter is not available */
-        *status=U_UNSUPPORTED_ERROR;
-        return NULL;
+            /* the default converter is not available */
+            *status=U_UNSUPPORTED_ERROR;
+            return NULL;
 #endif
+        }
     }
 
     return ures_open(path, localeID, status);