summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorGuillem Jover <guillem@debian.org>2009-01-22 20:38:09 +0200
committerGuillem Jover <guillem@debian.org>2009-01-23 04:25:32 +0200
commitb85e48d40910afd1f38d46e43ef40176fcbab28f (patch)
tree2da43711ce5e6eb4edb6389f79e550a3abf881a7 /lib
parent1e7843c247a4c44affcda34b5cc630f5b2cff7c4 (diff)
downloaddpkg-b85e48d40910afd1f38d46e43ef40176fcbab28f.tar.gz
libdpkg: Add a new varbufsubstc function
Diffstat (limited to 'lib')
-rw-r--r--lib/dpkg-db.h1
-rw-r--r--lib/test/t-varbuf.c18
-rw-r--r--lib/varbuf.c10
3 files changed, 29 insertions, 0 deletions
diff --git a/lib/dpkg-db.h b/lib/dpkg-db.h
index 7ed8d7b19..2d8599568 100644
--- a/lib/dpkg-db.h
+++ b/lib/dpkg-db.h
@@ -380,6 +380,7 @@ struct varbuf;
extern void varbufaddc(struct varbuf *v, int c);
extern void varbufdupc(struct varbuf *v, int c, size_t s);
+extern void varbufsubstc(struct varbuf *v, int c_src, int c_dst);
int varbufprintf(struct varbuf *v, const char *fmt, ...) PRINTFFORMAT(2,3);
int varbufvprintf(struct varbuf *v, const char *fmt, va_list va);
void varbufinit(struct varbuf *v, size_t size);
diff --git a/lib/test/t-varbuf.c b/lib/test/t-varbuf.c
index 2de4e9581..4157b8432 100644
--- a/lib/test/t-varbuf.c
+++ b/lib/test/t-varbuf.c
@@ -125,6 +125,23 @@ test_varbuf_dupc(void)
}
static void
+test_varbuf_substc(void)
+{
+ struct varbuf vb;
+
+ varbufinit(&vb, 5);
+
+ varbufaddbuf(&vb, "1234a5678a9012a", 15);
+
+ varbufsubstc(&vb, 'a', 'z');
+ test_pass(vb.used == 15);
+ test_pass(vb.size >= vb.used);
+ test_mem(vb.buf, ==, "1234z5678z9012z", 15);
+
+ varbuffree(&vb);
+}
+
+static void
test_varbuf_reset(void)
{
struct varbuf vb;
@@ -153,6 +170,7 @@ test(void)
test_varbuf_addbuf();
test_varbuf_addc();
test_varbuf_dupc();
+ test_varbuf_substc();
test_varbuf_reset();
/* FIXME: Complete. */
diff --git a/lib/varbuf.c b/lib/varbuf.c
index 5ab780e02..2b62fb886 100644
--- a/lib/varbuf.c
+++ b/lib/varbuf.c
@@ -46,6 +46,16 @@ varbufdupc(struct varbuf *v, int c, size_t n)
memset(v->buf + old_used, c, n);
}
+void
+varbufsubstc(struct varbuf *v, int c_src, int c_dst)
+{
+ size_t i;
+
+ for (i = 0; i < v->used; i++)
+ if (v->buf[i] == c_src)
+ v->buf[i] = c_dst;
+}
+
int varbufprintf(struct varbuf *v, const char *fmt, ...) {
int r;
va_list al;