@cpp.js/package-gdal 1.0.0-beta.21 → 1.0.0-beta.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +18 -0
- package/cppjs-package-gdal.podspec +1 -1
- package/cppjs.build.js +1 -0
- package/dist/prebuilt/Android-x86_64/include/cpl_atomic_ops.h +90 -0
- package/dist/prebuilt/Android-x86_64/include/cpl_auto_close.h +73 -0
- package/dist/prebuilt/Android-x86_64/include/cpl_compressor.h +112 -0
- package/dist/prebuilt/Android-x86_64/include/cpl_config.h +215 -0
- package/dist/prebuilt/Android-x86_64/include/cpl_config_extras.h +34 -0
- package/dist/prebuilt/Android-x86_64/include/cpl_conv.h +417 -0
- package/dist/prebuilt/Android-x86_64/include/cpl_csv.h +71 -0
- package/dist/prebuilt/Android-x86_64/include/cpl_error.h +344 -0
- package/dist/prebuilt/Android-x86_64/include/cpl_hash_set.h +83 -0
- package/dist/prebuilt/Android-x86_64/include/cpl_http.h +319 -0
- package/dist/prebuilt/Android-x86_64/include/cpl_json.h +301 -0
- package/dist/prebuilt/Android-x86_64/include/cpl_list.h +59 -0
- package/dist/prebuilt/Android-x86_64/include/cpl_minixml.h +211 -0
- package/dist/prebuilt/Android-x86_64/include/cpl_multiproc.h +241 -0
- package/dist/prebuilt/Android-x86_64/include/cpl_port.h +1182 -0
- package/dist/prebuilt/Android-x86_64/include/cpl_progress.h +49 -0
- package/dist/prebuilt/Android-x86_64/include/cpl_quad_tree.h +105 -0
- package/dist/prebuilt/Android-x86_64/include/cpl_spawn.h +60 -0
- package/dist/prebuilt/Android-x86_64/include/cpl_string.h +863 -0
- package/dist/prebuilt/Android-x86_64/include/cpl_time.h +29 -0
- package/dist/prebuilt/Android-x86_64/include/cpl_virtualmem.h +365 -0
- package/dist/prebuilt/Android-x86_64/include/cpl_vsi.h +830 -0
- package/dist/prebuilt/Android-x86_64/include/cpl_vsi_error.h +55 -0
- package/dist/prebuilt/Android-x86_64/include/cpl_vsi_virtual.h +580 -0
- package/dist/prebuilt/Android-x86_64/include/cplkeywordparser.h +61 -0
- package/dist/prebuilt/Android-x86_64/include/gdal.h +2667 -0
- package/dist/prebuilt/Android-x86_64/include/gdal_alg.h +717 -0
- package/dist/prebuilt/Android-x86_64/include/gdal_alg_priv.h +386 -0
- package/dist/prebuilt/Android-x86_64/include/gdal_csv.h +25 -0
- package/dist/prebuilt/Android-x86_64/include/gdal_frmts.h +236 -0
- package/dist/prebuilt/Android-x86_64/include/gdal_mdreader.h +240 -0
- package/dist/prebuilt/Android-x86_64/include/gdal_pam.h +461 -0
- package/dist/prebuilt/Android-x86_64/include/gdal_priv.h +4599 -0
- package/dist/prebuilt/Android-x86_64/include/gdal_proxy.h +470 -0
- package/dist/prebuilt/Android-x86_64/include/gdal_rat.h +390 -0
- package/dist/prebuilt/Android-x86_64/include/gdal_simplesurf.h +579 -0
- package/dist/prebuilt/Android-x86_64/include/gdal_utils.h +313 -0
- package/dist/prebuilt/Android-x86_64/include/gdal_version.h +33 -0
- package/dist/prebuilt/Android-x86_64/include/gdal_vrt.h +89 -0
- package/dist/prebuilt/Android-x86_64/include/gdalcachedpixelaccessor.h +439 -0
- package/dist/prebuilt/Android-x86_64/include/gdalgeorefpamdataset.h +73 -0
- package/dist/prebuilt/Android-x86_64/include/gdalgrid.h +102 -0
- package/dist/prebuilt/Android-x86_64/include/gdalgrid_priv.h +67 -0
- package/dist/prebuilt/Android-x86_64/include/gdaljp2abstractdataset.h +61 -0
- package/dist/prebuilt/Android-x86_64/include/gdaljp2metadata.h +237 -0
- package/dist/prebuilt/Android-x86_64/include/gdalpansharpen.h +258 -0
- package/dist/prebuilt/Android-x86_64/include/gdalsubdatasetinfo.h +104 -0
- package/dist/prebuilt/Android-x86_64/include/gdalwarper.h +622 -0
- package/dist/prebuilt/Android-x86_64/include/gnm.h +750 -0
- package/dist/prebuilt/Android-x86_64/include/gnm_api.h +101 -0
- package/dist/prebuilt/Android-x86_64/include/gnmgraph.h +258 -0
- package/dist/prebuilt/Android-x86_64/include/memdataset.h +176 -0
- package/dist/prebuilt/Android-x86_64/include/ogr_api.h +1024 -0
- package/dist/prebuilt/Android-x86_64/include/ogr_core.h +1321 -0
- package/dist/prebuilt/Android-x86_64/include/ogr_feature.h +1981 -0
- package/dist/prebuilt/Android-x86_64/include/ogr_featurestyle.h +858 -0
- package/dist/prebuilt/Android-x86_64/include/ogr_geocoding.h +46 -0
- package/dist/prebuilt/Android-x86_64/include/ogr_geomcoordinateprecision.h +79 -0
- package/dist/prebuilt/Android-x86_64/include/ogr_geometry.h +4346 -0
- package/dist/prebuilt/Android-x86_64/include/ogr_p.h +324 -0
- package/dist/prebuilt/Android-x86_64/include/ogr_recordbatch.h +125 -0
- package/dist/prebuilt/Android-x86_64/include/ogr_spatialref.h +1007 -0
- package/dist/prebuilt/Android-x86_64/include/ogr_srs_api.h +1088 -0
- package/dist/prebuilt/Android-x86_64/include/ogr_swq.h +529 -0
- package/dist/prebuilt/Android-x86_64/include/ogrsf_frmts.h +746 -0
- package/dist/prebuilt/Android-x86_64/include/rawdataset.h +255 -0
- package/dist/prebuilt/Android-x86_64/include/vrtdataset.h +2426 -0
- package/dist/prebuilt/Android-x86_64/lib/cmake/gdal/GDAL-targets-release.cmake +19 -0
- package/dist/prebuilt/Android-x86_64/lib/cmake/gdal/GDAL-targets.cmake +106 -0
- package/dist/prebuilt/Android-x86_64/lib/cmake/gdal/GDALConfig.cmake +21 -0
- package/dist/prebuilt/Android-x86_64/lib/cmake/gdal/GDALConfigVersion.cmake +85 -0
- package/dist/prebuilt/Android-x86_64/lib/gdalplugins/drivers.ini +290 -0
- package/dist/prebuilt/Android-x86_64/lib/libgdal.so +0 -0
- package/dist/prebuilt/Android-x86_64/lib/pkgconfig/gdal.pc +17 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/GDALLogoBW.svg +138 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/GDALLogoColor.svg +126 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/GDALLogoGS.svg +126 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/LICENSE.TXT +467 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/MM_m_idofic.csv +321 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/cubewerx_extra.wkt +48 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/default.rsc +0 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/ecw_cs.wkt +1453 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/epsg.wkt +1 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/esri_StatePlane_extra.wkt +631 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/gdalicon.png +0 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/gdalinfo_output.schema.json +346 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/gdalmdiminfo_output.schema.json +321 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/gdaltileindex.xsd +253 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/gdalvrt.xsd +881 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/gfs.xsd +246 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/gml_registry.xml +117 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/gml_registry.xsd +66 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/grib2_center.csv +251 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/grib2_process.csv +102 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/grib2_subcenter.csv +63 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/grib2_table_4_2_0_0.csv +261 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/grib2_table_4_2_0_1.csv +261 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/grib2_table_4_2_0_13.csv +261 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/grib2_table_4_2_0_14.csv +261 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/grib2_table_4_2_0_15.csv +261 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/grib2_table_4_2_0_16.csv +261 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/grib2_table_4_2_0_17.csv +11 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/grib2_table_4_2_0_18.csv +261 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/grib2_table_4_2_0_19.csv +261 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/grib2_table_4_2_0_190.csv +261 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/grib2_table_4_2_0_191.csv +261 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/grib2_table_4_2_0_2.csv +261 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/grib2_table_4_2_0_20.csv +261 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/grib2_table_4_2_0_21.csv +261 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/grib2_table_4_2_0_3.csv +261 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/grib2_table_4_2_0_4.csv +261 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/grib2_table_4_2_0_5.csv +261 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/grib2_table_4_2_0_6.csv +261 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/grib2_table_4_2_0_7.csv +261 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/grib2_table_4_2_10_0.csv +261 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/grib2_table_4_2_10_1.csv +261 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/grib2_table_4_2_10_191.csv +261 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/grib2_table_4_2_10_2.csv +261 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/grib2_table_4_2_10_3.csv +261 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/grib2_table_4_2_10_4.csv +261 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/grib2_table_4_2_1_0.csv +261 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/grib2_table_4_2_1_1.csv +261 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/grib2_table_4_2_1_2.csv +261 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/grib2_table_4_2_20_0.csv +261 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/grib2_table_4_2_20_1.csv +261 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/grib2_table_4_2_20_2.csv +261 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/grib2_table_4_2_2_0.csv +261 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/grib2_table_4_2_2_3.csv +261 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/grib2_table_4_2_2_4.csv +261 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/grib2_table_4_2_2_5.csv +261 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/grib2_table_4_2_2_6.csv +261 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/grib2_table_4_2_3_0.csv +261 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/grib2_table_4_2_3_1.csv +261 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/grib2_table_4_2_3_2.csv +28 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/grib2_table_4_2_3_3.csv +8 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/grib2_table_4_2_3_4.csv +14 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/grib2_table_4_2_3_5.csv +11 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/grib2_table_4_2_3_6.csv +11 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/grib2_table_4_2_4_0.csv +261 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/grib2_table_4_2_4_1.csv +261 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/grib2_table_4_2_4_10.csv +261 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/grib2_table_4_2_4_2.csv +261 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/grib2_table_4_2_4_3.csv +261 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/grib2_table_4_2_4_4.csv +261 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/grib2_table_4_2_4_5.csv +261 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/grib2_table_4_2_4_6.csv +261 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/grib2_table_4_2_4_7.csv +261 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/grib2_table_4_2_4_8.csv +261 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/grib2_table_4_2_4_9.csv +261 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/grib2_table_4_2_local_Canada.csv +5 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/grib2_table_4_2_local_HPC.csv +2 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/grib2_table_4_2_local_MRMS.csv +175 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/grib2_table_4_2_local_NCEP.csv +401 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/grib2_table_4_2_local_NDFD.csv +38 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/grib2_table_4_2_local_index.csv +7 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/grib2_table_4_5.csv +261 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/grib2_table_versions.csv +3 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/gt_datum.csv +229 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/gt_ellips.csv +24 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/header.dxf +1124 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/inspire_cp_BasicPropertyUnit.gfs +57 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/inspire_cp_CadastralBoundary.gfs +60 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/inspire_cp_CadastralParcel.gfs +81 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/inspire_cp_CadastralZoning.gfs +161 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/jpfgdgml_AdmArea.gfs +59 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/jpfgdgml_AdmBdry.gfs +49 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/jpfgdgml_AdmPt.gfs +59 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/jpfgdgml_BldA.gfs +54 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/jpfgdgml_BldL.gfs +54 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/jpfgdgml_Cntr.gfs +54 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/jpfgdgml_CommBdry.gfs +49 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/jpfgdgml_CommPt.gfs +59 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/jpfgdgml_Cstline.gfs +54 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/jpfgdgml_ElevPt.gfs +54 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/jpfgdgml_GCP.gfs +94 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/jpfgdgml_LeveeEdge.gfs +49 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/jpfgdgml_RailCL.gfs +54 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/jpfgdgml_RdASL.gfs +44 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/jpfgdgml_RdArea.gfs +54 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/jpfgdgml_RdCompt.gfs +59 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/jpfgdgml_RdEdg.gfs +59 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/jpfgdgml_RdMgtBdry.gfs +49 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/jpfgdgml_RdSgmtA.gfs +59 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/jpfgdgml_RvrMgtBdry.gfs +49 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/jpfgdgml_SBAPt.gfs +49 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/jpfgdgml_SBArea.gfs +54 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/jpfgdgml_SBBdry.gfs +44 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/jpfgdgml_WA.gfs +54 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/jpfgdgml_WL.gfs +54 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/jpfgdgml_WStrA.gfs +54 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/jpfgdgml_WStrL.gfs +54 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/nitf_spec.xml +3290 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/nitf_spec.xsd +173 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/ogrinfo_output.schema.json +528 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/ogrvrt.xsd +530 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/osmconf.ini +134 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/ozi_datum.csv +131 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/ozi_ellips.csv +35 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/pci_datum.txt +530 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/pci_ellips.txt +129 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/pdfcomposition.xsd +705 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/ruian_vf_ob_v1.gfs +1455 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/ruian_vf_st_uvoh_v1.gfs +86 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/ruian_vf_st_v1.gfs +1489 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/ruian_vf_v1.gfs +2126 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/s57agencies.csv +249 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/s57attributes.csv +484 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/s57expectedinput.csv +1008 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/s57objectclasses.csv +287 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/seed_2d.dgn +0 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/seed_3d.dgn +0 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/stateplane.csv +259 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/tms_LINZAntarticaMapTileGrid.json +190 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/tms_MapML_APSTILE.json +268 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/tms_MapML_CBMTILE.json +346 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/tms_NZTM2000.json +243 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/trailer.dxf +434 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/vdv452.xml +351 -0
- package/dist/prebuilt/Android-x86_64/share/gdal/vdv452.xsd +47 -0
- package/gdal.xcframework/ios-arm64_arm64e/libgdal.a +0 -0
- package/gdal.xcframework/ios-arm64_arm64e_x86_64-simulator/libgdal.a +0 -0
- package/package.json +12 -12
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/******************************************************************************
|
|
2
|
+
* $Id$
|
|
3
|
+
*
|
|
4
|
+
* Project: VSI Virtual File System
|
|
5
|
+
* Purpose: Implement an error system for reporting file system errors.
|
|
6
|
+
* Filesystem errors need to be handled separately from the
|
|
7
|
+
* CPLError architecture because they are potentially ignored.
|
|
8
|
+
* Author: Rob Emanuele, rdemanuele at gmail.com
|
|
9
|
+
*
|
|
10
|
+
******************************************************************************
|
|
11
|
+
* Copyright (c) 2016, Rob Emanuele <rdemanuele at gmail.com>
|
|
12
|
+
*
|
|
13
|
+
* SPDX-License-Identifier: MIT
|
|
14
|
+
****************************************************************************/
|
|
15
|
+
|
|
16
|
+
#ifndef CPL_VSI_ERROR_H_INCLUDED
|
|
17
|
+
#define CPL_VSI_ERROR_H_INCLUDED
|
|
18
|
+
|
|
19
|
+
#include "cpl_port.h"
|
|
20
|
+
#include "cpl_error.h"
|
|
21
|
+
|
|
22
|
+
/* ====================================================================
|
|
23
|
+
Filesystem error codes.
|
|
24
|
+
==================================================================== */
|
|
25
|
+
|
|
26
|
+
CPL_C_START
|
|
27
|
+
|
|
28
|
+
typedef int VSIErrorNum;
|
|
29
|
+
|
|
30
|
+
#define VSIE_None 0
|
|
31
|
+
#define VSIE_FileError 1
|
|
32
|
+
#define VSIE_HttpError 2
|
|
33
|
+
|
|
34
|
+
#define VSIE_AWSError 5
|
|
35
|
+
#define VSIE_AWSAccessDenied 6
|
|
36
|
+
#define VSIE_AWSBucketNotFound 7
|
|
37
|
+
#define VSIE_AWSObjectNotFound 8
|
|
38
|
+
#define VSIE_AWSInvalidCredentials 9
|
|
39
|
+
#define VSIE_AWSSignatureDoesNotMatch 10
|
|
40
|
+
|
|
41
|
+
void CPL_DLL VSIError(VSIErrorNum err_no, CPL_FORMAT_STRING(const char *fmt),
|
|
42
|
+
...) CPL_PRINT_FUNC_FORMAT(2, 3);
|
|
43
|
+
|
|
44
|
+
void CPL_DLL CPL_STDCALL VSIErrorReset(void);
|
|
45
|
+
VSIErrorNum CPL_DLL CPL_STDCALL VSIGetLastErrorNo(void);
|
|
46
|
+
const char CPL_DLL *CPL_STDCALL VSIGetLastErrorMsg(void);
|
|
47
|
+
|
|
48
|
+
int CPL_DLL CPL_STDCALL VSIToCPLError(CPLErr eErrClass,
|
|
49
|
+
CPLErrorNum eDefaultErrorNo);
|
|
50
|
+
void CPL_DLL VSIToCPLErrorWithMsg(CPLErr eErrClass, CPLErrorNum eDefaultErrorNo,
|
|
51
|
+
const char *pszMsg);
|
|
52
|
+
|
|
53
|
+
CPL_C_END
|
|
54
|
+
|
|
55
|
+
#endif /* CPL_VSI_ERROR_H_INCLUDED */
|
|
@@ -0,0 +1,580 @@
|
|
|
1
|
+
/******************************************************************************
|
|
2
|
+
* $Id$
|
|
3
|
+
*
|
|
4
|
+
* Project: VSI Virtual File System
|
|
5
|
+
* Purpose: Declarations for classes related to the virtual filesystem.
|
|
6
|
+
* These would only be normally required by applications implementing
|
|
7
|
+
* their own virtual file system classes which should be rare.
|
|
8
|
+
* The class interface may be fragile through versions.
|
|
9
|
+
* Author: Frank Warmerdam, warmerdam@pobox.com
|
|
10
|
+
*
|
|
11
|
+
******************************************************************************
|
|
12
|
+
* Copyright (c) 2005, Frank Warmerdam <warmerdam@pobox.com>
|
|
13
|
+
* Copyright (c) 2010-2014, Even Rouault <even dot rouault at spatialys.com>
|
|
14
|
+
*
|
|
15
|
+
* SPDX-License-Identifier: MIT
|
|
16
|
+
****************************************************************************/
|
|
17
|
+
|
|
18
|
+
#ifndef CPL_VSI_VIRTUAL_H_INCLUDED
|
|
19
|
+
#define CPL_VSI_VIRTUAL_H_INCLUDED
|
|
20
|
+
|
|
21
|
+
#include "cpl_vsi.h"
|
|
22
|
+
#include "cpl_vsi_error.h"
|
|
23
|
+
#include "cpl_string.h"
|
|
24
|
+
#include "cpl_multiproc.h"
|
|
25
|
+
|
|
26
|
+
#include <map>
|
|
27
|
+
#include <memory>
|
|
28
|
+
#include <vector>
|
|
29
|
+
#include <string>
|
|
30
|
+
|
|
31
|
+
// To avoid aliasing to GetDiskFreeSpace to GetDiskFreeSpaceA on Windows
|
|
32
|
+
#ifdef GetDiskFreeSpace
|
|
33
|
+
#undef GetDiskFreeSpace
|
|
34
|
+
#endif
|
|
35
|
+
|
|
36
|
+
// To avoid aliasing to CopyFile to CopyFileA on Windows
|
|
37
|
+
#ifdef CopyFile
|
|
38
|
+
#undef CopyFile
|
|
39
|
+
#endif
|
|
40
|
+
|
|
41
|
+
/************************************************************************/
|
|
42
|
+
/* VSIVirtualHandle */
|
|
43
|
+
/************************************************************************/
|
|
44
|
+
|
|
45
|
+
/** Virtual file handle */
|
|
46
|
+
struct CPL_DLL VSIVirtualHandle
|
|
47
|
+
{
|
|
48
|
+
public:
|
|
49
|
+
virtual int Seek(vsi_l_offset nOffset, int nWhence) = 0;
|
|
50
|
+
virtual vsi_l_offset Tell() = 0;
|
|
51
|
+
virtual size_t Read(void *pBuffer, size_t nSize, size_t nCount) = 0;
|
|
52
|
+
virtual int ReadMultiRange(int nRanges, void **ppData,
|
|
53
|
+
const vsi_l_offset *panOffsets,
|
|
54
|
+
const size_t *panSizes);
|
|
55
|
+
|
|
56
|
+
/** This method is called when code plans to access soon one or several
|
|
57
|
+
* ranges in a file. Some file systems may be able to use this hint to
|
|
58
|
+
* for example asynchronously start such requests.
|
|
59
|
+
*
|
|
60
|
+
* Offsets may be given in a non-increasing order, and may potentially
|
|
61
|
+
* overlap.
|
|
62
|
+
*
|
|
63
|
+
* @param nRanges Size of the panOffsets and panSizes arrays.
|
|
64
|
+
* @param panOffsets Array containing the start offset of each range.
|
|
65
|
+
* @param panSizes Array containing the size (in bytes) of each range.
|
|
66
|
+
* @since GDAL 3.7
|
|
67
|
+
*/
|
|
68
|
+
virtual void AdviseRead(CPL_UNUSED int nRanges,
|
|
69
|
+
CPL_UNUSED const vsi_l_offset *panOffsets,
|
|
70
|
+
CPL_UNUSED const size_t *panSizes)
|
|
71
|
+
{
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/** Return the total maximum number of bytes that AdviseRead() can handle
|
|
75
|
+
* at once.
|
|
76
|
+
*
|
|
77
|
+
* Some AdviseRead() implementations may give up if the sum of the values
|
|
78
|
+
* in the panSizes[] array provided to AdviseRead() exceeds a limit.
|
|
79
|
+
*
|
|
80
|
+
* Callers might use that threshold to optimize the efficiency of
|
|
81
|
+
* AdviseRead().
|
|
82
|
+
*
|
|
83
|
+
* A returned value of 0 indicates a unknown limit.
|
|
84
|
+
* @since GDAL 3.9
|
|
85
|
+
*/
|
|
86
|
+
virtual size_t GetAdviseReadTotalBytesLimit() const
|
|
87
|
+
{
|
|
88
|
+
return 0;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
virtual size_t Write(const void *pBuffer, size_t nSize, size_t nCount) = 0;
|
|
92
|
+
|
|
93
|
+
int Printf(CPL_FORMAT_STRING(const char *pszFormat), ...)
|
|
94
|
+
CPL_PRINT_FUNC_FORMAT(2, 3);
|
|
95
|
+
|
|
96
|
+
virtual void ClearErr() = 0;
|
|
97
|
+
|
|
98
|
+
virtual int Eof() = 0;
|
|
99
|
+
|
|
100
|
+
virtual int Error() = 0;
|
|
101
|
+
|
|
102
|
+
virtual int Flush()
|
|
103
|
+
{
|
|
104
|
+
return 0;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
virtual int Close() = 0;
|
|
108
|
+
// Base implementation that only supports file extension.
|
|
109
|
+
virtual int Truncate(vsi_l_offset nNewSize);
|
|
110
|
+
|
|
111
|
+
virtual void *GetNativeFileDescriptor()
|
|
112
|
+
{
|
|
113
|
+
return nullptr;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
virtual VSIRangeStatus GetRangeStatus(CPL_UNUSED vsi_l_offset nOffset,
|
|
117
|
+
CPL_UNUSED vsi_l_offset nLength)
|
|
118
|
+
{
|
|
119
|
+
return VSI_RANGE_STATUS_UNKNOWN;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
virtual bool HasPRead() const;
|
|
123
|
+
virtual size_t PRead(void *pBuffer, size_t nSize,
|
|
124
|
+
vsi_l_offset nOffset) const;
|
|
125
|
+
|
|
126
|
+
/** Ask current operations to be interrupted.
|
|
127
|
+
* Implementations must be thread-safe, as this will typically be called
|
|
128
|
+
* from another thread than the active one for this file.
|
|
129
|
+
*/
|
|
130
|
+
virtual void Interrupt()
|
|
131
|
+
{
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// NOTE: when adding new methods, besides the "actual" implementations,
|
|
135
|
+
// also consider the VSICachedFile one.
|
|
136
|
+
|
|
137
|
+
virtual ~VSIVirtualHandle()
|
|
138
|
+
{
|
|
139
|
+
}
|
|
140
|
+
};
|
|
141
|
+
|
|
142
|
+
/************************************************************************/
|
|
143
|
+
/* VSIVirtualHandleCloser */
|
|
144
|
+
/************************************************************************/
|
|
145
|
+
|
|
146
|
+
/** Helper close to use with a std:unique_ptr<VSIVirtualHandle>,
|
|
147
|
+
* such as VSIVirtualHandleUniquePtr. */
|
|
148
|
+
struct VSIVirtualHandleCloser
|
|
149
|
+
{
|
|
150
|
+
/** Operator () that closes and deletes the file handle. */
|
|
151
|
+
void operator()(VSIVirtualHandle *poHandle)
|
|
152
|
+
{
|
|
153
|
+
if (poHandle)
|
|
154
|
+
{
|
|
155
|
+
poHandle->Close();
|
|
156
|
+
delete poHandle;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
};
|
|
160
|
+
|
|
161
|
+
/** Unique pointer of VSIVirtualHandle that calls the Close() method */
|
|
162
|
+
typedef std::unique_ptr<VSIVirtualHandle, VSIVirtualHandleCloser>
|
|
163
|
+
VSIVirtualHandleUniquePtr;
|
|
164
|
+
|
|
165
|
+
/************************************************************************/
|
|
166
|
+
/* VSIFilesystemHandler */
|
|
167
|
+
/************************************************************************/
|
|
168
|
+
|
|
169
|
+
#ifndef DOXYGEN_SKIP
|
|
170
|
+
class CPL_DLL VSIFilesystemHandler
|
|
171
|
+
{
|
|
172
|
+
|
|
173
|
+
public:
|
|
174
|
+
virtual ~VSIFilesystemHandler()
|
|
175
|
+
{
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
VSIVirtualHandle *Open(const char *pszFilename, const char *pszAccess);
|
|
179
|
+
|
|
180
|
+
virtual VSIVirtualHandle *Open(const char *pszFilename,
|
|
181
|
+
const char *pszAccess, bool bSetError,
|
|
182
|
+
CSLConstList papszOptions) = 0;
|
|
183
|
+
virtual int Stat(const char *pszFilename, VSIStatBufL *pStatBuf,
|
|
184
|
+
int nFlags) = 0;
|
|
185
|
+
|
|
186
|
+
virtual int Unlink(const char *pszFilename)
|
|
187
|
+
{
|
|
188
|
+
(void)pszFilename;
|
|
189
|
+
errno = ENOENT;
|
|
190
|
+
return -1;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
virtual int *UnlinkBatch(CSLConstList papszFiles);
|
|
194
|
+
|
|
195
|
+
virtual int Mkdir(const char *pszDirname, long nMode)
|
|
196
|
+
{
|
|
197
|
+
(void)pszDirname;
|
|
198
|
+
(void)nMode;
|
|
199
|
+
errno = ENOENT;
|
|
200
|
+
return -1;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
virtual int Rmdir(const char *pszDirname)
|
|
204
|
+
{
|
|
205
|
+
(void)pszDirname;
|
|
206
|
+
errno = ENOENT;
|
|
207
|
+
return -1;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
virtual int RmdirRecursive(const char *pszDirname);
|
|
211
|
+
|
|
212
|
+
char **ReadDir(const char *pszDirname)
|
|
213
|
+
{
|
|
214
|
+
return ReadDirEx(pszDirname, 0);
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
virtual char **ReadDirEx(const char * /*pszDirname*/, int /* nMaxFiles */)
|
|
218
|
+
{
|
|
219
|
+
return nullptr;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
virtual char **SiblingFiles(const char * /*pszFilename*/)
|
|
223
|
+
{
|
|
224
|
+
return nullptr;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
virtual int Rename(const char *oldpath, const char *newpath)
|
|
228
|
+
{
|
|
229
|
+
(void)oldpath;
|
|
230
|
+
(void)newpath;
|
|
231
|
+
errno = ENOENT;
|
|
232
|
+
return -1;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
virtual int IsCaseSensitive(const char *pszFilename)
|
|
236
|
+
{
|
|
237
|
+
(void)pszFilename;
|
|
238
|
+
return TRUE;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
virtual GIntBig GetDiskFreeSpace(const char * /* pszDirname */)
|
|
242
|
+
{
|
|
243
|
+
return -1;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
virtual int SupportsSparseFiles(const char * /* pszPath */)
|
|
247
|
+
{
|
|
248
|
+
return FALSE;
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
virtual int HasOptimizedReadMultiRange(const char * /* pszPath */)
|
|
252
|
+
{
|
|
253
|
+
return FALSE;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
virtual const char *GetActualURL(const char * /*pszFilename*/)
|
|
257
|
+
{
|
|
258
|
+
return nullptr;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
virtual const char *GetOptions()
|
|
262
|
+
{
|
|
263
|
+
return nullptr;
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
virtual char *GetSignedURL(const char * /*pszFilename*/,
|
|
267
|
+
CSLConstList /* papszOptions */)
|
|
268
|
+
{
|
|
269
|
+
return nullptr;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
virtual bool Sync(const char *pszSource, const char *pszTarget,
|
|
273
|
+
const char *const *papszOptions,
|
|
274
|
+
GDALProgressFunc pProgressFunc, void *pProgressData,
|
|
275
|
+
char ***ppapszOutputs);
|
|
276
|
+
|
|
277
|
+
virtual int CopyFile(const char *pszSource, const char *pszTarget,
|
|
278
|
+
VSILFILE *fpSource, vsi_l_offset nSourceSize,
|
|
279
|
+
const char *const *papszOptions,
|
|
280
|
+
GDALProgressFunc pProgressFunc, void *pProgressData);
|
|
281
|
+
|
|
282
|
+
virtual int
|
|
283
|
+
CopyFileRestartable(const char *pszSource, const char *pszTarget,
|
|
284
|
+
const char *pszInputPayload, char **ppszOutputPayload,
|
|
285
|
+
CSLConstList papszOptions,
|
|
286
|
+
GDALProgressFunc pProgressFunc, void *pProgressData);
|
|
287
|
+
|
|
288
|
+
virtual VSIDIR *OpenDir(const char *pszPath, int nRecurseDepth,
|
|
289
|
+
const char *const *papszOptions);
|
|
290
|
+
|
|
291
|
+
virtual char **GetFileMetadata(const char *pszFilename,
|
|
292
|
+
const char *pszDomain,
|
|
293
|
+
CSLConstList papszOptions);
|
|
294
|
+
|
|
295
|
+
virtual bool SetFileMetadata(const char *pszFilename,
|
|
296
|
+
CSLConstList papszMetadata,
|
|
297
|
+
const char *pszDomain,
|
|
298
|
+
CSLConstList papszOptions);
|
|
299
|
+
|
|
300
|
+
virtual bool
|
|
301
|
+
MultipartUploadGetCapabilities(int *pbNonSequentialUploadSupported,
|
|
302
|
+
int *pbParallelUploadSupported,
|
|
303
|
+
int *pbAbortSupported, size_t *pnMinPartSize,
|
|
304
|
+
size_t *pnMaxPartSize, int *pnMaxPartCount);
|
|
305
|
+
|
|
306
|
+
virtual char *MultipartUploadStart(const char *pszFilename,
|
|
307
|
+
CSLConstList papszOptions);
|
|
308
|
+
|
|
309
|
+
virtual char *MultipartUploadAddPart(const char *pszFilename,
|
|
310
|
+
const char *pszUploadId,
|
|
311
|
+
int nPartNumber,
|
|
312
|
+
vsi_l_offset nFileOffset,
|
|
313
|
+
const void *pData, size_t nDataLength,
|
|
314
|
+
CSLConstList papszOptions);
|
|
315
|
+
|
|
316
|
+
virtual bool
|
|
317
|
+
MultipartUploadEnd(const char *pszFilename, const char *pszUploadId,
|
|
318
|
+
size_t nPartIdsCount, const char *const *apszPartIds,
|
|
319
|
+
vsi_l_offset nTotalSize, CSLConstList papszOptions);
|
|
320
|
+
|
|
321
|
+
virtual bool MultipartUploadAbort(const char *pszFilename,
|
|
322
|
+
const char *pszUploadId,
|
|
323
|
+
CSLConstList papszOptions);
|
|
324
|
+
|
|
325
|
+
virtual bool AbortPendingUploads(const char * /*pszFilename*/)
|
|
326
|
+
{
|
|
327
|
+
return true;
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
virtual std::string
|
|
331
|
+
GetStreamingFilename(const std::string &osFilename) const
|
|
332
|
+
{
|
|
333
|
+
return osFilename;
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
virtual std::string
|
|
337
|
+
GetNonStreamingFilename(const std::string &osFilename) const
|
|
338
|
+
{
|
|
339
|
+
return osFilename;
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
/** Return the canonical filename.
|
|
343
|
+
*
|
|
344
|
+
* May be implemented by case-insensitive filesystems
|
|
345
|
+
* (currently Win32 and MacOSX)
|
|
346
|
+
* to return the filename with its actual case (i.e. the one that would
|
|
347
|
+
* be used when listing the content of the directory).
|
|
348
|
+
*/
|
|
349
|
+
virtual std::string
|
|
350
|
+
GetCanonicalFilename(const std::string &osFilename) const
|
|
351
|
+
{
|
|
352
|
+
return osFilename;
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
virtual bool IsLocal(const char * /* pszPath */)
|
|
356
|
+
{
|
|
357
|
+
return true;
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
virtual bool SupportsSequentialWrite(const char * /* pszPath */,
|
|
361
|
+
bool /* bAllowLocalTempFile */)
|
|
362
|
+
{
|
|
363
|
+
return true;
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
virtual bool SupportsRandomWrite(const char * /* pszPath */,
|
|
367
|
+
bool /* bAllowLocalTempFile */)
|
|
368
|
+
{
|
|
369
|
+
return true;
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
virtual bool SupportsRead(const char * /* pszPath */)
|
|
373
|
+
{
|
|
374
|
+
return true;
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
virtual VSIFilesystemHandler *Duplicate(const char * /* pszPrefix */)
|
|
378
|
+
{
|
|
379
|
+
CPLError(CE_Failure, CPLE_NotSupported,
|
|
380
|
+
"Duplicate() not supported on this file system");
|
|
381
|
+
return nullptr;
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
/** Return the directory separator.
|
|
385
|
+
*
|
|
386
|
+
* Default is forward slash. The only exception currently is the Windows
|
|
387
|
+
* file system which returns anti-slash, unless the specified path is of the
|
|
388
|
+
* form "{drive_letter}:/{rest_of_the_path}".
|
|
389
|
+
*/
|
|
390
|
+
virtual const char *GetDirectorySeparator(CPL_UNUSED const char *pszPath)
|
|
391
|
+
{
|
|
392
|
+
return "/";
|
|
393
|
+
}
|
|
394
|
+
};
|
|
395
|
+
#endif /* #ifndef DOXYGEN_SKIP */
|
|
396
|
+
|
|
397
|
+
/************************************************************************/
|
|
398
|
+
/* VSIFileManager */
|
|
399
|
+
/************************************************************************/
|
|
400
|
+
|
|
401
|
+
#ifndef DOXYGEN_SKIP
|
|
402
|
+
class CPL_DLL VSIFileManager
|
|
403
|
+
{
|
|
404
|
+
private:
|
|
405
|
+
VSIFilesystemHandler *poDefaultHandler = nullptr;
|
|
406
|
+
std::map<std::string, VSIFilesystemHandler *> oHandlers{};
|
|
407
|
+
|
|
408
|
+
VSIFileManager();
|
|
409
|
+
|
|
410
|
+
static VSIFileManager *Get();
|
|
411
|
+
|
|
412
|
+
CPL_DISALLOW_COPY_ASSIGN(VSIFileManager)
|
|
413
|
+
|
|
414
|
+
public:
|
|
415
|
+
~VSIFileManager();
|
|
416
|
+
|
|
417
|
+
static VSIFilesystemHandler *GetHandler(const char *);
|
|
418
|
+
static void InstallHandler(const std::string &osPrefix,
|
|
419
|
+
VSIFilesystemHandler *);
|
|
420
|
+
static void RemoveHandler(const std::string &osPrefix);
|
|
421
|
+
|
|
422
|
+
static char **GetPrefixes();
|
|
423
|
+
};
|
|
424
|
+
#endif /* #ifndef DOXYGEN_SKIP */
|
|
425
|
+
|
|
426
|
+
/************************************************************************/
|
|
427
|
+
/* ==================================================================== */
|
|
428
|
+
/* VSIArchiveFilesystemHandler */
|
|
429
|
+
/* ==================================================================== */
|
|
430
|
+
/************************************************************************/
|
|
431
|
+
|
|
432
|
+
#ifndef DOXYGEN_SKIP
|
|
433
|
+
|
|
434
|
+
class VSIArchiveEntryFileOffset
|
|
435
|
+
{
|
|
436
|
+
public:
|
|
437
|
+
virtual ~VSIArchiveEntryFileOffset();
|
|
438
|
+
};
|
|
439
|
+
|
|
440
|
+
typedef struct
|
|
441
|
+
{
|
|
442
|
+
char *fileName;
|
|
443
|
+
vsi_l_offset uncompressed_size;
|
|
444
|
+
VSIArchiveEntryFileOffset *file_pos;
|
|
445
|
+
int bIsDir;
|
|
446
|
+
GIntBig nModifiedTime;
|
|
447
|
+
} VSIArchiveEntry;
|
|
448
|
+
|
|
449
|
+
class VSIArchiveContent
|
|
450
|
+
{
|
|
451
|
+
public:
|
|
452
|
+
time_t mTime = 0;
|
|
453
|
+
vsi_l_offset nFileSize = 0;
|
|
454
|
+
int nEntries = 0;
|
|
455
|
+
VSIArchiveEntry *entries = nullptr;
|
|
456
|
+
|
|
457
|
+
~VSIArchiveContent();
|
|
458
|
+
};
|
|
459
|
+
|
|
460
|
+
class VSIArchiveReader
|
|
461
|
+
{
|
|
462
|
+
public:
|
|
463
|
+
virtual ~VSIArchiveReader();
|
|
464
|
+
|
|
465
|
+
virtual int GotoFirstFile() = 0;
|
|
466
|
+
virtual int GotoNextFile() = 0;
|
|
467
|
+
virtual VSIArchiveEntryFileOffset *GetFileOffset() = 0;
|
|
468
|
+
virtual GUIntBig GetFileSize() = 0;
|
|
469
|
+
virtual CPLString GetFileName() = 0;
|
|
470
|
+
virtual GIntBig GetModifiedTime() = 0;
|
|
471
|
+
virtual int GotoFileOffset(VSIArchiveEntryFileOffset *pOffset) = 0;
|
|
472
|
+
};
|
|
473
|
+
|
|
474
|
+
class VSIArchiveFilesystemHandler : public VSIFilesystemHandler
|
|
475
|
+
{
|
|
476
|
+
CPL_DISALLOW_COPY_ASSIGN(VSIArchiveFilesystemHandler)
|
|
477
|
+
|
|
478
|
+
protected:
|
|
479
|
+
CPLMutex *hMutex = nullptr;
|
|
480
|
+
/* We use a cache that contains the list of files contained in a VSIArchive
|
|
481
|
+
* file as */
|
|
482
|
+
/* unarchive.c is quite inefficient in listing them. This speeds up access
|
|
483
|
+
* to VSIArchive files */
|
|
484
|
+
/* containing ~1000 files like a CADRG product */
|
|
485
|
+
std::map<CPLString, VSIArchiveContent *> oFileList{};
|
|
486
|
+
|
|
487
|
+
virtual const char *GetPrefix() = 0;
|
|
488
|
+
virtual std::vector<CPLString> GetExtensions() = 0;
|
|
489
|
+
virtual VSIArchiveReader *CreateReader(const char *pszArchiveFileName) = 0;
|
|
490
|
+
|
|
491
|
+
public:
|
|
492
|
+
VSIArchiveFilesystemHandler();
|
|
493
|
+
virtual ~VSIArchiveFilesystemHandler();
|
|
494
|
+
|
|
495
|
+
int Stat(const char *pszFilename, VSIStatBufL *pStatBuf,
|
|
496
|
+
int nFlags) override;
|
|
497
|
+
int Unlink(const char *pszFilename) override;
|
|
498
|
+
int Rename(const char *oldpath, const char *newpath) override;
|
|
499
|
+
int Mkdir(const char *pszDirname, long nMode) override;
|
|
500
|
+
int Rmdir(const char *pszDirname) override;
|
|
501
|
+
char **ReadDirEx(const char *pszDirname, int nMaxFiles) override;
|
|
502
|
+
|
|
503
|
+
virtual const VSIArchiveContent *
|
|
504
|
+
GetContentOfArchive(const char *archiveFilename,
|
|
505
|
+
VSIArchiveReader *poReader = nullptr);
|
|
506
|
+
virtual char *SplitFilename(const char *pszFilename,
|
|
507
|
+
CPLString &osFileInArchive,
|
|
508
|
+
int bCheckMainFileExists);
|
|
509
|
+
virtual VSIArchiveReader *OpenArchiveFile(const char *archiveFilename,
|
|
510
|
+
const char *fileInArchiveName);
|
|
511
|
+
virtual int FindFileInArchive(const char *archiveFilename,
|
|
512
|
+
const char *fileInArchiveName,
|
|
513
|
+
const VSIArchiveEntry **archiveEntry);
|
|
514
|
+
|
|
515
|
+
virtual bool IsLocal(const char *pszPath) override;
|
|
516
|
+
|
|
517
|
+
virtual bool
|
|
518
|
+
SupportsSequentialWrite(const char * /* pszPath */,
|
|
519
|
+
bool /* bAllowLocalTempFile */) override
|
|
520
|
+
{
|
|
521
|
+
return false;
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
virtual bool SupportsRandomWrite(const char * /* pszPath */,
|
|
525
|
+
bool /* bAllowLocalTempFile */) override
|
|
526
|
+
{
|
|
527
|
+
return false;
|
|
528
|
+
}
|
|
529
|
+
};
|
|
530
|
+
|
|
531
|
+
/************************************************************************/
|
|
532
|
+
/* VSIDIR */
|
|
533
|
+
/************************************************************************/
|
|
534
|
+
|
|
535
|
+
struct CPL_DLL VSIDIR
|
|
536
|
+
{
|
|
537
|
+
VSIDIR() = default;
|
|
538
|
+
virtual ~VSIDIR();
|
|
539
|
+
|
|
540
|
+
virtual const VSIDIREntry *NextDirEntry() = 0;
|
|
541
|
+
|
|
542
|
+
private:
|
|
543
|
+
VSIDIR(const VSIDIR &) = delete;
|
|
544
|
+
VSIDIR &operator=(const VSIDIR &) = delete;
|
|
545
|
+
};
|
|
546
|
+
|
|
547
|
+
#endif /* #ifndef DOXYGEN_SKIP */
|
|
548
|
+
|
|
549
|
+
VSIVirtualHandle CPL_DLL *
|
|
550
|
+
VSICreateBufferedReaderHandle(VSIVirtualHandle *poBaseHandle);
|
|
551
|
+
VSIVirtualHandle *
|
|
552
|
+
VSICreateBufferedReaderHandle(VSIVirtualHandle *poBaseHandle,
|
|
553
|
+
const GByte *pabyBeginningContent,
|
|
554
|
+
vsi_l_offset nCheatFileSize);
|
|
555
|
+
constexpr int VSI_CACHED_DEFAULT_CHUNK_SIZE = 32768;
|
|
556
|
+
VSIVirtualHandle CPL_DLL *
|
|
557
|
+
VSICreateCachedFile(VSIVirtualHandle *poBaseHandle,
|
|
558
|
+
size_t nChunkSize = VSI_CACHED_DEFAULT_CHUNK_SIZE,
|
|
559
|
+
size_t nCacheSize = 0);
|
|
560
|
+
|
|
561
|
+
const int CPL_DEFLATE_TYPE_GZIP = 0;
|
|
562
|
+
const int CPL_DEFLATE_TYPE_ZLIB = 1;
|
|
563
|
+
const int CPL_DEFLATE_TYPE_RAW_DEFLATE = 2;
|
|
564
|
+
VSIVirtualHandle CPL_DLL *VSICreateGZipWritable(VSIVirtualHandle *poBaseHandle,
|
|
565
|
+
int nDeflateType,
|
|
566
|
+
int bAutoCloseBaseHandle);
|
|
567
|
+
|
|
568
|
+
VSIVirtualHandle *VSICreateGZipWritable(VSIVirtualHandle *poBaseHandle,
|
|
569
|
+
int nDeflateType,
|
|
570
|
+
bool bAutoCloseBaseHandle, int nThreads,
|
|
571
|
+
size_t nChunkSize,
|
|
572
|
+
size_t nSOZIPIndexEltSize,
|
|
573
|
+
std::vector<uint8_t> *panSOZIPIndex);
|
|
574
|
+
|
|
575
|
+
VSIVirtualHandle *
|
|
576
|
+
VSICreateUploadOnCloseFile(VSIVirtualHandleUniquePtr &&poWritableHandle,
|
|
577
|
+
VSIVirtualHandleUniquePtr &&poTmpFile,
|
|
578
|
+
const std::string &osTmpFilename);
|
|
579
|
+
|
|
580
|
+
#endif /* ndef CPL_VSI_VIRTUAL_H_INCLUDED */
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/******************************************************************************
|
|
2
|
+
* $Id$
|
|
3
|
+
*
|
|
4
|
+
* Project: Common Portability Library
|
|
5
|
+
* Purpose: Implementation of CPLKeywordParser - a class for parsing
|
|
6
|
+
* the keyword format used for files like QuickBird .RPB files.
|
|
7
|
+
* This is a slight variation on the NASAKeywordParser used for
|
|
8
|
+
* the PDS/ISIS2/ISIS3 formats.
|
|
9
|
+
* Author: Frank Warmerdam <warmerdam@pobox.com
|
|
10
|
+
*
|
|
11
|
+
******************************************************************************
|
|
12
|
+
* Copyright (c) 2008, Frank Warmerdam <warmerdam@pobox.com>
|
|
13
|
+
*
|
|
14
|
+
* SPDX-License-Identifier: MIT
|
|
15
|
+
****************************************************************************/
|
|
16
|
+
|
|
17
|
+
#ifndef CPL_KEYWORD_PARSER
|
|
18
|
+
#define CPL_KEYWORD_PARSER
|
|
19
|
+
|
|
20
|
+
#include "cpl_string.h"
|
|
21
|
+
|
|
22
|
+
/************************************************************************/
|
|
23
|
+
/* ==================================================================== */
|
|
24
|
+
/* CPLKeywordParser */
|
|
25
|
+
/* ==================================================================== */
|
|
26
|
+
/************************************************************************/
|
|
27
|
+
|
|
28
|
+
/*! @cond Doxygen_Suppress */
|
|
29
|
+
|
|
30
|
+
class CPL_DLL CPLKeywordParser
|
|
31
|
+
{
|
|
32
|
+
char **papszKeywordList = nullptr;
|
|
33
|
+
|
|
34
|
+
CPLString osHeaderText{};
|
|
35
|
+
const char *pszHeaderNext = nullptr;
|
|
36
|
+
|
|
37
|
+
void SkipWhite();
|
|
38
|
+
bool ReadWord(CPLString &osWord);
|
|
39
|
+
bool ReadPair(CPLString &osName, CPLString &osValue);
|
|
40
|
+
bool ReadGroup(const char *pszPathPrefix, int nRecLevel);
|
|
41
|
+
|
|
42
|
+
CPL_DISALLOW_COPY_ASSIGN(CPLKeywordParser)
|
|
43
|
+
|
|
44
|
+
public:
|
|
45
|
+
CPLKeywordParser();
|
|
46
|
+
~CPLKeywordParser();
|
|
47
|
+
|
|
48
|
+
int Ingest(VSILFILE *fp);
|
|
49
|
+
|
|
50
|
+
const char *GetKeyword(const char *pszPath,
|
|
51
|
+
const char *pszDefault = nullptr);
|
|
52
|
+
|
|
53
|
+
char **GetAllKeywords()
|
|
54
|
+
{
|
|
55
|
+
return papszKeywordList;
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
/*! @endcond */
|
|
60
|
+
|
|
61
|
+
#endif /* def CPL_KEYWORD_PARSER */
|