diff --git a/src/libCom/bucketLib/bucketLib.c b/src/libCom/bucketLib/bucketLib.c index f53f7a80e..76cdf69f8 100644 --- a/src/libCom/bucketLib/bucketLib.c +++ b/src/libCom/bucketLib/bucketLib.c @@ -94,7 +94,6 @@ LOCAL bucketSET BSET[] = { LOCAL int bucketAddItem(BUCKET *prb, bucketSET *pBSET, const void *pId, const void *pApp); -LOCAL int bucketRemoveItem (BUCKET *prb, bucketSET *pBSET, const void *pId); LOCAL void *bucketLookupItem(BUCKET *pb, bucketSET *pBSET, const void *pId); @@ -464,30 +463,15 @@ LOCAL int bucketAddItem(BUCKET *prb, bucketSET *pBSET, const void *pId, const vo return S_bucket_success; } - /* - * bucketRemoveItem() + * bucketLookupAndRemoveItem () */ -epicsShareFunc int epicsShareAPI - bucketRemoveItemUnsignedId (BUCKET *prb, const unsigned *pId) -{ - return bucketRemoveItem(prb, &BSET[bidtUnsigned], pId); -} -epicsShareFunc int epicsShareAPI - bucketRemoveItemPointerId (BUCKET *prb, void * const *pId) -{ - return bucketRemoveItem(prb, &BSET[bidtPointer], pId); -} -epicsShareFunc int epicsShareAPI - bucketRemoveItemStringId (BUCKET *prb, const char *pId) -{ - return bucketRemoveItem(prb, &BSET[bidtString], pId); -} -LOCAL int bucketRemoveItem (BUCKET *prb, bucketSET *pBSET, const void *pId) +LOCAL void *bucketLookupAndRemoveItem (BUCKET *prb, bucketSET *pBSET, const void *pId) { BUCKETID hashid; ITEM **ppi; ITEM *pi; + void *pApp; /* * create the hash index @@ -498,20 +482,53 @@ LOCAL int bucketRemoveItem (BUCKET *prb, bucketSET *pBSET, const void *pId) ppi = &prb->pTable[hashid]; ppi = (*pBSET->pCompare) (ppi, pId); if(!ppi){ - return S_bucket_uknId; + return NULL; } prb->nInUse--; pi = *ppi; *ppi = pi->pItem; + pApp = (void *) pi->pApp; + /* * stuff it on the free list */ freeListFree(prb->freeListPVT, pi); - return S_bucket_success; + return pApp; +} +epicsShareFunc void * epicsShareAPI bucketLookupAndRemoveItemUnsignedId (BUCKET *prb, READONLY unsigned *pId) +{ + return bucketLookupAndRemoveItem(prb, &BSET[bidtUnsigned], pId); +} +epicsShareFunc void * epicsShareAPI bucketLookupAndRemoveItemPointerId (BUCKET *prb, void * READONLY *pId) +{ + return bucketLookupAndRemoveItem(prb, &BSET[bidtPointer], pId); +} +epicsShareFunc void * epicsShareAPI bucketLookupAndRemoveItemStringId (BUCKET *prb, READONLY char *pId) +{ + return bucketLookupAndRemoveItem(prb, &BSET[bidtString], pId); } + +/* + * bucketRemoveItem() + */ +epicsShareFunc int epicsShareAPI + bucketRemoveItemUnsignedId (BUCKET *prb, const unsigned *pId) +{ + return bucketLookupAndRemoveItem(prb, &BSET[bidtUnsigned], pId)?S_bucket_success:S_bucket_uknId; +} +epicsShareFunc int epicsShareAPI + bucketRemoveItemPointerId (BUCKET *prb, void * const *pId) +{ + return bucketLookupAndRemoveItem(prb, &BSET[bidtPointer], pId)?S_bucket_success:S_bucket_uknId; +} +epicsShareFunc int epicsShareAPI + bucketRemoveItemStringId (BUCKET *prb, const char *pId) +{ + return bucketLookupAndRemoveItem(prb, &BSET[bidtString], pId)?S_bucket_success:S_bucket_uknId; +} /* diff --git a/src/libCom/bucketLib/bucketLib.h b/src/libCom/bucketLib/bucketLib.h index 3606cc00d..e2d0c1dd0 100644 --- a/src/libCom/bucketLib/bucketLib.h +++ b/src/libCom/bucketLib/bucketLib.h @@ -33,6 +33,9 @@ * .02 121693 joh added bucketFree() * .03 052395 joh use std EPICS status * $Log$ + * Revision 1.7 1998/02/27 01:34:08 jhill + * cleaned up the DLL symbol export + * * Revision 1.6 1998/02/20 21:45:10 evans * Made a large number of changes to epicsShareThings in libCom routines * to get imports and exports straight on WIN32. Not everything is fixed @@ -108,6 +111,11 @@ epicsShareFunc void * epicsShareAPI bucketLookupItemUnsignedId (BUCKET *prb, REA epicsShareFunc void * epicsShareAPI bucketLookupItemPointerId (BUCKET *prb, void * READONLY *pId); epicsShareFunc void * epicsShareAPI bucketLookupItemStringId (BUCKET *prb, READONLY char *pId); +epicsShareFunc void * epicsShareAPI bucketLookupAndRemoveItemUnsignedId (BUCKET *prb, READONLY unsigned *pId); +epicsShareFunc void * epicsShareAPI bucketLookupAndRemoveItemPointerId (BUCKET *prb, void * READONLY *pId); +epicsShareFunc void * epicsShareAPI bucketLookupAndRemoveItemStringId (BUCKET *prb, READONLY char *pId); + + /* * Status returned by bucketLib functions */