xref: /openbsd-src/usr.bin/rcs/buf.h (revision a28daedfc357b214be5c701aa8ba8adb29a7f1c2)
1 /*	$OpenBSD: buf.h,v 1.9 2007/02/27 07:59:13 xsa 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 rcs_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 rcs_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 /* flags */
44 #define BUF_AUTOEXT	1	/* autoextend on append */
45 
46 typedef struct rcs_buf BUF;
47 
48 BUF		*rcs_buf_alloc(size_t, u_int);
49 BUF		*rcs_buf_load(const char *, u_int);
50 void		 rcs_buf_free(BUF *);
51 void		*rcs_buf_release(BUF *);
52 u_char		 rcs_buf_getc(BUF *, size_t);
53 void		 rcs_buf_empty(BUF *);
54 size_t		 rcs_buf_append(BUF *, const void *, size_t);
55 size_t		 rcs_buf_fappend(BUF *, const char *, ...)
56 		     __attribute__((format(printf, 2, 3)));
57 void		 rcs_buf_putc(BUF *, int);
58 size_t		 rcs_buf_len(BUF *);
59 int		 rcs_buf_write_fd(BUF *, int);
60 int		 rcs_buf_write(BUF *, const char *, mode_t);
61 void		 rcs_buf_write_stmp(BUF *, char *);
62 u_char		*rcs_buf_get(BUF *b);
63 #endif	/* BUF_H */
64