From 48b513fc421e25d26fc5afda68d67758f2184fd7 Mon Sep 17 00:00:00 2001 From: scott Date: Tue, 6 Jul 2021 22:07:00 -0500 Subject: [PATCH] throw exception from c++ GdalAccessor instead of exit(1) Leads to an OSError being thrown instead of shutting down the whole program --- .../DataAccessor/bindings/DataAccessormodule.cpp | 10 ++++++++++ .../InterleavedAccessor/include/GDALAccessor.h | 1 + .../ImageApi/InterleavedAccessor/src/GDALAccessor.cpp | 5 +++-- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/components/iscesys/ImageApi/DataAccessor/bindings/DataAccessormodule.cpp b/components/iscesys/ImageApi/DataAccessor/bindings/DataAccessormodule.cpp index 2f34c76..6beb17e 100644 --- a/components/iscesys/ImageApi/DataAccessor/bindings/DataAccessormodule.cpp +++ b/components/iscesys/ImageApi/DataAccessor/bindings/DataAccessormodule.cpp @@ -135,9 +135,19 @@ createAccessor_C(PyObject* self, PyObject* args) exit(1); } if (casterCh[0] == '\0') + { + try { ptDataAccessor = (uint64_t) AF->createAccessor(filename, filemode, size, bands, width, scheme); + } + catch(const std::exception& e) + { + std::cerr << e.what() << '\n'; + PyErr_SetString(PyExc_OSError, "Failed to created DataAccessor."); + return NULL; + } + } else if (casterCh[0] != '\0' && PyDict_Size(dict) == 0) { diff --git a/components/iscesys/ImageApi/InterleavedAccessor/include/GDALAccessor.h b/components/iscesys/ImageApi/InterleavedAccessor/include/GDALAccessor.h index 1707cf7..0161f3b 100644 --- a/components/iscesys/ImageApi/InterleavedAccessor/include/GDALAccessor.h +++ b/components/iscesys/ImageApi/InterleavedAccessor/include/GDALAccessor.h @@ -9,6 +9,7 @@ #endif #include +#include #include "InterleavedBase.h" #include #include "gdal_priv.h" diff --git a/components/iscesys/ImageApi/InterleavedAccessor/src/GDALAccessor.cpp b/components/iscesys/ImageApi/InterleavedAccessor/src/GDALAccessor.cpp index 4cb0a4c..e546a5c 100644 --- a/components/iscesys/ImageApi/InterleavedAccessor/src/GDALAccessor.cpp +++ b/components/iscesys/ImageApi/InterleavedAccessor/src/GDALAccessor.cpp @@ -71,10 +71,11 @@ GDALAccessor::openFile (string filename, string accessMode, GDALDataset ** fd) std::cout << "GDAL open (R): " << filename << std::endl; (*fd) = (GDALDataset *) GDALOpenShared (filename.c_str (), GA_ReadOnly); if ((*fd) == NULL) - { + { cout << "Error. Cannot open the file " << filename << " in " << accessMode << " mode." << endl; - ERR_MESSAGE + throw runtime_error("GDAL file open error."); + // ERR_MESSAGE ; } }