chiark / gitweb /
Always add a terminating null, and don't count it in the length.
[mLib] / lbuf.h
diff --git a/lbuf.h b/lbuf.h
index 7772885e16f56353515e68fa37a8865a8adf0685..9f290b808538d05610cd5f70175b7cd12de9a5cf 100644 (file)
--- a/lbuf.h
+++ b/lbuf.h
@@ -1,6 +1,6 @@
 /* -*-c-*-
  *
- * $Id: lbuf.h,v 1.1 1999/05/14 21:01:14 mdw Exp $
+ * $Id: lbuf.h,v 1.5 2001/01/20 12:06:01 mdw Exp $
  *
  * Block-to-line buffering
  *
 /*----- Revision history --------------------------------------------------* 
  *
  * $Log: lbuf.h,v $
+ * Revision 1.5  2001/01/20 12:06:01  mdw
+ * Define flags with macros, to ensure unsignedness.
+ *
+ * Revision 1.4  2000/06/17 10:38:14  mdw
+ * Add support for variable buffer sizes.
+ *
+ * Revision 1.3  1999/12/10 23:42:04  mdw
+ * Change header file guard names.
+ *
+ * Revision 1.2  1999/05/17 20:36:08  mdw
+ * Make the magical constants for the buffer flags uppercase.
+ *
  * Revision 1.1  1999/05/14 21:01:14  mdw
  * Integrated `select' handling bits from the background resolver project.
  *
  */
 
-#ifndef LBUF_H
-#define LBUF_H
+#ifndef MLIB_LBUF_H
+#define MLIB_LBUF_H
 
 #ifdef __cplusplus
   extern "C" {
 
 #include <stddef.h>
 
+#ifndef MLIB_ARENA_H
+#  include "arena.h"
+#endif
+
 /*----- Data structures ---------------------------------------------------*/
 
 /* --- The buffer structure --- *
@@ -100,14 +116,14 @@ typedef struct lbuf {
   void (*func)(char */*s*/, void */*p*/); /* Handler function */
   void *p;                             /* Argument for handler */
   size_t len;                          /* Length of data in buffer */
+  size_t sz;                           /* Buffer size */
   unsigned f;                          /* Various useful state flags */
-  char buf[256];                       /* The actual buffer */
+  arena *a;                            /* Memory allocation arena */
+  char *buf;                           /* The actual buffer */
 } lbuf;
 
-enum {
-  lbuf_cr = 1,                         /* Read a carriage return */
-  lbuf_enable = 2                      /* Buffer is currently enabled */
-};
+#define LBUF_CR 1u                     /* Read a carriage return */
+#define LBUF_ENABLE 2u                 /* Buffer is currently enabled */
 
 /*----- Functions provided ------------------------------------------------*/
 
@@ -180,6 +196,18 @@ extern size_t lbuf_free(lbuf */*b*/, char **/*p*/);
 
 extern void lbuf_snarf(lbuf */*b*/, const void */*p*/, size_t /*sz*/);
 
+/* --- @lbuf_setsize@ --- *
+ *
+ * Arguments:  @lbuf *b@ = pointer to buffer block
+ *             @size_t sz@ = requested maximum line size
+ *
+ * Returns:    ---
+ *
+ * Use:                Allocates a buffer of the requested size reading lines.
+ */
+
+extern void lbuf_setsize(lbuf */*b*/, size_t /*sz*/);
+
 /* --- @lbuf_init@ --- *
  *
  * Arguments:  @lbuf *b@ = pointer to buffer block
@@ -196,6 +224,17 @@ extern void lbuf_init(lbuf */*b*/,
                      void (*/*func*/)(char */*s*/, void */*p*/),
                      void */*p*/);
 
+/* --- @lbuf_destroy@ --- *
+ *
+ * Arguments:  @lbuf *b@ = pointer to buffer block
+ *
+ * Returns:    ---
+ *
+ * Use:                Deallocates a line buffer and frees any resources it owned.
+ */
+
+extern void lbuf_destroy(lbuf */*b*/);
+
 /*----- That's all, folks -------------------------------------------------*/
 
 #ifdef __cplusplus