int VSIFSeek( FILE * fp, long nOffset, int nWhence ) { int nResult = fseek( fp, nOffset, nWhence ); int nError = errno; #ifdef VSI_DEBUG if( nWhence == SEEK_SET ) { VSIDebug3( "VSIFSeek(%p,%ld,SEEK_SET) = %d", fp, nOffset, nResult ); } else if( nWhence == SEEK_END ) { VSIDebug3( "VSIFSeek(%p,%ld,SEEK_END) = %d", fp, nOffset, nResult ); } else if( nWhence == SEEK_CUR ) { VSIDebug3( "VSIFSeek(%p,%ld,SEEK_CUR) = %d", fp, nOffset, nResult ); } else { VSIDebug4( "VSIFSeek(%p,%ld,%d-Unknown) = %d", fp, nOffset, nWhence, nResult ); } #endif errno = nError; return nResult; }
int VSIUnixStdioHandle::Seek( vsi_l_offset nOffset, int nWhence ) { // seeks that do nothing are still surprisingly expensive with MSVCRT. // try and short circuit if possible. if( nWhence == SEEK_SET && nOffset == this->nOffset ) return 0; int nResult = VSI_FSEEK64( fp, nOffset, nWhence ); int nError = errno; #ifdef VSI_DEBUG if( nWhence == SEEK_SET ) { VSIDebug3( "VSIUnixStdioHandle::Seek(%p," CPL_FRMT_GUIB ",SEEK_SET) = %d", fp, nOffset, nResult ); } else if( nWhence == SEEK_END ) { VSIDebug3( "VSIUnixStdioHandle::Seek(%p," CPL_FRMT_GUIB ",SEEK_END) = %d", fp, nOffset, nResult ); } else if( nWhence == SEEK_CUR ) { VSIDebug3( "VSIUnixStdioHandle::Seek(%p," CPL_FRMT_GUIB ",SEEK_CUR) = %d", fp, nOffset, nResult ); } else { VSIDebug4( "VSIUnixStdioHandle::Seek(%p," CPL_FRMT_GUIB ",%d-Unknown) = %d", fp, nOffset, nWhence, nResult ); } #endif if( nResult != -1 ) { if( nWhence == SEEK_SET ) { this->nOffset = nOffset; } else if( nWhence == SEEK_END ) { this->nOffset = VSI_FTELL64( fp ); } else if( nWhence == SEEK_CUR ) { this->nOffset += nOffset; } } bLastOpWrite = FALSE; bLastOpRead = FALSE; bAtEOF = FALSE; errno = nError; return nResult; }
FILE *VSIFOpen( const char * pszFilename, const char * pszAccess ) { FILE *fp = NULL; int nError; #if defined(WIN32) && !defined(WIN32CE) if( CSLTestBoolean( CPLGetConfigOption( "GDAL_FILENAME_IS_UTF8", "YES" ) ) ) { wchar_t *pwszFilename = CPLRecodeToWChar( pszFilename, CPL_ENC_UTF8, CPL_ENC_UCS2 ); wchar_t *pwszAccess = CPLRecodeToWChar( pszAccess, CPL_ENC_UTF8, CPL_ENC_UCS2 ); fp = _wfopen( pwszFilename, pwszAccess ); CPLFree( pwszFilename ); CPLFree( pwszAccess ); } else #endif fp = fopen( (char *) pszFilename, (char *) pszAccess ); nError = errno; VSIDebug3( "VSIFOpen(%s,%s) = %p", pszFilename, pszAccess, fp ); errno = nError; return( fp ); }
VSIVirtualHandle * VSIUnixStdioFilesystemHandler::Open( const char *pszFilename, const char *pszAccess ) { FILE *fp = VSI_FOPEN64( pszFilename, pszAccess ); int nError = errno; VSIDebug3( "VSIUnixStdioFilesystemHandler::Open(\"%s\",\"%s\") = %p", pszFilename, pszAccess, fp ); if( fp == NULL ) { errno = nError; return NULL; } VSIUnixStdioHandle *poHandle = new VSIUnixStdioHandle; poHandle->fp = fp; poHandle->nOffset = 0; poHandle->bLastOpWrite = FALSE; poHandle->bLastOpRead = FALSE; poHandle->bAtEOF = FALSE; errno = nError; return poHandle; }
FILE *VSIFOpen( const char * pszFilename, const char * pszAccess ) { FILE *fp = NULL; #if defined(WIN32) if( CSLTestBoolean( CPLGetConfigOption( "GDAL_FILENAME_IS_UTF8", "YES" ) ) ) { wchar_t *pwszFilename = CPLRecodeToWChar( pszFilename, CPL_ENC_UTF8, CPL_ENC_UCS2 ); wchar_t *pwszAccess = CPLRecodeToWChar( pszAccess, CPL_ENC_UTF8, CPL_ENC_UCS2 ); fp = _wfopen( pwszFilename, pwszAccess ); CPLFree( pwszFilename ); CPLFree( pwszAccess ); } else #endif fp = fopen( (char *) pszFilename, (char *) pszAccess ); #ifdef VSI_DEBUG // Capture the error from fopen to avoid being overwritten by errors // from VSIDebug3. const int nError = errno; VSIDebug3( "VSIFOpen(%s,%s) = %p", pszFilename, pszAccess, fp ); errno = nError; #endif return fp; }
VSIVirtualHandle * VSIUnixStdioFilesystemHandler::Open( const char *pszFilename, const char *pszAccess ) { FILE *fp = VSI_FOPEN64( pszFilename, pszAccess ); int nError = errno; VSIDebug3( "VSIUnixStdioFilesystemHandler::Open(\"%s\",\"%s\") = %p", pszFilename, pszAccess, fp ); if( fp == NULL ) { errno = nError; return NULL; } VSIUnixStdioHandle *poHandle = new VSIUnixStdioHandle(this, fp); errno = nError; /* -------------------------------------------------------------------- */ /* If VSI_CACHE is set we want to use a cached reader instead */ /* of more direct io on the underlying file. */ /* -------------------------------------------------------------------- */ if( (EQUAL(pszAccess,"r") || EQUAL(pszAccess,"rb")) && CSLTestBoolean( CPLGetConfigOption( "VSI_CACHE", "FALSE" ) ) ) { return VSICreateCachedFile( poHandle ); } else { return poHandle; } }
size_t VSIFWrite( const void *pBuffer, size_t nSize, size_t nCount, FILE * fp ) { size_t nResult = fwrite( pBuffer, nSize, nCount, fp ); VSIDebug3( "VSIFWrite(%p,%ld) = %ld", fp, (long) nSize * nCount, (long) nResult ); return nResult; }
size_t VSIFRead( void * pBuffer, size_t nSize, size_t nCount, FILE * fp ) { size_t nResult = fread( pBuffer, nSize, nCount, fp ); VSIDebug3( "VSIFRead(%p,%ld) = %ld", fp, (long) nSize * nCount, (long) nResult * nSize ); return nResult; }
FILE *VSIFOpen( const char * pszFilename, const char * pszAccess ) { FILE *fp = fopen( (char *) pszFilename, (char *) pszAccess ); int nError = errno; VSIDebug3( "VSIFOpen(%s,%s) = %p", pszFilename, pszAccess, fp ); errno = nError; return( fp ); }
FILE *VSIFOpen( const char * pszFilename, const char * pszAccess ) { FILE * fp; fp = fopen( (char *) pszFilename, (char *) pszAccess ); VSIDebug3( "VSIFOpen(%s,%s) = %p", pszFilename, pszAccess, fp ); return( fp ); }
VSILFILE *VSIFOpenL( const char * pszFilename, const char * pszAccess ) { VSIFilesystemHandler *poFSHandler = VSIFileManager::GetHandler( pszFilename ); VSILFILE* fp = (VSILFILE *) poFSHandler->Open( pszFilename, pszAccess ); VSIDebug3( "VSIFOpenL(%s,%s) = %p", pszFilename, pszAccess, fp ); return fp; }
int VSIFSeek( FILE * fp, long nOffset, int nWhence ) { #ifdef DEBUG /* To workaround Coverity strange warning about potential negative seek */ /* CID 1340084 when called from dgnwrite.cpp */ if( nWhence == SEEK_SET && nOffset < 0 ) return -1; #endif int nResult = fseek( fp, nOffset, nWhence ); #ifdef VSI_DEBUG // Capture the error from fseek to avoid being overwritten by errors // from VSIDebug. const int nError = errno; if( nWhence == SEEK_SET ) { VSIDebug3( "VSIFSeek(%p,%ld,SEEK_SET) = %d", fp, nOffset, nResult ); } else if( nWhence == SEEK_END ) { VSIDebug3( "VSIFSeek(%p,%ld,SEEK_END) = %d", fp, nOffset, nResult ); } else if( nWhence == SEEK_CUR ) { VSIDebug3( "VSIFSeek(%p,%ld,SEEK_CUR) = %d", fp, nOffset, nResult ); } else { VSIDebug4( "VSIFSeek(%p,%ld,%d-Unknown) = %d", fp, nOffset, nWhence, nResult ); } errno = nError; #endif return nResult; }
int VSIFSeek( FILE * fp, long nOffset, int nWhence ) { #ifdef VSI_DEBUG if( nWhence == SEEK_SET ) { VSIDebug2( "VSIFSeek(%p,%d,SEEK_SET)", fp, nOffset ); } else if( nWhence == SEEK_END ) { VSIDebug2( "VSIFSeek(%p,%d,SEEK_END)", fp, nOffset ); } else if( nWhence == SEEK_CUR ) { VSIDebug2( "VSIFSeek(%p,%d,SEEK_CUR)", fp, nOffset ); } else { VSIDebug3( "VSIFSeek(%p,%d,%d-Unknown)", fp, nOffset, nWhence ); } #endif return( fseek( fp, nOffset, nWhence ) ); }
int VSIUnixStdioHandle::Seek( vsi_l_offset nOffset, int nWhence ) { bAtEOF = FALSE; // seeks that do nothing are still surprisingly expensive with MSVCRT. // try and short circuit if possible. if( nWhence == SEEK_SET && nOffset == this->nOffset ) return 0; // on a read-only file, we can avoid a lseek() system call to be issued // if the next position to seek to is within the buffered page if( bReadOnly && nWhence == SEEK_SET ) { GIntBig nDiff = (GIntBig)nOffset - (GIntBig)this->nOffset; if( nDiff > 0 && nDiff < 4096 ) { GByte abyTemp[4096]; int nRead = (int)fread(abyTemp, 1, (int)nDiff, fp); if( nRead == (int)nDiff ) { this->nOffset = nOffset; bLastOpWrite = FALSE; bLastOpRead = FALSE; return 0; } } } const int nResult = VSI_FSEEK64( fp, nOffset, nWhence ); int nError = errno; #ifdef VSI_DEBUG if( nWhence == SEEK_SET ) { VSIDebug3( "VSIUnixStdioHandle::Seek(%p," CPL_FRMT_GUIB ",SEEK_SET) = %d", fp, nOffset, nResult ); } else if( nWhence == SEEK_END ) { VSIDebug3( "VSIUnixStdioHandle::Seek(%p," CPL_FRMT_GUIB ",SEEK_END) = %d", fp, nOffset, nResult ); } else if( nWhence == SEEK_CUR ) { VSIDebug3( "VSIUnixStdioHandle::Seek(%p," CPL_FRMT_GUIB ",SEEK_CUR) = %d", fp, nOffset, nResult ); } else { VSIDebug4( "VSIUnixStdioHandle::Seek(%p," CPL_FRMT_GUIB ",%d-Unknown) = %d", fp, nOffset, nWhence, nResult ); } #endif if( nResult != -1 ) { if( nWhence == SEEK_SET ) { this->nOffset = nOffset; } else if( nWhence == SEEK_END ) { this->nOffset = VSI_FTELL64( fp ); } else if( nWhence == SEEK_CUR ) { this->nOffset += nOffset; } } bLastOpWrite = FALSE; bLastOpRead = FALSE; errno = nError; return nResult; }