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]

Reply via email to