r5937: - performance improvement to talloc_asprintf_append()
authorAndrew Tridgell <tridge@samba.org>
Tue, 22 Mar 2005 04:22:39 +0000 (04:22 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:11:10 +0000 (13:11 -0500)
- allow standalone talloc to use gcc printf attributes
(This used to be commit e25aa54e962796e6e7385afed57aa287ef6f869d)

source4/lib/talloc/talloc.c
source4/lib/talloc/talloc.h

index 291ee5a8bfb5dc4ae00e68bc736c40921c2fe470..72765448c7912c1af0a432945ea8bcc2fe2a70f2 100644 (file)
@@ -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)
 {      
 
 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);
 
        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);
        len = vsnprintf(NULL, 0, fmt, ap2);
 
        s = talloc_realloc(NULL, s, char, s_len + len+1);
index 0a9888105457573e22ea044cade97e367bad62c0..f639f3c8cfaef2fb21dce0fad071fbf4e04a0046 100644 (file)
@@ -75,8 +75,16 @@ typedef void TALLOC_CTX;
 #endif
 
 #ifndef PRINTF_ATTRIBUTE
 #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
 #define PRINTF_ATTRIBUTE(a1, a2)
 #endif
+#endif
 
 
 /* The following definitions come from talloc.c  */
 
 
 /* The following definitions come from talloc.c  */