Lines Matching refs:sb
14 int strbuf_init(struct strbuf *sb, ssize_t hint) in strbuf_init() argument
16 sb->alloc = sb->len = 0; in strbuf_init()
17 sb->buf = strbuf_slopbuf; in strbuf_init()
19 return strbuf_grow(sb, hint); in strbuf_init()
23 void strbuf_release(struct strbuf *sb) in strbuf_release() argument
25 if (sb->alloc) { in strbuf_release()
26 zfree(&sb->buf); in strbuf_release()
27 strbuf_init(sb, 0); in strbuf_release()
31 char *strbuf_detach(struct strbuf *sb, size_t *sz) in strbuf_detach() argument
33 char *res = sb->alloc ? sb->buf : NULL; in strbuf_detach()
35 *sz = sb->len; in strbuf_detach()
36 strbuf_init(sb, 0); in strbuf_detach()
40 int strbuf_grow(struct strbuf *sb, size_t extra) in strbuf_grow() argument
43 size_t nr = sb->len + extra + 1; in strbuf_grow()
45 if (nr < sb->alloc) in strbuf_grow()
48 if (nr <= sb->len) in strbuf_grow()
51 if (alloc_nr(sb->alloc) > nr) in strbuf_grow()
52 nr = alloc_nr(sb->alloc); in strbuf_grow()
58 buf = realloc(sb->alloc ? sb->buf : NULL, nr * sizeof(*buf)); in strbuf_grow()
62 sb->buf = buf; in strbuf_grow()
63 sb->alloc = nr; in strbuf_grow()
67 int strbuf_addch(struct strbuf *sb, int c) in strbuf_addch() argument
69 int ret = strbuf_grow(sb, 1); in strbuf_addch()
73 sb->buf[sb->len++] = c; in strbuf_addch()
74 sb->buf[sb->len] = '\0'; in strbuf_addch()
78 int strbuf_add(struct strbuf *sb, const void *data, size_t len) in strbuf_add() argument
80 int ret = strbuf_grow(sb, len); in strbuf_add()
84 memcpy(sb->buf + sb->len, data, len); in strbuf_add()
85 return strbuf_setlen(sb, sb->len + len); in strbuf_add()
88 static int strbuf_addv(struct strbuf *sb, const char *fmt, va_list ap) in strbuf_addv() argument
93 if (!strbuf_avail(sb)) { in strbuf_addv()
94 ret = strbuf_grow(sb, 64); in strbuf_addv()
100 len = vsnprintf(sb->buf + sb->len, sb->alloc - sb->len, fmt, ap); in strbuf_addv()
103 if (len > strbuf_avail(sb)) { in strbuf_addv()
104 ret = strbuf_grow(sb, len); in strbuf_addv()
107 len = vsnprintf(sb->buf + sb->len, sb->alloc - sb->len, fmt, ap_saved); in strbuf_addv()
109 if (len > strbuf_avail(sb)) { in strbuf_addv()
114 return strbuf_setlen(sb, sb->len + len); in strbuf_addv()
117 int strbuf_addf(struct strbuf *sb, const char *fmt, ...) in strbuf_addf() argument
123 ret = strbuf_addv(sb, fmt, ap); in strbuf_addf()
128 ssize_t strbuf_read(struct strbuf *sb, int fd, ssize_t hint) in strbuf_read() argument
130 size_t oldlen = sb->len; in strbuf_read()
131 size_t oldalloc = sb->alloc; in strbuf_read()
134 ret = strbuf_grow(sb, hint ? hint : 8192); in strbuf_read()
141 cnt = read(fd, sb->buf + sb->len, sb->alloc - sb->len - 1); in strbuf_read()
144 strbuf_release(sb); in strbuf_read()
146 strbuf_setlen(sb, oldlen); in strbuf_read()
151 sb->len += cnt; in strbuf_read()
152 ret = strbuf_grow(sb, 8192); in strbuf_read()
157 sb->buf[sb->len] = '\0'; in strbuf_read()
158 return sb->len - oldlen; in strbuf_read()