コード例 #1
0
ファイル: rsFileGet.c プロジェクト: DICE-UNC/iRODS-FUSE-Mod
int
_rsFileGet (rsComm_t *rsComm, fileOpenInp_t *fileGetInp, 
bytesBuf_t *fileGetOutBBuf)
{
    int status;
    int fd;
    int len;

    len = fileGetInp->dataSize;
    if (len <= 0)
	return (0);

    fd = _rsFileOpen (rsComm, fileGetInp);

    if (fd < 0) {
        rodsLog (LOG_NOTICE,
          "_rsFileGet: fileGet for %s, status = %d",
          fileGetInp->fileName, fd);
        return (fd);
    }

    if (fileGetOutBBuf->buf == NULL) {
        fileGetOutBBuf->buf = malloc (len);
    }
    status = fileRead (fileGetInp->fileType, rsComm,
      fd, fileGetOutBBuf->buf, len);

    if (status != len) {
       if (status >= 0) {
#if 0	/* XXXXXXXX take this out for now so that on the fly convert works */
            rodsLog (LOG_NOTICE,
              "_rsFileGet: fileRead for %s, toread %d, read %d",
              fileGetInp->fileName, len, status);
            status = SYS_COPY_LEN_ERR;
#else
        fileGetOutBBuf->len = status;
#endif
        } else {
            rodsLog (LOG_NOTICE,
              "_rsFileGet: fileRead for %s, status = %d",
              fileGetInp->fileName, status);
        }
    } else {
        fileGetOutBBuf->len = status;
    }

    fileClose (fileGetInp->fileType, rsComm, fd);

    return (status);
} 
コード例 #2
0
ファイル: rsFilePut.cpp プロジェクト: StephanU/irods
// =-=-=-=-=-=-=-
// local implementation of put
int _rsFilePut(
    rsComm_t*         _comm,
    fileOpenInp_t*    _put_inp,
    bytesBuf_t*       _put_bbuf,
    rodsServerHost_t* _server_host ) {
    int fd = 0;

    // =-=-=-=-=-=-=-
    // NOTE:: this test does not seem to work for i86 solaris
    if ( ( _put_inp->otherFlags & FORCE_FLAG ) != 0 ) {
        // =-=-=-=-=-=-=-
        // create one if it does not exist */
        _put_inp->flags |= O_CREAT;
        fd = _rsFileOpen( _comm, _put_inp );

    }
    else {
        fd = _rsFileCreate( _comm, _put_inp, _server_host );

    } // else

    // =-=-=-=-=-=-=-
    // log, error if any
    if ( fd < 0 ) {
        if ( getErrno( fd ) == EEXIST ) {
            rodsLog( LOG_DEBUG1,
                     "_rsFilePut: filePut for %s, status = %d",
                     _put_inp->fileName, fd );
        }
        else if ( fd != DIRECT_ARCHIVE_ACCESS ) {
            rodsLog( LOG_DEBUG,
                     "_rsFilePut: filePut for %s, status = %d",
                     _put_inp->fileName, fd );
        }
        return ( fd );
    }

    // =-=-=-=-=-=-=-
    // call write for resource plugin
    irods::file_object_ptr file_obj(
        new irods::file_object(
            _comm,
            _put_inp->objPath,
            _put_inp->fileName,
            _put_inp->resc_hier_,
            fd, 0, 0 ) );
    file_obj->in_pdmo( _put_inp->in_pdmo );
    file_obj->cond_input( _put_inp->condInput );

    irods::error write_err = fileWrite( _comm,
                                        file_obj,
                                        _put_bbuf->buf,
                                        _put_bbuf->len );
    int write_code = write_err.code();
    // =-=-=-=-=-=-=-
    // log errors, if any
    if ( write_code != _put_bbuf->len ) {
        if ( write_code >= 0 ) {
            std::stringstream msg;
            msg << "fileWrite failed for [";
            msg << _put_inp->fileName;
            msg << "] towrite [";
            msg << _put_bbuf->len;
            msg << "] written [";
            msg << write_code << "]";
            irods::error err = PASSMSG( msg.str(), write_err );
            irods::log( err );
            write_code = SYS_COPY_LEN_ERR;
        }
        else {
            std::stringstream msg;
            msg << "fileWrite failed for [";
            msg << _put_inp->fileName;
            msg << "]";
            irods::error err = PASSMSG( msg.str(), write_err );
            irods::log( err );
        }
    }

    // =-=-=-=-=-=-=-
    // close up after ourselves
    irods::error close_err = fileClose( _comm,
                                        file_obj );
    if ( !close_err.ok() ) {
        irods::error err = PASSMSG( "error on close", close_err );
        irods::log( err );
    }

    // =-=-=-=-=-=-=-
    // return 'write_err code' as this includes this implementation
    // assumes we are returning the size of the file 'put' via fileWrite
    return write_code;

} // _rsFilePut
コード例 #3
0
ファイル: rsFileGet.cpp プロジェクト: nesi/irods
int _rsFileGet(
    rsComm_t*      _comm,
    fileOpenInp_t* _get_inp,
    bytesBuf_t*    _get_buf ) {

    int fd;
    int len;

    len = _get_inp->dataSize;
    fd  = _rsFileOpen( _comm, _get_inp );

    if ( fd < 0 ) {
        rodsLog( LOG_NOTICE,
                 "_rsFileGet: fileGet for %s, status = %d",
                 _get_inp->fileName, fd );
        return fd;
    }

    if ( _get_buf->buf == NULL ) {
        _get_buf->buf = malloc( len );
    }

    irods::file_object_ptr file_obj(
        new irods::file_object(
            _comm,
            _get_inp->objPath,
            _get_inp->fileName,
            _get_inp->resc_hier_,
            fd,
            _get_inp->mode,
            _get_inp->flags ) );

    // =-=-=-=-=-=-=-
    // pass condInput
    file_obj->cond_input( _get_inp->condInput );

    irods::error read_err = fileRead( _comm,
                                      file_obj,
                                      _get_buf->buf,
                                      len );
    int bytes_read = read_err.code();
    if ( bytes_read != len ) {
        if ( bytes_read >= 0 ) {

            _get_buf->len = bytes_read;

        }
        else {
            std::stringstream msg;
            msg << "fileRead failed for [";
            msg << _get_inp->fileName;
            msg << "]";
            irods::error ret_err = PASSMSG( msg.str(), read_err );
            irods::log( ret_err );
        }
    }
    else {
        _get_buf->len = bytes_read;
    }

    // =-=-=-=-=-=-=-
    // call resource plugin close
    irods::error close_err = fileClose( _comm,
                                        file_obj );
    if ( !close_err.ok() ) {
        irods::error err = PASSMSG( "error on close", close_err );
        irods::log( err );
    }

    return bytes_read;

} // _rsFileGet