1/* Copyright (C) 2011 The Android Open Source Project
2**
3** This software is licensed under the terms of the GNU General Public
4** License version 2, as published by the Free Software Foundation, and
5** may be copied, distributed, and modified under those terms.
6**
7** This program is distributed in the hope that it will be useful,
8** but WITHOUT ANY WARRANTY; without even the implied warranty of
9** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10** GNU General Public License for more details.
11*/
12#ifndef _ANDROID_UTILS_LINEINPUT_H
13#define _ANDROID_UTILS_LINEINPUT_H
14
15#include <stdio.h>
16
17#include "android/utils/compiler.h"
18
19ANDROID_BEGIN_HEADER
20
21/* A LineInput is used to read input text, one line at a time,
22 * into a temporary buffer owner by the LineInput object.
23 */
24typedef struct LineInput LineInput;
25
26/* Create a LineInput object that reads from a FILE* object */
27LineInput*  lineInput_newFromStdFile( FILE* file );
28
29/* Read next line from input. The result is zero-terminated with
30 * all newlines removed (\n, \r or \r\n) automatically.
31 *
32 * Returns NULL in case of error, or when the end of file is reached.
33 * See lineInput_isEof() and lineInput_getError()
34 *
35 * The returned string is owned by the LineInput object and its
36 * value will not persist any other call to any LineInput functions.
37 */
38const char* lineInput_getLine( LineInput* input );
39
40/* Same as lineInput_getLine(), but also returns the line size into
41 * '*pSize' to save you a strlen() call.
42 */
43const char* lineInput_getLineAndSize( LineInput* input, size_t *pSize );
44
45/* Returns the number of the last line read by lineInput_getLine */
46int lineInput_getLineNumber( LineInput* input );
47
48/* Returns TRUE iff the end of file was reached */
49int lineInput_isEof( LineInput* input );
50
51/* Return the error condition of a LineInput object.
52 * These are standard errno code for the last operation.
53 * Note: EOF corresponds to 0 here.
54 */
55int lineInput_getError( LineInput* input );
56
57/* Free a LineInput object. */
58void lineInput_free( LineInput* input );
59
60ANDROID_END_HEADER
61
62#endif /* _ANDROID_UTILS_LINEINPUT_H */
63