00001 #pragma once
00002 #ifndef STRBUF_H
00003 #define STRBUF_H
00004
00005 #include <stddef.h>
00006 #include <unistd.h>
00007 #include <stdio.h>
00008
00009 #ifdef __cplusplus
00010 extern "C" {
00011 #endif
00012
00013 struct strblk {
00014 struct strblk *next;
00015 size_t size;
00016 char data[];
00017 };
00018
00019 typedef struct {
00020 struct strblk *beg;
00021 struct strblk *lbo;
00022 size_t blkmax;
00023 size_t blkoff;
00024 size_t size;
00025 } strbuf_t;
00026
00027 strbuf_t *strbuf_new (size_t max);
00028 void strbuf_free (strbuf_t *buf);
00029
00030 int strbuf_add (strbuf_t *buf, const char *str, size_t len);
00031 int strbuf_addf (strbuf_t *buf, char *str, size_t len);
00032 int strbuf_add0 (strbuf_t *buf, const char *str);
00033 int strbuf_add0f (strbuf_t *buf, char *str);
00034
00035 int strbuf_trunc (strbuf_t *buf, size_t len);
00036 size_t strbuf_length (strbuf_t *buf);
00037
00038 char *strbuf_cstr (strbuf_t *buf);
00039 char *strbuf_cstr_r (strbuf_t *buf, char *str, size_t len);
00040
00041 size_t strbuf_fwrite (FILE *fp, strbuf_t *buf);
00042 ssize_t strbuf_write (strbuf_t *buf, int fd);
00043
00044 #ifdef __cplusplus
00045 }
00046 #endif
00047
00048 #endif