porting: OSX/Darwin 10.9 porting issues

xdrproc_t() arguments are variadic and non-variadic

On OSX > 10.9
-------------
typedef bool_t (*xdrproc_t)(XDR *, void *, unsigned int);

On OSX < 10.9
------------
typedef bool_t (*xdrproc_t)(XDR *, ...);

FreeBSD all versions
------------
typedef bool_t (*xdrproc_t)(XDR *, ...);

NetBSD 6.1.4
-----------
typedef bool_t (*xdrproc_t)(XDR *, const void *);

Linux all versions
-----------
typedef bool_t (*xdrproc_t)(XDR *, void *,...);

This weird and odd implementations across various platforms
should be handled properly.

Change-Id: Iad8b7da2e5b82526bf3708cff31ab10ce09f59c9
BUG: 1128820
Signed-off-by: Harshavardhana <harsha@harshavardhana.net>
Reviewed-on: http://review.gluster.org/8458
Reviewed-by: Emmanuel Dreyfus <manu@netbsd.org>
Tested-by: Gluster Build System <jenkins@build.gluster.com>
This commit is contained in:
Harshavardhana 2014-08-11 17:36:12 -07:00
parent a66a483be2
commit fd6765b4a3
2 changed files with 32 additions and 4 deletions

View File

@ -24,7 +24,7 @@ xdr_serialize_generic (struct iovec outmsg, void *res, xdrproc_t proc)
xdrmem_create (&xdr, outmsg.iov_base, (unsigned int)outmsg.iov_len,
XDR_ENCODE);
if (!proc (&xdr, res)) {
if (!PROC(&xdr, res)) {
ret = -1;
goto ret;
}
@ -48,8 +48,8 @@ xdr_to_generic (struct iovec inmsg, void *args, xdrproc_t proc)
xdrmem_create (&xdr, inmsg.iov_base, (unsigned int)inmsg.iov_len,
XDR_DECODE);
if (!proc (&xdr, args)) {
ret = -1;
if (!PROC (&xdr, args)) {
ret = -1;
goto ret;
}
@ -72,7 +72,7 @@ xdr_to_generic_payload (struct iovec inmsg, void *args, xdrproc_t proc,
xdrmem_create (&xdr, inmsg.iov_base, (unsigned int)inmsg.iov_len,
XDR_DECODE);
if (!proc (&xdr, args)) {
if (!PROC (&xdr, args)) {
ret = -1;
goto ret;
}

View File

@ -24,6 +24,34 @@
#define XDR_BYTES_PER_UNIT 4
/*
On OSX > 10.9
-------------
typedef bool_t (*xdrproc_t)(XDR *, void *, unsigned int);
On OSX < 10.9
------------
typedef bool_t (*xdrproc_t)(XDR *, ...);
FreeBSD all versions
------------
typedef bool_t (*xdrproc_t)(XDR *, ...);
NetBSD 6.1.4
-----------
typedef bool_t (*xdrproc_t)(XDR *, const void *);
Linux all versions
-----------
typedef bool_t (*xdrproc_t)(XDR *, void *,...);
*/
#if defined(__NetBSD__)
#define PROC(xdr, res) proc(xdr, res)
#else
#define PROC(xdr, res) proc(xdr, res, 0)
#endif
ssize_t
xdr_serialize_generic (struct iovec outmsg, void *res, xdrproc_t proc);