From 055c563da4a40227019834908cc4405ab845782d Mon Sep 17 00:00:00 2001 From: Raymond Lu Date: Thu, 17 Feb 2005 15:49:08 -0500 Subject: [svn-r10035] Purpose: Bug fix Description: On SGI Altix(cobalt) Linux, wrong values were printed out for enum data type members. No apparent reason was discovered. Solution: use another pointer to the buffer containing the member value. It seems fix the problem. Platforms tested: cobalt - simple change, where the bug was discovered. --- tools/h5dump/h5dump.c | 11 +++++++++-- tools/h5ls/h5ls.c | 11 +++++++++-- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/tools/h5dump/h5dump.c b/tools/h5dump/h5dump.c index b7974f4..f241c8f 100644 --- a/tools/h5dump/h5dump.c +++ b/tools/h5dump/h5dump.c @@ -3671,6 +3671,7 @@ print_enum(hid_t type) { char **name = NULL; /*member names */ unsigned char *value = NULL; /*value array */ + unsigned char *copy = NULL; /*a pointer to value array */ unsigned nmembs; /*number of members */ int nchars; /*number of output characters */ hid_t super; /*enum base integer type */ @@ -3733,11 +3734,17 @@ print_enum(hid_t type) for (j = 0; j < dst_size; j++) printf("%02x", value[i * dst_size + j]); } else if (H5T_SGN_NONE == H5Tget_sign(native)) { + /*On SGI Altix(cobalt), wrong values were printed out with "value+i*dst_size" + *strangely, unless use another pointer "copy".*/ + copy = value+i*dst_size; HDfprintf(stdout,"%" H5_PRINTF_LL_WIDTH "u", *((unsigned long_long *) - ((void *) (value + i * dst_size)))); + ((void *)copy))); } else { + /*On SGI Altix(cobalt), wrong values were printed out with "value+i*dst_size" + *strangely, unless use another pointer "copy".*/ + copy = value+i*dst_size; HDfprintf(stdout,"%" H5_PRINTF_LL_WIDTH "d", - *((long_long *) ((void *) (value + i * dst_size)))); + *((long_long *) ((void *)copy))); } printf(";\n"); diff --git a/tools/h5ls/h5ls.c b/tools/h5ls/h5ls.c index 06445fb..44ad6ad 100644 --- a/tools/h5ls/h5ls.c +++ b/tools/h5ls/h5ls.c @@ -759,6 +759,7 @@ display_enum_type(hid_t type, int ind) { char **name=NULL; /* member names */ unsigned char *value=NULL; /* value array */ + unsigned char *copy = NULL; /* a pointer to value array */ unsigned nmembs; /* number of members */ int nchars; /* number of output characters */ hid_t super; /* enum base integer type */ @@ -816,11 +817,17 @@ display_enum_type(hid_t type, int ind) for (j=0; j