int l3Read( rsComm_t *rsComm, int l1descInx, int len, bytesBuf_t *dataObjReadOutBBuf ) { int bytesRead; dataObjInfo_t *dataObjInfo; 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( "failed in get_loc_for_hier_String", ret ) ); return -1; } if ( getStructFileType( dataObjInfo->specColl ) >= 0 ) { subStructFileFdOprInp_t subStructFileReadInp; memset( &subStructFileReadInp, 0, sizeof( subStructFileReadInp ) ); subStructFileReadInp.type = dataObjInfo->specColl->type; subStructFileReadInp.fd = L1desc[l1descInx].l3descInx; subStructFileReadInp.len = len; rstrcpy( subStructFileReadInp.addr.hostAddr, location.c_str(), NAME_LEN ); rstrcpy( subStructFileReadInp.resc_hier, dataObjInfo->rescHier, MAX_NAME_LEN ); bytesRead = rsSubStructFileRead( rsComm, &subStructFileReadInp, dataObjReadOutBBuf ); } else { fileReadInp_t fileReadInp; int category = FILE_CAT; // do not support DB type switch ( category ) { case FILE_CAT: memset( &fileReadInp, 0, sizeof( fileReadInp ) ); fileReadInp.fileInx = L1desc[l1descInx].l3descInx; fileReadInp.len = len; bytesRead = rsFileRead( rsComm, &fileReadInp, dataObjReadOutBBuf ); break; default: rodsLog( LOG_NOTICE, "l3Read: rescCat type %d is not recognized", category ); bytesRead = SYS_INVALID_RESC_TYPE; break; } } return bytesRead; }
int _l3Read( rsComm_t *rsComm, int l3descInx, void *buf, int len ) { fileReadInp_t fileReadInp; bytesBuf_t dataObjReadInpBBuf; int bytesRead; dataObjReadInpBBuf.len = len; dataObjReadInpBBuf.buf = buf; memset( &fileReadInp, 0, sizeof( fileReadInp ) ); fileReadInp.fileInx = l3descInx; fileReadInp.len = len; bytesRead = rsFileRead( rsComm, &fileReadInp, &dataObjReadInpBBuf ); return bytesRead; }
pathnamePatterns_t * readPathnamePatternsFromFile(rsComm_t *rsComm, char *filename, rescInfo_t *rescInfo) { int status; rodsStat_t *stbuf; fileStatInp_t fileStatInp; bytesBuf_t fileReadBuf; fileOpenInp_t fileOpenInp; fileReadInp_t fileReadInp; fileCloseInp_t fileCloseInp; int buf_len, fd; pathnamePatterns_t *pp; if (rsComm == NULL || filename == NULL || rescInfo == NULL) { return NULL; } memset(&fileStatInp, 0, sizeof(fileStatInp)); rstrcpy(fileStatInp.fileName, filename, MAX_NAME_LEN); fileStatInp.fileType = (fileDriverType_t)RescTypeDef[rescInfo->rescTypeInx].driverType; rstrcpy(fileStatInp.addr.hostAddr, rescInfo->rescLoc, NAME_LEN); status = rsFileStat(rsComm, &fileStatInp, &stbuf); if (status != 0) { if (status != UNIX_FILE_STAT_ERR - ENOENT) { rodsLog(LOG_DEBUG, "readPathnamePatternsFromFile: can't stat %s. status = %d", fileStatInp.fileName, status); } return NULL; } buf_len = stbuf->st_size; free(stbuf); memset(&fileOpenInp, 0, sizeof(fileOpenInp)); rstrcpy(fileOpenInp.fileName, filename, MAX_NAME_LEN); fileOpenInp.fileType = (fileDriverType_t)RescTypeDef[rescInfo->rescTypeInx].driverType; rstrcpy(fileOpenInp.addr.hostAddr, rescInfo->rescLoc, NAME_LEN); fileOpenInp.flags = O_RDONLY; fd = rsFileOpen(rsComm, &fileOpenInp); if (fd < 0) { rodsLog(LOG_NOTICE, "readPathnamePatternsFromFile: can't open %s for reading. status = %d", fileOpenInp.fileName, fd); return NULL; } memset(&fileReadBuf, 0, sizeof(fileReadBuf)); fileReadBuf.buf = malloc(buf_len); if (fileReadBuf.buf == NULL) { rodsLog(LOG_NOTICE, "readPathnamePatternsFromFile: could not malloc buffer"); return NULL; } memset(&fileReadInp, 0, sizeof(fileReadInp)); fileReadInp.fileInx = fd; fileReadInp.len = buf_len; status = rsFileRead(rsComm, &fileReadInp, &fileReadBuf); memset(&fileCloseInp, 0, sizeof(fileCloseInp)); fileCloseInp.fileInx = fd; rsFileClose(rsComm, &fileCloseInp); if (status < 0) { rodsLog(LOG_NOTICE, "readPathnamePatternsFromFile: could not read %s. status = %d", fileOpenInp.fileName, status); free(fileReadBuf.buf); return NULL; } pp = readPathnamePatterns((char*)fileReadBuf.buf, buf_len); return pp; }