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 struct strblk {
00010 struct strblk *next;
00011 size_t size;
00012 char data[];
00013 };
00014
00015 typedef struct {
00016 struct strblk *beg;
00017 struct strblk *lbo;
00018 size_t blkmax;
00019 size_t blkoff;
00020 size_t size;
00021 } strbuf_t;
00022
00023 strbuf_t *strbuf_new (size_t max);
00024 void strbuf_free (strbuf_t *buf);
00025
00026 int strbuf_add (strbuf_t *buf, const char *str, size_t len);
00027 int strbuf_addf (strbuf_t *buf, char *str, size_t len);
00028 int strbuf_add0 (strbuf_t *buf, const char *str);
00029 int strbuf_add0f (strbuf_t *buf, char *str);
00030
00031 int strbuf_trunc (strbuf_t *buf, size_t len);
00032 size_t strbuf_length (strbuf_t *buf);
00033
00034 char *strbuf_cstr (strbuf_t *buf);
00035 char *strbuf_cstr_r (strbuf_t *buf, char *str, size_t len);
00036
00037 size_t strbuf_fwrite (FILE *fp, strbuf_t *buf);
00038 ssize_t strbuf_write (strbuf_t *buf, int fd);
00039
00040 #endif