Resolve __va_list_tag ** -> va_list * type errors with clang and future GCCs
Functions taking va_args are munged to receive arguments of type '__va_list_tag *'. This patch uses va_copy to coerce them to the expected type so we don't get compiler errors. Tested on x86_64, both 32-bit and 64-bit compiles. Reported-By: Basile Starynkevitch <basile@starynkevitch.net>
This commit is contained in:
committed by
Petri Lehtinen
parent
f25698d08f
commit
dd7dd414f0
@@ -441,6 +441,7 @@ json_t *json_vpack_ex(json_error_t *error, size_t flags,
|
||||
const char *fmt, va_list ap)
|
||||
{
|
||||
scanner_t s;
|
||||
va_list ap_copy;
|
||||
json_t *value;
|
||||
|
||||
jsonp_error_init(error, "");
|
||||
@@ -457,7 +458,9 @@ json_t *json_vpack_ex(json_error_t *error, size_t flags,
|
||||
s.column = 0;
|
||||
|
||||
next_token(&s);
|
||||
value = pack(&s, &ap);
|
||||
va_copy(ap_copy, ap);
|
||||
value = pack(&s, &ap_copy);
|
||||
va_end(ap_copy);
|
||||
|
||||
next_token(&s);
|
||||
if(s.token) {
|
||||
@@ -497,6 +500,7 @@ int json_vunpack_ex(json_t *root, json_error_t *error, size_t flags,
|
||||
const char *fmt, va_list ap)
|
||||
{
|
||||
scanner_t s;
|
||||
va_list ap_copy;
|
||||
|
||||
jsonp_error_init(error, "");
|
||||
|
||||
@@ -513,8 +517,12 @@ int json_vunpack_ex(json_t *root, json_error_t *error, size_t flags,
|
||||
|
||||
next_token(&s);
|
||||
|
||||
if(unpack(&s, root, &ap))
|
||||
va_copy(ap_copy, ap);
|
||||
if(unpack(&s, root, &ap_copy)) {
|
||||
va_end(ap_copy);
|
||||
return -1;
|
||||
}
|
||||
va_end(ap_copy);
|
||||
|
||||
next_token(&s);
|
||||
if(s.token) {
|
||||
|
||||
Reference in New Issue
Block a user