/* products derived from this software without specific prior written */
/* permission. */
/* */
-/* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND */
-/* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE */
-/* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR */
-/* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS */
-/* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR */
-/* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF */
-/* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS */
-/* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */
-/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) */
-/* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF */
-/* THE POSSIBILITY OF SUCH DAMAGE. */
+/* THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS ``AS IS'' AND ANY EXPRESS */
+/* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED */
+/* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */
+/* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY */
+/* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL */
+/* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS */
+/* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */
+/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, */
+/* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN */
+/* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE */
+/* POSSIBILITY OF SUCH DAMAGE. */
+/* */
+/* Copyright (c) 2006-2008 the Authors */
+/* see AUTHORS and source files for details */
/******************************************************************************/
/*
typedef A(char) buffer_t;
-#define BUFFER_INIT {NULL, 0, 0}
+#define BUFFER_INIT ARRAY_INIT
DO_INIT(buffer_t, buffer);
static inline void buffer_wipe(buffer_t *buf) {
return res;
}
+#define buffer_resize(buffer, newsize) \
+ array_ensure_exact_capacity(*(buffer), (newsize) + 1)
-void buffer_resize(buffer_t *, ssize_t newsize);
-static inline void buffer_ensure(buffer_t *buf, ssize_t extra) {
+static inline void buffer_ensure(buffer_t *buf, int extra) {
assert (extra >= 0);
if (buf->len + extra >= buf->size) {
buffer_resize(buf, buf->len + extra);
}
}
-static inline void buffer_extend(buffer_t *buf, ssize_t extra) {
+static inline void buffer_extend(buffer_t *buf, int extra) {
buffer_ensure(buf, extra);
buf->len += extra;
buf->data[buf->len] = '\0';
}
-static inline void buffer_extendch(buffer_t *buf, ssize_t extra, int c) {
+static inline void buffer_extendch(buffer_t *buf, int extra, int c) {
buffer_ensure(buf, extra);
memset(buf->data + buf->len, c, extra);
buf->len += extra;
}
-static inline void buffer_add(buffer_t *buf, const void *data, ssize_t len) {
+static inline void buffer_add(buffer_t *buf, const void *data, int len) {
buffer_ensure(buf, len);
memcpy(buf->data + buf->len, data, len);
buf->len += len;
}
__attribute__((format(printf,2,0)))
-ssize_t buffer_addvf(buffer_t *, const char *fmt, va_list);
+int buffer_addvf(buffer_t *, const char *fmt, va_list);
static inline __attribute__((format(printf,2,3)))
-ssize_t buffer_addf(buffer_t *buf, const char *fmt, ...)
+int buffer_addf(buffer_t *buf, const char *fmt, ...)
{
- ssize_t res;
+ int res;
va_list args;
va_start(args, fmt);
res = buffer_addvf(buf, fmt, args);
return res;
}
-void buffer_consume(buffer_t *buf, ssize_t len);
+void buffer_consume(buffer_t *buf, int len);
-ssize_t buffer_read(buffer_t *buf, int fd, ssize_t count);
-ssize_t buffer_write(buffer_t *buf, int fd);
+int buffer_read(buffer_t *buf, int fd, int count);
+int buffer_write(buffer_t *buf, int fd);
#endif /* PFIXTOOLS_BUFFER_H */