Lines Matching refs:sb

20 int strbuf_init(struct strbuf *sb, ssize_t hint)  in strbuf_init()  argument
22 sb->alloc = sb->len = 0; in strbuf_init()
23 sb->buf = strbuf_slopbuf; in strbuf_init()
25 return strbuf_grow(sb, hint); in strbuf_init()
29 void strbuf_release(struct strbuf *sb) in strbuf_release() argument
31 if (sb->alloc) { in strbuf_release()
32 zfree(&sb->buf); in strbuf_release()
33 strbuf_init(sb, 0); in strbuf_release()
37 char *strbuf_detach(struct strbuf *sb, size_t *sz) in strbuf_detach() argument
39 char *res = sb->alloc ? sb->buf : NULL; in strbuf_detach()
41 *sz = sb->len; in strbuf_detach()
42 strbuf_init(sb, 0); in strbuf_detach()
46 int strbuf_grow(struct strbuf *sb, size_t extra) in strbuf_grow() argument
49 size_t nr = sb->len + extra + 1; in strbuf_grow()
51 if (nr < sb->alloc) in strbuf_grow()
54 if (nr <= sb->len) in strbuf_grow()
57 if (alloc_nr(sb->alloc) > nr) in strbuf_grow()
58 nr = alloc_nr(sb->alloc); in strbuf_grow()
64 buf = realloc(sb->alloc ? sb->buf : NULL, nr * sizeof(*buf)); in strbuf_grow()
68 sb->buf = buf; in strbuf_grow()
69 sb->alloc = nr; in strbuf_grow()
73 int strbuf_addch(struct strbuf *sb, int c) in strbuf_addch() argument
75 int ret = strbuf_grow(sb, 1); in strbuf_addch()
79 sb->buf[sb->len++] = c; in strbuf_addch()
80 sb->buf[sb->len] = '\0'; in strbuf_addch()
84 int strbuf_add(struct strbuf *sb, const void *data, size_t len) in strbuf_add() argument
86 int ret = strbuf_grow(sb, len); in strbuf_add()
90 memcpy(sb->buf + sb->len, data, len); in strbuf_add()
91 return strbuf_setlen(sb, sb->len + len); in strbuf_add()
94 static int strbuf_addv(struct strbuf *sb, const char *fmt, va_list ap) in strbuf_addv() argument
99 if (!strbuf_avail(sb)) { in strbuf_addv()
100 ret = strbuf_grow(sb, 64); in strbuf_addv()
106 len = vsnprintf(sb->buf + sb->len, sb->alloc - sb->len, fmt, ap); in strbuf_addv()
111 if (len > strbuf_avail(sb)) { in strbuf_addv()
112 ret = strbuf_grow(sb, len); in strbuf_addv()
117 len = vsnprintf(sb->buf + sb->len, sb->alloc - sb->len, fmt, ap_saved); in strbuf_addv()
118 if (len > strbuf_avail(sb)) { in strbuf_addv()
125 return strbuf_setlen(sb, sb->len + len); in strbuf_addv()
128 int strbuf_addf(struct strbuf *sb, const char *fmt, ...) in strbuf_addf() argument
134 ret = strbuf_addv(sb, fmt, ap); in strbuf_addf()
139 ssize_t strbuf_read(struct strbuf *sb, int fd, ssize_t hint) in strbuf_read() argument
141 size_t oldlen = sb->len; in strbuf_read()
142 size_t oldalloc = sb->alloc; in strbuf_read()
145 ret = strbuf_grow(sb, hint ? hint : 8192); in strbuf_read()
152 cnt = read(fd, sb->buf + sb->len, sb->alloc - sb->len - 1); in strbuf_read()
155 strbuf_release(sb); in strbuf_read()
157 strbuf_setlen(sb, oldlen); in strbuf_read()
162 sb->len += cnt; in strbuf_read()
163 ret = strbuf_grow(sb, 8192); in strbuf_read()
168 sb->buf[sb->len] = '\0'; in strbuf_read()
169 return sb->len - oldlen; in strbuf_read()