Browse Source

tdb2: use vasprintf.

Rusty Russell 15 years ago
parent
commit
751a8a34d0
4 changed files with 8 additions and 13 deletions
  1. 1 0
      ccan/tdb2/_info
  2. 6 10
      ccan/tdb2/tdb.c
  3. 0 1
      ccan/tdb2/test/failtest_helper.c
  4. 1 2
      ccan/tdb2/test/failtest_helper.h

+ 1 - 0
ccan/tdb2/_info

@@ -76,6 +76,7 @@ int main(int argc, char *argv[])
 		return 1;
 
 	if (strcmp(argv[1], "depends") == 0) {
+		printf("ccan/asprintf\n");
 		printf("ccan/hash\n");
 		printf("ccan/likely\n");
 		printf("ccan/asearch\n");

+ 6 - 10
ccan/tdb2/tdb.c

@@ -1,4 +1,5 @@
 #include "private.h"
+#include <ccan/asprintf/asprintf.h>
 #include <ccan/tdb2/tdb2.h>
 #include <assert.h>
 #include <stdarg.h>
@@ -756,23 +757,18 @@ enum TDB_ERROR COLD tdb_logerr(struct tdb_context *tdb,
 	if (!tdb->logfn)
 		return ecode;
 
-	/* FIXME: Doesn't assume asprintf. */
 	va_start(ap, fmt);
-	len = vsnprintf(NULL, 0, fmt, ap);
+	len = vasprintf(&message, fmt, ap);
 	va_end(ap);
 
-	message = malloc(len + 1);
-	if (!message) {
+	if (len < 0) {
 		tdb->logfn(tdb, TDB_LOG_ERROR, tdb->log_private,
 			   "out of memory formatting message:");
 		tdb->logfn(tdb, level, tdb->log_private, fmt);
-		return ecode;
+	} else {
+		tdb->logfn(tdb, level, tdb->log_private, message);
+		free(message);
 	}
-	va_start(ap, fmt);
-	len = vsprintf(message, fmt, ap);
-	va_end(ap);
-	tdb->logfn(tdb, level, tdb->log_private, message);
-	free(message);
 	errno = saved_errno;
 	return ecode;
 }

+ 0 - 1
ccan/tdb2/test/failtest_helper.c

@@ -85,7 +85,6 @@ block_repeat_failures(struct failtest_call *history, unsigned num)
 	const struct failtest_call *i, *last = &history[num-1];
 
 	if (failmatch(last, INITIAL_TDB_MALLOC)
-	    || failmatch(last, LOGGING_MALLOC)
 	    || failmatch(last, URANDOM_OPEN)
 	    || failmatch(last, URANDOM_READ)) {
 		if (find_repeat(history, last, last))

+ 1 - 2
ccan/tdb2/test/failtest_helper.h

@@ -4,8 +4,7 @@
 #include <stdbool.h>
 
 /* FIXME: Check these! */
-#define INITIAL_TDB_MALLOC	"tdb.c", 189, FAILTEST_MALLOC
-#define LOGGING_MALLOC		"tdb.c", 766, FAILTEST_MALLOC
+#define INITIAL_TDB_MALLOC	"tdb.c", 190, FAILTEST_MALLOC
 #define URANDOM_OPEN		"tdb.c", 49, FAILTEST_OPEN
 #define URANDOM_READ		"tdb.c", 29, FAILTEST_READ