From f3029bb3cfed9e9727ef161ebaaa1e358ef72025 Mon Sep 17 00:00:00 2001 From: Gareth Evans Date: Sat, 4 Mar 2017 19:35:03 +0000 Subject: [PATCH] Detect and handle errors in topo data --- inputs.cc | 22 ++++++++++++++-------- inputs.hh | 4 ++-- main.cc | 14 +++++++++++--- 3 files changed, 27 insertions(+), 13 deletions(-) diff --git a/inputs.cc b/inputs.cc index 92312da..a18d7a8 100644 --- a/inputs.cc +++ b/inputs.cc @@ -364,8 +364,8 @@ int LoadSDF_SDF(char *name) /* Parse filename for minimum latitude and longitude values */ - sscanf(sdf_file, "%d:%d:%d:%d", &minlat, &maxlat, &minlon, - &maxlon); + sscanf(sdf_file, "%d:%d:%d:%d", &minlat, &maxlat, &minlon, + &maxlon); sdf_file[x] = '.'; @@ -533,7 +533,7 @@ int LoadSDF_SDF(char *name) return 0; } -char LoadSDF(char *name) +int LoadSDF(char *name) { /* This function loads the requested SDF file from the filesystem. It first tries to invoke the LoadSDF_SDF() function to load an @@ -555,8 +555,8 @@ char LoadSDF(char *name) if ( return_value == 0 || return_value < 0 ) { - sscanf(name, "%d:%d:%d:%d", &minlat, &maxlat, &minlon, - &maxlon); + sscanf(name, "%d:%d:%d:%d", &minlat, &maxlat, &minlon, + &maxlon); /* Is it already in memory? */ @@ -1458,12 +1458,13 @@ int LoadDBMColors(struct site xmtr) return 0; } -void LoadTopoData(int max_lon, int min_lon, int max_lat, int min_lat) +int LoadTopoData(int max_lon, int min_lon, int max_lat, int min_lat) { /* This function loads the SDF files required to cover the limits of the region specified. */ int x, y, width, ymin, ymax; + int success; width = ReduceAngle(max_lon - min_lon); @@ -1495,7 +1496,9 @@ void LoadTopoData(int max_lon, int min_lon, int max_lat, int min_lat) snprintf(string, 16, "%d:%d:%d:%d", x, x + 1, ymin, ymax); - LoadSDF(string); + if( (success = LoadSDF(string)) < 0 ){ + return -success; + } } } @@ -1526,9 +1529,12 @@ void LoadTopoData(int max_lon, int min_lon, int max_lat, int min_lat) snprintf(string, 16, "%d:%d:%d:%d", x, x + 1, ymin, ymax); - LoadSDF(string); + if( (success = LoadSDF(string)) < 0 ){ + return -success; + } } } + return 0; } void LoadUDT(char *filename) diff --git a/inputs.hh b/inputs.hh index d15a87c..81addde 100644 --- a/inputs.hh +++ b/inputs.hh @@ -4,12 +4,12 @@ #include "common.h" int LoadSDF_SDF(char *name, int winfiles); -char LoadSDF(char *name, int winfiles); +int LoadSDF(char *name, int winfiles); int LoadPAT(char *az_filename, char *el_filename); int LoadSignalColors(struct site xmtr); int LoadLossColors(struct site xmtr); int LoadDBMColors(struct site xmtr); -void LoadTopoData(int max_lon, int min_lon, int max_lat, int min_lat); +int LoadTopoData(int max_lon, int min_lon, int max_lat, int min_lat); void LoadUDT(char *filename); int loadLIDAR(char *filename); int loadClutter(char *filename, double radius, struct site tx); diff --git a/main.cc b/main.cc index c96b966..07ff094 100644 --- a/main.cc +++ b/main.cc @@ -1708,9 +1708,13 @@ int main(int argc, char *argv[]) }else{ // DEM first - LoadTopoData(max_lon, min_lon, max_lat, min_lat); + if( (result = LoadTopoData(max_lon, min_lon, max_lat, min_lat)) != 0 ){ + // This only fails on errors loading SDF tiles + fprintf(stderr, "Error loading topo data\n"); + return result; + } - if (area_mode || topomap) { + if (area_mode || topomap) { for (z = 0; z < txsites && z < max_txsites; z++) { /* "Ball park" estimates used to load any additional SDF files required to conduct this analysis. */ @@ -1793,7 +1797,11 @@ int main(int argc, char *argv[]) /* Load any additional SDF files, if required */ - LoadTopoData(max_lon, min_lon, max_lat, min_lat); + if( (result = LoadTopoData(max_lon, min_lon, max_lat, min_lat)) != 0 ){ + // This only fails on errors loading SDF tiles + fprintf(stderr, "Error loading topo data\n"); + return result; + } } ppd=(double)ippd; yppd=ppd;