summaryrefslogtreecommitdiffstats
path: root/app-text/a2ps/files/a2ps-4.13c-stdarg.patch
blob: 4ff12125836a15ce37f3fce0c9447e48658b1b60 (plain)
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