The following commit has been merged in the master branch:
commit 1433317d2fe83290ef02dbf54a6e4e650cb691d6
Author: Guillem Jover <[email protected]>
Date: Sat Jul 17 19:12:01 2010 +0200
libdpkg: Add new varbuf_trunc() function
diff --git a/lib/dpkg/libdpkg.Versions b/lib/dpkg/libdpkg.Versions
index 11cd126..4846daf 100644
--- a/lib/dpkg/libdpkg.Versions
+++ b/lib/dpkg/libdpkg.Versions
@@ -50,6 +50,7 @@ LIBDPKG_PRIVATE {
varbufinit;
varbufreset;
varbuf_grow;
+ varbuf_trunc;
varbufaddc;
varbufdupc;
varbufsubstc;
diff --git a/lib/dpkg/test/t-varbuf.c b/lib/dpkg/test/t-varbuf.c
index cc1772d..637c6cc 100644
--- a/lib/dpkg/test/t-varbuf.c
+++ b/lib/dpkg/test/t-varbuf.c
@@ -92,6 +92,26 @@ test_varbuf_grow(void)
}
static void
+test_varbuf_trunc(void)
+{
+ struct varbuf vb;
+
+ varbufinit(&vb, 50);
+
+ /* Test that we truncate (grow). */
+ varbuf_trunc(&vb, 20);
+ test_pass(vb.used == 20);
+ test_pass(vb.size >= 50);
+
+ /* Test that we truncate (shrink). */
+ varbuf_trunc(&vb, 10);
+ test_pass(vb.used == 10);
+ test_pass(vb.size >= 50);
+
+ varbuf_destroy(&vb);
+}
+
+static void
test_varbuf_addbuf(void)
{
struct varbuf vb;
@@ -252,6 +272,7 @@ test(void)
test_varbuf_init();
test_varbuf_prealloc();
test_varbuf_grow();
+ test_varbuf_trunc();
test_varbuf_addbuf();
test_varbuf_addc();
test_varbuf_dupc();
diff --git a/lib/dpkg/varbuf.c b/lib/dpkg/varbuf.c
index 9bdd07f..2fce13e 100644
--- a/lib/dpkg/varbuf.c
+++ b/lib/dpkg/varbuf.c
@@ -128,6 +128,16 @@ varbuf_grow(struct varbuf *v, size_t need_size)
v->buf = m_realloc(v->buf, v->size);
}
+void
+varbuf_trunc(struct varbuf *v, size_t used_size)
+{
+ /* Make sure the caller does not claim more than available. */
+ if (v->size < used_size)
+ internerr("varbuf: claimed used(%zu) > size(%zu)", v->used, v->size);
+
+ v->used = used_size;
+}
+
char *
varbuf_detach(struct varbuf *v)
{
diff --git a/lib/dpkg/varbuf.h b/lib/dpkg/varbuf.h
index f866afb..7d62037 100644
--- a/lib/dpkg/varbuf.h
+++ b/lib/dpkg/varbuf.h
@@ -66,6 +66,7 @@ struct varbuf {
void varbufinit(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 varbufreset(struct varbuf *v);
void varbuf_destroy(struct varbuf *v);
--
dpkg's main repository
--
To UNSUBSCRIBE, email to [email protected]
with a subject of "unsubscribe". Trouble? Contact [email protected]