1
0
Fork 0
mirror of https://github.com/albfan/miraclecast.git synced 2025-02-15 00:41:54 +00:00

rtsp/wpas: pass va_list by reference

As it turns out, the C standard forbids passing va_list by value and then
continue using it in the parent function (C Standard, 7.16, paragraph 3).

Luckily, there's a footnote stating:
    "It is permitted to create a pointer to a va_list and pass that
    pointer to another function, in which case the original function may
    take further use of the original list after the other function
    returns."

Therefore, we're safe passing va_list by reference and thus can keep the
current coding style.

This fixes weird bugs on ARM32 which really doesn't allow passing va_list
by value.

Signed-off-by: David Herrmann <dh.herrmann@gmail.com>
This commit is contained in:
David Herrmann 2014-08-05 13:10:03 +02:00
parent 9196c5c426
commit 67de17a511
4 changed files with 33 additions and 33 deletions

View file

@ -1028,7 +1028,7 @@ int rtsp_message_append_basic(struct rtsp_message *m,
int r;
va_start(args, type);
r = rtsp_message_appendv_basic(m, type, args);
r = rtsp_message_appendv_basic(m, type, &args);
va_end(args);
return r;
@ -1036,7 +1036,7 @@ int rtsp_message_append_basic(struct rtsp_message *m,
int rtsp_message_appendv_basic(struct rtsp_message *m,
char type,
va_list args)
va_list *args)
{
char buf[128] = { };
const char *orig;
@ -1050,7 +1050,7 @@ int rtsp_message_appendv_basic(struct rtsp_message *m,
switch (type) {
case RTSP_TYPE_RAW:
orig = va_arg(args, const char*);
orig = va_arg(*args, const char*);
if (!orig)
orig = "";
@ -1062,7 +1062,7 @@ int rtsp_message_appendv_basic(struct rtsp_message *m,
else
return rtsp_message_append_line(m, orig);
case RTSP_TYPE_HEADER_START:
orig = va_arg(args, const char*);
orig = va_arg(*args, const char*);
return rtsp_message_open_header(m, orig);
case RTSP_TYPE_HEADER_END:
@ -1078,18 +1078,18 @@ int rtsp_message_appendv_basic(struct rtsp_message *m,
switch (type) {
case RTSP_TYPE_STRING:
orig = va_arg(args, const char*);
orig = va_arg(*args, const char*);
if (!orig)
orig = "";
break;
case RTSP_TYPE_INT32:
i32 = va_arg(args, int32_t);
i32 = va_arg(*args, int32_t);
sprintf(buf, "%" PRId32, i32);
orig = buf;
break;
case RTSP_TYPE_UINT32:
u32 = va_arg(args, uint32_t);
u32 = va_arg(*args, uint32_t);
sprintf(buf, "%" PRIu32, u32);
orig = buf;
break;
@ -1108,7 +1108,7 @@ int rtsp_message_append(struct rtsp_message *m,
int r;
va_start(args, types);
r = rtsp_message_appendv(m, types, args);
r = rtsp_message_appendv(m, types, &args);
va_end(args);
return r;
@ -1116,7 +1116,7 @@ int rtsp_message_append(struct rtsp_message *m,
int rtsp_message_appendv(struct rtsp_message *m,
const char *types,
va_list args)
va_list *args)
{
int r;
@ -1474,7 +1474,7 @@ int rtsp_message_read_basic(struct rtsp_message *m,
int r;
va_start(args, type);
r = rtsp_message_readv_basic(m, type, args);
r = rtsp_message_readv_basic(m, type, &args);
va_end(args);
return r;
@ -1482,7 +1482,7 @@ int rtsp_message_read_basic(struct rtsp_message *m,
int rtsp_message_readv_basic(struct rtsp_message *m,
char type,
va_list args)
va_list *args)
{
const char *key;
const char **out_str, *entry;
@ -1499,13 +1499,13 @@ int rtsp_message_readv_basic(struct rtsp_message *m,
if (!m->iter_header)
return -EINVAL;
out_str = va_arg(args, const char**);
out_str = va_arg(*args, const char**);
if (out_str)
*out_str = m->iter_header->value ? : "";
return 0;
case RTSP_TYPE_HEADER_START:
key = va_arg(args, const char*);
key = va_arg(*args, const char*);
return rtsp_message_enter_header(m, key);
case RTSP_TYPE_HEADER_END:
@ -1527,7 +1527,7 @@ int rtsp_message_readv_basic(struct rtsp_message *m,
switch (type) {
case RTSP_TYPE_STRING:
out_str = va_arg(args, const char**);
out_str = va_arg(*args, const char**);
if (out_str)
*out_str = entry;
@ -1536,7 +1536,7 @@ int rtsp_message_readv_basic(struct rtsp_message *m,
if (sscanf(entry, "%" SCNd32, &i32) != 1)
return -EINVAL;
out_i32 = va_arg(args, int32_t*);
out_i32 = va_arg(*args, int32_t*);
if (out_i32)
*out_i32 = i32;
@ -1545,7 +1545,7 @@ int rtsp_message_readv_basic(struct rtsp_message *m,
if (sscanf(entry, "%" SCNu32, &u32) != 1)
return -EINVAL;
out_u32 = va_arg(args, uint32_t*);
out_u32 = va_arg(*args, uint32_t*);
if (out_u32)
*out_u32 = u32;
@ -1567,7 +1567,7 @@ int rtsp_message_read(struct rtsp_message *m,
int r;
va_start(args, types);
r = rtsp_message_readv(m, types, args);
r = rtsp_message_readv(m, types, &args);
va_end(args);
return r;
@ -1575,7 +1575,7 @@ int rtsp_message_read(struct rtsp_message *m,
int rtsp_message_readv(struct rtsp_message *m,
const char *types,
va_list args)
va_list *args)
{
int r;

View file

@ -217,13 +217,13 @@ int rtsp_message_append_basic(struct rtsp_message *m,
...);
int rtsp_message_appendv_basic(struct rtsp_message *m,
char type,
va_list args);
va_list *args);
int rtsp_message_append(struct rtsp_message *m,
const char *types,
...);
int rtsp_message_appendv(struct rtsp_message *m,
const char *types,
va_list args);
va_list *args);
int rtsp_message_set_cookie(struct rtsp_message *m, uint64_t cookie);
int rtsp_message_seal(struct rtsp_message *m);
@ -240,13 +240,13 @@ int rtsp_message_read_basic(struct rtsp_message *m,
...);
int rtsp_message_readv_basic(struct rtsp_message *m,
char type,
va_list args);
va_list *args);
int rtsp_message_read(struct rtsp_message *m,
const char *types,
...);
int rtsp_message_readv(struct rtsp_message *m,
const char *types,
va_list args);
va_list *args);
int rtsp_message_skip_basic(struct rtsp_message *m, char type);
int rtsp_message_skip(struct rtsp_message *m, const char *types);

View file

@ -374,7 +374,7 @@ int wpas_message_append_basic(struct wpas_message *m, char type, ...)
int r;
va_start(args, type);
r = wpas_message_appendv_basic(m, type, args);
r = wpas_message_appendv_basic(m, type, &args);
va_end(args);
return r;
@ -382,7 +382,7 @@ int wpas_message_append_basic(struct wpas_message *m, char type, ...)
int wpas_message_appendv_basic(struct wpas_message *m,
char type,
va_list args)
va_list *args)
{
_shl_free_ char *str = NULL;
char buf[128] = { };
@ -401,27 +401,27 @@ int wpas_message_appendv_basic(struct wpas_message *m,
switch (type) {
case WPAS_TYPE_STRING:
orig = va_arg(args, const char*);
orig = va_arg(*args, const char*);
if (!orig)
return -EINVAL;
break;
case WPAS_TYPE_INT32:
i32 = va_arg(args, int32_t);
i32 = va_arg(*args, int32_t);
sprintf(buf, "%" PRId32, i32);
orig = buf;
break;
case WPAS_TYPE_UINT32:
u32 = va_arg(args, uint32_t);
u32 = va_arg(*args, uint32_t);
sprintf(buf, "%" PRIu32, u32);
orig = buf;
break;
case WPAS_TYPE_DICT:
s = va_arg(args, const char*);
s = va_arg(*args, const char*);
if (!s)
return -EINVAL;
t = va_arg(args, const char*);
t = va_arg(*args, const char*);
if (!t)
return -EINVAL;
@ -451,7 +451,7 @@ int wpas_message_append(struct wpas_message *m, const char *types, ...)
int r;
va_start(args, types);
r = wpas_message_appendv(m, types, args);
r = wpas_message_appendv(m, types, &args);
va_end(args);
return r;
@ -459,7 +459,7 @@ int wpas_message_append(struct wpas_message *m, const char *types, ...)
int wpas_message_appendv(struct wpas_message *m,
const char *types,
va_list args)
va_list *args)
{
int r;

View file

@ -131,11 +131,11 @@ void wpas_message_set_peer(struct wpas_message *msg, const char *peer);
int wpas_message_append_basic(struct wpas_message *m, char type, ...);
int wpas_message_appendv_basic(struct wpas_message *m,
char type,
va_list args);
va_list *args);
int wpas_message_append(struct wpas_message *m, const char *types, ...);
int wpas_message_appendv(struct wpas_message *m,
const char *types,
va_list args);
va_list *args);
int wpas_message_seal(struct wpas_message *m);
int wpas_message_read_basic(struct wpas_message *m, char type, void *out);