From ec83174608917d80517c5107d583d702174bef30 Mon Sep 17 00:00:00 2001 From: Jeffrey Altman Date: Sun, 2 Aug 2009 18:59:51 -0400 Subject: [PATCH] add xdr_alloc applications can allocate memory that must be deallocated by the XDR package. Add xdr_alloc to permit that. Export from libafsrpc. LICENSE BSD Reviewed-on: http://gerrit.openafs.org/269 Reviewed-by: Derrick Brashear Tested-by: Jeffrey Altman Reviewed-by: Jeffrey Altman --- src/WINNT/afsd/cm_callback.c | 4 ++-- src/libafsrpc/afsrpc.def | 1 + src/libafsrpc/afsrpc.exp | 2 ++ src/rx/xdr.c | 8 +++++++- src/rx/xdr_prototypes.h | 1 + 5 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/WINNT/afsd/cm_callback.c b/src/WINNT/afsd/cm_callback.c index 9da08b8a0..a488c864a 100644 --- a/src/WINNT/afsd/cm_callback.c +++ b/src/WINNT/afsd/cm_callback.c @@ -1149,7 +1149,7 @@ GetCellCommon(afs_int32 a_cellnum, char **a_name, serverList *a_hosts) sn++, serverRefp = serverRefp->next); a_hosts->serverList_len = sn; - a_hosts->serverList_val = (afs_int32 *)osi_Alloc(sn * sizeof(afs_int32)); + a_hosts->serverList_val = (afs_int32 *)xdr_alloc(sn * sizeof(afs_int32)); for ( sn = 0, serverRefp = cellp->vlServersp; sn < AFSMAXCELLHOSTS && serverRefp; @@ -1246,7 +1246,7 @@ SRXAFSCB_TellMeAboutYourself( struct rx_call *callp, lock_ReleaseRead(&cm_syscfgLock); dataBytes = 1 * sizeof(afs_uint32); - dataBuffP = (afs_uint32 *) osi_Alloc(dataBytes); + dataBuffP = (afs_uint32 *) xdr_alloc(dataBytes); dataBuffP[0] = CLIENT_CAPABILITY_ERRORTRANS; capabilities->Capabilities_len = dataBytes / sizeof(afs_uint32); capabilities->Capabilities_val = dataBuffP; diff --git a/src/libafsrpc/afsrpc.def b/src/libafsrpc/afsrpc.def index 0fe1c643f..d721b3a8b 100755 --- a/src/libafsrpc/afsrpc.def +++ b/src/libafsrpc/afsrpc.def @@ -248,6 +248,7 @@ EXPORTS RXAFS_FsCmd @253 rxi_CallError @254 rx_GetLocalPeers @255 + xdr_alloc @256 ; for performance testing rx_TSFPQGlobSize @2001 DATA diff --git a/src/libafsrpc/afsrpc.exp b/src/libafsrpc/afsrpc.exp index 0b19b05ee..0355bc9b1 100755 --- a/src/libafsrpc/afsrpc.exp +++ b/src/libafsrpc/afsrpc.exp @@ -167,3 +167,5 @@ RXAFS_DFSSymlink RXAFSCB_function_names RXAFS_FsCmd rx_GetLocalPeers +xdr_free +xdr_alloc diff --git a/src/rx/xdr.c b/src/rx/xdr.c index f11114b2f..de005d4ed 100644 --- a/src/rx/xdr.c +++ b/src/rx/xdr.c @@ -582,7 +582,13 @@ xdr_wrapstring(XDR * xdrs, char **cpp) } #endif -void +void * +xdr_alloc(afs_int32 size) +{ + return osi_alloc(size); +} + +void xdr_free(void *x, afs_int32 size) { osi_free(x, size); diff --git a/src/rx/xdr_prototypes.h b/src/rx/xdr_prototypes.h index a24f928bd..769fe22fe 100644 --- a/src/rx/xdr_prototypes.h +++ b/src/rx/xdr_prototypes.h @@ -58,6 +58,7 @@ extern bool_t xdr_union(XDR * xdrs, enum_t * dscmp, caddr_t unp, struct xdr_discrim *choices, xdrproc_t dfault); extern bool_t xdr_string(XDR * xdrs, char **cpp, u_int maxsize); extern bool_t xdr_wrapstring(XDR * xdrs, char **cpp); +extern void * xdr_alloc(afs_int32 size); extern void xdr_free(void *x, afs_int32 size); -- 2.39.5