File indexing completed on 2026-06-12 08:29:34
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040 #ifndef GSSRPC_XDR_H
0041 #define GSSRPC_XDR_H
0042
0043 #include <stdio.h> /* for FILE */
0044
0045 GSSRPC__BEGIN_DECLS
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064
0065
0066
0067
0068
0069
0070
0071
0072
0073
0074
0075
0076
0077
0078
0079
0080
0081 enum xdr_op {
0082 XDR_ENCODE=0,
0083 XDR_DECODE=1,
0084 XDR_FREE=2
0085 };
0086
0087
0088
0089
0090 #define BYTES_PER_XDR_UNIT (4)
0091 #define RNDUP(x) ((((x) + BYTES_PER_XDR_UNIT - 1) / BYTES_PER_XDR_UNIT) \
0092 * BYTES_PER_XDR_UNIT)
0093
0094
0095
0096
0097
0098
0099
0100
0101
0102
0103
0104
0105
0106
0107
0108
0109
0110
0111
0112 typedef struct XDR {
0113 enum xdr_op x_op;
0114 struct xdr_ops {
0115
0116 bool_t (*x_getlong)(struct XDR *, long *);
0117
0118
0119 bool_t (*x_putlong)(struct XDR *, long *);
0120
0121
0122 bool_t (*x_getbytes)(struct XDR *, caddr_t, u_int);
0123
0124
0125 bool_t (*x_putbytes)(struct XDR *, caddr_t, u_int);
0126
0127
0128 u_int (*x_getpostn)(struct XDR *);
0129
0130
0131 bool_t (*x_setpostn)(struct XDR *, u_int);
0132
0133
0134 rpc_inline_t *(*x_inline)(struct XDR *, int);
0135
0136
0137 void (*x_destroy)(struct XDR *);
0138 } *x_ops;
0139 caddr_t x_public;
0140 void * x_private;
0141 caddr_t x_base;
0142 int x_handy;
0143 } XDR;
0144
0145 typedef bool_t (*xdrproc_t)(XDR *, void *);
0146
0147
0148
0149
0150
0151
0152
0153
0154
0155
0156 #define XDR_GETLONG(xdrs, longp) \
0157 (*(xdrs)->x_ops->x_getlong)(xdrs, longp)
0158 #define xdr_getlong(xdrs, longp) \
0159 (*(xdrs)->x_ops->x_getlong)(xdrs, longp)
0160
0161 #define XDR_PUTLONG(xdrs, longp) \
0162 (*(xdrs)->x_ops->x_putlong)(xdrs, longp)
0163 #define xdr_putlong(xdrs, longp) \
0164 (*(xdrs)->x_ops->x_putlong)(xdrs, longp)
0165
0166 #define XDR_GETBYTES(xdrs, addr, len) \
0167 (*(xdrs)->x_ops->x_getbytes)(xdrs, addr, len)
0168 #define xdr_getbytes(xdrs, addr, len) \
0169 (*(xdrs)->x_ops->x_getbytes)(xdrs, addr, len)
0170
0171 #define XDR_PUTBYTES(xdrs, addr, len) \
0172 (*(xdrs)->x_ops->x_putbytes)(xdrs, addr, len)
0173 #define xdr_putbytes(xdrs, addr, len) \
0174 (*(xdrs)->x_ops->x_putbytes)(xdrs, addr, len)
0175
0176 #define XDR_GETPOS(xdrs) \
0177 (*(xdrs)->x_ops->x_getpostn)(xdrs)
0178 #define xdr_getpos(xdrs) \
0179 (*(xdrs)->x_ops->x_getpostn)(xdrs)
0180
0181 #define XDR_SETPOS(xdrs, pos) \
0182 (*(xdrs)->x_ops->x_setpostn)(xdrs, pos)
0183 #define xdr_setpos(xdrs, pos) \
0184 (*(xdrs)->x_ops->x_setpostn)(xdrs, pos)
0185
0186 #define XDR_INLINE(xdrs, len) \
0187 (*(xdrs)->x_ops->x_inline)(xdrs, len)
0188 #define xdr_inline(xdrs, len) \
0189 (*(xdrs)->x_ops->x_inline)(xdrs, len)
0190
0191 #define XDR_DESTROY(xdrs) \
0192 if ((xdrs)->x_ops->x_destroy) \
0193 (*(xdrs)->x_ops->x_destroy)(xdrs)
0194 #define xdr_destroy(xdrs) \
0195 if ((xdrs)->x_ops->x_destroy) \
0196 (*(xdrs)->x_ops->x_destroy)(xdrs)
0197
0198
0199
0200
0201
0202
0203
0204
0205
0206
0207
0208 #define NULL_xdrproc_t ((xdrproc_t)0)
0209 struct xdr_discrim {
0210 int value;
0211 xdrproc_t proc;
0212 };
0213
0214
0215
0216
0217
0218
0219
0220
0221
0222
0223
0224
0225
0226
0227
0228
0229 #define IXDR_GET_INT32(buf) ((int32_t)IXDR_GET_U_INT32(buf))
0230 #define IXDR_PUT_INT32(buf, v) IXDR_PUT_U_INT32((buf),((uint32_t)(v)))
0231 #define IXDR_GET_U_INT32(buf) (ntohl((uint32_t)*(buf)++))
0232 #define IXDR_PUT_U_INT32(buf, v) (*(buf)++ = (int32_t)htonl((v)))
0233
0234 #define IXDR_GET_LONG(buf) ((long)IXDR_GET_INT32(buf))
0235 #define IXDR_PUT_LONG(buf, v) IXDR_PUT_U_INT32((buf),((uint32_t)(v)))
0236
0237 #define IXDR_GET_BOOL(buf) ((bool_t)IXDR_GET_LONG(buf))
0238 #define IXDR_GET_ENUM(buf, t) ((t)IXDR_GET_INT32(buf))
0239 #define IXDR_GET_U_LONG(buf) ((u_long)IXDR_GET_U_INT32(buf))
0240 #define IXDR_GET_SHORT(buf) ((short)IXDR_GET_INT32(buf))
0241 #define IXDR_GET_U_SHORT(buf) ((u_short)IXDR_GET_U_INT32(buf))
0242
0243 #define IXDR_PUT_BOOL(buf, v) IXDR_PUT_INT32((buf),((int32_t)(v)))
0244 #define IXDR_PUT_ENUM(buf, v) IXDR_PUT_INT32((buf),((int32_t)(v)))
0245 #define IXDR_PUT_U_LONG(buf, v) IXDR_PUT_U_INT32((buf),((uint32_t)(v)))
0246 #define IXDR_PUT_SHORT(buf, v) IXDR_PUT_INT32((buf),((int32_t)(v)))
0247 #define IXDR_PUT_U_SHORT(buf, v) IXDR_PUT_U_INT32((buf),((uint32_t)(v)))
0248
0249
0250
0251
0252 extern bool_t xdr_void(XDR *, void *);
0253 extern bool_t xdr_int(XDR *, int *);
0254 extern bool_t xdr_u_int(XDR *, u_int *);
0255 extern bool_t xdr_long(XDR *, long *);
0256 extern bool_t xdr_u_long(XDR *, u_long *);
0257 extern bool_t xdr_short(XDR *, short *);
0258 extern bool_t xdr_u_short(XDR *, u_short *);
0259 extern bool_t xdr_bool(XDR *, bool_t *);
0260 extern bool_t xdr_enum(XDR *, enum_t *);
0261 extern bool_t xdr_array(XDR *, caddr_t *, u_int *,
0262 u_int, u_int, xdrproc_t);
0263 extern bool_t xdr_bytes(XDR *, char **, u_int *, u_int);
0264 extern bool_t xdr_opaque(XDR *, caddr_t, u_int);
0265 extern bool_t xdr_string(XDR *, char **, u_int);
0266 extern bool_t xdr_union(XDR *, enum_t *, char *, struct xdr_discrim *,
0267 xdrproc_t);
0268 extern bool_t xdr_char(XDR *, char *);
0269 extern bool_t xdr_u_char(XDR *, u_char *);
0270 extern bool_t xdr_vector(XDR *, char *, u_int, u_int, xdrproc_t);
0271 extern bool_t xdr_float(XDR *, float *);
0272 extern bool_t xdr_double(XDR *, double *);
0273 extern bool_t xdr_reference(XDR *, caddr_t *, u_int, xdrproc_t);
0274 extern bool_t xdr_pointer(XDR *, char **, u_int, xdrproc_t);
0275 extern bool_t xdr_wrapstring(XDR *, char **);
0276
0277 extern unsigned long xdr_sizeof(xdrproc_t, void *);
0278
0279 #define xdr_rpcprog xdr_u_int32
0280 #define xdr_rpcvers xdr_u_int32
0281 #define xdr_rpcprot xdr_u_int32
0282 #define xdr_rpcproc xdr_u_int32
0283 #define xdr_rpcport xdr_u_int32
0284
0285
0286
0287
0288
0289 #define MAX_NETOBJ_SZ 2048
0290 struct netobj {
0291 u_int n_len;
0292 char *n_bytes;
0293 };
0294 typedef struct netobj netobj;
0295
0296 extern bool_t xdr_netobj(XDR *, struct netobj *);
0297
0298 extern bool_t xdr_int32(XDR *, int32_t *);
0299 extern bool_t xdr_u_int32(XDR *, uint32_t *);
0300
0301
0302
0303
0304
0305
0306
0307 extern void xdralloc_create(XDR *, enum xdr_op);
0308
0309
0310 extern void xdralloc_release(XDR *);
0311
0312
0313 extern caddr_t xdralloc_getdata(XDR *);
0314
0315
0316 extern void xdrmem_create(XDR *, caddr_t, u_int, enum xdr_op);
0317
0318
0319 extern void xdrstdio_create(XDR *, FILE *, enum xdr_op);
0320
0321
0322 extern void xdrrec_create(XDR *xdrs, u_int, u_int, caddr_t,
0323 int (*) (caddr_t, caddr_t, int),
0324 int (*) (caddr_t, caddr_t, int));
0325
0326
0327 extern bool_t xdrrec_endofrecord(XDR *, bool_t);
0328
0329
0330 extern bool_t xdrrec_skiprecord (XDR *xdrs);
0331
0332
0333 extern bool_t xdrrec_eof (XDR *xdrs);
0334
0335
0336 extern void xdr_free (xdrproc_t, void *);
0337 GSSRPC__END_DECLS
0338
0339 #endif