[libcxx-commits] [PATCH] D97473: [SystemZ][z/OS] vasprintf fix libc++

Muiez Ahmed via Phabricator via libcxx-commits libcxx-commits at lists.llvm.org
Fri Mar 5 07:11:11 PST 2021


muiez updated this revision to Diff 328517.
muiez added a comment.

modify old implementation, formatting


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D97473/new/

https://reviews.llvm.org/D97473

Files:
  libcxx/include/__support/ibm/xlocale.h


Index: libcxx/include/__support/ibm/xlocale.h
===================================================================
--- libcxx/include/__support/ibm/xlocale.h
+++ libcxx/include/__support/ibm/xlocale.h
@@ -10,6 +10,7 @@
 #ifndef _LIBCPP_SUPPORT_IBM_XLOCALE_H
 #define _LIBCPP_SUPPORT_IBM_XLOCALE_H
 
+#include <stdarg.h>
 #include <__support/ibm/locale_mgmt_aix.h>
 
 #include "cstdlib"
@@ -251,18 +252,19 @@
 }
 
 static inline
-int vasprintf(char **strp, const char *fmt, va_list ap)
-{
+int vasprintf(char **strp, const char *fmt, va_list ap) {
   const size_t buff_size = 256;
-  int str_size;
-  if ((*strp = (char *)malloc(buff_size)) == NULL)
-  {
+  if ((*strp = (char *)malloc(buff_size)) == NULL) {
     return -1;
   }
-  if ((str_size = vsnprintf(*strp, buff_size, fmt,  ap)) >= buff_size)
-  {
-    if ((*strp = (char *)realloc(*strp, str_size + 1)) == NULL)
-    {
+
+  va_list ap_copy;
+  va_copy(ap_copy, ap);
+  int str_size = vsnprintf(*strp, buff_size, fmt,  ap_copy);
+  va_end(ap_copy);
+
+  if ((size_t) str_size >= buff_size) {
+    if ((*strp = (char *)realloc(*strp, str_size + 1)) == NULL) {
       return -1;
     }
     str_size = vsnprintf(*strp, str_size + 1, fmt,  ap);


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D97473.328517.patch
Type: text/x-patch
Size: 1199 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/libcxx-commits/attachments/20210305/a46dcbe3/attachment.bin>


More information about the libcxx-commits mailing list