[epr-api] 02/04: Imported Upstream version 2.3~dev20140814
Antonio Valentino
a_valentino-guest at moszumanska.debian.org
Thu Aug 14 18:55:00 UTC 2014
This is an automated email from the git hooks/post-receive script.
a_valentino-guest pushed a commit to branch master
in repository epr-api.
commit d0083a904accb6276c84fdf472a943b523550ab4
Author: Antonio Valentino <antonio.valentino at tiscali.it>
Date: Thu Aug 14 20:50:23 2014 +0200
Imported Upstream version 2.3~dev20140814
---
CMakeLists.txt | 141 +++++++++++++++++++++++++++--------------------------
src/CMakeLists.txt | 10 ++--
src/epr_api.h | 2 +-
src/epr_band.c | 61 ++++++++++++++---------
src/epr_bitmask.c | 13 +++--
src/epr_core.c | 2 +-
src/epr_dsd.c | 48 +++++++++---------
src/epr_msph.c | 12 ++---
src/epr_param.c | 12 ++---
src/epr_product.c | 14 +++---
10 files changed, 169 insertions(+), 146 deletions(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index a6266e9..ba7d824 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,68 +1,73 @@
-# Copyright (c) 2013 Antonio Valentino <antonio.valentino at tiscali.it>
-
-
-cmake_minimum_required(VERSION 2.8)
-project(epr-api)
-
-
-# set version number
-set(EPR_API_VERSION_MAJOR 2)
-set(EPR_API_VERSION_MINOR 3)
-set(EPR_API_VERSION_PATCH 0)
-set(EPR_API_VERSION_STRING
- "${EPR_API_VERSION_MAJOR}.${EPR_API_VERSION_MINOR}.${EPR_API_VERSION_PATCH}")
-
-
-# options
-option(BUILD_STATIC_LIB "build the static version of the library" ON)
-option(BUILD_TESTS "build test programs" OFF)
-option(BUILD_DOCS "build Doxygen documentation" OFF)
-option(DISABLE_SYMBOL_CONTROL
- "Do not try to control symbols that are exported by the dynamic library.
-This option can be used to fix some build issue with non standard linkers."
- OFF)
-
-
-# testing
-enable_testing()
-
-
-# sub-directories
-add_subdirectory(src)
-
-if(BUILD_TESTS)
- add_subdirectory(bccunit)
-endif(BUILD_TESTS)
-
-if(BUILD_DOCS)
- add_subdirectory(docs)
-endif(BUILD_DOCS)
-
-
-# uninstall target
-configure_file(
- "${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in"
- "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
- IMMEDIATE @ONLY)
-
-add_custom_target(uninstall
- COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake)
-
-
-# packaging
-include(InstallRequiredSystemLibraries)
-
-set(CPACK_GENERATOR TGZ ZIP STGZ)
-set(CPACK_SOURCE_GENERATOR TGZ ZIP)
-set(CPACK_PACKAGE_VERSION_MAJOR ${EPR_API_VERSION_MAJOR})
-set(CPACK_PACKAGE_VERSION_MINOR ${EPR_API_VERSION_MINOR})
-set(CPACK_PACKAGE_VERSION_PATCH ${EPR_API_VERSION_PATCH})
-set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/README.txt")
-set(CPACK_PACKAGE_DESCRIPTION_SUMMARY
- "Delft object-oriented radar interferometric software")
-set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.txt")
-set(CPACK_SOURCE_IGNORE_FILES "/build.*;.*~;\\\\.git.*;\\\\.user$;\\\\.DS_Store")
-set(CPACK_STRIP_FILES TRUE)
-set(CPACK_SOURCE_STRIP_FILES TRUE)
-
-include(CPack)
+# Copyright (c) 2013-2014 Antonio Valentino <antonio.valentino at tiscali.it>
+
+
+cmake_minimum_required(VERSION 2.8)
+project(epr-api)
+
+
+# set version number
+set(EPR_API_VERSION_MAJOR 2)
+set(EPR_API_VERSION_MINOR 3)
+set(EPR_API_VERSION_PATCH 0)
+set(EPR_API_VERSION_STRING
+ "${EPR_API_VERSION_MAJOR}.${EPR_API_VERSION_MINOR}.${EPR_API_VERSION_PATCH}")
+
+
+# NOTE: only change this when an ABI change happens
+set(EPR_API_SOVERSION 2)
+
+
+# options
+option(BUILD_STATIC_LIB "build the static version of the library" ON)
+option(BUILD_TESTS "build test programs" OFF)
+option(BUILD_DOCS "build Doxygen documentation" OFF)
+option(DISABLE_SYMBOL_CONTROL
+ "Do not try to control symbols that are exported by the dynamic library.
+This option can be used to fix some build issue with non standard linkers."
+ OFF)
+
+
+# testing
+enable_testing()
+
+
+# sub-directories
+add_subdirectory(src)
+
+if(BUILD_TESTS)
+ add_subdirectory(bccunit)
+endif(BUILD_TESTS)
+
+if(BUILD_DOCS)
+ add_subdirectory(docs)
+endif(BUILD_DOCS)
+
+
+# uninstall target
+configure_file(
+ "${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in"
+ "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
+ IMMEDIATE @ONLY)
+
+add_custom_target(uninstall
+ COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake)
+
+
+# packaging
+include(InstallRequiredSystemLibraries)
+
+set(CPACK_GENERATOR TGZ ZIP STGZ)
+set(CPACK_SOURCE_GENERATOR TGZ ZIP)
+set(CPACK_PACKAGE_VERSION_MAJOR ${EPR_API_VERSION_MAJOR})
+set(CPACK_PACKAGE_VERSION_MINOR ${EPR_API_VERSION_MINOR})
+set(CPACK_PACKAGE_VERSION_PATCH ${EPR_API_VERSION_PATCH})
+set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/README.txt")
+set(CPACK_PACKAGE_DESCRIPTION_SUMMARY
+ "Delft object-oriented radar interferometric software")
+set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.txt")
+set(CPACK_SOURCE_IGNORE_FILES "/build.*;.*~;\\\\.git.*;\\\\.user$;\\\\.DS_Store")
+set(CPACK_STRIP_FILES TRUE)
+set(CPACK_SOURCE_STRIP_FILES TRUE)
+
+include(CPack)
+
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index dae0ae3..52a0a07 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright (c) 2013 Antonio Valentino <antonio.valentino at tiscali.it>
+# Copyright (c) 2013-2014 Antonio Valentino <antonio.valentino at tiscali.it>
# sources
@@ -53,8 +53,10 @@ endif(CMAKE_C_COMPILER_ID STREQUAL GNU OR CMAKE_C_COMPILER_ID STREQUAL Clang)
add_library(epr_api SHARED ${SOURCES})
set_target_properties(epr_api PROPERTIES
VERSION ${EPR_API_VERSION_STRING}
- SOVERSION ${EPR_API_VERSION_MAJOR})
-target_link_libraries(epr_api m)
+ SOVERSION ${EPR_API_SOVERSION})
+if(NOT MSVC)
+ target_link_libraries(epr_api m)
+endif()
if(BUILD_STATIC_LIB)
@@ -72,7 +74,7 @@ endif(BUILD_TESTS)
# install
install(FILES epr_api.h epr_ptrarray.h DESTINATION include COMPONENT lib)
-install(TARGETS epr_api LIBRARY DESTINATION lib COMPONENT dev)
+install(TARGETS epr_api DESTINATION lib COMPONENT dev)
if(BUILD_STATIC_LIB)
install(TARGETS epr_api_static ARCHIVE DESTINATION lib COMPONENT dev)
endif(BUILD_STATIC_LIB)
diff --git a/src/epr_api.h b/src/epr_api.h
index 6dc625b..28cab3d 100644
--- a/src/epr_api.h
+++ b/src/epr_api.h
@@ -31,7 +31,7 @@ extern "C"
#include "epr_ptrarray.h"
#define EPR_PRODUCT_API_NAME_STR "ENVISAT Product Reader API"
-#define EPR_PRODUCT_API_VERSION_STR "2.3"
+#define EPR_PRODUCT_API_VERSION_STR "2.3dev_pyepr082"
/* needed by Doxygen */
/** \mainpage
diff --git a/src/epr_band.c b/src/epr_band.c
index a7eb46b..133b325 100644
--- a/src/epr_band.c
+++ b/src/epr_band.c
@@ -105,9 +105,9 @@ EPR_SPtrArray* epr_create_band_ids(EPR_SProductId* product_id) {
/* 2: dataset_name */
band_id->dataset_ref = epr_get_ref_struct(product_id, b_tables[bt_index].descriptors[i].rec_name);
if (band_id->dataset_ref.dataset_id == NULL) {
+ epr_free_band_id(band_id);
epr_set_err(e_err_invalid_dataset_name,
"epr_create_band_ids: invalid dataset name in DDDB");
- epr_free_band_id(band_id);
return NULL;
}
/* 3: sample_offset */
@@ -134,9 +134,9 @@ EPR_SPtrArray* epr_create_band_ids(EPR_SProductId* product_id) {
} else {
scaling_offset = epr_get_scaling_params(product_id, test_block);
if (scaling_offset == -909.909) { /* @todo what an ugly return value. Eeeek!*/
+ epr_free_band_id(band_id);
epr_set_err(e_err_invalid_dataset_name,
"epr_create_band_ids: invalid dataset name in dddb");
- epr_free_band_id(band_id);
return NULL;
}
band_id->scaling_offset = scaling_offset;
@@ -153,9 +153,9 @@ EPR_SPtrArray* epr_create_band_ids(EPR_SProductId* product_id) {
} else {
scaling_factor = epr_get_scaling_params(product_id, test_block);
if (scaling_factor == -909.909) { /* @todo what an ugly return value. Eeeek!*/
+ epr_free_band_id(band_id);
epr_set_err(e_err_invalid_dataset_name,
"epr_create_band_ids: invalid dataset name in dddb");
- epr_free_band_id(band_id);
return NULL;
}
band_id->scaling_factor = scaling_factor;
@@ -168,9 +168,9 @@ EPR_SPtrArray* epr_create_band_ids(EPR_SProductId* product_id) {
if (b_tables[bt_index].descriptors[i].flag_coding_name != NULL) {
band_id->flag_coding = epr_create_flag_coding(product_id, b_tables[bt_index].descriptors[i].flag_coding_name);
if (band_id->flag_coding == NULL) {
+ epr_free_band_id(band_id);
epr_set_err(e_err_out_of_memory,
"epr_create_band_ids: out of memory");
- epr_free_band_id(band_id);
return NULL;
}
} else {
@@ -644,8 +644,10 @@ int epr_read_band_raster(EPR_SBandId* band_id,
offset_x,
offset_y,
raster) != 0) {
+ /* Do not shadow the original error message that appears to be more informative
epr_set_err(e_err_file_read_error,
"epr_read_band_raster: unsuccessfully reading band measurement data");
+ */
return epr_get_last_err_code();
}
if (band_id->bm_expr != NULL) {
@@ -658,7 +660,6 @@ int epr_read_band_raster(EPR_SBandId* band_id,
raster->source_step_x,
raster->source_step_y);
-
/* rd_bm = */ epr_read_bitmask_raster(product_id,
band_id->bm_expr,
offset_x,
@@ -747,16 +748,16 @@ int epr_read_band_measurement_data(EPR_SBandId* band_id,
datatype_id = field_info->data_type_id;
/* if the user raster (or part of) is outside bbox in source coordinates*/
- if (offset_x + raster->raster_width > (int)scan_line_length) {
+ if (offset_x + raster->source_width > (int)scan_line_length) {
+ epr_free_record(record);
epr_set_err(e_err_illegal_arg,
"epr_read_band_measurement_data: raster x co-ordinates out of bounds");
- epr_free_record(record);
return epr_get_last_err_code();
}
- if (offset_y + raster->raster_height > (int)(rec_numb)) {
+ if (offset_y + raster->source_height > (int)(rec_numb)) {
+ epr_free_record(record);
epr_set_err(e_err_illegal_arg,
"epr_read_band_measurement_data: raster y co-ordinates out of bounds");
- epr_free_record(record);
return epr_get_last_err_code();
}
raster_pos = 0;
@@ -765,15 +766,21 @@ int epr_read_band_measurement_data(EPR_SBandId* band_id,
/*select the correspondent function to scaling and transform data type*/
decode_func = select_line_decode_function(band_datatype, band_smod, datatype_id);
if (decode_func == NULL) {
+ epr_free_record(record);
epr_set_err(e_err_illegal_data_type,
"epr_read_band_measurement_data: internal error: unknown data type");
- epr_free_record(record);
return epr_get_last_err_code();
}
scene_width = band_id->product_id->scene_width;
if (band_id->lines_mirrored) {
offset_x_mirrored = (scene_width - 1) - (offset_x + raster->source_width - 1);
+ /* the extra offset is used to accomodate the the effect of sampling step
+ * greather than one in case of mirrored lines */
+ {
+ int extra_offset = raster->source_width - ((raster->raster_width - 1) * raster->source_step_x + 1);
+ offset_x_mirrored += extra_offset;
+ }
} else {
offset_x_mirrored = offset_x;
}
@@ -803,9 +810,9 @@ int epr_read_band_measurement_data(EPR_SBandId* band_id,
} else if (band_datatype == e_tid_uint || band_datatype == e_tid_int) {
mirror_uint_array((uint*)raster->buffer, raster->raster_width, raster->raster_height);
} else {
+ epr_free_record(record);
epr_set_err(e_err_illegal_data_type,
"epr_read_band_measurement_data: internal error: unknown data type");
- epr_free_record(record);
return epr_get_last_err_code();
}
}
@@ -848,13 +855,14 @@ int epr_read_band_annotation_data(EPR_SBandId* band_id,
int iY, raster_pos, delta_raster_pos;
EPR_FArrayTransformer transform_array_func = NULL;
int y_beg, y_end, y_beg_old, y_end_old;
- /* int offset_x_mirrored = 0; */
+ int offset_x_mirrored = 0;
uint num_elems = 0;
float y_mod = 0;
float scan_offset_x = 0;
float scan_offset_y = 0;
void* line_beg_buffer = NULL;
void* line_end_buffer = NULL;
+ uint scene_width = 0;
product_id = band_id->product_id;
@@ -897,8 +905,8 @@ int epr_read_band_annotation_data(EPR_SBandId* band_id,
scan_offset_x = 6.0F;
samples_per_tie_pt = 50;
} else {
- epr_set_err(e_err_invalid_value, "epr_read_band_annotation_data: internal error: illegal value for samples_per_tie_pt");
epr_free_record(record);
+ epr_set_err(e_err_invalid_value, "epr_read_band_annotation_data: internal error: illegal value for samples_per_tie_pt");
return epr_get_last_err_code();
}
} else if ((strncmp(EPR_ENVISAT_PRODUCT_ASAR, product_id->id_string, 3) == 0) ||
@@ -914,42 +922,42 @@ int epr_read_band_annotation_data(EPR_SBandId* band_id,
lines_per_tie_pt = epr_get_scene_height(product_id) / (num_rec - 1);
num_elems = field_info->num_elems;
} else {
+ epr_free_record(record);
epr_set_err(e_err_illegal_arg,
"epr_read_band_annotation_data: unhandled ENVISAT product type");
- epr_free_record(record);
return epr_get_last_err_code();
}
/*memory allocate for the increasingly begin tie point line*/
line_beg_buffer = calloc(sizeof(float), num_elems);
if (line_beg_buffer == NULL) {
- epr_set_err(e_err_out_of_memory, "epr_read_band_annotation_data: out of memory");
epr_free_record(record);
+ epr_set_err(e_err_out_of_memory, "epr_read_band_annotation_data: out of memory");
return epr_get_last_err_code();
}
/*memory allocate for the increasingly end tie point line*/
line_end_buffer = calloc(sizeof(float), num_elems);
if (line_end_buffer == NULL) {
- epr_set_err(e_err_out_of_memory, "epr_read_band_annotation_data: out of memory");
epr_free_record(record);
free(line_beg_buffer);
+ epr_set_err(e_err_out_of_memory, "epr_read_band_annotation_data: out of memory");
return epr_get_last_err_code();
}
/* if the user raster (or its part) is outside of orbit in source coordinates*/
if (offset_x + raster->raster_width > (int)scan_line_length) {
- epr_set_err(e_err_illegal_arg,
- "epr_read_band_data: raster x co-ordinates out of bounds");
epr_free_record(record);
free(line_beg_buffer);
free(line_end_buffer);
+ epr_set_err(e_err_illegal_arg,
+ "epr_read_band_data: raster x co-ordinates out of bounds");
return epr_get_last_err_code();
}
if (offset_y + raster->raster_height > (int)(rec_numb * lines_per_tie_pt)) {
- epr_set_err(e_err_illegal_arg,
- "epr_read_band_data: raster y co-ordinates out of bounds");
epr_free_record(record);
free(line_beg_buffer);
free(line_end_buffer);
+ epr_set_err(e_err_illegal_arg,
+ "epr_read_band_data: raster y co-ordinates out of bounds");
return epr_get_last_err_code();
}
raster_pos = 0;
@@ -969,13 +977,18 @@ int epr_read_band_annotation_data(EPR_SBandId* band_id,
y_beg_old = 9999;
y_end_old = 9999;
- /* TODO: check
+ scene_width = band_id->product_id->scene_width;
if (band_id->lines_mirrored) {
- offset_x_mirrored = num_elems - (offset_x + raster->source_width - 1) - 1;
+ offset_x_mirrored = (scene_width - 1) - (offset_x + raster->source_width - 1);
+ /* the extra offset is used to accomodate the the effect of sampling step
+ * greather than one in case of mirrored lines */
+ {
+ int extra_offset = raster->source_width - ((raster->raster_width - 1) * raster->source_step_x + 1);
+ offset_x_mirrored += extra_offset;
+ }
} else {
offset_x_mirrored = offset_x;
}
- */
for (iY = offset_y; (uint)iY < offset_y + raster->source_height; iY += raster->source_step_y ) {
@@ -1013,7 +1026,7 @@ int epr_read_band_annotation_data(EPR_SBandId* band_id,
/*get the "line" of interpolated physical values from tie point data*/
decode_tiepoint_band(line_beg_buffer, line_end_buffer,
- samples_per_tie_pt, num_elems, band_id, offset_x, scan_offset_x, y_mod,
+ samples_per_tie_pt, num_elems, band_id, offset_x_mirrored, scan_offset_x, y_mod,
raster->source_width, raster->source_step_x, raster->buffer, raster_pos);
/*locate "data point" for the next "line"*/
raster_pos += delta_raster_pos;
diff --git a/src/epr_bitmask.c b/src/epr_bitmask.c
index c87038a..ddefa17 100644
--- a/src/epr_bitmask.c
+++ b/src/epr_bitmask.c
@@ -258,10 +258,13 @@ void epr_resolve_bm_ref(EPR_SBmEvalContext* context, EPR_SBmTerm* term) {
context->bitmask_raster->source_height,
context->bitmask_raster->source_step_x,
context->bitmask_raster->source_step_y);
- epr_read_band_raster(flag_band_id,
- context->offset_x,
- context->offset_y,
- flag_raster);
+ if (epr_read_band_raster(flag_band_id,
+ context->offset_x,
+ context->offset_y,
+ flag_raster) != 0) {
+ return;
+ }
+
/* register flag_band_id and flag_raster for later use */
epr_add_ptr_array_elem(context->flag_band_ids, flag_band_id);
epr_add_ptr_array_elem(context->flag_rasters, flag_raster);
@@ -373,8 +376,8 @@ EPR_SPtrArray* epr_create_flag_coding(EPR_SProductId* product_id, const char* fl
/* 1: flag_name */
epr_assign_string(&flag_def->name, fc_tables[fct_index].descriptors[i].id);
if (flag_def->name == NULL) {
- epr_set_err(e_err_out_of_memory, "epr_get_flag_coding: out of memory");
epr_free_flag_def(flag_def);
+ epr_set_err(e_err_out_of_memory, "epr_get_flag_coding: out of memory");
return NULL;
}
/* 2: dataset_name */
diff --git a/src/epr_core.c b/src/epr_core.c
index 247fa96..cc87ed0 100644
--- a/src/epr_core.c
+++ b/src/epr_core.c
@@ -235,7 +235,7 @@ void epr_set_err(EPR_EErrCode err_code, const char* err_message)
}
/*
- Function: epr_set_error
+ Function: epr_clear_err
Access: public API implementation helper
Changelog: 2002/01/05 mp initial version
*/
diff --git a/src/epr_dsd.c b/src/epr_dsd.c
index b1913ef..6a986a9 100644
--- a/src/epr_dsd.c
+++ b/src/epr_dsd.c
@@ -290,17 +290,17 @@ EPR_SDSD* epr_read_each_dsd(FILE* envisat_source_file, int* pos)
/* DS_NAME to be searched for */
if (((uint)strlen(code_block) != (uint)(EPR_LENGTH_DS_NAME_FIELD)) || ((uint)(strrchr(code_block, ch) - code_block) != (uint)(strlen(code_block) - 2)))
{
+ epr_free_dsd(dsd);
epr_set_err(e_err_invalid_data_format,
"epr_read_each_dsd: invalid dataset name format");
- epr_free_dsd(dsd);
return NULL;
}
dsd->ds_name = epr_sub_string(code_block, EPR_LENGTH_DS_NAME_IDENTIFIER, strlen(code_block) - EPR_LENGTH_DS_NAME_IDENTIFIER - 2);
if (dsd->ds_name == NULL)
{
+ epr_free_dsd(dsd);
epr_set_err(e_err_invalid_value,
"epr_read_each_dsd: invalid DS_NAME value");
- epr_free_dsd(dsd);
return NULL;
}
@@ -311,9 +311,9 @@ EPR_SDSD* epr_read_each_dsd(FILE* envisat_source_file, int* pos)
dsd->ds_type = epr_sub_string(code_block, EPR_LENGTH_DS_TYPE_IDENTIFIER, strlen(code_block) - EPR_LENGTH_DS_TYPE_IDENTIFIER - 1);
if (dsd->ds_type == NULL)
{
+ epr_free_dsd(dsd);
epr_set_err(e_err_invalid_value,
"epr_read_each_dsd: invalid DS_TYPE value");
- epr_free_dsd(dsd);
return NULL;
}
}
@@ -324,17 +324,17 @@ EPR_SDSD* epr_read_each_dsd(FILE* envisat_source_file, int* pos)
{
if (((uint)strlen(code_block) != (uint)(EPR_LENGTH_DS_FILENAME_FIELD)) || ((uint)(strrchr(code_block, ch) - code_block) != (uint)(strlen(code_block) - 2)))
{
+ epr_free_dsd(dsd);
epr_set_err(e_err_invalid_data_format,
"epr_read_each_dsd: invalid dataset filename format");
- epr_free_dsd(dsd);
return NULL;
}
dsd->filename = epr_sub_string(code_block, EPR_LENGTH_FILENAME_IDENTIFIER, strlen(code_block) - EPR_LENGTH_FILENAME_IDENTIFIER - 1);
if (dsd->ds_name == NULL)
{
+ epr_free_dsd(dsd);
epr_set_err(e_err_invalid_data_format,
"epr_read_each_dsd: invalid file name");
- epr_free_dsd(dsd);
return NULL;
}
}
@@ -345,9 +345,9 @@ EPR_SDSD* epr_read_each_dsd(FILE* envisat_source_file, int* pos)
{
if (((uint)strlen(code_block) != (uint)(EPR_LENGTH_DS_OFFSEN_FIELD)) || (strncmp(code_block + strlen(code_block) - strlen("<bytes>") - 1, "<bytes>", strlen("<bytes>")) != 0))
{
+ epr_free_dsd(dsd);
epr_set_err(e_err_invalid_data_format,
"epr_read_each_dsd: invalid dataset filename format");
- epr_free_dsd(dsd);
return NULL;
}
@@ -356,9 +356,9 @@ EPR_SDSD* epr_read_each_dsd(FILE* envisat_source_file, int* pos)
epr_free_string(tmp);
if (dsd->ds_offset == -1)
{
+ epr_free_dsd(dsd);
epr_set_err(e_err_invalid_data_format,
"epr_read_each_dsd: invalid OFFSET value");
- epr_free_dsd(dsd);
return NULL;
}
}
@@ -369,9 +369,9 @@ EPR_SDSD* epr_read_each_dsd(FILE* envisat_source_file, int* pos)
{
if (((uint)strlen(code_block) != (uint)(EPR_LENGTH_DS_SIZE_FIELD)) || (strncmp(code_block + strlen(code_block) - strlen("<bytes>") - 1, "<bytes>", strlen("<bytes>")) != 0))
{
+ epr_free_dsd(dsd);
epr_set_err(e_err_invalid_data_format,
"epr_read_each_dsd: invalid dataset filename format");
- epr_free_dsd(dsd);
return NULL;
}
tmp = epr_sub_string(code_block, EPR_LENGTH_DS_SIZE_IDENTIFIER, strlen(code_block) - strlen("<bytes>") - EPR_LENGTH_DS_SIZE_IDENTIFIER - 1);
@@ -379,9 +379,9 @@ EPR_SDSD* epr_read_each_dsd(FILE* envisat_source_file, int* pos)
epr_free_string(tmp);
if (dsd->ds_size == -1)
{
+ epr_free_dsd(dsd);
epr_set_err(e_err_invalid_data_format,
"epr_read_each_dsd: invalid OFFSET value");
- epr_free_dsd(dsd);
return NULL;
}
}
@@ -392,9 +392,9 @@ EPR_SDSD* epr_read_each_dsd(FILE* envisat_source_file, int* pos)
{
if ((uint)strlen(code_block) != (uint)(EPR_LENGTH_NUM_DSR_FIELD))
{
+ epr_free_dsd(dsd);
epr_set_err(e_err_invalid_data_format,
"epr_read_each_dsd: invalid dataset record number format");
- epr_free_dsd(dsd);
return NULL;
}
tmp = epr_sub_string(code_block, EPR_LENGTH_NUM_DSR_IDENTIFIER, strlen(code_block) - EPR_LENGTH_NUM_DSR_IDENTIFIER - 1);
@@ -402,9 +402,9 @@ EPR_SDSD* epr_read_each_dsd(FILE* envisat_source_file, int* pos)
epr_free_string(tmp);
if (dsd->num_dsr == -1)
{
+ epr_free_dsd(dsd);
epr_set_err(e_err_invalid_data_format,
"epr_read_each_dsd: invalid dsr number value");
- epr_free_dsd(dsd);
return NULL;
}
}
@@ -415,9 +415,9 @@ EPR_SDSD* epr_read_each_dsd(FILE* envisat_source_file, int* pos)
{
if (((uint)strlen(code_block) != (uint)(EPR_LENGTH_DSR_SIZE_FIELD)) || (strncmp(code_block + strlen(code_block) - strlen("<bytes>") - 1, "<bytes>", strlen("<bytes>")) != 0))
{
+ epr_free_dsd(dsd);
epr_set_err(e_err_invalid_data_format,
"epr_read_each_dsd: invalid dataset record size format");
- epr_free_dsd(dsd);
return NULL;
}
tmp = epr_sub_string(code_block, EPR_LENGTH_DSR_SIZE_IDENTIFIER, strlen(code_block) - strlen("<bytes>") - EPR_LENGTH_DSR_SIZE_IDENTIFIER - 1);
@@ -425,9 +425,9 @@ EPR_SDSD* epr_read_each_dsd(FILE* envisat_source_file, int* pos)
epr_free_string(tmp);
if (dsd->dsr_size == -1)
{
+ epr_free_dsd(dsd);
epr_set_err(e_err_invalid_data_format,
"epr_read_each_dsd: invalid record size value");
- epr_free_dsd(dsd);
return NULL;
}
}
@@ -436,9 +436,9 @@ EPR_SDSD* epr_read_each_dsd(FILE* envisat_source_file, int* pos)
fgets(code_block, EPR_LINE_MAX_LENGTH, envisat_source_file);
if ((strlen(code_block) > 0) && (code_block[0] != ' '))
{
+ epr_free_dsd(dsd);
epr_set_err(e_err_invalid_data_format,
"epr_read_each_dsd: invalid code_block, must be empty");
- epr_free_dsd(dsd);
return NULL;
}
*pos = *pos + 1;
@@ -521,38 +521,36 @@ EPR_SPtrArray* epr_read_all_dsds(EPR_SProductId* product_id)
/*dsd_begin = epr_api.epr_head_size - dsd_number * EPR_DSD_SIZE;*/
if (fseek(product_id->istream, EPR_MPH_SIZE, SEEK_SET) != 0) {
- epr_set_err(e_err_file_access_denied,
- "epr_read_all_dsds: file seek failed");
if (dsds_array != NULL) {
epr_free_ptr_array(dsds_array);
}
+ epr_set_err(e_err_file_access_denied,
+ "epr_read_all_dsds: file seek failed");
return NULL;
}
field = epr_get_field(product_id->mph_record, "SPH_SIZE");
sph_length = ((uint*) field->elems)[0];
dsd_begin = EPR_MPH_SIZE + (uint)epr_find_first_dsd(product_id->istream, sph_length);
if (dsd_begin == EPR_MPH_SIZE) {
- epr_set_err(e_err_file_access_denied,
- "epr_read_all_dsds: no DS_NAME in SPH");
if (dsds_array != NULL) {
epr_free_ptr_array(dsds_array);
}
+ epr_set_err(e_err_file_access_denied,
+ "epr_read_all_dsds: no DS_NAME in SPH");
return NULL;
}
for(dsd_index = 0; dsd_index < dsd_number; dsd_index ++) {
if (fseek(product_id->istream, dsd_begin + dsd_index * EPR_DSD_SIZE, SEEK_SET) != 0) {
- epr_set_err(e_err_file_access_denied,
- "epr_read_all_dsds: file seek failed");
if (dsds_array != NULL) {
epr_free_ptr_array(dsds_array);
}
+ epr_set_err(e_err_file_access_denied,
+ "epr_read_all_dsds: file seek failed");
return NULL;
}
code_block = epr_create_string(EPR_DSD_SIZE);
numread = fread(code_block, 1, EPR_DSD_SIZE, product_id->istream);
if ((uint)numread != EPR_DSD_SIZE) {
- epr_set_err(e_err_file_read_error,
- "epr_read_all_dsds: error in reading SPH from product data file");
if (code_block != NULL) {
epr_free_string(code_block);
code_block = NULL;
@@ -560,6 +558,8 @@ EPR_SPtrArray* epr_read_all_dsds(EPR_SProductId* product_id)
if (dsds_array != NULL) {
epr_free_ptr_array(dsds_array);
}
+ epr_set_err(e_err_file_read_error,
+ "epr_read_all_dsds: error in reading SPH from product data file");
return NULL;
}
@@ -573,8 +573,6 @@ EPR_SPtrArray* epr_read_all_dsds(EPR_SProductId* product_id)
dsd = epr_create_dsd(dsd_index);
if (dsd == NULL) {
- epr_set_err(e_err_out_of_memory,
- "epr_read_all_dsds: out of memory");
if (code_block != NULL) {
epr_free_string(code_block);
code_block = NULL;
@@ -588,6 +586,8 @@ EPR_SPtrArray* epr_read_all_dsds(EPR_SProductId* product_id)
if (dsds_array != NULL) {
epr_free_ptr_array(dsds_array);
}
+ epr_set_err(e_err_out_of_memory,
+ "epr_read_all_dsds: out of memory");
return NULL;
}
diff --git a/src/epr_msph.c b/src/epr_msph.c
index c0d64d1..b3df4aa 100644
--- a/src/epr_msph.c
+++ b/src/epr_msph.c
@@ -69,6 +69,7 @@ EPR_SRecord* epr_read_mph(EPR_SProductId* product_id)
return NULL;
}
record = epr_parse_header("mph", code_block);
+ epr_free_string(code_block);
if (record == NULL)
{
epr_set_err(e_err_invalid_record,
@@ -77,7 +78,6 @@ EPR_SRecord* epr_read_mph(EPR_SProductId* product_id)
epr_add_ptr_array_elem(product_id->record_info_cache, record->info);
}
- epr_free_string(code_block);
return record;
}
@@ -143,6 +143,7 @@ EPR_SRecord* epr_read_sph(EPR_SProductId* product_id)
}
sph_record = epr_parse_header("sph", code_block);
+ epr_free_string(code_block);
if (sph_record == NULL) {
epr_set_err(e_err_invalid_record,
"epr_read_sph: can not recognize the correct SPH from product data file");
@@ -150,7 +151,6 @@ EPR_SRecord* epr_read_sph(EPR_SProductId* product_id)
epr_add_ptr_array_elem(product_id->record_info_cache, sph_record->info);
}
- epr_free_string(code_block);
return sph_record;
}
@@ -213,23 +213,23 @@ EPR_SRecord* epr_parse_header(const char* header_name, const char* ascii_source)
pos = 0;
token_name = epr_str_tok(code_block, seps, &pos);
if (pos == 1) {
- epr_set_err(e_err_invalid_keyword_name,
- "epr_parse_header: invalid ascii header: keyword is empty");
epr_free_string(token_name);
if (code_block != NULL) {
epr_free_string(code_block);
code_block = NULL;
}
+ epr_set_err(e_err_invalid_keyword_name,
+ "epr_parse_header: invalid ascii header: keyword is empty");
continue;
}
if (pos == (int)strlen(code_block) + 1) {
- epr_set_err(e_err_invalid_keyword_name,
- "epr_parse_header: invalid ascii header: keyword not found");
epr_free_string(token_name);
if (code_block != NULL) {
epr_free_string(code_block);
code_block = NULL;
}
+ epr_set_err(e_err_invalid_keyword_name,
+ "epr_parse_header: invalid ascii header: keyword not found");
continue;
}
/*if STRING value*/
diff --git a/src/epr_param.c b/src/epr_param.c
index 4e59a56..5720890 100644
--- a/src/epr_param.c
+++ b/src/epr_param.c
@@ -141,25 +141,25 @@ int epr_set_dyn_dddb_params(EPR_SProductId* product_id)
if (product_id->sph_record == NULL) {
product_id->sph_record = epr_read_sph(product_id);
if (product_id->sph_record == NULL) {
- epr_set_err(e_err_file_read_error, "epr_set_param: wrong SPH");
epr_free_string(tmp);
+ epr_set_err(e_err_file_read_error, "epr_set_param: wrong SPH");
return 0;
}
}
field = epr_get_field(product_id->sph_record, "LINE_LENGTH");
if (field == NULL) {
+ epr_free_string(tmp);
epr_set_err(e_err_invalid_value,
"epr_set_param: wrong SPH: unable to read LINE_LENGTH");
- epr_free_string(tmp);
return 0;
}
line_length = ((uint*) field->elems)[0];
if (line_length == 0) {
+ epr_free_string(tmp);
epr_set_err(e_err_invalid_value,
"epr_set_param: wrong SPH: LINE_LENGTH must be > 0");
- epr_free_string(tmp);
return 0;
}
@@ -173,9 +173,9 @@ int epr_set_dyn_dddb_params(EPR_SProductId* product_id)
num_tie_points_across = ((uint*) field->elems)[0];
if (num_tie_points_across == 0) {
+ epr_free_string(tmp);
epr_set_err(e_err_invalid_value,
"epr_set_param: wrong SPH: LINES_PER_TIE_PT must be > 0");
- epr_free_string(tmp);
return 0;
}
@@ -197,17 +197,17 @@ int epr_set_dyn_dddb_params(EPR_SProductId* product_id)
field = epr_get_field(product_id->sph_record, "LINE_LENGTH");
if (field == NULL) {
+ epr_free_string(tmp);
epr_set_err(e_err_invalid_value,
"epr_set_param: wrong SPH: unable to read LINE_LENGTH");
- epr_free_string(tmp);
return 0;
}
line_length = ((uint*) field->elems)[0];
if (line_length == 0) {
+ epr_free_string(tmp);
epr_set_err(e_err_invalid_value,
"epr_set_param: wrong SPH: LINE_LENGTH must be > 0");
- epr_free_string(tmp);
return 0;
}
diff --git a/src/epr_product.c b/src/epr_product.c
index 9dac6c3..38ee205 100644
--- a/src/epr_product.c
+++ b/src/epr_product.c
@@ -104,9 +104,9 @@ EPR_SProductId* epr_open_product(const char* product_file_path) {
/* Set file pointer to start of product identifier */
if (fseek(product_id->istream, EPR_PRODUCT_ID_OFFSET, SEEK_SET) != 0) {
+ epr_close_product(product_id);
epr_set_err(e_err_file_access_denied,
"epr_open_product: file seek failed");
- epr_close_product(product_id);
return NULL;
}
@@ -114,9 +114,9 @@ EPR_SProductId* epr_open_product(const char* product_file_path) {
1,
EPR_PRODUCT_ID_STRLEN,
product_id->istream) != (uint) EPR_PRODUCT_ID_STRLEN) {
+ epr_close_product(product_id);
epr_set_err(e_err_file_access_denied,
"epr_open_product: file read failed");
- epr_close_product(product_id);
return NULL;
}
@@ -125,9 +125,9 @@ EPR_SProductId* epr_open_product(const char* product_file_path) {
(strncmp(EPR_ENVISAT_PRODUCT_ASAR, product_id->id_string, 3) != 0) &&
(strncmp(EPR_ENVISAT_PRODUCT_SAR, product_id->id_string, 3) != 0) &&
(strncmp(EPR_ENVISAT_PRODUCT_AATSR, product_id->id_string, 3) != 0)) {
+ epr_close_product(product_id);
epr_set_err(e_err_invalid_product_id,
"epr_open_product: invalid product identifier");
- epr_close_product(product_id);
return NULL;
}
@@ -144,18 +144,18 @@ EPR_SProductId* epr_open_product(const char* product_file_path) {
/* Set file to end of file in order to determine file size */
if (fseek(product_id->istream, 0, SEEK_END) != 0) {
+ epr_close_product(product_id);
epr_set_err(e_err_file_access_denied,
"epr_open_product: file seek failed");
- epr_close_product(product_id);
return NULL;
}
/* Get file size */
product_id->tot_size = (uint) ftell(product_id->istream);
if (product_id->tot_size == (uint) -1) {
+ epr_close_product(product_id);
epr_set_err(e_err_file_access_denied,
"epr_open_product: failed to determine file size");
- epr_close_product(product_id);
return NULL;
}
sprintf(message_buffer, "product size: %u", product_id->tot_size);
@@ -163,9 +163,9 @@ EPR_SProductId* epr_open_product(const char* product_file_path) {
/* Set file pointer back to start */
if (fseek(product_id->istream, 0, SEEK_SET) != 0) {
+ epr_close_product(product_id);
epr_set_err(e_err_file_access_denied,
"epr_open_product: file seek failed");
- epr_close_product(product_id);
return NULL;
}
@@ -187,9 +187,9 @@ EPR_SProductId* epr_open_product(const char* product_file_path) {
product_id->dsd_array = epr_read_all_dsds(product_id);
compare_ok = epr_compare_param(product_id);
if (compare_ok == 0) {
+ epr_close_product(product_id);
epr_set_err(e_err_invalid_value,
"epr_open_product: MPH_SIZE+SPH_SIZE must be equal to DSD[0].DS_OFFSET");
- epr_close_product(product_id);
return NULL;
}
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-grass/epr-api.git
More information about the Pkg-grass-devel
mailing list