Index: icu46/source/common/ures_cnv.c |
=================================================================== |
--- icu46/source/common/ures_cnv.c (revision 0) |
+++ icu46/source/common/ures_cnv.c (revision 0) |
@@ -0,0 +1,76 @@ |
+/* |
+******************************************************************************* |
+* |
+* Copyright (C) 1997-2006, International Business Machines |
+* Corporation and others. All Rights Reserved. |
+* |
+******************************************************************************* |
+* file name: ures_cnv.c |
+* encoding: US-ASCII |
+* tab size: 8 (not used) |
+* indentation:4 |
+* |
+* created on: 2004aug25 |
+* created by: Markus W. Scherer |
+* |
+* Character conversion functions moved here from uresbund.c |
+*/ |
+ |
+#include "unicode/utypes.h" |
+#include "unicode/putil.h" |
+#include "unicode/ustring.h" |
+#include "unicode/ucnv.h" |
+#include "unicode/ures.h" |
+#include "uinvchar.h" |
+#include "ustr_cnv.h" |
+ |
+U_CAPI UResourceBundle * U_EXPORT2 |
+ures_openU(const UChar *myPath, |
+ const char *localeID, |
+ UErrorCode *status) |
+{ |
+ char pathBuffer[1024]; |
+ int32_t length; |
+ char *path = pathBuffer; |
+ |
+ if(status==NULL || U_FAILURE(*status)) { |
+ return NULL; |
+ } |
+ if(myPath==NULL) { |
+ path = NULL; |
+ } |
+ 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; |
+#endif |
+ } |
+ } |
+ |
+ return ures_open(path, localeID, status); |
+} |
Property changes on: icu46/source/common/ures_cnv.c |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |