From cc139bcbfe2ec8272b79f98753e3fb0927da684f Mon Sep 17 00:00:00 2001 From: Peter Chang Date: Thu, 19 Nov 2015 11:32:09 +0000 Subject: [PATCH 1/2] Make check work for copied datatype IDs to fix nexusformat/code#386 --- src/napi5.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/napi5.c b/src/napi5.c index 1f440d01..53e47cb1 100644 --- a/src/napi5.c +++ b/src/napi5.c @@ -2487,6 +2487,7 @@ NXstatus NX5getattra(NXhandle handle, char* name, void* data) hid_t memtype_id, filespace, datatype; H5T_class_t tclass; hsize_t ndims, dims[H5S_MAX_RANK]; + htri_t is_vlen_str = 0; /* false */ char **vstrdata = NULL; pFile = NXI5assert(handle); @@ -2506,7 +2507,10 @@ NXstatus NX5getattra(NXhandle handle, char* name, void* data) NXReportError("ERROR: unable to read dims"); return NX_ERROR; } - if (ndims == 0 && H5Tis_variable_str(datatype)) { + + is_vlen_str = H5Tis_variable_str(datatype); + if (ndims == 0 && is_vlen_str) { + /* this assumes a fixed size - is this dangerous? */ char *strdata = calloc(512, sizeof(char)); status = H5Aread(pFile->iCurrentA, H5S_ALL, &strdata); if (status >= 0) @@ -2521,7 +2525,7 @@ NXstatus NX5getattra(NXhandle handle, char* name, void* data) } tclass = H5Tget_class(datatype); /* stop gap kludge for fixed length strings */ - if (tclass == H5T_C_S1) { + if (tclass == H5T_STRING && !is_vlen_str) { char *datatmp = NULL; status = readStringAttribute(pFile->iCurrentA, &datatmp); if (status < 0) @@ -2533,7 +2537,7 @@ NXstatus NX5getattra(NXhandle handle, char* name, void* data) memset(iStart, 0, H5S_MAX_RANK * sizeof(int)); /* map datatypes of other plateforms */ - if (H5Tis_variable_str(datatype)) { + if (is_vlen_str) { vstrdata = (char **)malloc((size_t) dims[0] * sizeof(char *)); memtype_id = H5Tcopy(H5T_C_S1); H5Tset_size(memtype_id, H5T_VARIABLE); From a5ba1d96db869447ffe3f00659c075fcc505c72e Mon Sep 17 00:00:00 2001 From: Peter Chang Date: Thu, 19 Nov 2015 12:57:36 +0000 Subject: [PATCH 2/2] Add array attribute tests to cmake list --- test/CMakeLists.txt | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index d25809b0..c882e9c4 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -45,6 +45,10 @@ if(WITH_HDF5) target_link_libraries(napi_test_hdf5 NeXus_Shared_Library ${NAPI_LINK_LIBS}) add_test(NAME "NAPI-C-HDF5-test" COMMAND napi_test_hdf5) + add_executable(napi_attra_test_hdf5 napi_attra_test.c) + target_link_libraries(napi_attra_test_hdf5 NeXus_Shared_Library + ${NAPI_LINK_LIBS}) + add_test(NAME "NAPI-C-HDF5-attra-test" COMMAND napi_attra_test_hdf5) endif() if(WITH_HDF4) @@ -53,6 +57,10 @@ if(WITH_HDF4) ${NAPI_LINK_LIBS}) add_test(NAME "NAPI-C-HDF4-test" COMMAND napi_test_hdf4) + add_executable(napi_attra_test_hdf4 napi_attra_test.c) + target_link_libraries(napi_attra_test_hdf4 NeXus_Shared_Library + ${NAPI_LINK_LIBS}) + add_test(NAME "NAPI-C-HDF4-attra-test" COMMAND napi_attra_test_hdf4) endif() if(WITH_MXML) @@ -66,6 +74,10 @@ if(WITH_MXML) ${NAPI_LINK_LIBS}) add_test(NAME "NAPI-C-MXML-TABLE-test" COMMAND napi_test-xml-table) + add_executable(napi_attra_test_xml napi_attra_test.c) + target_link_libraries(napi_attra_test_xml NeXus_Shared_Library + ${NAPI_LINK_LIBS}) + add_test(NAME "NAPI-C-MXML-attra-test" COMMAND napi_attra_test_xml) endif() #------------------------------------------------------------------------------