#define __XDR_INCLUDE__
#include <afs/param.h>
#ifdef AFS_NT40_ENV
+#ifndef _MFC_VER
#include <winsock2.h>
+#endif /* _MFC_VER */
#endif
+#ifndef bool_t
#define bool_t int
#define enum_t int
+#endif
#ifndef FALSE
#define FALSE 0
#endif /* !FALSE */
#define mem_free(ptr, bsize) free(ptr)
#endif
+#if defined(AFS_AMD64_LINUX24_ENV) || defined(AFS_DARWIN_ENV)
+#define xdr_alloc afs_xdr_alloc
+#define xdr_free afs_xdr_free
+#define xdr_void afs_xdr_void
+#define xdr_int afs_xdr_int
+#define xdr_u_int afs_xdr_u_int
+#define xdr_short afs_xdr_short
+#define xdr_u_short afs_xdr_u_short
+#define xdr_long afs_xdr_long
+#define xdr_u_long afs_xdr_u_long
+#define xdr_char afs_xdr_char
+#define xdr_u_char afs_xdr_u_char
+#define xdr_bool afs_xdr_bool
+#define xdr_enum afs_xdr_enum
+#define xdr_array afs_xdr_array
+#define xdr_arrayN afs_xdr_arrayN
+#define xdr_bytes afs_xdr_bytes
+#define xdr_opaque afs_xdr_opaque
+#define xdr_string afs_xdr_string
+#define xdr_union afs_xdr_union
+#define xdr_float afs_xdr_float
+#define xdr_double afs_xdr_double
+#define xdr_reference afs_xdr_reference
+#define xdr_wrapstring afs_xdr_wrapstring
+#define xdr_vector afs_xdr_vector
+#define xdr_int64 afs_xdr_int64
+#define xdr_uint64 afs_xdr_uint64
+#define xdr_pointer afs_xdr_pointer
+#endif
+
#ifdef KERNEL
-void *afs_osi_Alloc();
#define osi_alloc afs_osi_Alloc
#define osi_free afs_osi_Free
+
+/* keep here for now, 64 bit issues */
+#ifndef AFS_OBSD44_ENV
+extern void *afs_osi_Alloc(size_t x);
+#ifndef afs_osi_Alloc_NoSleep
+extern void *afs_osi_Alloc_NoSleep(size_t x);
+#endif
+extern void afs_osi_Free(void *x, size_t asize);
+#endif
+
#endif
-#ifndef major /* ouch! */
+#ifndef major /* ouch! */
#include <sys/types.h>
#endif
* request.
*/
enum xdr_op {
- XDR_ENCODE=0,
- XDR_DECODE=1,
- XDR_FREE=2
+ XDR_ENCODE = 0,
+ XDR_DECODE = 1,
+ XDR_FREE = 2
};
/*
* allocate dynamic storage of the appropriate size and return it.
* bool_t (*xdrproc_t)(XDR *, caddr_t *);
*/
-typedef bool_t (*xdrproc_t)();
+
+/* We need a different prototype for i386 Linux kernel code, because it
+ * uses a register (rather than stack) based calling convention. The
+ * normal va_args prototype results in the arguments being placed on the
+ * stack, where they aren't accessible to the 'real' function.
+ */
+#if defined(AFS_I386_LINUX26_ENV) && defined(KERNEL) && !defined(UKERNEL)
+typedef bool_t(*xdrproc_t) (void *, caddr_t, u_int);
+#else
+typedef bool_t(*xdrproc_t) (void *, ...);
+#endif
/*
* The XDR handle.
* and two private fields for the use of the particular impelementation.
*/
typedef struct {
- enum xdr_op x_op; /* operation; fast additional param */
- struct xdr_ops {
-#if defined(AFS_SGI61_ENV) && defined(KERNEL) && (_MIPS_SZLONG != _MIPS_SZINT)
+ enum xdr_op x_op; /* operation; fast additional param */
+ struct xdr_ops {
+#if defined(KERNEL) && ((defined(AFS_SGI61_ENV) && (_MIPS_SZLONG != _MIPS_SZINT)) || defined(AFS_HPUX_64BIT_ENV))
/* NOTE: SGI 6.1 adds two routines to the xdr_ops if the size of a long is
* 64 bits. I've only done this for the kernel, since other changes may
* be necessary if we make a 64 bit user version of AFS.
*/
- bool_t (*x_getint64)(); /* get 32 bits into a long */
- bool_t (*x_putint64)(); /* send 32 bits of a long */
-#endif /* AFS_SGI61_ENV */
+ bool_t(*x_getint64) (void *xdrs, afs_int64 * lp); /* get 32 bits into a long */
+ bool_t(*x_putint64) (void *xdrs, afs_int64 * lp); /* send 32 bits of a long */
+#endif /* defined(KERNEL) && ((defined(AFS_SGI61_ENV) && (_MIPS_SZLONG != _MIPS_SZINT)) || defined(AFS_HPUX_64BIT_ENV)) */
#if !(defined(KERNEL) && defined(AFS_SUN57_ENV))
- bool_t (*x_getint32)(); /* get an afs_int32 from underlying stream */
- bool_t (*x_putint32)(); /* put an afs_int32 to " */
+ bool_t(*x_getint32) (void *xdrs, afs_int32 * lp); /* get an afs_int32 from underlying stream */
+ bool_t(*x_putint32) (void *xdrs, afs_int32 * lp); /* put an afs_int32 to " */
#endif
- 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 */
- afs_int32 * (*x_inline)(); /* buf quick ptr to buffered data */
- void (*x_destroy)(); /* free privates of this xdr_stream */
+ bool_t(*x_getbytes) (void *xdrs, caddr_t addr, u_int len); /* get some bytes from " */
+ bool_t(*x_putbytes) (void *xdrs, caddr_t addr, u_int len); /* put some bytes to " */
+ u_int(*x_getpostn) (void *xdrs); /* returns bytes off from beginning */
+ bool_t(*x_setpostn) (void *xdrs, u_int pos); /* lets you reposition the stream */
+ afs_int32 *(*x_inline) (void *xdrs, u_int len); /* buf quick ptr to buffered data */
+ void (*x_destroy) (void *xdrs); /* free privates of this xdr_stream */
#if defined(KERNEL) && defined(AFS_SUN57_ENV)
- bool_t (*x_control)();
- bool_t (*x_getint32)();
- bool_t (*x_putint32)();
+ bool_t(*x_control) (void *xdrs);
+ bool_t(*x_getint32) (void *xdrs, afs_int32 * lp);
+ bool_t(*x_putint32) (void *xdrs, afs_int32 * lp);
#endif
- } *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 */
+ } *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;
/*
* u_int len;
* u_int pos;
*/
-#if defined(AFS_SGI61_ENV) && defined(KERNEL) && (_MIPS_SZLONG != _MIPS_SZINT)
+#if defined(AFS_SGI61_ENV) && defined(KERNEL) && (_MIPS_SZLONG != _MIPS_SZINT) || defined(AFS_HPUX_64BIT_ENV)
#define XDR_GETINT64(xdrs, int64p) \
(*(xdrs)->x_ops->x_getint64)(xdrs, int64p)
#define xdr_getint64(xdrs, int64p) \
(*(xdrs)->x_ops->x_putint64)(xdrs, int64p)
#define xdr_putint64(xdrs, int64p) \
(*(xdrs)->x_ops->x_putint64)(xdrs, int64p)
-#endif /* defined(AFS_SGI61_ENV) && KERNEL && (_MIPS_SZLONG != _MIPS_SZINT) */
+#endif /* defined(KERNEL) && ((defined(AFS_SGI61_ENV) && (_MIPS_SZLONG != _MIPS_SZINT)) || defined(AFS_HPUX_64BIT_ENV)) */
#define XDR_GETINT32(xdrs, int32p) \
(*(xdrs)->x_ops->x_getint32)(xdrs, int32p)
*/
#define NULL_xdrproc_t ((xdrproc_t)0)
struct xdr_discrim {
- int value;
- xdrproc_t proc;
+ int value;
+ xdrproc_t proc;
};
/*
#define IXDR_PUT_SHORT(buf, v) IXDR_PUT_INT32((buf), ((afs_int32)(v)))
#define IXDR_PUT_U_SHORT(buf, v) IXDR_PUT_INT32((buf), ((afs_int32)(v)))
-/*
- * 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_short();
-extern bool_t xdr_u_short();
-extern bool_t xdr_long();
-extern bool_t xdr_char();
-extern bool_t xdr_u_char();
-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_float();
-extern bool_t xdr_double();
-extern bool_t xdr_reference();
-extern bool_t xdr_wrapstring();
-extern bool_t xdr_vector();
-extern bool_t xdr_int64();
-extern bool_t xdr_uint64();
-
-/*
- * These are the public routines for the various implementations of
- * xdr streams.
- */
-extern void xdrmem_create(); /* XDR using memory buffers */
-extern void xdrrx_create(); /* XDR using rx */
-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 begining of next record */
-extern bool_t xdrrec_eof(); /* true iff no more input */
-
-/*
- * If you change the definitions of xdr_afs_int32 and xdr_afs_uint32, be sure
- * to change them in BOTH rx/xdr.h and rxgen/rpc_main.c. Also, config/stds.h
- * has the defines for afs_int32 which should match below.
- */
-
-#ifndef xdr_afs_int32
-#ifdef AFS_64BIT_ENV
-#define xdr_afs_int32 xdr_int
-#else
-#define xdr_afs_int32 xdr_long
-#endif
-#endif
-#ifndef xdr_afs_uint32
-#define xdr_afs_uint32 xdr_u_int
-#endif
-
+#include "xdr_prototypes.h"
#endif /* __XDR_INCLUDE__ */