pfix-srsd: add a -I option
[apps/pfixtools.git] / common / buffer.h
index d044114..7501859 100644 (file)
 /*     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                                 */
 /******************************************************************************/
 
 /*
@@ -41,9 +44,9 @@
 #include "str.h"
 #include "array.h"
 
-typedef char_array_t buffer_t;
+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) {
@@ -63,20 +66,21 @@ static inline char *buffer_unwrap(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;
@@ -84,7 +88,7 @@ static inline void buffer_extendch(buffer_t *buf, ssize_t extra, int c) {
 }
 
 
-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;
@@ -101,12 +105,12 @@ static inline void buffer_addch(buffer_t *buf, int c) {
 }
 
 __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);
@@ -114,9 +118,9 @@ ssize_t buffer_addf(buffer_t *buf, const char *fmt, ...)
     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 */