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 22559 : static GDALDataset *OGRAVCBinDriverOpen(GDALOpenInfo *poOpenInfo) 20 : 21 : { 22 22559 : if (poOpenInfo->eAccess == GA_Update) 23 169 : return nullptr; 24 22390 : if (!poOpenInfo->bStatOK) 25 21370 : return nullptr; 26 1020 : if (poOpenInfo->fpL != nullptr) 27 : { 28 586 : char **papszSiblingFiles = poOpenInfo->GetSiblingFiles(); 29 586 : if (papszSiblingFiles != nullptr) 30 : { 31 574 : bool bFoundCandidateFile = false; 32 20421 : for (int i = 0; papszSiblingFiles[i] != nullptr; i++) 33 : { 34 19847 : if (EQUAL(CPLGetExtensionSafe(papszSiblingFiles[i]).c_str(), 35 : "ADF")) 36 : { 37 0 : bFoundCandidateFile = true; 38 0 : break; 39 : } 40 : } 41 574 : if (!bFoundCandidateFile) 42 574 : return nullptr; 43 : } 44 : } 45 : 46 446 : OGRAVCBinDataSource *poDS = new OGRAVCBinDataSource(); 47 : 48 446 : if (poDS->Open(poOpenInfo->pszFilename, TRUE) && poDS->GetLayerCount() > 0) 49 : { 50 3 : return poDS; 51 : } 52 443 : delete poDS; 53 : 54 443 : return nullptr; 55 : } 56 : 57 : /************************************************************************/ 58 : /* RegisterOGRAVC() */ 59 : /************************************************************************/ 60 : 61 1686 : void RegisterOGRAVCBin() 62 : 63 : { 64 1686 : if (GDALGetDriverByName("AVCBin") != nullptr) 65 302 : return; 66 : 67 1384 : GDALDriver *poDriver = new GDALDriver(); 68 : 69 1384 : poDriver->SetDescription("AVCBin"); 70 1384 : poDriver->SetMetadataItem(GDAL_DCAP_VECTOR, "YES"); 71 1384 : poDriver->SetMetadataItem(GDAL_DMD_LONGNAME, "Arc/Info Binary Coverage"); 72 1384 : poDriver->SetMetadataItem(GDAL_DMD_HELPTOPIC, "drivers/vector/avcbin.html"); 73 1384 : poDriver->SetMetadataItem(GDAL_DCAP_VIRTUALIO, "YES"); 74 1384 : poDriver->SetMetadataItem(GDAL_DCAP_MULTIPLE_VECTOR_LAYERS, "YES"); 75 1384 : poDriver->SetMetadataItem(GDAL_DMD_SUPPORTED_SQL_DIALECTS, "OGRSQL SQLITE"); 76 : 77 1384 : poDriver->pfnOpen = OGRAVCBinDriverOpen; 78 : 79 1384 : GetGDALDriverManager()->RegisterDriver(poDriver); 80 : }