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