summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source4/lib/talloc/talloc.c7
-rw-r--r--source4/lib/talloc/talloc.h8
2 files changed, 10 insertions, 5 deletions
diff --git a/source4/lib/talloc/talloc.c b/source4/lib/talloc/talloc.c
index 291ee5a8bf..72765448c7 100644
--- a/source4/lib/talloc/talloc.c
+++ b/source4/lib/talloc/talloc.c
@@ -946,16 +946,13 @@ static char *talloc_vasprintf_append(char *s, const char *fmt, va_list ap) PRINT
static char *talloc_vasprintf_append(char *s, const char *fmt, va_list ap)
{
+ struct talloc_chunk *tc = talloc_chunk_from_ptr(s);
int len, s_len;
va_list ap2;
VA_COPY(ap2, ap);
- if (s) {
- s_len = strlen(s);
- } else {
- s_len = 0;
- }
+ s_len = tc->size - 1;
len = vsnprintf(NULL, 0, fmt, ap2);
s = talloc_realloc(NULL, s, char, s_len + len+1);
diff --git a/source4/lib/talloc/talloc.h b/source4/lib/talloc/talloc.h
index 0a98881054..f639f3c8cf 100644
--- a/source4/lib/talloc/talloc.h
+++ b/source4/lib/talloc/talloc.h
@@ -75,8 +75,16 @@ typedef void TALLOC_CTX;
#endif
#ifndef PRINTF_ATTRIBUTE
+#if (__GNUC__ >= 3)
+/** Use gcc attribute to check printf fns. a1 is the 1-based index of
+ * the parameter containing the format, and a2 the index of the first
+ * argument. Note that some gcc 2.x versions don't handle this
+ * properly **/
+#define PRINTF_ATTRIBUTE(a1, a2) __attribute__ ((format (__printf__, a1, a2)))
+#else
#define PRINTF_ATTRIBUTE(a1, a2)
#endif
+#endif
/* The following definitions come from talloc.c */