OGRDataSource *OGRAVCBinDriver::Open( const char * pszFilename, int bUpdate ) { OGRAVCBinDataSource *poDS; OGRAVCE00DataSource *poDSE00; if( bUpdate ) return NULL; poDS = new OGRAVCBinDataSource(); if( poDS->Open( pszFilename, TRUE ) && poDS->GetLayerCount() > 0 ) { return poDS; } delete poDS; poDSE00 = new OGRAVCE00DataSource(); if( poDSE00->Open( pszFilename, TRUE ) && poDSE00->GetLayerCount() > 0 ) { return poDSE00; } delete poDSE00; return NULL; }
static GDALDataset *OGRAVCBinDriverOpen( GDALOpenInfo* poOpenInfo ) { OGRAVCBinDataSource *poDS; OGRAVCE00DataSource *poDSE00; if( poOpenInfo->eAccess == GA_Update ) return NULL; if( !poOpenInfo->bStatOK ) return NULL; if( poOpenInfo->fpL != NULL ) { if( EQUAL(CPLGetExtension(poOpenInfo->pszFilename), "E00") ) { /* ok */ } else { char** papszSiblingFiles = poOpenInfo->GetSiblingFiles(); if( papszSiblingFiles != NULL ) { int i; int bFoundCandidateFile = FALSE; for( i = 0; papszSiblingFiles[i] != NULL; i++ ) { if( EQUAL(CPLGetExtension(papszSiblingFiles[i]), "ADF") ) { bFoundCandidateFile = TRUE; break; } } if( !bFoundCandidateFile ) return NULL; } } } poDS = new OGRAVCBinDataSource(); if( poDS->Open( poOpenInfo->pszFilename, TRUE ) && poDS->GetLayerCount() > 0 ) { return poDS; } delete poDS; poDSE00 = new OGRAVCE00DataSource(); if( poDSE00->Open( poOpenInfo->pszFilename, TRUE ) && poDSE00->GetLayerCount() > 0 ) { return poDSE00; } delete poDSE00; return NULL; }