1 /* $Id: qio.h 3653 2000-07-29 02:57:50Z rra $
5 ** The interface to the Quick I/O package, optimized for reading through
6 ** files line by line. This package uses internal buffering like stdio,
7 ** but is even more aggressive about its buffering.
13 #include <inn/defines.h>
18 ** State for a quick open file, equivalent to FILE for stdio. All callers
19 ** should treat this structure as opaque and instead use the functions and
20 ** macros defined below.
22 enum QIOflag { QIO_ok, QIO_error, QIO_long };
26 size_t _length; /* Length of the current string. */
27 size_t _size; /* Size of the internal buffer. */
29 char * _start; /* Start of the unread data. */
30 char * _end; /* End of the available data. */
31 off_t _count; /* Number of bytes read so far. */
35 #define QIOerror(qp) ((qp)->_flag != QIO_ok)
36 #define QIOtoolong(qp) ((qp)->_flag == QIO_long)
37 #define QIOfileno(qp) ((qp)->_fd)
38 #define QIOlength(qp) ((qp)->_length)
39 #define QIOtell(qp) ((qp)->_count - ((qp)->_end - (qp)->_start))
41 extern QIOSTATE * QIOopen(const char *name);
42 extern QIOSTATE * QIOfdopen(int fd);
43 extern char * QIOread(QIOSTATE *qp);
44 extern void QIOclose(QIOSTATE *qp);
45 extern int QIOrewind(QIOSTATE *qp);
49 #endif /* !INN_QIO_H */