diff options
author | Guillem Jover <guillem@debian.org> | 2018-06-17 20:34:19 +0200 |
---|---|---|
committer | Guillem Jover <guillem@debian.org> | 2018-08-30 03:14:08 +0200 |
commit | 2edd9981db1f572588b2493f81d67915183865e8 (patch) | |
tree | 43e8b1d70918b7d652cd5edfe7dc2e881ef78bc0 /lib | |
parent | ac47acc3f816672852bd5ad036e663aa150abe3f (diff) | |
download | dpkg-2edd9981db1f572588b2493f81d67915183865e8.tar.gz |
libdpkg: Add new varbuf_new() and varbuf_free() functions
Diffstat (limited to 'lib')
-rw-r--r-- | lib/dpkg/libdpkg.map | 2 | ||||
-rw-r--r-- | lib/dpkg/t/t-varbuf.c | 23 | ||||
-rw-r--r-- | lib/dpkg/varbuf.c | 18 | ||||
-rw-r--r-- | lib/dpkg/varbuf.h | 2 |
4 files changed, 44 insertions, 1 deletions
diff --git a/lib/dpkg/libdpkg.map b/lib/dpkg/libdpkg.map index cd0bd255d..20eccb72a 100644 --- a/lib/dpkg/libdpkg.map +++ b/lib/dpkg/libdpkg.map @@ -100,6 +100,7 @@ LIBDPKG_PRIVATE { str_gen_crop; # Variable buffer support + varbuf_new; varbuf_init; varbuf_reset; varbuf_grow; @@ -116,6 +117,7 @@ LIBDPKG_PRIVATE { varbuf_snapshot; varbuf_rollback; varbuf_destroy; + varbuf_free; # Path, directory and file functions secure_unlink_statted; diff --git a/lib/dpkg/t/t-varbuf.c b/lib/dpkg/t/t-varbuf.c index 585251993..8df733b9b 100644 --- a/lib/dpkg/t/t-varbuf.c +++ b/lib/dpkg/t/t-varbuf.c @@ -60,6 +60,26 @@ test_varbuf_prealloc(void) } static void +test_varbuf_new(void) +{ + struct varbuf *vb; + + vb = varbuf_new(0); + test_pass(vb != NULL); + test_pass(vb->used == 0); + test_pass(vb->size == 0); + test_pass(vb->buf == NULL); + varbuf_free(vb); + + vb = varbuf_new(10); + test_pass(vb != NULL); + test_pass(vb->used == 0); + test_pass(vb->size >= 10); + test_pass(vb->buf != NULL); + varbuf_free(vb); +} + +static void test_varbuf_grow(void) { struct varbuf vb; @@ -350,10 +370,11 @@ test_varbuf_detach(void) TEST_ENTRY(test) { - test_plan(120); + test_plan(128); test_varbuf_init(); test_varbuf_prealloc(); + test_varbuf_new(); test_varbuf_grow(); test_varbuf_trunc(); test_varbuf_add_buf(); diff --git a/lib/dpkg/varbuf.c b/lib/dpkg/varbuf.c index 9a62f92e9..ee757bcc7 100644 --- a/lib/dpkg/varbuf.c +++ b/lib/dpkg/varbuf.c @@ -115,6 +115,17 @@ varbuf_get_str(struct varbuf *v) return v->buf; } +struct varbuf * +varbuf_new(size_t size) +{ + struct varbuf *v; + + v = m_malloc(sizeof(*v)); + varbuf_init(v, size); + + return v; +} + void varbuf_init(struct varbuf *v, size_t size) { @@ -186,3 +197,10 @@ varbuf_destroy(struct varbuf *v) { free(v->buf); v->buf=NULL; v->size=0; v->used=0; } + +void +varbuf_free(struct varbuf *v) +{ + free(v->buf); + free(v); +} diff --git a/lib/dpkg/varbuf.h b/lib/dpkg/varbuf.h index 9b9a30f95..06f09f5e8 100644 --- a/lib/dpkg/varbuf.h +++ b/lib/dpkg/varbuf.h @@ -72,12 +72,14 @@ struct varbuf { #define VARBUF_INIT { 0, 0, NULL } +struct varbuf *varbuf_new(size_t size); void varbuf_init(struct varbuf *v, size_t size); void varbuf_grow(struct varbuf *v, size_t need_size); void varbuf_trunc(struct varbuf *v, size_t used_size); char *varbuf_detach(struct varbuf *v); void varbuf_reset(struct varbuf *v); void varbuf_destroy(struct varbuf *v); +void varbuf_free(struct varbuf *v); void varbuf_add_char(struct varbuf *v, int c); void varbuf_dup_char(struct varbuf *v, int c, size_t n); |