changeset 3385:fe4a297379fc HEAD

If p_malloc() used data stack (with DEBUG enabled it might have written a warning about growing memory pool), p_strconcat() gave corrupted reply. It also didn't work correctly if the given pool was a data stack. Also made i_strconcat() to be sure it doesn't break if default_pool's p_malloc() for some reason would some day use data stack.
author Timo Sirainen <tss@iki.fi>
date Tue, 17 May 2005 00:00:45 +0300
parents 3b75956d20c4
children e4b84d82c685
files src/lib/imem.c src/lib/strfuncs.c src/lib/strfuncs.h
diffstat 3 files changed, 19 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib/imem.c	Sat May 14 23:32:03 2005 +0300
+++ b/src/lib/imem.c	Tue May 17 00:00:45 2005 +0300
@@ -59,13 +59,16 @@
 
 	va_start(args, str1);
 
+	t_push();
 	temp = _vstrconcat(str1, args, &len);
 	if (temp == NULL)
 		ret = NULL;
 	else {
+		t_buffer_alloc(len);
 		ret = p_malloc(default_pool, len);
 		memcpy(ret, temp, len);
 	}
+	t_pop();
 
 	va_end(args);
         return ret;
--- a/src/lib/strfuncs.c	Sat May 14 23:32:03 2005 +0300
+++ b/src/lib/strfuncs.c	Tue May 17 00:00:45 2005 +0300
@@ -215,7 +215,7 @@
 	return ret;
 }
 
-const char *_vstrconcat(const char *str1, va_list args, size_t *ret_len)
+char *_vstrconcat(const char *str1, va_list args, size_t *ret_len)
 {
 	const char *str;
         char *temp;
@@ -254,20 +254,30 @@
 char *p_strconcat(pool_t pool, const char *str1, ...)
 {
 	va_list args;
-        const char *temp;
-	char *ret;
+	char *temp, *ret;
         size_t len;
 
 	va_start(args, str1);
 
+	if (!pool->datastack_pool)
+		t_push();
+
 	temp = _vstrconcat(str1, args, &len);
 	if (temp == NULL)
 		ret = NULL;
 	else {
-		ret = p_malloc(pool, len);
-		memcpy(ret, temp, len);
+		t_buffer_alloc(len);
+		if (pool->datastack_pool)
+			ret = temp;
+		else {
+			ret = p_malloc(pool, len);
+			memcpy(ret, temp, len);
+		}
 	}
 
+	if (!pool->datastack_pool)
+		t_pop();
+
 	va_end(args);
         return ret;
 }
--- a/src/lib/strfuncs.h	Sat May 14 23:32:03 2005 +0300
+++ b/src/lib/strfuncs.h	Tue May 17 00:00:45 2005 +0300
@@ -71,6 +71,6 @@
 const char *t_strarray_join(const char *const *arr, const char *separator);
 
 /* INTERNAL */
-const char *_vstrconcat(const char *str1, va_list args, size_t *ret_len);
+char *_vstrconcat(const char *str1, va_list args, size_t *ret_len);
 
 #endif