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