For the 'trio' varargs functions, don't pass a reference to a va_list
argument to the level below; it's not portable. Use G_VA_COPY to create a new copy, and pass a reference to that instead. From: NetBSD
This commit is contained in:
parent
ff32a0834b
commit
8ebf96e567
257
devel/glib2/patches/patch-glib_trio_trio_c
Normal file
257
devel/glib2/patches/patch-glib_trio_trio_c
Normal file
@ -0,0 +1,257 @@
|
||||
$OpenBSD: patch-glib_trio_trio_c,v 1.1 2004/01/12 22:23:19 brad Exp $
|
||||
--- glib/trio/trio.c.orig 2003-08-25 20:17:43.000000000 -0400
|
||||
+++ glib/trio/trio.c 2004-01-12 17:11:29.000000000 -0500
|
||||
@@ -3575,9 +3575,12 @@ TRIO_ARGS2((format, args),
|
||||
TRIO_CONST char *format,
|
||||
va_list args)
|
||||
{
|
||||
+ va_list args2;
|
||||
+
|
||||
assert(VALID(format));
|
||||
|
||||
- return TrioFormat(stdout, 0, TrioOutStreamFile, format, &args, NULL);
|
||||
+ G_VA_COPY(args2, args);
|
||||
+ return TrioFormat(stdout, 0, TrioOutStreamFile, format, &args2, NULL);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -3644,10 +3647,13 @@ TRIO_ARGS3((file, format, args),
|
||||
TRIO_CONST char *format,
|
||||
va_list args)
|
||||
{
|
||||
+ va_list args2;
|
||||
+
|
||||
assert(VALID(file));
|
||||
assert(VALID(format));
|
||||
-
|
||||
- return TrioFormat(file, 0, TrioOutStreamFile, format, &args, NULL);
|
||||
+
|
||||
+ G_VA_COPY(args2, args);
|
||||
+ return TrioFormat(file, 0, TrioOutStreamFile, format, &args2, NULL);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -3716,9 +3722,12 @@ TRIO_ARGS3((fd, format, args),
|
||||
TRIO_CONST char *format,
|
||||
va_list args)
|
||||
{
|
||||
+ va_list args2;
|
||||
+
|
||||
assert(VALID(format));
|
||||
-
|
||||
- return TrioFormat(&fd, 0, TrioOutStreamFileDescriptor, format, &args, NULL);
|
||||
+
|
||||
+ G_VA_COPY(args2, args);
|
||||
+ return TrioFormat(&fd, 0, TrioOutStreamFileDescriptor, format, &args2, NULL);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -3775,6 +3784,7 @@ TRIO_ARGS4((stream, closure, format, arg
|
||||
TRIO_CONST char *format,
|
||||
va_list args)
|
||||
{
|
||||
+ va_list args2;
|
||||
trio_custom_t data;
|
||||
|
||||
assert(VALID(stream));
|
||||
@@ -3782,7 +3792,8 @@ TRIO_ARGS4((stream, closure, format, arg
|
||||
|
||||
data.stream.out = stream;
|
||||
data.closure = closure;
|
||||
- return TrioFormat(&data, 0, TrioOutStreamCustom, format, &args, NULL);
|
||||
+ G_VA_COPY(args2, args);
|
||||
+ return TrioFormat(&data, 0, TrioOutStreamCustom, format, &args2, NULL);
|
||||
}
|
||||
|
||||
TRIO_PUBLIC int
|
||||
@@ -3850,12 +3861,14 @@ TRIO_ARGS3((buffer, format, args),
|
||||
TRIO_CONST char *format,
|
||||
va_list args)
|
||||
{
|
||||
+ va_list args2;
|
||||
int status;
|
||||
|
||||
assert(VALID(buffer));
|
||||
assert(VALID(format));
|
||||
|
||||
- status = TrioFormat(&buffer, 0, TrioOutStreamString, format, &args, NULL);
|
||||
+ G_VA_COPY(args2, args);
|
||||
+ status = TrioFormat(&buffer, 0, TrioOutStreamString, format, &args2, NULL);
|
||||
*buffer = NIL;
|
||||
return status;
|
||||
}
|
||||
@@ -3938,13 +3951,15 @@ TRIO_ARGS4((buffer, max, format, args),
|
||||
TRIO_CONST char *format,
|
||||
va_list args)
|
||||
{
|
||||
+ va_list args2;
|
||||
int status;
|
||||
|
||||
assert(max == 0 || VALID(buffer));
|
||||
assert(VALID(format));
|
||||
|
||||
+ G_VA_COPY(args2, args);
|
||||
status = TrioFormat(&buffer, max > 0 ? max - 1 : 0,
|
||||
- TrioOutStreamStringMax, format, &args, NULL);
|
||||
+ TrioOutStreamStringMax, format, &args2, NULL);
|
||||
if (max > 0)
|
||||
*buffer = NIL;
|
||||
return status;
|
||||
@@ -4019,6 +4034,7 @@ TRIO_ARGS4((buffer, max, format, args),
|
||||
TRIO_CONST char *format,
|
||||
va_list args)
|
||||
{
|
||||
+ va_list args2;
|
||||
int status;
|
||||
size_t buf_len;
|
||||
|
||||
@@ -4027,8 +4043,9 @@ TRIO_ARGS4((buffer, max, format, args),
|
||||
|
||||
buf_len = trio_length(buffer);
|
||||
buffer = &buffer[buf_len];
|
||||
+ G_VA_COPY(args2, args);
|
||||
status = TrioFormat(&buffer, max - 1 - buf_len,
|
||||
- TrioOutStreamStringMax, format, &args, NULL);
|
||||
+ TrioOutStreamStringMax, format, &args2, NULL);
|
||||
*buffer = NIL;
|
||||
return status;
|
||||
}
|
||||
@@ -4072,6 +4089,7 @@ TRIO_ARGS2((format, args),
|
||||
TRIO_CONST char *format,
|
||||
va_list args)
|
||||
{
|
||||
+ va_list args2;
|
||||
trio_string_t *info;
|
||||
char *result = NULL;
|
||||
|
||||
@@ -4080,8 +4098,9 @@ TRIO_ARGS2((format, args),
|
||||
info = trio_xstring_duplicate("");
|
||||
if (info)
|
||||
{
|
||||
+ G_VA_COPY(args2, args);
|
||||
(void)TrioFormat(info, 0, TrioOutStreamStringDynamic,
|
||||
- format, &args, NULL);
|
||||
+ format, &args2, NULL);
|
||||
trio_string_terminate(info);
|
||||
result = trio_string_extract(info);
|
||||
trio_string_destroy(info);
|
||||
@@ -4132,6 +4151,7 @@ TRIO_ARGS3((result, format, args),
|
||||
TRIO_CONST char *format,
|
||||
va_list args)
|
||||
{
|
||||
+ va_list args2;
|
||||
int status;
|
||||
trio_string_t *info;
|
||||
|
||||
@@ -4146,8 +4166,9 @@ TRIO_ARGS3((result, format, args),
|
||||
}
|
||||
else
|
||||
{
|
||||
+ G_VA_COPY(args2, args);
|
||||
status = TrioFormat(info, 0, TrioOutStreamStringDynamic,
|
||||
- format, &args, NULL);
|
||||
+ format, &args2, NULL);
|
||||
if (status >= 0)
|
||||
{
|
||||
trio_string_terminate(info);
|
||||
@@ -4834,9 +4855,11 @@ TRIO_ARGS3((ref, format, arglist),
|
||||
TRIO_CONST char *format,
|
||||
va_list arglist)
|
||||
{
|
||||
+ va_list args2;
|
||||
assert(VALID(format));
|
||||
-
|
||||
- return TrioFormatRef((trio_reference_t *)ref, format, &arglist, NULL);
|
||||
+
|
||||
+ G_VA_COPY(args2, arglist);
|
||||
+ return TrioFormatRef((trio_reference_t *)ref, format, &args2, NULL);
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
@@ -6487,11 +6510,13 @@ TRIO_ARGS2((format, args),
|
||||
TRIO_CONST char *format,
|
||||
va_list args)
|
||||
{
|
||||
+ va_list args2;
|
||||
assert(VALID(format));
|
||||
-
|
||||
+
|
||||
+ G_VA_COPY(args2, args);
|
||||
return TrioScan((trio_pointer_t)stdin, 0,
|
||||
TrioInStreamFile,
|
||||
- format, &args, NULL);
|
||||
+ format, &args2, NULL);
|
||||
}
|
||||
|
||||
TRIO_PUBLIC int
|
||||
@@ -6538,12 +6563,15 @@ TRIO_ARGS3((file, format, args),
|
||||
TRIO_CONST char *format,
|
||||
va_list args)
|
||||
{
|
||||
+ va_list args2;
|
||||
+
|
||||
assert(VALID(file));
|
||||
assert(VALID(format));
|
||||
-
|
||||
+
|
||||
+ G_VA_COPY(args2, args);
|
||||
return TrioScan((trio_pointer_t)file, 0,
|
||||
TrioInStreamFile,
|
||||
- format, &args, NULL);
|
||||
+ format, &args2, NULL);
|
||||
}
|
||||
|
||||
TRIO_PUBLIC int
|
||||
@@ -6591,11 +6619,13 @@ TRIO_ARGS3((fd, format, args),
|
||||
TRIO_CONST char *format,
|
||||
va_list args)
|
||||
{
|
||||
+ va_list args2;
|
||||
assert(VALID(format));
|
||||
-
|
||||
+
|
||||
+ G_VA_COPY(args2, args);
|
||||
return TrioScan((trio_pointer_t)&fd, 0,
|
||||
TrioInStreamFileDescriptor,
|
||||
- format, &args, NULL);
|
||||
+ format, &args2, NULL);
|
||||
}
|
||||
|
||||
TRIO_PUBLIC int
|
||||
@@ -6646,6 +6676,7 @@ TRIO_ARGS4((stream, closure, format, arg
|
||||
TRIO_CONST char *format,
|
||||
va_list args)
|
||||
{
|
||||
+ va_list args2;
|
||||
trio_custom_t data;
|
||||
|
||||
assert(VALID(stream));
|
||||
@@ -6653,7 +6684,9 @@ TRIO_ARGS4((stream, closure, format, arg
|
||||
|
||||
data.stream.in = stream;
|
||||
data.closure = closure;
|
||||
- return TrioScan(&data, 0, TrioInStreamCustom, format, &args, NULL);
|
||||
+
|
||||
+ G_VA_COPY(args2, args);
|
||||
+ return TrioScan(&data, 0, TrioInStreamCustom, format, &args2, NULL);
|
||||
}
|
||||
|
||||
TRIO_PUBLIC int
|
||||
@@ -6705,12 +6738,15 @@ TRIO_ARGS3((buffer, format, args),
|
||||
TRIO_CONST char *format,
|
||||
va_list args)
|
||||
{
|
||||
+ va_list args2;
|
||||
+
|
||||
assert(VALID(buffer));
|
||||
assert(VALID(format));
|
||||
-
|
||||
+
|
||||
+ G_VA_COPY(args2, args);
|
||||
return TrioScan((trio_pointer_t)&buffer, 0,
|
||||
TrioInStreamString,
|
||||
- format, &args, NULL);
|
||||
+ format, &args2, NULL);
|
||||
}
|
||||
|
||||
TRIO_PUBLIC int
|
Loading…
x
Reference in New Issue
Block a user