@@ -2489,6 +2489,7 @@ NXstatus NX5getattra(NXhandle handle, char* name, void* data)
24892489 hid_t memtype_id , filespace , datatype ;
24902490 H5T_class_t tclass ;
24912491 hsize_t ndims , dims [H5S_MAX_RANK ];
2492+ htri_t is_vlen_str = 0 ; /* false */
24922493 char * * vstrdata = NULL ;
24932494
24942495 pFile = NXI5assert (handle );
@@ -2508,7 +2509,10 @@ NXstatus NX5getattra(NXhandle handle, char* name, void* data)
25082509 NXReportError ("ERROR: unable to read dims" );
25092510 return NX_ERROR ;
25102511 }
2511- if (ndims == 0 && H5Tis_variable_str (datatype )) {
2512+
2513+ is_vlen_str = H5Tis_variable_str (datatype );
2514+ if (ndims == 0 && is_vlen_str ) {
2515+ /* this assumes a fixed size - is this dangerous? */
25122516 char * strdata = calloc (512 , sizeof (char ));
25132517 status = H5Aread (pFile -> iCurrentA , H5S_ALL , & strdata );
25142518 if (status >= 0 )
@@ -2523,7 +2527,7 @@ NXstatus NX5getattra(NXhandle handle, char* name, void* data)
25232527 }
25242528 tclass = H5Tget_class (datatype );
25252529 /* stop gap kludge for fixed length strings */
2526- if (tclass == H5T_C_S1 ) {
2530+ if (tclass == H5T_STRING && ! is_vlen_str ) {
25272531 char * datatmp = NULL ;
25282532 status = readStringAttribute (pFile -> iCurrentA , & datatmp );
25292533 if (status < 0 )
@@ -2535,7 +2539,7 @@ NXstatus NX5getattra(NXhandle handle, char* name, void* data)
25352539
25362540 memset (iStart , 0 , H5S_MAX_RANK * sizeof (int ));
25372541 /* map datatypes of other plateforms */
2538- if (H5Tis_variable_str ( datatype ) ) {
2542+ if (is_vlen_str ) {
25392543 vstrdata = (char * * )malloc ((size_t ) dims [0 ] * sizeof (char * ));
25402544 memtype_id = H5Tcopy (H5T_C_S1 );
25412545 H5Tset_size (memtype_id , H5T_VARIABLE );
0 commit comments