You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
50 lines
1.5 KiB
50 lines
1.5 KiB
15 years ago
|
/* $Id: qio.h 3653 2000-07-29 02:57:50Z rra $
|
||
|
**
|
||
|
** Quick I/O package.
|
||
|
**
|
||
|
** The interface to the Quick I/O package, optimized for reading through
|
||
|
** files line by line. This package uses internal buffering like stdio,
|
||
|
** but is even more aggressive about its buffering.
|
||
|
*/
|
||
|
|
||
|
#ifndef INN_QIO_H
|
||
|
#define INN_QIO_H 1
|
||
|
|
||
|
#include <inn/defines.h>
|
||
|
|
||
|
BEGIN_DECLS
|
||
|
|
||
|
/*
|
||
|
** State for a quick open file, equivalent to FILE for stdio. All callers
|
||
|
** should treat this structure as opaque and instead use the functions and
|
||
|
** macros defined below.
|
||
|
*/
|
||
|
enum QIOflag { QIO_ok, QIO_error, QIO_long };
|
||
|
|
||
|
typedef struct {
|
||
|
int _fd;
|
||
|
size_t _length; /* Length of the current string. */
|
||
|
size_t _size; /* Size of the internal buffer. */
|
||
|
char * _buffer;
|
||
|
char * _start; /* Start of the unread data. */
|
||
|
char * _end; /* End of the available data. */
|
||
|
off_t _count; /* Number of bytes read so far. */
|
||
|
enum QIOflag _flag;
|
||
|
} QIOSTATE;
|
||
|
|
||
|
#define QIOerror(qp) ((qp)->_flag != QIO_ok)
|
||
|
#define QIOtoolong(qp) ((qp)->_flag == QIO_long)
|
||
|
#define QIOfileno(qp) ((qp)->_fd)
|
||
|
#define QIOlength(qp) ((qp)->_length)
|
||
|
#define QIOtell(qp) ((qp)->_count - ((qp)->_end - (qp)->_start))
|
||
|
|
||
|
extern QIOSTATE * QIOopen(const char *name);
|
||
|
extern QIOSTATE * QIOfdopen(int fd);
|
||
|
extern char * QIOread(QIOSTATE *qp);
|
||
|
extern void QIOclose(QIOSTATE *qp);
|
||
|
extern int QIOrewind(QIOSTATE *qp);
|
||
|
|
||
|
END_DECLS
|
||
|
|
||
|
#endif /* !INN_QIO_H */
|