@@ -2487,6 +2487,7 @@ NXstatus NX5getattra(NXhandle handle, char* name, void* data)
24872487 hid_t memtype_id , filespace , datatype ;
24882488 H5T_class_t tclass ;
24892489 hsize_t ndims , dims [H5S_MAX_RANK ];
2490+ htri_t is_vlen_str = 0 ; /* false */
24902491 char * * vstrdata = NULL ;
24912492
24922493 pFile = NXI5assert (handle );
@@ -2506,7 +2507,10 @@ NXstatus NX5getattra(NXhandle handle, char* name, void* data)
25062507 NXReportError ("ERROR: unable to read dims" );
25072508 return NX_ERROR ;
25082509 }
2509- if (ndims == 0 && H5Tis_variable_str (datatype )) {
2510+
2511+ is_vlen_str = H5Tis_variable_str (datatype );
2512+ if (ndims == 0 && is_vlen_str ) {
2513+ /* this assumes a fixed size - is this dangerous? */
25102514 char * strdata = calloc (512 , sizeof (char ));
25112515 status = H5Aread (pFile -> iCurrentA , H5S_ALL , & strdata );
25122516 if (status >= 0 )
@@ -2521,7 +2525,7 @@ NXstatus NX5getattra(NXhandle handle, char* name, void* data)
25212525 }
25222526 tclass = H5Tget_class (datatype );
25232527 /* stop gap kludge for fixed length strings */
2524- if (tclass == H5T_C_S1 ) {
2528+ if (tclass == H5T_STRING && ! is_vlen_str ) {
25252529 char * datatmp = NULL ;
25262530 status = readStringAttribute (pFile -> iCurrentA , & datatmp );
25272531 if (status < 0 )
@@ -2533,7 +2537,7 @@ NXstatus NX5getattra(NXhandle handle, char* name, void* data)
25332537
25342538 memset (iStart , 0 , H5S_MAX_RANK * sizeof (int ));
25352539 /* map datatypes of other plateforms */
2536- if (H5Tis_variable_str ( datatype ) ) {
2540+ if (is_vlen_str ) {
25372541 vstrdata = (char * * )malloc ((size_t ) dims [0 ] * sizeof (char * ));
25382542 memtype_id = H5Tcopy (H5T_C_S1 );
25392543 H5Tset_size (memtype_id , H5T_VARIABLE );
0 commit comments