const char *CPLGetBasename( const char *pszFullFilename ) { size_t iFileStart = CPLFindFilenameStart( pszFullFilename ); size_t iExtStart, nLength; char *pszStaticResult = CPLGetStaticResult(); CPLAssert( ! (pszFullFilename >= pszStaticResult && pszFullFilename < pszStaticResult + CPL_PATH_BUF_SIZE) ); for( iExtStart = strlen(pszFullFilename); iExtStart > iFileStart && pszFullFilename[iExtStart] != '.'; iExtStart-- ) {} if( iExtStart == iFileStart ) iExtStart = strlen(pszFullFilename); nLength = iExtStart - iFileStart; if (nLength >= CPL_PATH_BUF_SIZE) return CPLStaticBufferTooSmall(pszStaticResult); CPLStrlcpy( pszStaticResult, pszFullFilename + iFileStart, nLength + 1 ); return pszStaticResult; }
const char *CPLGetFilename( const char *pszFullFilename ) { int iFileStart = CPLFindFilenameStart( pszFullFilename ); return pszFullFilename + iFileStart; }
const char *CPLGetDirname( const char *pszFilename ) { int iFileStart = CPLFindFilenameStart(pszFilename); char *pszStaticResult = CPLGetStaticResult(); if( iFileStart >= CPL_PATH_BUF_SIZE ) return CPLStaticBufferTooSmall(pszStaticResult); CPLAssert( ! (pszFilename >= pszStaticResult && pszFilename < pszStaticResult + CPL_PATH_BUF_SIZE) ); if( iFileStart == 0 ) { strcpy( pszStaticResult, "." ); return pszStaticResult; } CPLStrlcpy( pszStaticResult, pszFilename, iFileStart+1 ); if( iFileStart > 1 && (pszStaticResult[iFileStart-1] == '/' || pszStaticResult[iFileStart-1] == '\\') ) pszStaticResult[iFileStart-1] = '\0'; return pszStaticResult; }
const char *CPLGetFilename( const char *pszFullFilename ) { int iFileStart = CPLFindFilenameStart( pszFullFilename ); strncpy( szStaticResult, pszFullFilename + iFileStart, CPL_PATH_BUF_SIZE ); szStaticResult[CPL_PATH_BUF_SIZE - 1] = '\0'; return szStaticResult; }
const char *CPLGetExtension( const char *pszFullFilename ) { int iFileStart = CPLFindFilenameStart( pszFullFilename ); int iExtStart; for( iExtStart = strlen(pszFullFilename); iExtStart > iFileStart && pszFullFilename[iExtStart] != '.'; iExtStart-- ) {} if( iExtStart == iFileStart ) iExtStart = strlen(pszFullFilename)-1; strncpy( szStaticResult, pszFullFilename+iExtStart+1, CPL_PATH_BUF_SIZE ); szStaticResult[CPL_PATH_BUF_SIZE - 1] = '\0'; return szStaticResult; }
const char *CPLGetExtension( const char *pszFullFilename ) { size_t iFileStart = CPLFindFilenameStart( pszFullFilename ); size_t iExtStart; char *pszStaticResult = CPLGetStaticResult(); CPLAssert( ! (pszFullFilename >= pszStaticResult && pszFullFilename < pszStaticResult + CPL_PATH_BUF_SIZE) ); for( iExtStart = strlen(pszFullFilename); iExtStart > iFileStart && pszFullFilename[iExtStart] != '.'; iExtStart-- ) {} if( iExtStart == iFileStart ) iExtStart = strlen(pszFullFilename)-1; if (CPLStrlcpy( pszStaticResult, pszFullFilename+iExtStart+1, CPL_PATH_BUF_SIZE ) >= CPL_PATH_BUF_SIZE) return CPLStaticBufferTooSmall(pszStaticResult); return pszStaticResult; }
const char *CPLGetBasename( const char *pszFullFilename ) { int iFileStart = CPLFindFilenameStart( pszFullFilename ); int iExtStart, nLength; for( iExtStart = strlen(pszFullFilename); iExtStart > iFileStart && pszFullFilename[iExtStart] != '.'; iExtStart-- ) {} if( iExtStart == iFileStart ) iExtStart = strlen(pszFullFilename); nLength = iExtStart - iFileStart; CPLAssert( nLength < CPL_PATH_BUF_SIZE ); strncpy( szStaticResult, pszFullFilename + iFileStart, nLength ); szStaticResult[nLength] = '\0'; return szStaticResult; }
const char *CPLGetDirname( const char *pszFilename ) { int iFileStart = CPLFindFilenameStart(pszFilename); CPLAssert( iFileStart < CPL_PATH_BUF_SIZE ); if( iFileStart == 0 ) { strcpy( szStaticResult, "." ); return szStaticResult; } strncpy( szStaticResult, pszFilename, iFileStart ); szStaticResult[iFileStart] = '\0'; if( iFileStart > 1 && (szStaticResult[iFileStart-1] == '/' || szStaticResult[iFileStart-1] == '\\') ) szStaticResult[iFileStart-1] = '\0'; return szStaticResult; }