1ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/* 2ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru******************************************************************************* 3ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* 485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho* Copyright (C) 1998-2008, International Business Machines 5ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* Corporation and others. All Rights Reserved. 6ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* 7ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru******************************************************************************* 8ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* 9ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* File ucbuf.c 10ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* 11ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* Modification History: 12ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* 13ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* Date Name Description 14ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* 05/10/01 Ram Creation. 15ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* 16ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* This API reads in files and returns UChars 17ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru******************************************************************************* 18ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*/ 19ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 20ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/ucnv.h" 21ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "filestrm.h" 22ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 23ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#if !UCONFIG_NO_CONVERSION 24ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 25ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#ifndef UCBUF_H 26ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define UCBUF_H 1 27ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 28ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querutypedef struct UCHARBUF UCHARBUF; 29ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/** 30ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * End of file value 31ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 32ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define U_EOF 0xFFFFFFFF 33ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/** 34ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Error value if a sequence cannot be unescaped 35ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 36ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define U_ERR 0xFFFFFFFE 37ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 38ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querutypedef struct ULine ULine; 39ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 40ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustruct ULine { 41ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UChar *name; 42ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t len; 43ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}; 44ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 45ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/** 46ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Opens the UCHARBUF with the given file stream and code page for conversion 47ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param fileName Name of the file to open. 48ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param codepage The encoding of the file stream to convert to Unicode. 49ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * If *codepoge is NULL on input the API will try to autodetect 50ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * popular Unicode encodings 51ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param showWarning Flag to print out warnings to STDOUT 52ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param buffered If TRUE performs a buffered read of the input file. If FALSE reads 53ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * the whole file into memory and converts it. 54ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param err is a pointer to a valid <code>UErrorCode</code> value. If this value 55ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * indicates a failure on entry, the function will immediately return. 56ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * On exit the value will indicate the success of the operation. 57ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @return pointer to the newly opened UCHARBUF 58ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 59ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CAPI UCHARBUF* U_EXPORT2 60ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruucbuf_open(const char* fileName,const char** codepage,UBool showWarning, UBool buffered, UErrorCode* err); 61ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 62ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/** 63ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Gets a UTF-16 code unit at the current position from the converted buffer 64ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * and increments the current position 65ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param buf Pointer to UCHARBUF structure 66ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param err is a pointer to a valid <code>UErrorCode</code> value. If this value 67ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * indicates a failure on entry, the function will immediately return. 68ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * On exit the value will indicate the success of the operation. 69ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 70ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CAPI int32_t U_EXPORT2 71ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruucbuf_getc(UCHARBUF* buf,UErrorCode* err); 72ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 73ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/** 74ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Gets a UTF-32 code point at the current position from the converted buffer 75ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * and increments the current position 76ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param buf Pointer to UCHARBUF structure 77ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param err is a pointer to a valid <code>UErrorCode</code> value. If this value 78ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * indicates a failure on entry, the function will immediately return. 79ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * On exit the value will indicate the success of the operation. 80ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 81ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CAPI int32_t U_EXPORT2 82ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruucbuf_getc32(UCHARBUF* buf,UErrorCode* err); 83ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 84ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/** 85ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Gets a UTF-16 code unit at the current position from the converted buffer after 86ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * unescaping and increments the current position. If the escape sequence is for UTF-32 87ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * code point (\\Uxxxxxxxx) then a UTF-32 codepoint is returned 88ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param buf Pointer to UCHARBUF structure 89ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param err is a pointer to a valid <code>UErrorCode</code> value. If this value 90ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * indicates a failure on entry, the function will immediately return. 91ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * On exit the value will indicate the success of the operation. 92ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 93ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CAPI int32_t U_EXPORT2 94ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruucbuf_getcx32(UCHARBUF* buf,UErrorCode* err); 95ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 96ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/** 97ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Gets a pointer to the current position in the internal buffer and length of the line. 98ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * It imperative to make a copy of the returned buffere before performing operations on it. 99ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param buf Pointer to UCHARBUF structure 100ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param len Output param to receive the len of the buffer returned till end of the line 101ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param err is a pointer to a valid <code>UErrorCode</code> value. If this value 102ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * indicates a failure on entry, the function will immediately return. 103ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * On exit the value will indicate the success of the operation. 104ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Error: U_TRUNCATED_CHAR_FOUND 105ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @return Pointer to the internal buffer, NULL if EOF 106ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 107ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CAPI const UChar* U_EXPORT2 108ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruucbuf_readline(UCHARBUF* buf,int32_t* len, UErrorCode* err); 109ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 110ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 111ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/** 112ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Resets the buffers and the underlying file stream. 113ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param buf Pointer to UCHARBUF structure 114ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param err is a pointer to a valid <code>UErrorCode</code> value. If this value 115ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * indicates a failure on entry, the function will immediately return. 116ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * On exit the value will indicate the success of the operation. 117ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 118ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CAPI void U_EXPORT2 119ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruucbuf_rewind(UCHARBUF* buf,UErrorCode* err); 120ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 121ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/** 122ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Returns a pointer to the internal converted buffer 123ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param buf Pointer to UCHARBUF structure 124ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param len Pointer to int32_t to receive the lenth of buffer 125ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param err is a pointer to a valid <code>UErrorCode</code> value. If this value 126ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * indicates a failure on entry, the function will immediately return. 127ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * On exit the value will indicate the success of the operation. 128ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @return Pointer to internal UChar buffer 129ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 130ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CAPI const UChar* U_EXPORT2 131ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruucbuf_getBuffer(UCHARBUF* buf,int32_t* len,UErrorCode* err); 132ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 133ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/** 134ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Closes the UCHARBUF structure members and cleans up the malloc'ed memory 135ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param buf Pointer to UCHARBUF structure 136ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 137ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CAPI void U_EXPORT2 138ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruucbuf_close(UCHARBUF* buf); 139ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 140ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/** 14185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * Rewinds the buffer by one codepoint. Does not rewind over escaped characters. 142ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 143ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CAPI void U_EXPORT2 144ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruucbuf_ungetc(int32_t ungetChar,UCHARBUF* buf); 145ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 146ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 147ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/** 148ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Autodetects the encoding of the file stream. Only Unicode charsets are autodectected. 149ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Some Unicode charsets are stateful and need byte identifiers to be converted also to bring 150ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * the converter to correct state for converting the rest of the stream. So the UConverter parameter 151ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * is necessary. 152ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * If the charset was autodetected, the caller must close both the input FileStream 153ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * and the converter. 154ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 155ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param fileName The file name to be opened and encoding autodected 156ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param conv Output param to receive the opened converter if autodetected; NULL otherwise. 157ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param cp Output param to receive the detected encoding 158ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param err is a pointer to a valid <code>UErrorCode</code> value. If this value 159ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * indicates a failure on entry, the function will immediately return. 160ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * On exit the value will indicate the success of the operation. 161ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @return The input FileStream if its charset was autodetected; NULL otherwise. 162ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 163ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CAPI FileStream * U_EXPORT2 164ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruucbuf_autodetect(const char* fileName, const char** cp,UConverter** conv, 165ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruint32_t* signatureLength, UErrorCode* status); 166ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 167ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/** 168ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Autodetects the encoding of the file stream. Only Unicode charsets are autodectected. 169ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Some Unicode charsets are stateful and need byte identifiers to be converted also to bring 170ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * the converter to correct state for converting the rest of the stream. So the UConverter parameter 171ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * is necessary. 172ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * If the charset was autodetected, the caller must close the converter. 173ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 174ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param fileStream The file stream whose encoding is to be detected 175ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param conv Output param to receive the opened converter if autodetected; NULL otherwise. 176ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param cp Output param to receive the detected encoding 177ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @param err is a pointer to a valid <code>UErrorCode</code> value. If this value 178ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * indicates a failure on entry, the function will immediately return. 179ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * On exit the value will indicate the success of the operation. 180ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * @return Boolean whether the Unicode charset was autodetected. 181ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 182ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 183ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CAPI UBool U_EXPORT2 184ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruucbuf_autodetect_fs(FileStream* in, const char** cp, UConverter** conv, int32_t* signatureLength, UErrorCode* status); 185ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 186ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/** 187ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Returns the approximate size in UChars required for converting the file to UChars 188ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 189ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CAPI int32_t U_EXPORT2 190ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruucbuf_size(UCHARBUF* buf); 191ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 192ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_CAPI const char* U_EXPORT2 193ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruucbuf_resolveFileName(const char* inputDir, const char* fileName, char* target, int32_t* len, UErrorCode* status); 194ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 195ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif 196ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif 197ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 198