Index: source/io/ufile.c |
diff --git a/source/io/ufile.c b/source/io/ufile.c |
index 820071f1bcfc7a60d0286b0aa550d7f2ecf934a4..a8d8f0a3a60a6b7e9d0bf76b950925dad7923ff2 100644 |
--- a/source/io/ufile.c |
+++ b/source/io/ufile.c |
@@ -1,7 +1,7 @@ |
/* |
****************************************************************************** |
* |
-* Copyright (C) 1998-2013, International Business Machines |
+* Copyright (C) 1998-2014, International Business Machines |
* Corporation and others. All Rights Reserved. |
* |
****************************************************************************** |
@@ -27,10 +27,14 @@ |
#include "locmap.h" |
#include "unicode/ustdio.h" |
+ |
+#if !UCONFIG_NO_CONVERSION |
+ |
#include "ufile.h" |
#include "unicode/uloc.h" |
#include "unicode/ures.h" |
#include "unicode/ucnv.h" |
+#include "unicode/ustring.h" |
#include "cstring.h" |
#include "cmemory.h" |
@@ -148,6 +152,35 @@ u_fopen(const char *filename, |
} |
U_CAPI UFILE* U_EXPORT2 |
+u_fopen_u(const UChar *filename, |
+ const char *perm, |
+ const char *locale, |
+ const char *codepage) |
+{ |
+ UFILE *result; |
+ char buffer[256]; |
+ |
+ u_austrcpy(buffer, filename); |
+ |
+ result = u_fopen(buffer, perm, locale, codepage); |
+#if U_PLATFORM_USES_ONLY_WIN32_API |
+ /* Try Windows API _wfopen if the above fails. */ |
+ if (!result) { |
+ FILE *systemFile = _wfopen(filename, (UChar*)perm); |
+ if (systemFile) { |
+ result = finit_owner(systemFile, locale, codepage, TRUE); |
+ } |
+ if (!result) { |
+ /* Something bad happened. |
+ Maybe the converter couldn't be opened. */ |
+ fclose(systemFile); |
+ } |
+ } |
+#endif |
+ return result; /* not a file leak */ |
+} |
+ |
+U_CAPI UFILE* U_EXPORT2 |
u_fstropen(UChar *stringBuf, |
int32_t capacity, |
const char *locale) |
@@ -312,3 +345,4 @@ U_CAPI const UNumberFormat* U_EXPORT2 u_fgetNumberFormat(UFILE *file) |
} |
#endif |
+#endif |