00001
00002
00003
00004
00005
00006
00007
00008 #include "openCollection.h"
00009 #include "closeCollection.h"
00010 #include "rsGlobalExtern.h"
00011 #include "rcGlobalExtern.h"
00012
00013 int
00014 rsOpenCollection (rsComm_t *rsComm, collInp_t *openCollInp)
00015 {
00016 int status;
00017 int handleInx;
00018 collHandle_t *collHandle;
00019 rodsObjStat_t *rodsObjStatOut = NULL;
00020
00021 handleInx = allocCollHandle ();
00022
00023 if (handleInx < 0) return (handleInx);
00024
00025 collHandle = &CollHandle[handleInx];
00026
00027 status = rsInitQueryHandle (&collHandle->queryHandle, rsComm);
00028
00029 if (status < 0) return status;
00030
00031 rstrcpy (collHandle->dataObjInp.objPath, openCollInp->collName,
00032 MAX_NAME_LEN);
00033 if ((openCollInp->flags & INCLUDE_CONDINPUT_IN_QUERY) != 0) {
00034 replKeyVal (&openCollInp->condInput, &collHandle->dataObjInp.condInput);
00035 }
00036 status = rsObjStat (rsComm, &collHandle->dataObjInp, &rodsObjStatOut);
00037
00038
00039 if (status < 0) {
00040 rsCloseCollection (rsComm, &handleInx);
00041 return status;
00042 }
00043
00044 if (rodsObjStatOut->objType != COLL_OBJ_T) {
00045 freeRodsObjStat (rodsObjStatOut);
00046 rsCloseCollection (rsComm, &handleInx);
00047 return CAT_NAME_EXISTS_AS_DATAOBJ;
00048 }
00049
00050 #if 0
00051 collHandle->dataObjInp.specColl = rodsObjStatOut->specColl;
00052 #else
00053 replSpecColl (rodsObjStatOut->specColl, &collHandle->dataObjInp.specColl);
00054 #endif
00055 if (rodsObjStatOut->specColl != NULL &&
00056 rodsObjStatOut->specColl->collClass == LINKED_COLL) {
00057
00058 rstrcpy (collHandle->linkedObjPath, rodsObjStatOut->specColl->objPath,
00059 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