Add [v]asprintf
authorhpa <hpa>
Tue, 21 Dec 2004 04:56:37 +0000 (04:56 +0000)
committerhpa <hpa>
Tue, 21 Dec 2004 04:56:37 +0000 (04:56 +0000)
com32/lib/asprintf.c [new file with mode: 0644]
com32/lib/vasprintf.c [new file with mode: 0644]

diff --git a/com32/lib/asprintf.c b/com32/lib/asprintf.c
new file mode 100644 (file)
index 0000000..6002b57
--- /dev/null
@@ -0,0 +1,30 @@
+/*
+ * asprintf.c
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+
+int asprintf(char **bufp, const char *format, ...)
+{
+  va_list ap, ap1;
+  int rv;
+  int bytes;
+  char *p;
+
+  va_start(ap, format);
+  va_copy(ap1, ap);
+
+  bytes = vsnprintf(NULL, 0, format, ap1) + 1;
+  va_end(ap1);
+
+  *bufp = p = malloc(bytes);
+  if ( !p )
+    return -1;
+  
+  rv = vsnprintf(p, bytes, format, ap);
+  va_end(ap);
+
+  return rv;
+}
diff --git a/com32/lib/vasprintf.c b/com32/lib/vasprintf.c
new file mode 100644 (file)
index 0000000..657bfdc
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * vasprintf.c
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+
+int vasprintf(char **bufp, const char *format, va_list ap)
+{
+  va_list ap1;
+  int bytes;
+  char *p;
+
+  va_copy(ap1, ap);
+
+  bytes = vsnprintf(NULL, 0, format, ap1) + 1;
+  va_end(ap1);
+
+  *bufp = p = malloc(bytes);
+  if ( !p )
+    return -1;
+  
+  return vsnprintf(p, bytes, format, ap);
+}