changeset 15032:5930f7812e28

str_*printfa(): Avoid (harder!) growing underlying buffer if possible. The previous change for this didn't work properly.
author Timo Sirainen <tss@iki.fi>
date Thu, 06 Sep 2012 01:04:28 +0300
parents 9bc2e718392c
children 34076ab28d28
files src/lib/str.c
diffstat 1 files changed, 3 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib/str.c	Tue Sep 04 19:58:59 2012 +0300
+++ b/src/lib/str.c	Thu Sep 06 01:04:28 2012 +0300
@@ -145,10 +145,11 @@
 	init_size += SNPRINTF_INITIAL_EXTRA_SIZE;
 
 	/* @UNSAFE */
-	if (init_size > buffer_get_size(str)) {
+	if (pos+init_size > buffer_get_size(str) &&
+	    pos < buffer_get_size(str)) {
 		/* avoid growing buffer larger if possible. this is also
 		   required if buffer isn't dynamically growing. */
-		init_size = buffer_get_size(str);
+		init_size = buffer_get_size(str)-pos;
 	}
 	tmp = buffer_get_space_unsafe(str, pos, init_size);
 	ret = vsnprintf(tmp, init_size, fmt, args);