Ejemplo n.º 1
0
int
l3FileGetSingleBuf (rsComm_t *rsComm, int l1descInx,  
bytesBuf_t *dataObjOutBBuf)
{
    dataObjInfo_t *dataObjInfo;
    int rescTypeInx;
    fileOpenInp_t fileGetInp;
    int bytesRead;
    dataObjInp_t *dataObjInp;

    dataObjInfo = L1desc[l1descInx].dataObjInfo;


    if (getStructFileType (dataObjInfo->specColl) >= 0) {
        subFile_t subFile;
        memset (&subFile, 0, sizeof (subFile));
        rstrcpy (subFile.subFilePath, dataObjInfo->subPath,
          MAX_NAME_LEN);
        rstrcpy (subFile.addr.hostAddr, dataObjInfo->rescInfo->rescLoc,
          NAME_LEN);
        subFile.specColl = dataObjInfo->specColl;
	subFile.mode = getFileMode (L1desc[l1descInx].dataObjInp);
        subFile.flags = O_RDONLY;
	subFile.offset = dataObjInfo->dataSize;
        bytesRead = rsSubStructFileGet (rsComm, &subFile, dataObjOutBBuf);
	return (bytesRead);
    }

    rescTypeInx = dataObjInfo->rescInfo->rescTypeInx;

    switch (RescTypeDef[rescTypeInx].rescCat) {
      case FILE_CAT:
        memset (&fileGetInp, 0, sizeof (fileGetInp));
        dataObjInp = L1desc[l1descInx].dataObjInp;
        fileGetInp.fileType = (fileDriverType_t)RescTypeDef[rescTypeInx].driverType;
        rstrcpy (fileGetInp.addr.hostAddr,  dataObjInfo->rescInfo->rescLoc,
          NAME_LEN);
        rstrcpy (fileGetInp.fileName, dataObjInfo->filePath, MAX_NAME_LEN);
        fileGetInp.mode = getFileMode (dataObjInp);
        fileGetInp.flags = O_RDONLY;
	fileGetInp.dataSize = dataObjInfo->dataSize;
	/* XXXXX need to be able to handle structured file */
        bytesRead = rsFileGet (rsComm, &fileGetInp, dataObjOutBBuf);
        break;
      default:
        rodsLog (LOG_NOTICE,
          "l3Open: rescCat type %d is not recognized",
          RescTypeDef[rescTypeInx].rescCat);
        bytesRead = SYS_INVALID_RESC_TYPE;
        break;
    }
    return (bytesRead);
}
Ejemplo n.º 2
0
int
l3FileGetSingleBuf( rsComm_t *rsComm, int l1descInx,
                    bytesBuf_t *dataObjOutBBuf ) {
    dataObjInfo_t *dataObjInfo;
    fileOpenInp_t fileGetInp;
    int bytesRead;
    dataObjInp_t *dataObjInp;

    dataObjInfo = L1desc[l1descInx].dataObjInfo;

    // =-=-=-=-=-=-=-
    // extract the host location from the resource hierarchy
    std::string location;
    irods::error ret = irods::get_loc_for_hier_string( dataObjInfo->rescHier, location );
    if ( !ret.ok() ) {
        irods::log( PASSMSG( "l3FileGetSingleBuf - failed in get_loc_for_hier_String", ret ) );
        return -1;
    }

    if ( getStructFileType( dataObjInfo->specColl ) >= 0 ) {



        subFile_t subFile;
        memset( &subFile, 0, sizeof( subFile ) );
        rstrcpy( subFile.subFilePath, dataObjInfo->subPath,
                 MAX_NAME_LEN );
        //rstrcpy (subFile.addr.hostAddr, dataObjInfo->rescInfo->rescLoc,NAME_LEN);
        rstrcpy( subFile.addr.hostAddr, location.c_str(), NAME_LEN );

        subFile.specColl = dataObjInfo->specColl;
        subFile.mode = getFileMode( L1desc[l1descInx].dataObjInp );
        subFile.flags = O_RDONLY;
        subFile.offset = dataObjInfo->dataSize;
        bytesRead = rsSubStructFileGet( rsComm, &subFile, dataObjOutBBuf );
        return bytesRead;
    }

    memset( &fileGetInp, 0, sizeof( fileGetInp ) );
    dataObjInp = L1desc[l1descInx].dataObjInp;
    rstrcpy( fileGetInp.addr.hostAddr,  location.c_str(), NAME_LEN );
    rstrcpy( fileGetInp.fileName, dataObjInfo->filePath, MAX_NAME_LEN );
    rstrcpy( fileGetInp.resc_name_, dataObjInfo->rescInfo->rescName, MAX_NAME_LEN );
    rstrcpy( fileGetInp.resc_hier_, dataObjInfo->rescHier, MAX_NAME_LEN );
    rstrcpy( fileGetInp.objPath,    dataObjInfo->objPath,  MAX_NAME_LEN );
    fileGetInp.mode = getFileMode( dataObjInp );
    fileGetInp.flags = O_RDONLY;
    fileGetInp.dataSize = dataObjInfo->dataSize;
    /* XXXXX need to be able to handle structured file */
    bytesRead = rsFileGet( rsComm, &fileGetInp, dataObjOutBBuf );
    return bytesRead;
}