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