xref: /openbsd/usr.bin/rcs/buf.h (revision a6445c1d)
1 /*	$OpenBSD: buf.h,v 1.13 2011/07/06 15:36:52 nicm Exp $	*/
2 /*
3  * Copyright (c) 2003 Jean-Francois Brousseau <jfb@openbsd.org>
4  * All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  *
10  * 1. Redistributions of source code must retain the above copyright
11  *    notice, this list of conditions and the following disclaimer.
12  * 2. The name of the author may not be used to endorse or promote products
13  *    derived from this software without specific prior written permission.
14  *
15  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
16  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
17  * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
18  * THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19  * EXEMPLARY, OR CONSEQUENTIAL  DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
21  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
22  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
23  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
24  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25  *
26  * Buffer management
27  * -----------------
28  *
29  * This code provides an API to generic memory buffer management.  All
30  * operations are performed on a buf structure, which is kept opaque to the
31  * API user in order to avoid corruption of the fields and make sure that only
32  * the internals can modify the fields.
33  *
34  * The first step is to allocate a new buffer using the buf_alloc()
35  * function, which returns a pointer to a new buffer.
36  */
37 
38 #ifndef BUF_H
39 #define BUF_H
40 
41 #include <sys/types.h>
42 
43 typedef struct buf BUF;
44 
45 BUF		*buf_alloc(size_t);
46 BUF		*buf_load(const char *);
47 void		 buf_free(BUF *);
48 void		*buf_release(BUF *);
49 u_char		 buf_getc(BUF *, size_t);
50 void		 buf_empty(BUF *);
51 size_t		 buf_append(BUF *, const void *, size_t);
52 void		 buf_putc(BUF *, int);
53 void		 buf_puts(BUF *b, const char *str);
54 size_t		 buf_len(BUF *);
55 int		 buf_write_fd(BUF *, int);
56 int		 buf_write(BUF *, const char *, mode_t);
57 void		 buf_write_stmp(BUF *, char *);
58 u_char		*buf_get(BUF *b);
59 
60 #endif	/* BUF_H */
61