00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #include "openCollection.h"
00011 #include "closeCollection.h"
00012 #include "rsGlobalExtern.h"
00013 #include "rcGlobalExtern.h"
00014
00015 int
00016 rsOpenCollection (rsComm_t *rsComm, collInp_t *openCollInp)
00017 {
00018 int status;
00019 int handleInx;
00020 collHandle_t *collHandle;
00021 rodsObjStat_t *rodsObjStatOut = NULL;
00022
00023 handleInx = allocCollHandle ();
00024
00025 if (handleInx < 0) return (handleInx);
00026
00027 collHandle = &CollHandle[handleInx];
00028
00029 status = rsInitQueryHandle (&collHandle->queryHandle, rsComm);
00030
00031 if (status < 0) return status;
00032
00033 rstrcpy (collHandle->dataObjInp.objPath, openCollInp->collName, MAX_NAME_LEN);
00034
00035 if ((openCollInp->flags & INCLUDE_CONDINPUT_IN_QUERY) != 0) {
00036 replKeyVal (&openCollInp->condInput, &collHandle->dataObjInp.condInput);
00037 }
00038
00039 status = rsObjStat (rsComm, &collHandle->dataObjInp, &rodsObjStatOut);
00040 if (status < 0) {
00041 rsCloseCollection (rsComm, &handleInx);
00042 return status;
00043 }
00044
00045 if (rodsObjStatOut->objType != COLL_OBJ_T) {
00046 freeRodsObjStat (rodsObjStatOut);
00047 rsCloseCollection (rsComm, &handleInx);
00048 return CAT_NAME_EXISTS_AS_DATAOBJ;
00049 }
00050
00051 #if 0
00052 collHandle->dataObjInp.specColl = rodsObjStatOut->specColl;
00053 #else
00054 replSpecColl (rodsObjStatOut->specColl, &collHandle->dataObjInp.specColl);
00055 #endif
00056 if( rodsObjStatOut->specColl != NULL &&
00057 rodsObjStatOut->specColl->collClass == LINKED_COLL) {
00058
00059 rstrcpy( collHandle->linkedObjPath, rodsObjStatOut->specColl->objPath, MAX_NAME_LEN );
00060 };
00061
00062 collHandle->rodsObjStat = rodsObjStatOut;
00063
00064 collHandle->state = COLL_OPENED;
00065 collHandle->flags = openCollInp->flags;
00066
00067 return (handleInx);
00068 }
00069
00070 #ifdef COMPAT_201
00071 int
00072 rsOpenCollection201 (rsComm_t *rsComm, openCollInp_t *openCollInp)
00073 {
00074 collInp_t collInp;
00075 int status;
00076
00077 bzero (&collInp, sizeof (collInp));
00078
00079 rstrcpy (collInp.collName, openCollInp->collName, MAX_NAME_LEN);
00080 collInp.flags = openCollInp->flags;
00081 collInp.condInput = openCollInp->condInput;
00082
00083 status = rsOpenCollection (rsComm, &collInp);
00084
00085 return status;
00086 }
00087 #endif
00088