summaryrefslogtreecommitdiff
path: root/converters/macfork/patches/patch-ac
blob: 7ce6d17fa63dba4eeb9d160409d6550610befa3b (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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
$NetBSD: patch-ac,v 1.1 2008/08/02 21:00:29 dholland Exp $

Fix misuses of va_list to allow building on amd64.

--- arg.c.orig	1999-08-31 12:49:19.000000000 -0400
+++ arg.c	2008-08-02 16:56:12.000000000 -0400
@@ -28,5 +28,6 @@
 
 #include <stdarg.h>
+#include <stdint.h>
 #include <ctype.h>
 #include <string.h>
 #include <stdlib.h>
@@ -65,7 +66,11 @@ int arg_warning = 1;		/* print warnings 
 
 static Arg_form *regf;		/* advancing form ptr used by arg_find_reg */
 
-va_list arg_doc_parse();
+struct va_holder {
+   va_list ap;
+};
+
+static void arg_doc_parse(Arg_form *, struct va_holder *);
 int arg_format(Arg_form *f);
 void arg_init(Arg_form *form);
 int arg_done();
@@ -180,7 +185,7 @@ Arg_form *arg_to_form1(va_list ap)
 	}
 	for (; (s = va_arg(ap, char *)) != 0;) {
 	    /* note that we continue (not break) in all cases except one */
-	    switch ((int)s) {
+	    switch ((int)(intptr_t)s) {
 		case ARG_FLAGNEXT:		/* ptr to flag vbl */
 		    CHECKTYPE(form, "FLAG");
 		    form->type = ARG_SIMPFLAG;
@@ -220,7 +225,12 @@ Arg_form *arg_to_form1(va_list ap)
 	form->doc = prevs = s;
 
 	/* skip over doc args */
-	ap = arg_doc_parse(form, ap);
+	{
+	   struct va_holder tmp;
+	   va_copy(tmp.ap, ap);
+	   arg_doc_parse(form, &tmp);
+	   va_copy(ap, tmp.ap);
+	}
     }
     va_end(ap);
     return rootform;
@@ -289,13 +299,13 @@ int arg_format(Arg_form *f)
  * documentation string and returns the new ap.
  */
 
-va_list arg_doc_parse(Arg_form *f, va_list ap)
+static void arg_doc_parse(Arg_form *f, struct va_holder *app)
 {
     char *s, buf[256];
     int size, gotparam;
     va_list ap0;
 
-    ap0 = ap;
+    va_copy(ap0, app->ap);
     gotparam = 0;
     for (s=f->doc; *s; s++) {
 	for (; *s; s++)			/* search for next format code */
@@ -329,22 +339,22 @@ va_list arg_doc_parse(Arg_form *f, va_li
 	    case 'o': case 'O':
 	    case 'x': case 'X':
 	    case 'c':
-		if (size==2 || *s>='A' && *s<='Z') va_arg(ap, long);
-		else va_arg(ap, int);
+		if (size==2 || *s>='A' && *s<='Z') va_arg(app->ap, long);
+		else va_arg(app->ap, int);
 		break;
 	    case 'e':
 	    case 'f':
 	    case 'g':
 		/* note: float args are converted to doubles by MOST compilers*/
-		va_arg(ap, double);
+		va_arg(app->ap, double);
 		break;
 	    case 's':
-		va_arg(ap, char *);
+		va_arg(app->ap, char *);
 		break;
 	    default:
 		fprintf(stderr, "arg: unknown format code %%%c in %s\n",
 		    *s, f->doc);
-		va_arg(ap, int);
+		va_arg(app->ap, int);
 		break;
 	}
     }
@@ -354,7 +364,7 @@ va_list arg_doc_parse(Arg_form *f, va_li
 	strcpy(f->doc, buf);
     }
 
-    return ap;		/* varargs ptr past end of doc params */
+    /*return ap;*/		/* varargs ptr past end of doc params */
 }
 
 /*----------------------------------------------------------------------*/
@@ -851,7 +861,7 @@ static void space(FILE *fp, int c, int c
 	putc('\n', fp);
 	c = 0;
     }
-    for (; c<c1&~7; c=(c+7)&~7) putc('\t', fp);
+    for (; c<(c1&~7); c=(c+7)&~7) putc('\t', fp);
     for (; c<c1; c++) putc(' ', fp);
 }