* support/Util/dbuf.c: fixed bug #1489008 fix dbuf_c_str(),
[fw/sdcc] / support / Util / dbuf.c
index da52a61e2370d2184d447fd9910acd4424ee9ba1..5ee200ac6d1400102670a6917eae005e30a0efa4 100644 (file)
@@ -1,6 +1,6 @@
 /*
   dbuf.c - Dynamic buffer implementation
-  version 1.1.2, May 17th, 2006
+  version 1.1.2, May 22th, 2006
 
   Copyright (c) 2002-2006 Borut Razem
 
@@ -44,8 +44,10 @@ static int dbuf_expand(struct dbuf_s *dbuf, size_t size)
   if (dbuf->len + size > dbuf->alloc) {
     /* new_allocated_size = current_allocated_size * 2^n */
     /* can this be optimized? */
-    while (dbuf->len + size >= dbuf->alloc)
+    do {
       dbuf->alloc += dbuf->alloc;
+    }
+    while (dbuf->len + size > dbuf->alloc);
 
     if ((dbuf->buf = realloc(dbuf->buf, dbuf->alloc)) == NULL)
       return 0;
@@ -145,12 +147,8 @@ const char *dbuf_c_str(struct dbuf_s *dbuf)
   assert(dbuf->alloc != 0);
   assert(dbuf->buf != NULL);
 
-  /* only if not already null terminated */
-  if (dbuf->len == dbuf->alloc ||
-    ((char *)dbuf->buf)[dbuf->len] != '\0') {
-    dbuf_expand(dbuf, 1);
-    ((char *)dbuf->buf)[dbuf->len] = '\0';
-  }
+  dbuf_expand(dbuf, 1);
+  ((char *)dbuf->buf)[dbuf->len] = '\0';
 
   return dbuf->buf;
 }