1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
--- a2ps-4.13-orig/configure.in 2005-08-14 14:13:42.000000000 +0200
+++ a2ps-4.13/configure.in 2005-08-14 14:18:20.000000000 +0200
@@ -157,6 +157,22 @@
[Define to rpl_fnmatch if the replacement function should be used.])
fi
+# Check for C99 va_copy
+AC_CACHE_CHECK([
+ AC_TRY_LINK([#include <stdarg.h>],
+ [
+ va_list va1, va2;
+
+ va_copy(va2, va1);
+ va_end(va2);
+ ],
+ [ac_cv_va_copy="yes"],[ac_cv_va_copy="no"]
+ )
+])
+if test "x$ac_cv_va_copy"="xyes"; then
+ AC_DEFINE(HAVE_VA_COPY,1,[Define to 1 if C99 va_copy function should be used])
+fi
+
# Needed checks for tinyterm.[ch]
ad_TINYTERM_CHECKS
--- a2ps-4.13-orig/lib/printlen.c 2002-03-04 19:46:25.000000000 +0100
+++ a2ps-4.13/lib/printlen.c 2005-08-14 14:29:08.000000000 +0200
@@ -27,15 +27,24 @@
unsigned long strtoul ();
+#if !defined(HAVE_VA_COPY)
static int
int_printflen (const char *format, va_list *args)
+#else
+static int
+int_printflen (const char *format, va_list args)
+#endif
{
const char *cp;
int total_width = 0;
int width = 0;
va_list ap;
+#ifndef HAVE_VA_COPY
memcpy (&ap, args, sizeof (va_list));
+#else
+ va_copy(ap, args);
+#endif
for (cp = format ; *cp ; cp++)
{
@@ -93,13 +102,21 @@
}
}
}
+
+#ifdef HAVE_VA_COPY
+ va_end(ap);
+#endif
return total_width;
}
int
vprintflen (const char *format, va_list args)
{
+#if !defined(HAVE_VA_COPY)
return int_printflen (format, &args);
+#else
+ return int_printflen (format, args);
+#endif
}
int
|