diff options
author | Guillem Jover <guillem@debian.org> | 2009-01-22 20:38:09 +0200 |
---|---|---|
committer | Guillem Jover <guillem@debian.org> | 2009-01-23 04:25:32 +0200 |
commit | b85e48d40910afd1f38d46e43ef40176fcbab28f (patch) | |
tree | 2da43711ce5e6eb4edb6389f79e550a3abf881a7 /lib | |
parent | 1e7843c247a4c44affcda34b5cc630f5b2cff7c4 (diff) | |
download | dpkg-b85e48d40910afd1f38d46e43ef40176fcbab28f.tar.gz |
libdpkg: Add a new varbufsubstc function
Diffstat (limited to 'lib')
-rw-r--r-- | lib/dpkg-db.h | 1 | ||||
-rw-r--r-- | lib/test/t-varbuf.c | 18 | ||||
-rw-r--r-- | lib/varbuf.c | 10 |
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; |