On 09.09.2017 00:55, Brian Paul wrote:
We don't have vasprintf() on Windows so we need to implement it ourselves.
Since we don't know the length of the final string, take a guess at 10000
chars.
---
  src/util/u_string.h | 11 +++++++++++
  1 file changed, 11 insertions(+)

diff --git a/src/util/u_string.h b/src/util/u_string.h
index e88e13f..d787cd3 100644
--- a/src/util/u_string.h
+++ b/src/util/u_string.h
@@ -110,6 +110,16 @@ util_sprintf(char *str, const char *format, ...)
     va_end(ap);
  }
+static inline int
+util_vasprintf(char **ret, const char *format, va_list ap)
+{
+   /* Just allocate 10000 bytes as a guess */
> +   *ret = (char *) malloc(10000);

I'd suggest something like the following instead (untested):

   va_list ap_copy;
   va_copy(ap_copy, ap);
   int r = util_vsnprintf(NULL, 0, format, ap);
   va_end(ap_copy);

   if (r < 0)
      return -1;

   *ret = (char *) malloc(r + 1);
   if (!ret)
      return -1;

   return util_vsnprintf(*ret, r + 1, format, ap);

Cheers,
Nicolai

+   if (!ret)
+      return -1;
+   return util_vsnprintf(*ret, 10000, format, ap);
+}
+
  static inline char *
  util_strchr(const char *s, char c)
  {
@@ -186,6 +196,7 @@ util_strstr(const char *haystack, const char *needle)
  #define util_vsnprintf vsnprintf
  #define util_snprintf snprintf
  #define util_vsprintf vsprintf
+#define util_vasprintf vasprintf
  #define util_sprintf sprintf
  #define util_strchr strchr
  #define util_strcmp strcmp



--
Lerne, wie die Welt wirklich ist,
Aber vergiss niemals, wie sie sein sollte.
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to