[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