瀏覽代碼

libdpkg: Add a new varbufsubstc function

Guillem Jover 17 年之前
父節點
當前提交
b85e48d409
共有 4 個文件被更改,包括 36 次插入0 次删除
  1. 7 0
      ChangeLog
  2. 1 0
      lib/dpkg-db.h
  3. 18 0
      lib/test/t-varbuf.c
  4. 10 0
      lib/varbuf.c

+ 7 - 0
ChangeLog

@@ -1,3 +1,10 @@
+2009-01-22  Guillem Jover  <guillem@debian.org>
+
+	* lib/dpkg-db.h (varbufsubstc): New function prototype.
+	* lib/varbuf.c (varbufsubstc): New function definition.
+	* lib/test/t-varbuf.c (test_varbuf_substc): New function.
+	(test): Call test_varbuf_substc.
+
 2009-01-22  Guillem Jover  <guillem@debian.org>
 
 	* configure.ac (AC_CONFIG_FILES): Add 'lib/test/Makefile'.

+ 1 - 0
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);

+ 18 - 0
lib/test/t-varbuf.c

@@ -124,6 +124,23 @@ test_varbuf_dupc(void)
 	varbuffree(&vb);
 }
 
+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)
 {
@@ -153,6 +170,7 @@ test(void)
 	test_varbuf_addbuf();
 	test_varbuf_addc();
 	test_varbuf_dupc();
+	test_varbuf_substc();
 	test_varbuf_reset();
 
 	/* FIXME: Complete. */

+ 10 - 0
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;