소스 검색

libdpkg: Use varbuf_grow instead of varbufextend

Guillem Jover 17 년 전
부모
커밋
dac03e12b4
2개의 변경된 파일7개의 추가작업 그리고 10개의 파일을 삭제
  1. 2 0
      debian/changelog
  2. 5 10
      lib/dpkg/varbuf.c

+ 2 - 0
debian/changelog

@@ -26,6 +26,8 @@ dpkg (1.15.5) UNRELEASED; urgency=low
   * Use the size from stat to allocate the buffers for readlink, instead of
     indefinitely calling readlink and growing the buffer. This should reduce
     memory usage when handling lots of symlinks, and be slightly faster.
+  * Rework varbuf api to avoid increasing buffers indefinitely when adding
+    content to them, regardless of space being already available.
 
   [ Raphaël Hertzog ]
   * Add versioned dependency on base-files (>= 5.0.0) to dpkg-dev to ensure

+ 5 - 10
lib/dpkg/varbuf.c

@@ -32,19 +32,16 @@
 void
 varbufaddc(struct varbuf *v, int c)
 {
-  if (v->used >= v->size) varbufextend(v);
+  varbuf_grow(v, 1);
   v->buf[v->used++]= c;
 }
 
 void
 varbufdupc(struct varbuf *v, int c, size_t n)
 {
-  size_t old_used = v->used;
-
+  varbuf_grow(v, n);
+  memset(v->buf + v->used, c, n);
   v->used += n;
-  if (v->used >= v->size) varbufextend(v);
-
-  memset(v->buf + old_used, c, n);
 }
 
 void
@@ -96,11 +93,9 @@ int varbufvprintf(struct varbuf *v, const char *fmt, va_list va) {
 void
 varbufaddbuf(struct varbuf *v, const void *s, size_t size)
 {
-  int ou;
-  ou= v->used;
+  varbuf_grow(v, size);
+  memcpy(v->buf + v->used, s, size);
   v->used += size;
-  if (v->used >= v->size) varbufextend(v);
-  memcpy(v->buf + ou, s, size);
 }
 
 void