Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 7 additions & 3 deletions src/napi5.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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)
Expand All @@ -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)
Expand All @@ -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);
Expand Down
12 changes: 12 additions & 0 deletions test/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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)
Expand All @@ -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()

#------------------------------------------------------------------------------
Expand Down