forked from photron/msys_setup
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathportablexdr-4.9.1-mingw.patch
209 lines (195 loc) · 7.45 KB
/
portablexdr-4.9.1-mingw.patch
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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
--- a/rpc/rpc.h 2009-01-12 15:55:23 +0000
+++ b/rpc/rpc.h 2010-12-22 11:46:18 +0000
@@ -1,3 +1,2 @@
-#include "config.h"
#include <rpc/types.h>
#include <rpc/xdr.h>
diff --git a/rpc/xdr.h b/rpc/xdr.h
index ba69894..a084e47 100644
--- a/rpc/xdr.h
+++ b/rpc/xdr.h
@@ -38,6 +38,8 @@
#ifndef __XDR_HEADER__
#define __XDR_HEADER__
+#include <stdio.h>
+
/*
* XDR provides a conventional way for converting between C data
* types and an external bit-string representation. Library supplied
@@ -86,6 +88,8 @@ enum xdr_op {
#define RNDUP(x) ((((x) + BYTES_PER_XDR_UNIT - 1) / BYTES_PER_XDR_UNIT) \
* BYTES_PER_XDR_UNIT)
+typedef struct xdr XDR;
+
/*
* A xdrproc_t exists for each data type which is to be encoded or decoded.
*
@@ -95,7 +99,7 @@ enum xdr_op {
* allocate dynamic storage of the appropriate size and return it.
* bool_t (*xdrproc_t)(XDR *, caddr_t *);
*/
-typedef bool_t (*xdrproc_t)();
+typedef bool_t (*xdrproc_t)(XDR *, void *,...);
/*
* The XDR handle.
@@ -103,23 +107,25 @@ typedef bool_t (*xdrproc_t)();
* an operations vector for the paticular implementation (e.g. see xdr_mem.c),
* and two private fields for the use of the particular impelementation.
*/
-typedef struct {
+struct xdr {
enum xdr_op x_op; /* operation; fast additional param */
struct xdr_ops {
- bool_t (*x_getlong)(); /* get a long from underlying stream */
- bool_t (*x_putlong)(); /* put a long to " */
- bool_t (*x_getbytes)();/* get some bytes from " */
- bool_t (*x_putbytes)();/* put some bytes to " */
- u_int (*x_getpostn)();/* returns bytes off from beginning */
- bool_t (*x_setpostn)();/* lets you reposition the stream */
- long * (*x_inline)(); /* buf quick ptr to buffered data */
- void (*x_destroy)(); /* free privates of this xdr_stream */
+ bool_t (*x_getlong)(XDR *xdrs, long *lp); /* get a long from underlying stream */
+ bool_t (*x_putlong)(XDR *xdrs, const long *lp); /* put a long to " */
+ bool_t (*x_getbytes)(XDR *xdrs, caddr_t addr, u_int len);/* get some bytes from " */
+ bool_t (*x_putbytes)(XDR *xdrs, const char *addr, u_int len);/* put some bytes to " */
+ u_int (*x_getpostn)(const XDR *xdrs);/* returns bytes off from beginning */
+ bool_t (*x_setpostn)(XDR *xdrs, u_int pos);/* lets you reposition the stream */
+ long * (*x_inline)(XDR *xdrs, u_int len); /* buf quick ptr to buffered data */
+ void (*x_destroy)(XDR *xdrs); /* free privates of this xdr_stream */
+ bool_t (*x_getint32)(XDR *xdrs, int32_t *ip);
+ bool_t (*x_putint32)(XDR *xdrs, const int32_t *ip);
} *x_ops;
caddr_t x_public; /* users' data */
caddr_t x_private; /* pointer to private data */
caddr_t x_base; /* private used for position info */
int x_handy; /* extra private word */
-} XDR;
+};
/*
* Operations defined on a XDR handle
@@ -221,28 +227,28 @@ struct xdr_discrim {
/*
* These are the "generic" xdr routines.
*/
-extern bool_t xdr_void();
-extern bool_t xdr_int();
-extern bool_t xdr_u_int();
-extern bool_t xdr_long();
-extern bool_t xdr_u_long();
-extern bool_t xdr_short();
-extern bool_t xdr_u_short();
-extern bool_t xdr_bool();
-extern bool_t xdr_enum();
-extern bool_t xdr_array();
-extern bool_t xdr_bytes();
-extern bool_t xdr_opaque();
-extern bool_t xdr_string();
-extern bool_t xdr_union();
-extern bool_t xdr_char();
-extern bool_t xdr_u_char();
-extern bool_t xdr_vector();
-extern bool_t xdr_float();
-extern bool_t xdr_double();
-extern bool_t xdr_reference();
-extern bool_t xdr_pointer();
-extern bool_t xdr_wrapstring();
+extern bool_t xdr_void(void);
+extern bool_t xdr_int(XDR *xdrs, int *ip);
+extern bool_t xdr_u_int(XDR *xdrs, u_int *up);
+extern bool_t xdr_long(XDR *xdrs, long *lp);
+extern bool_t xdr_u_long(XDR *xdrs, u_long *ulp);
+extern bool_t xdr_short(XDR *xdrs, short *sp);
+extern bool_t xdr_u_short(XDR *xdrs, u_short *usp);
+extern bool_t xdr_bool(XDR *xdrs, bool_t *bp);
+extern bool_t xdr_enum(XDR *xdrs, enum_t *ep);
+extern bool_t xdr_array(XDR *xdrs, caddr_t *addrp, u_int *sizep, u_int maxsize, u_int elsize, xdrproc_t elproc);
+extern bool_t xdr_bytes(XDR *xdrs, char **cpp, u_int *sizep, u_int maxsize);
+extern bool_t xdr_opaque(XDR *xdrs, caddr_t cp, u_int cnt);
+extern bool_t xdr_string(XDR *xdrs, char **cpp, u_int maxsize);
+extern bool_t xdr_union(XDR *xdrs, enum_t *dscmp, char *unp, struct xdr_discrim *choices, xdrproc_t dfault);
+extern bool_t xdr_char(XDR *xdrs, char *cp);
+extern bool_t xdr_u_char(XDR *xdrs, u_char *ucp);
+extern bool_t xdr_vector(XDR *xdrs, char *basep, u_int nelem, u_int elemsize, xdrproc_t xdr_elem);
+extern bool_t xdr_float(XDR *xdrs, float *fp);
+extern bool_t xdr_double(XDR *xdrs, double *dp);
+extern bool_t xdr_reference(XDR *xdrs, caddr_t *pp, u_int size, xdrproc_t proc);
+extern bool_t xdr_pointer(XDR *xdrs, char **objpp, u_int obj_size, xdrproc_t xdr_obj);
+extern bool_t xdr_wrapstring(XDR *xdrs, char **cpp);
/*
* Common opaque bytes objects used by many rpc protocols;
@@ -254,18 +260,21 @@ struct netobj {
char *n_bytes;
};
typedef struct netobj netobj;
-extern bool_t xdr_netobj();
+extern bool_t xdr_netobj(XDR *xdrs, struct netobj *np);
/*
* These are the public routines for the various implementations of
* xdr streams.
*/
-extern void xdrmem_create(); /* XDR using memory buffers */
-extern void xdrstdio_create(); /* XDR using stdio library */
-extern void xdrrec_create(); /* XDR pseudo records for tcp */
-extern bool_t xdrrec_endofrecord(); /* make end of xdr record */
-extern bool_t xdrrec_skiprecord(); /* move to beginning of next record */
-extern bool_t xdrrec_eof(); /* true if no more input */
+extern void xdrmem_create(XDR *xdrs, caddr_t addr, u_int size, enum xdr_op op); /* XDR using memory buffers */
+extern void xdrstdio_create(XDR *xdrs, FILE *file, enum xdr_op op); /* XDR using stdio library */
+extern void xdrrec_create(XDR *xdrs, u_int sendsize,
+ u_int recvsize, caddr_t tcp_handle,
+ int (*readit) (char *, char *, int),
+ int (*writeit) (char *, char *, int)); /* XDR pseudo records for tcp */
+extern bool_t xdrrec_endofrecord(XDR *xdrs, bool_t sendnow); /* make end of xdr record */
+extern bool_t xdrrec_skiprecord(XDR *xdrs); /* move to beginning of next record */
+extern bool_t xdrrec_eof(XDR *xdrs); /* true if no more input */
/* RWMJ */
extern void xdr_free (xdrproc_t, char *);
@@ -279,9 +287,12 @@ extern bool_t xdr_int64_t (XDR *xdrs, int64_t *uip);
#define IXDR_PUT_INT32 IXDR_PUT_LONG
#define IXDR_GET_INT32 IXDR_GET_LONG
+#define IXDR_PUT_U_INT32 IXDR_PUT_U_LONG
+#define IXDR_GET_U_INT32 IXDR_GET_U_LONG
+
#define XDR_PUTINT32(xdrs, int32p) \
- (*(xdrs)->x_ops->x_putlong)(xdrs, int32p)
+ (*(xdrs)->x_ops->x_putlong)(xdrs, (const long *)(int32p))
#define XDR_GETINT32(xdrs, int32p) \
- (*(xdrs)->x_ops->x_getlong)(xdrs, int32p)
+ (*(xdrs)->x_ops->x_getlong)(xdrs, (long *)(int32p))
#endif /* __XDR_HEADER__ */
diff --git a/xdr.c b/xdr.c
index 9bb882f..aa4f1ff 100644
--- a/xdr.c
+++ b/xdr.c
@@ -206,12 +206,12 @@ xdr_u_short(xdrs, usp)
register XDR *xdrs;
u_short *usp;
{
- u_long l;
+ long l;
switch (xdrs->x_op) {
case XDR_ENCODE:
- l = (u_long) *usp;
+ l = (long) *usp;
return (XDR_PUTLONG(xdrs, &l));
case XDR_DECODE:
@@ -250,17 +250,17 @@ xdr_char(xdrs, cp)
* XDR an unsigned char
*/
bool_t
-xdr_u_char(xdrs, cp)
+xdr_u_char(xdrs, ucp)
XDR *xdrs;
- char *cp;
+ u_char *ucp;
{
u_int u;
- u = (*cp);
+ u = (*ucp);
if (!xdr_u_int(xdrs, &u)) {
return (FALSE);
}
- *cp = u;
+ *ucp = u;
return (TRUE);
}