1/* 2 * Buffering to output and input. 3 * Copyright (C) 1998 Kunihiro Ishiguro 4 * 5 * This file is part of GNU Zebra. 6 * 7 * GNU Zebra is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License as published 9 * by the Free Software Foundation; either version 2, or (at your 10 * option) any later version. 11 * 12 * GNU Zebra is distributed in the hope that it will be useful, but 13 * WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 * General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with GNU Zebra; see the file COPYING. If not, write to the 19 * Free Software Foundation, Inc., 59 Temple Place - Suite 330, 20 * Boston, MA 02111-1307, USA. 21 */ 22 23#ifndef _ZEBRA_BUFFER_H 24#define _ZEBRA_BUFFER_H 25 26/* Buffer master. */ 27struct buffer 28{ 29 /* Data list. */ 30 struct buffer_data *head; 31 struct buffer_data *tail; 32 33 /* Current allocated data. */ 34 unsigned long alloc; 35 36 /* Total length of buffer. */ 37 unsigned long size; 38 39 /* For allocation. */ 40 struct buffer_data *unused_head; 41 struct buffer_data *unused_tail; 42 43 /* Current total length of this buffer. */ 44 unsigned long length; 45}; 46 47/* Data container. */ 48struct buffer_data 49{ 50 struct buffer *parent; 51 struct buffer_data *next; 52 struct buffer_data *prev; 53 54 /* Acctual data stream. */ 55 unsigned char *data; 56 57 /* Current pointer. */ 58 unsigned long cp; 59 60 /* Start pointer. */ 61 unsigned long sp; 62}; 63 64/* Buffer prototypes. */ 65struct buffer *buffer_new (size_t); 66int buffer_write (struct buffer *, u_char *, size_t); 67void buffer_free (struct buffer *); 68char *buffer_getstr (struct buffer *); 69int buffer_putc (struct buffer *, u_char); 70int buffer_putstr (struct buffer *, u_char *); 71void buffer_reset (struct buffer *); 72int buffer_flush_all (struct buffer *, int); 73int buffer_flush_vty_all (struct buffer *, int, int, int); 74int buffer_flush_window (struct buffer *, int, int, int, int, int); 75int buffer_empty (struct buffer *); 76 77#endif /* _ZEBRA_BUFFER_H */ 78