From f592981a60adcb5499c0a95922a42b7bc110789d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Mayoral=20Vilches?= Date: Sun, 28 Jun 2015 21:13:54 +0200 Subject: [PATCH] TerrainIO: Support custom_terrain_directory --- libraries/AP_Terrain/TerrainIO.cpp | 50 +++++++++++++++++++++++------- 1 file changed, 38 insertions(+), 12 deletions(-) diff --git a/libraries/AP_Terrain/TerrainIO.cpp b/libraries/AP_Terrain/TerrainIO.cpp index e2c1cfbeb0..90d93467ae 100644 --- a/libraries/AP_Terrain/TerrainIO.cpp +++ b/libraries/AP_Terrain/TerrainIO.cpp @@ -151,19 +151,45 @@ void AP_Terrain::open_file(void) return; } - // build the pathname to the degree file - char path[] = HAL_BOARD_TERRAIN_DIRECTORY "/NxxExxx.DAT"; - char *p = &path[strlen(HAL_BOARD_TERRAIN_DIRECTORY)+1]; - snprintf(p, 12, "%c%02u%c%03u.DAT", - block.lat_degrees<0?'S':'N', - abs(block.lat_degrees), - block.lon_degrees<0?'W':'E', - abs(block.lon_degrees)); + char *path; + const char* custom_dir = hal.util->get_custom_terrain_directory(); + if (custom_dir != NULL){ + // build the pathname from the args provided + path = (char*) malloc(strlen(custom_dir)+strlen("/NxxExxx.DAT")+1); + if (!path) { + printf("Terrain degree file, malloc() failed: insufficient memory!\n"); + exit(1); + } + strcpy(path, custom_dir); + strcat(path, "/NxxExxx.DAT"); + char *p = &path[strlen(HAL_BOARD_TERRAIN_DIRECTORY)+1]; + snprintf(p, 12, "%c%02u%c%03u.DAT", + block.lat_degrees<0?'S':'N', + abs(block.lat_degrees), + block.lon_degrees<0?'W':'E', + abs(block.lon_degrees)); - // create directory if need be - if (!directory_created) { - mkdir(HAL_BOARD_TERRAIN_DIRECTORY, 0755); - directory_created = true; + // create directory if need be + if (!directory_created) { + mkdir(custom_dir, 0755); + directory_created = true; + } + } else { + // build the pathname to the degree file + char path_default[] = HAL_BOARD_TERRAIN_DIRECTORY "/NxxExxx.DAT"; + char *p = &path_default[strlen(HAL_BOARD_TERRAIN_DIRECTORY)+1]; + snprintf(p, 12, "%c%02u%c%03u.DAT", + block.lat_degrees<0?'S':'N', + abs(block.lat_degrees), + block.lon_degrees<0?'W':'E', + abs(block.lon_degrees)); + + path = path_default; + // create directory if need be + if (!directory_created) { + mkdir(HAL_BOARD_TERRAIN_DIRECTORY, 0755); + directory_created = true; + } } if (fd != -1) {