[mempool] Add mono_mempool_strdup_printf and mono_mempool_strdup_vprintf
authorAleksey Kliger <aleksey@xamarin.com>
Wed, 28 Sep 2016 21:21:09 +0000 (17:21 -0400)
committerAleksey Kliger <aleksey@xamarin.com>
Wed, 28 Sep 2016 21:21:09 +0000 (17:21 -0400)
mono/metadata/mempool-internals.h
mono/metadata/mempool.c

index b1ea15c1f22a611073b76af96b4ffc94dc614d2f..ee07963fad720b71df7d3afde7b197fa3a198e4c 100644 (file)
@@ -57,6 +57,12 @@ g_slist_append_mempool (MonoMemPool *mp, GSList *list, gpointer data)
                return new_list;
 }
 
+char*
+mono_mempool_strdup_vprintf (MonoMemPool *pool, const char *format, va_list args);
+
+char*
+mono_mempool_strdup_printf (MonoMemPool *pool, const char *format, ...);
+
 long
 mono_mempool_get_bytes_allocated (void);
 
index 214c9e2128fd5349d51d9d9f46c6e542e9751db3..2706ec6662b974ff39c98f87a82625cbea23c1f5 100644 (file)
@@ -381,6 +381,35 @@ mono_mempool_strdup (MonoMemPool *pool,
        return res;
 }
 
+char*
+mono_mempool_strdup_vprintf (MonoMemPool *pool, const char *format, va_list args)
+{
+       size_t buflen;
+       char *buf;
+       va_list args2;
+       va_copy (args2, args);
+       int len = vsnprintf (NULL, 0, format, args2);
+       va_end (args2);
+
+       if (len >= 0 && (buf = (char*)mono_mempool_alloc (pool, (buflen = (size_t) (len + 1)))) != NULL) {
+               vsnprintf (buf, buflen, format, args);
+       } else {
+               buf = NULL;
+       }
+       return buf;
+}
+
+char*
+mono_mempool_strdup_printf (MonoMemPool *pool, const char *format, ...)
+{
+       char *buf;
+       va_list args;
+       va_start (args, format);
+       buf = mono_mempool_strdup_vprintf (pool, format, args);
+       va_end (args);
+       return buf;
+}
+
 /**
  * mono_mempool_get_allocated:
  *