summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorGuillem Jover <guillem@debian.org>2018-06-17 20:34:19 +0200
committerGuillem Jover <guillem@debian.org>2018-08-30 03:14:08 +0200
commit2edd9981db1f572588b2493f81d67915183865e8 (patch)
tree43e8b1d70918b7d652cd5edfe7dc2e881ef78bc0 /lib
parentac47acc3f816672852bd5ad036e663aa150abe3f (diff)
downloaddpkg-2edd9981db1f572588b2493f81d67915183865e8.tar.gz
libdpkg: Add new varbuf_new() and varbuf_free() functions
Diffstat (limited to 'lib')
-rw-r--r--lib/dpkg/libdpkg.map2
-rw-r--r--lib/dpkg/t/t-varbuf.c23
-rw-r--r--lib/dpkg/varbuf.c18
-rw-r--r--lib/dpkg/varbuf.h2
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);