Line data Source code
1 : /****************************************************************************** 2 : * 3 : * Project: OGR 4 : * Purpose: OGRAVCBinDriver implementation (Arc/Info Binary Coverages) 5 : * Author: Frank Warmerdam, warmerdam@pobox.com 6 : * 7 : ****************************************************************************** 8 : * Copyright (c) 2002, Frank Warmerdam <warmerdam@pobox.com> 9 : * 10 : * SPDX-License-Identifier: MIT 11 : ****************************************************************************/ 12 : 13 : #include "ogr_avc.h" 14 : 15 : /************************************************************************/ 16 : /* Open() */ 17 : /************************************************************************/ 18 : 19 22301 : static GDALDataset *OGRAVCBinDriverOpen(GDALOpenInfo *poOpenInfo) 20 : 21 : { 22 22301 : if (poOpenInfo->eAccess == GA_Update) 23 170 : return nullptr; 24 22131 : if (!poOpenInfo->bStatOK) 25 21100 : return nullptr; 26 1031 : if (poOpenInfo->fpL != nullptr) 27 : { 28 589 : char **papszSiblingFiles = poOpenInfo->GetSiblingFiles(); 29 589 : if (papszSiblingFiles != nullptr) 30 : { 31 577 : bool bFoundCandidateFile = false; 32 20455 : for (int i = 0; papszSiblingFiles[i] != nullptr; i++) 33 : { 34 19878 : if (EQUAL(CPLGetExtensionSafe(papszSiblingFiles[i]).c_str(), 35 : "ADF")) 36 : { 37 0 : bFoundCandidateFile = true; 38 0 : break; 39 : } 40 : } 41 577 : if (!bFoundCandidateFile) 42 577 : return nullptr; 43 : } 44 : } 45 : 46 454 : OGRAVCBinDataSource *poDS = new OGRAVCBinDataSource(); 47 : 48 454 : if (poDS->Open(poOpenInfo->pszFilename, TRUE) && poDS->GetLayerCount() > 0) 49 : { 50 3 : return poDS; 51 : } 52 451 : delete poDS; 53 : 54 451 : return nullptr; 55 : } 56 : 57 : /************************************************************************/ 58 : /* RegisterOGRAVC() */ 59 : /************************************************************************/ 60 : 61 1682 : void RegisterOGRAVCBin() 62 : 63 : { 64 1682 : if (GDALGetDriverByName("AVCBin") != nullptr) 65 301 : return; 66 : 67 1381 : GDALDriver *poDriver = new GDALDriver(); 68 : 69 1381 : poDriver->SetDescription("AVCBin"); 70 1381 : poDriver->SetMetadataItem(GDAL_DCAP_VECTOR, "YES"); 71 1381 : poDriver->SetMetadataItem(GDAL_DMD_LONGNAME, "Arc/Info Binary Coverage"); 72 1381 : poDriver->SetMetadataItem(GDAL_DMD_HELPTOPIC, "drivers/vector/avcbin.html"); 73 1381 : poDriver->SetMetadataItem(GDAL_DCAP_VIRTUALIO, "YES"); 74 1381 : poDriver->SetMetadataItem(GDAL_DCAP_MULTIPLE_VECTOR_LAYERS, "YES"); 75 1381 : poDriver->SetMetadataItem(GDAL_DMD_SUPPORTED_SQL_DIALECTS, "OGRSQL SQLITE"); 76 : 77 1381 : poDriver->pfnOpen = OGRAVCBinDriverOpen; 78 : 79 1381 : GetGDALDriverManager()->RegisterDriver(poDriver); 80 : }