This is an automated email from the git hooks/post-receive script.

guillem pushed a commit to branch main
in repository dpkg.

View the commit online:
https://git.dpkg.org/cgit/dpkg/dpkg.git/commit/?id=b630e2495d18e14f9e7e40026f5dd4a2f2605f9c

commit b630e2495d18e14f9e7e40026f5dd4a2f2605f9c
Author: Guillem Jover <[email protected]>
AuthorDate: Fri Oct 21 03:27:15 2022 +0200

    libdpkg: Add new varbuf_rollback_len() and varbuf_rollback_start() functions
    
    This make using the rollback points easier.
---
 lib/dpkg/libdpkg.map  |  2 ++
 lib/dpkg/t/t-varbuf.c | 21 ++++++++++++++++++++-
 lib/dpkg/varbuf.c     | 21 +++++++++++++++++++++
 lib/dpkg/varbuf.h     |  2 ++
 4 files changed, 45 insertions(+), 1 deletion(-)

diff --git a/lib/dpkg/libdpkg.map b/lib/dpkg/libdpkg.map
index 6f07fd682..65257bb0e 100644
--- a/lib/dpkg/libdpkg.map
+++ b/lib/dpkg/libdpkg.map
@@ -124,6 +124,8 @@ LIBDPKG_PRIVATE {
        varbuf_detach;
        varbuf_snapshot;
        varbuf_rollback;
+       varbuf_rollback_len;
+       varbuf_rollback_start;
        varbuf_destroy;
        varbuf_free;
 
diff --git a/lib/dpkg/t/t-varbuf.c b/lib/dpkg/t/t-varbuf.c
index a1c386d4f..ee1fdbced 100644
--- a/lib/dpkg/t/t-varbuf.c
+++ b/lib/dpkg/t/t-varbuf.c
@@ -392,21 +392,40 @@ test_varbuf_snapshot(void)
        varbuf_snapshot(&vb, &vbs);
        test_pass(vb.used == 0);
        test_pass(vb.used == vbs.used);
+       test_pass(varbuf_rollback_len(&vbs) == 0);
+       test_str(varbuf_rollback_start(&vbs), ==, "");
 
        varbuf_add_buf(&vb, "1234567890", 10);
+       varbuf_end_str(&vb);
        test_pass(vb.used == 10);
+       test_pass(varbuf_rollback_len(&vbs) == 10);
+       test_str(varbuf_rollback_start(&vbs), ==, "1234567890");
        varbuf_rollback(&vbs);
+       varbuf_end_str(&vb);
        test_pass(vb.used == 0);
+       test_pass(varbuf_rollback_len(&vbs) == 0);
+       test_str(varbuf_rollback_start(&vbs), ==, "");
 
        varbuf_add_buf(&vb, "1234567890", 10);
+       varbuf_end_str(&vb);
        test_pass(vb.used == 10);
+       test_pass(varbuf_rollback_len(&vbs) == 10);
+       test_str(varbuf_rollback_start(&vbs), ==, "1234567890");
        varbuf_snapshot(&vb, &vbs);
        test_pass(vb.used == 10);
+       test_pass(varbuf_rollback_len(&vbs) == 0);
+       test_str(varbuf_rollback_start(&vbs), ==, "");
 
        varbuf_add_buf(&vb, "1234567890", 10);
+       varbuf_end_str(&vb);
        test_pass(vb.used == 20);
+       test_pass(varbuf_rollback_len(&vbs) == 10);
+       test_str(varbuf_rollback_start(&vbs), ==, "1234567890");
        varbuf_rollback(&vbs);
+       varbuf_end_str(&vb);
        test_pass(vb.used == 10);
+       test_pass(varbuf_rollback_len(&vbs) == 0);
+       test_str(varbuf_rollback_start(&vbs), ==, "");
 
        varbuf_destroy(&vb);
 }
@@ -433,7 +452,7 @@ test_varbuf_detach(void)
 
 TEST_ENTRY(test)
 {
-       test_plan(138);
+       test_plan(152);
 
        test_varbuf_init();
        test_varbuf_prealloc();
diff --git a/lib/dpkg/varbuf.c b/lib/dpkg/varbuf.c
index a752ece64..c4e61e244 100644
--- a/lib/dpkg/varbuf.c
+++ b/lib/dpkg/varbuf.c
@@ -200,6 +200,27 @@ varbuf_rollback(struct varbuf_state *vs)
   varbuf_trunc(vs->v, vs->used);
 }
 
+size_t
+varbuf_rollback_len(struct varbuf_state *vs)
+{
+  if (vs->used > vs->v->used)
+    internerr("varbuf state_used(%zu) > used(%zu)", vs->used, vs->v->used);
+  return vs->v->used - vs->used;
+}
+
+const char *
+varbuf_rollback_start(struct varbuf_state *vs)
+{
+  if (vs->v->buf == NULL) {
+    if (vs->used)
+      internerr("varbuf buf(NULL) state_used(%zu) > 0", vs->used);
+    /* XXX: Ideally this would be handled by varbuf always having a valid
+     * buf or switching all users to the getter, but for now this will do. */
+    return "";
+  }
+  return vs->v->buf + vs->used;
+}
+
 char *
 varbuf_detach(struct varbuf *v)
 {
diff --git a/lib/dpkg/varbuf.h b/lib/dpkg/varbuf.h
index 2ffb3622f..c5c9458e8 100644
--- a/lib/dpkg/varbuf.h
+++ b/lib/dpkg/varbuf.h
@@ -103,6 +103,8 @@ struct varbuf_state {
 
 void varbuf_snapshot(struct varbuf *v, struct varbuf_state *vs);
 void varbuf_rollback(struct varbuf_state *vs);
+size_t varbuf_rollback_len(struct varbuf_state *vs);
+const char *varbuf_rollback_start(struct varbuf_state *vs);
 
 /** @} */
 

-- 
Dpkg.Org's dpkg

Reply via email to