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.
smartcardauth/include/inn/qio.h

50 lines
1.5 KiB

/* $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 */