| OLD | NEW |
| 1 /* | 1 /* |
| 2 ****************************************************************************** | 2 ****************************************************************************** |
| 3 * | 3 * |
| 4 * Copyright (C) 1998-2013, International Business Machines | 4 * Copyright (C) 1998-2014, International Business Machines |
| 5 * Corporation and others. All Rights Reserved. | 5 * Corporation and others. All Rights Reserved. |
| 6 * | 6 * |
| 7 ****************************************************************************** | 7 ****************************************************************************** |
| 8 * | 8 * |
| 9 * File ufile.c | 9 * File ufile.c |
| 10 * | 10 * |
| 11 * Modification History: | 11 * Modification History: |
| 12 * | 12 * |
| 13 * Date Name Description | 13 * Date Name Description |
| 14 * 11/19/98 stephen Creation. | 14 * 11/19/98 stephen Creation. |
| 15 * 03/12/99 stephen Modified for new C API. | 15 * 03/12/99 stephen Modified for new C API. |
| 16 * 06/16/99 stephen Changed T_LocaleBundle to u_locbund | 16 * 06/16/99 stephen Changed T_LocaleBundle to u_locbund |
| 17 * 07/19/99 stephen Fixed to use ucnv's default codepage. | 17 * 07/19/99 stephen Fixed to use ucnv's default codepage. |
| 18 ****************************************************************************** | 18 ****************************************************************************** |
| 19 */ | 19 */ |
| 20 | 20 |
| 21 /* | 21 /* |
| 22 * fileno is not declared when building with GCC in strict mode. | 22 * fileno is not declared when building with GCC in strict mode. |
| 23 */ | 23 */ |
| 24 #if defined(__GNUC__) && defined(__STRICT_ANSI__) | 24 #if defined(__GNUC__) && defined(__STRICT_ANSI__) |
| 25 #undef __STRICT_ANSI__ | 25 #undef __STRICT_ANSI__ |
| 26 #endif | 26 #endif |
| 27 | 27 |
| 28 #include "locmap.h" | 28 #include "locmap.h" |
| 29 #include "unicode/ustdio.h" | 29 #include "unicode/ustdio.h" |
| 30 |
| 31 #if !UCONFIG_NO_CONVERSION |
| 32 |
| 30 #include "ufile.h" | 33 #include "ufile.h" |
| 31 #include "unicode/uloc.h" | 34 #include "unicode/uloc.h" |
| 32 #include "unicode/ures.h" | 35 #include "unicode/ures.h" |
| 33 #include "unicode/ucnv.h" | 36 #include "unicode/ucnv.h" |
| 37 #include "unicode/ustring.h" |
| 34 #include "cstring.h" | 38 #include "cstring.h" |
| 35 #include "cmemory.h" | 39 #include "cmemory.h" |
| 36 | 40 |
| 37 #if U_PLATFORM_USES_ONLY_WIN32_API && !defined(fileno) | 41 #if U_PLATFORM_USES_ONLY_WIN32_API && !defined(fileno) |
| 38 /* Windows likes to rename Unix-like functions */ | 42 /* Windows likes to rename Unix-like functions */ |
| 39 #define fileno _fileno | 43 #define fileno _fileno |
| 40 #endif | 44 #endif |
| 41 | 45 |
| 42 static UFILE* | 46 static UFILE* |
| 43 finit_owner(FILE *f, | 47 finit_owner(FILE *f, |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 141 if (!result) { | 145 if (!result) { |
| 142 /* Something bad happened. | 146 /* Something bad happened. |
| 143 Maybe the converter couldn't be opened. */ | 147 Maybe the converter couldn't be opened. */ |
| 144 fclose(systemFile); | 148 fclose(systemFile); |
| 145 } | 149 } |
| 146 | 150 |
| 147 return result; /* not a file leak */ | 151 return result; /* not a file leak */ |
| 148 } | 152 } |
| 149 | 153 |
| 150 U_CAPI UFILE* U_EXPORT2 | 154 U_CAPI UFILE* U_EXPORT2 |
| 155 u_fopen_u(const UChar *filename, |
| 156 const char *perm, |
| 157 const char *locale, |
| 158 const char *codepage) |
| 159 { |
| 160 UFILE *result; |
| 161 char buffer[256]; |
| 162 |
| 163 u_austrcpy(buffer, filename); |
| 164 |
| 165 result = u_fopen(buffer, perm, locale, codepage); |
| 166 #if U_PLATFORM_USES_ONLY_WIN32_API |
| 167 /* Try Windows API _wfopen if the above fails. */ |
| 168 if (!result) { |
| 169 FILE *systemFile = _wfopen(filename, (UChar*)perm); |
| 170 if (systemFile) { |
| 171 result = finit_owner(systemFile, locale, codepage, TRUE); |
| 172 } |
| 173 if (!result) { |
| 174 /* Something bad happened. |
| 175 Maybe the converter couldn't be opened. */ |
| 176 fclose(systemFile); |
| 177 } |
| 178 } |
| 179 #endif |
| 180 return result; /* not a file leak */ |
| 181 } |
| 182 |
| 183 U_CAPI UFILE* U_EXPORT2 |
| 151 u_fstropen(UChar *stringBuf, | 184 u_fstropen(UChar *stringBuf, |
| 152 int32_t capacity, | 185 int32_t capacity, |
| 153 const char *locale) | 186 const char *locale) |
| 154 { | 187 { |
| 155 UFILE *result; | 188 UFILE *result; |
| 156 | 189 |
| 157 if (capacity < 0) { | 190 if (capacity < 0) { |
| 158 return NULL; | 191 return NULL; |
| 159 } | 192 } |
| 160 | 193 |
| (...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 305 { | 338 { |
| 306 return file->fConverter; | 339 return file->fConverter; |
| 307 } | 340 } |
| 308 #if !UCONFIG_NO_FORMATTING | 341 #if !UCONFIG_NO_FORMATTING |
| 309 U_CAPI const UNumberFormat* U_EXPORT2 u_fgetNumberFormat(UFILE *file) | 342 U_CAPI const UNumberFormat* U_EXPORT2 u_fgetNumberFormat(UFILE *file) |
| 310 { | 343 { |
| 311 return u_locbund_getNumberFormat(&file->str.fBundle, UNUM_DECIMAL); | 344 return u_locbund_getNumberFormat(&file->str.fBundle, UNUM_DECIMAL); |
| 312 } | 345 } |
| 313 #endif | 346 #endif |
| 314 | 347 |
| 348 #endif |
| OLD | NEW |