annotate buf.h @ 151:cedd831d02ff

Fix failure in asprintf
author David Demelier <markand@malikania.fr>
date Fri, 22 Jun 2012 22:59:46 +0200
parents 2563b3e71859
children 7f214f26a4c0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
125
b9723c197038 Add brand new string buffer
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 /*
b9723c197038 Add brand new string buffer
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 * buf.h -- easy way to manipulate strings
b9723c197038 Add brand new string buffer
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 *
b9723c197038 Add brand new string buffer
David Demelier <markand@malikania.fr>
parents:
diff changeset
4 * Copyright (c) 2011, 2012, David Demelier <markand@malikania.fr>
b9723c197038 Add brand new string buffer
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 *
b9723c197038 Add brand new string buffer
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 * Permission to use, copy, modify, and/or distribute this software for any
b9723c197038 Add brand new string buffer
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 * purpose with or without fee is hereby granted, provided that the above
b9723c197038 Add brand new string buffer
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 * copyright notice and this permission notice appear in all copies.
b9723c197038 Add brand new string buffer
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 *
b9723c197038 Add brand new string buffer
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
b9723c197038 Add brand new string buffer
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
b9723c197038 Add brand new string buffer
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
b9723c197038 Add brand new string buffer
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
b9723c197038 Add brand new string buffer
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
b9723c197038 Add brand new string buffer
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
b9723c197038 Add brand new string buffer
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
b9723c197038 Add brand new string buffer
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 */
b9723c197038 Add brand new string buffer
David Demelier <markand@malikania.fr>
parents:
diff changeset
18
b9723c197038 Add brand new string buffer
David Demelier <markand@malikania.fr>
parents:
diff changeset
19 #ifndef _BUF_H_
b9723c197038 Add brand new string buffer
David Demelier <markand@malikania.fr>
parents:
diff changeset
20 #define _BUF_H_
b9723c197038 Add brand new string buffer
David Demelier <markand@malikania.fr>
parents:
diff changeset
21
135
07800b7af208 Huge cosmetic, no breakage
David Demelier <markand@malikania.fr>
parents: 133
diff changeset
22 #include <stdarg.h>
07800b7af208 Huge cosmetic, no breakage
David Demelier <markand@malikania.fr>
parents: 133
diff changeset
23
125
b9723c197038 Add brand new string buffer
David Demelier <markand@malikania.fr>
parents:
diff changeset
24 #ifdef __cplusplus
b9723c197038 Add brand new string buffer
David Demelier <markand@malikania.fr>
parents:
diff changeset
25 extern "C" {
b9723c197038 Add brand new string buffer
David Demelier <markand@malikania.fr>
parents:
diff changeset
26 #endif
b9723c197038 Add brand new string buffer
David Demelier <markand@malikania.fr>
parents:
diff changeset
27
b9723c197038 Add brand new string buffer
David Demelier <markand@malikania.fr>
parents:
diff changeset
28 #ifndef BUF_DEFAULT_BSIZE
b9723c197038 Add brand new string buffer
David Demelier <markand@malikania.fr>
parents:
diff changeset
29 #define BUF_DEFAULT_BSIZE 128
b9723c197038 Add brand new string buffer
David Demelier <markand@malikania.fr>
parents:
diff changeset
30 #endif
b9723c197038 Add brand new string buffer
David Demelier <markand@malikania.fr>
parents:
diff changeset
31
131
cbfad4fb80c8 Buf: remove buf_puts and add printf format
David Demelier <markand@malikania.fr>
parents: 129
diff changeset
32 #ifdef __GNUC__
cbfad4fb80c8 Buf: remove buf_puts and add printf format
David Demelier <markand@malikania.fr>
parents: 129
diff changeset
33 # define _buf_at_printf(i1, i2) __attribute__ ((format (printf, i1, i2)))
cbfad4fb80c8 Buf: remove buf_puts and add printf format
David Demelier <markand@malikania.fr>
parents: 129
diff changeset
34 #else
cbfad4fb80c8 Buf: remove buf_puts and add printf format
David Demelier <markand@malikania.fr>
parents: 129
diff changeset
35 # define _buf_at_printf(i1, i2)
cbfad4fb80c8 Buf: remove buf_puts and add printf format
David Demelier <markand@malikania.fr>
parents: 129
diff changeset
36 #endif
cbfad4fb80c8 Buf: remove buf_puts and add printf format
David Demelier <markand@malikania.fr>
parents: 129
diff changeset
37
149
David Demelier <markand@malikania.fr>
parents: 141
diff changeset
38 enum buf_flags {
125
b9723c197038 Add brand new string buffer
David Demelier <markand@malikania.fr>
parents:
diff changeset
39 BUF_AUTO = 0, /* string grows automatically */
b9723c197038 Add brand new string buffer
David Demelier <markand@malikania.fr>
parents:
diff changeset
40 BUF_FIXED = (1 << 0), /* fixed size string */
b9723c197038 Add brand new string buffer
David Demelier <markand@malikania.fr>
parents:
diff changeset
41 BUF_UNSAFE = (1 << 1), /* string may be truncated */
b9723c197038 Add brand new string buffer
David Demelier <markand@malikania.fr>
parents:
diff changeset
42 };
b9723c197038 Add brand new string buffer
David Demelier <markand@malikania.fr>
parents:
diff changeset
43
b9723c197038 Add brand new string buffer
David Demelier <markand@malikania.fr>
parents:
diff changeset
44 struct buf {
149
David Demelier <markand@malikania.fr>
parents: 141
diff changeset
45 enum buf_flags flags; /* (ro) string flags */
135
07800b7af208 Huge cosmetic, no breakage
David Demelier <markand@malikania.fr>
parents: 133
diff changeset
46 char *text; /* (ro) string text */
07800b7af208 Huge cosmetic, no breakage
David Demelier <markand@malikania.fr>
parents: 133
diff changeset
47 size_t length; /* (ro) string length */
07800b7af208 Huge cosmetic, no breakage
David Demelier <markand@malikania.fr>
parents: 133
diff changeset
48 size_t alsize; /* (ro) allocated size */
138
cf738da3ad60 Cosmetic
David Demelier <markand@malikania.fr>
parents: 135
diff changeset
49 int bsize; /* (ro) block size (used when growing) */
125
b9723c197038 Add brand new string buffer
David Demelier <markand@malikania.fr>
parents:
diff changeset
50
b9723c197038 Add brand new string buffer
David Demelier <markand@malikania.fr>
parents:
diff changeset
51 /* Own allocation functions */
b9723c197038 Add brand new string buffer
David Demelier <markand@malikania.fr>
parents:
diff changeset
52 void * (*malloc)(size_t);
b9723c197038 Add brand new string buffer
David Demelier <markand@malikania.fr>
parents:
diff changeset
53 void * (*realloc)(void *, size_t);
b9723c197038 Add brand new string buffer
David Demelier <markand@malikania.fr>
parents:
diff changeset
54 };
b9723c197038 Add brand new string buffer
David Demelier <markand@malikania.fr>
parents:
diff changeset
55
133
d85dd98cb49d Add attributes
David Demelier <markand@malikania.fr>
parents: 131
diff changeset
56 int
d85dd98cb49d Add attributes
David Demelier <markand@malikania.fr>
parents: 131
diff changeset
57 buf_init(struct buf *);
d85dd98cb49d Add attributes
David Demelier <markand@malikania.fr>
parents: 131
diff changeset
58
d85dd98cb49d Add attributes
David Demelier <markand@malikania.fr>
parents: 131
diff changeset
59 void
d85dd98cb49d Add attributes
David Demelier <markand@malikania.fr>
parents: 131
diff changeset
60 buf_set(struct buf *, const char *, ...);
d85dd98cb49d Add attributes
David Demelier <markand@malikania.fr>
parents: 131
diff changeset
61
d85dd98cb49d Add attributes
David Demelier <markand@malikania.fr>
parents: 131
diff changeset
62 int
d85dd98cb49d Add attributes
David Demelier <markand@malikania.fr>
parents: 131
diff changeset
63 buf_ncat(struct buf *, const char *, size_t);
d85dd98cb49d Add attributes
David Demelier <markand@malikania.fr>
parents: 131
diff changeset
64
d85dd98cb49d Add attributes
David Demelier <markand@malikania.fr>
parents: 131
diff changeset
65 int
d85dd98cb49d Add attributes
David Demelier <markand@malikania.fr>
parents: 131
diff changeset
66 buf_cat(struct buf *, const char *);
d85dd98cb49d Add attributes
David Demelier <markand@malikania.fr>
parents: 131
diff changeset
67
d85dd98cb49d Add attributes
David Demelier <markand@malikania.fr>
parents: 131
diff changeset
68 int
d85dd98cb49d Add attributes
David Demelier <markand@malikania.fr>
parents: 131
diff changeset
69 buf_putc(struct buf *, int);
d85dd98cb49d Add attributes
David Demelier <markand@malikania.fr>
parents: 131
diff changeset
70
d85dd98cb49d Add attributes
David Demelier <markand@malikania.fr>
parents: 131
diff changeset
71 int
d85dd98cb49d Add attributes
David Demelier <markand@malikania.fr>
parents: 131
diff changeset
72 buf_vprintf(struct buf *, const char *, va_list);
d85dd98cb49d Add attributes
David Demelier <markand@malikania.fr>
parents: 131
diff changeset
73
d85dd98cb49d Add attributes
David Demelier <markand@malikania.fr>
parents: 131
diff changeset
74 int
d85dd98cb49d Add attributes
David Demelier <markand@malikania.fr>
parents: 131
diff changeset
75 buf_printf(struct buf *, const char *, ...) _buf_at_printf(2, 3);
d85dd98cb49d Add attributes
David Demelier <markand@malikania.fr>
parents: 131
diff changeset
76
d85dd98cb49d Add attributes
David Demelier <markand@malikania.fr>
parents: 131
diff changeset
77 int
d85dd98cb49d Add attributes
David Demelier <markand@malikania.fr>
parents: 131
diff changeset
78 buf_trim(struct buf *);
d85dd98cb49d Add attributes
David Demelier <markand@malikania.fr>
parents: 131
diff changeset
79
d85dd98cb49d Add attributes
David Demelier <markand@malikania.fr>
parents: 131
diff changeset
80 void
141
5ed54050ae31 Added buf_cut, cut the buffer
David Demelier <markand@malikania.fr>
parents: 138
diff changeset
81 buf_cut(struct buf *, int);
5ed54050ae31 Added buf_cut, cut the buffer
David Demelier <markand@malikania.fr>
parents: 138
diff changeset
82
5ed54050ae31 Added buf_cut, cut the buffer
David Demelier <markand@malikania.fr>
parents: 138
diff changeset
83 void
133
d85dd98cb49d Add attributes
David Demelier <markand@malikania.fr>
parents: 131
diff changeset
84 buf_clear(struct buf *);
d85dd98cb49d Add attributes
David Demelier <markand@malikania.fr>
parents: 131
diff changeset
85
d85dd98cb49d Add attributes
David Demelier <markand@malikania.fr>
parents: 131
diff changeset
86 void
d85dd98cb49d Add attributes
David Demelier <markand@malikania.fr>
parents: 131
diff changeset
87 buf_free(struct buf *);
d85dd98cb49d Add attributes
David Demelier <markand@malikania.fr>
parents: 131
diff changeset
88
125
b9723c197038 Add brand new string buffer
David Demelier <markand@malikania.fr>
parents:
diff changeset
89 #ifdef __cplusplus
b9723c197038 Add brand new string buffer
David Demelier <markand@malikania.fr>
parents:
diff changeset
90 }
b9723c197038 Add brand new string buffer
David Demelier <markand@malikania.fr>
parents:
diff changeset
91 #endif
b9723c197038 Add brand new string buffer
David Demelier <markand@malikania.fr>
parents:
diff changeset
92
b9723c197038 Add brand new string buffer
David Demelier <markand@malikania.fr>
parents:
diff changeset
93 #endif /* _BUF_H_ */