buffer.h revision 57429
1/* 2 * 3 * buffer.h 4 * 5 * Author: Tatu Ylonen <ylo@cs.hut.fi> 6 * 7 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland 8 * All rights reserved 9 * 10 * Created: Sat Mar 18 04:12:25 1995 ylo 11 * 12 * Code for manipulating FIFO buffers. 13 * 14 */ 15 16/* RCSID("$Id: buffer.h,v 1.3 1999/11/24 19:53:44 markus Exp $"); */ 17 18#ifndef BUFFER_H 19#define BUFFER_H 20 21typedef struct { 22 char *buf; /* Buffer for data. */ 23 unsigned int alloc; /* Number of bytes allocated for data. */ 24 unsigned int offset; /* Offset of first byte containing data. */ 25 unsigned int end; /* Offset of last byte containing data. */ 26} Buffer; 27/* Initializes the buffer structure. */ 28void buffer_init(Buffer * buffer); 29 30/* Frees any memory used for the buffer. */ 31void buffer_free(Buffer * buffer); 32 33/* Clears any data from the buffer, making it empty. This does not actually 34 zero the memory. */ 35void buffer_clear(Buffer * buffer); 36 37/* Appends data to the buffer, expanding it if necessary. */ 38void buffer_append(Buffer * buffer, const char *data, unsigned int len); 39 40/* 41 * Appends space to the buffer, expanding the buffer if necessary. This does 42 * not actually copy the data into the buffer, but instead returns a pointer 43 * to the allocated region. 44 */ 45void buffer_append_space(Buffer * buffer, char **datap, unsigned int len); 46 47/* Returns the number of bytes of data in the buffer. */ 48unsigned int buffer_len(Buffer * buffer); 49 50/* Gets data from the beginning of the buffer. */ 51void buffer_get(Buffer * buffer, char *buf, unsigned int len); 52 53/* Consumes the given number of bytes from the beginning of the buffer. */ 54void buffer_consume(Buffer * buffer, unsigned int bytes); 55 56/* Consumes the given number of bytes from the end of the buffer. */ 57void buffer_consume_end(Buffer * buffer, unsigned int bytes); 58 59/* Returns a pointer to the first used byte in the buffer. */ 60char *buffer_ptr(Buffer * buffer); 61 62/* 63 * Dumps the contents of the buffer to stderr in hex. This intended for 64 * debugging purposes only. 65 */ 66void buffer_dump(Buffer * buffer); 67 68#endif /* BUFFER_H */ 69