Move asprintf() implementation to compat.c
authorDavid Woodhouse <David.Woodhouse@intel.com>
Thu, 19 Apr 2012 22:21:05 +0000 (23:21 +0100)
committerDavid Woodhouse <David.Woodhouse@intel.com>
Thu, 19 Apr 2012 22:25:00 +0000 (23:25 +0100)
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
compat.c
http.c

index d0fb491..f10a292 100644 (file)
--- a/compat.c
+++ b/compat.c
@@ -37,3 +37,77 @@ time_t openconnect__time(time_t *t)
 }
 #endif
 
+#ifndef HAVE_ASPRINTF
+#include <stdarg.h>
+#include <errno.h>
+
+static int oc_vasprintf(char **strp, const char *fmt, va_list ap)
+{
+       va_list ap2;
+       char *res = NULL;
+       int len = 160, len2;
+       int ret = 0;
+       int errno_save = -ENOMEM;
+
+       res = malloc(160);
+       if (!res)
+               goto err;
+
+       /* Use a copy of 'ap', preserving it in case we need to retry into
+          a larger buffer. 160 characters should be sufficient for most
+          strings in openconnect. */
+#ifdef HAVE_VA_COPY
+       va_copy(ap2, ap);
+#elif defined (HAVE___VA_COPY)
+       __va_copy(ap2, ap);
+#else
+#error No va_copy()!
+       // You could try this.
+       ap2 = ap;
+       // Or this
+       *ap2 = *ap;
+#endif
+       len = vsnprintf(res, 160, fmt, ap2);
+       va_end(ap2);
+
+       if (len < 0) {
+       printf_err:
+               errno_save = errno;
+               free(res);
+               res = NULL;
+               goto err;
+       }
+       if (len >=0 && len < 160)
+               goto out;
+
+       free(res);
+       res = malloc(len+1);
+       if (!res)
+               goto err;
+
+       len2 = vsnprintf(res, len+1, fmt, ap);
+       if (len2 < 0 || len2 > len)
+               goto printf_err;
+
+       ret = 0;
+       goto out;
+
+ err:
+       errno = errno_save;
+       ret = -1;
+ out:
+       *strp = res;
+       return ret;
+}
+
+int openconnect__asprintf(char **strp, const char *fmt, ...)
+{
+       va_list ap;
+       int ret;
+
+       va_start(ap, fmt);
+       ret = oc_vasprintf(strp, fmt, ap);
+       va_end(ap);
+       return ret;
+}
+#endif
diff --git a/http.c b/http.c
index 4c77f60..28b73cc 100644 (file)
--- a/http.c
+++ b/http.c
@@ -546,79 +546,6 @@ static char *openconnect__strcasestr(const char *haystack, const char *needle)
 #define strcasestr openconnect__strcasestr
 #endif
 
-#ifndef HAVE_ASPRINTF
-#include <stdarg.h>
-
-static int oc_vasprintf(char **strp, const char *fmt, va_list ap)
-{
-       va_list ap2;
-       char *res = NULL;
-       int len = 160, len2;
-       int ret = 0;
-       int errno_save = -ENOMEM;
-
-       res = malloc(160);
-       if (!res)
-               goto err;
-
-       /* Use a copy of 'ap', preserving it in case we need to retry into
-          a larger buffer. 160 characters should be sufficient for most
-          strings in openconnect. */
-#ifdef HAVE_VA_COPY
-       va_copy(ap2, ap);
-#elif defined (HAVE___VA_COPY)
-       __va_copy(ap2, ap);
-#else
-#error No va_copy()!
-       // You could try this.
-       ap2 = ap;
-       // Or this
-       *ap2 = *ap;
-#endif
-       len = vsnprintf(res, 160, fmt, ap2);
-       va_end(ap2);
-
-       if (len < 0) {
-       printf_err:
-               errno_save = errno;
-               free(res);
-               res = NULL;
-               goto err;
-       }
-       if (len >=0 && len < 160)
-               goto out;
-
-       free(res);
-       res = malloc(len+1);
-       if (!res)
-               goto err;
-
-       len2 = vsnprintf(res, len+1, fmt, ap);
-       if (len2 < 0 || len2 > len)
-               goto printf_err;
-
-       ret = 0;
-       goto out;
-
- err:
-       errno = errno_save;
-       ret = -1;
- out:
-       *strp = res;
-       return ret;
-}
-
-int openconnect__asprintf(char **strp, const char *fmt, ...)
-{
-       va_list ap;
-       int ret;
-
-       va_start(ap, fmt);
-       ret = oc_vasprintf(strp, fmt, ap);
-       va_end(ap);
-       return ret;
-}
-#endif
 
 int internal_parse_url(char *url, char **res_proto, char **res_host,
                       int *res_port, char **res_path, int default_port)