diff options
| author | Karel Klic <kklic@redhat.com> | 2009-11-20 17:54:17 +0100 |
|---|---|---|
| committer | Karel Klic <kklic@redhat.com> | 2009-11-20 17:54:17 +0100 |
| commit | b8da7620a417ef835869da692db140b75e8b7a93 (patch) | |
| tree | 9afa3edca4663fde9118550ca839b7021f4b0eb0 /src/Backtrace/strbuf.c | |
| parent | 10ca6da1cc2d89ba5c45179d452720d916bc4698 (diff) | |
| download | abrt-b8da7620a417ef835869da692db140b75e8b7a93.tar.gz abrt-b8da7620a417ef835869da692db140b75e8b7a93.tar.xz abrt-b8da7620a417ef835869da692db140b75e8b7a93.zip | |
Backtrace parser improvements
Diffstat (limited to 'src/Backtrace/strbuf.c')
| -rw-r--r-- | src/Backtrace/strbuf.c | 63 |
1 files changed, 39 insertions, 24 deletions
diff --git a/src/Backtrace/strbuf.c b/src/Backtrace/strbuf.c index 8cdb482e..c919354d 100644 --- a/src/Backtrace/strbuf.c +++ b/src/Backtrace/strbuf.c @@ -44,31 +44,37 @@ struct strbuf *strbuf_new() return buf; } -void strbuf_free(struct strbuf *buf) +void strbuf_free(struct strbuf *strbuf) { - free(buf->buf); - free(buf); + free(strbuf->buf); + free(strbuf); } -void strbuf_clear(struct strbuf *buf) +void strbuf_free_nobuf(struct strbuf *strbuf) { - assert(buf->alloc > 0); - buf->len = 0; - buf->buf[0] = '\0'; + free(strbuf); +} + + +void strbuf_clear(struct strbuf *strbuf) +{ + assert(strbuf->alloc > 0); + strbuf->len = 0; + strbuf->buf[0] = '\0'; } /* Ensures that the buffer can be extended by num characters * without touching malloc/realloc. */ -static void strbuf_grow(struct strbuf *buf, int num) +static void strbuf_grow(struct strbuf *strbuf, int num) { - if (buf->len + num + 1 > buf->alloc) + if (strbuf->len + num + 1 > strbuf->alloc) { - while (buf->len + num + 1 > buf->alloc) - buf->alloc *= 2; /* huge grow = infinite loop */ + while (strbuf->len + num + 1 > strbuf->alloc) + strbuf->alloc *= 2; /* huge grow = infinite loop */ - buf->buf = realloc(buf->buf, buf->alloc); - if (!buf->buf) + strbuf->buf = realloc(strbuf->buf, strbuf->alloc); + if (!strbuf->buf) { puts("Error while allocating memory for string buffer."); exit(5); @@ -76,20 +82,29 @@ static void strbuf_grow(struct strbuf *buf, int num) } } -struct strbuf *strbuf_append_char(struct strbuf *buf, char c) +struct strbuf *strbuf_append_char(struct strbuf *strbuf, char c) { - strbuf_grow(buf, 1); - buf->buf[buf->len++] = c; - buf->buf[buf->len] = '\0'; - return buf; + strbuf_grow(strbuf, 1); + strbuf->buf[strbuf->len++] = c; + strbuf->buf[strbuf->len] = '\0'; + return strbuf; } -struct strbuf *strbuf_append_str(struct strbuf *buf, char *str) +struct strbuf *strbuf_append_str(struct strbuf *strbuf, char *str) { int len = strlen(str); - strbuf_grow(buf, len); - assert(buf->len + len < buf->alloc); - strcpy(buf->buf + buf->len, str); - buf->len += len; - return buf; + strbuf_grow(strbuf, len); + assert(strbuf->len + len < strbuf->alloc); + strcpy(strbuf->buf + strbuf->len, str); + strbuf->len += len; + return strbuf; +} + +struct strbuf *strbuf_prepend_str(struct strbuf *strbuf, char *str) +{ + int len = strlen(str); + strbuf_grow(strbuf, len); + assert(strbuf->len + len < strbuf->alloc); + memmove(strbuf->buf + len, strbuf->buf, strbuf->len + 1); + memcpy(strbuf->buf, str, len); } |
