diff options
author | Leon Arber <larber@ncsa.uiuc.edu> | 2005-03-13 23:38:11 (GMT) |
---|---|---|
committer | Leon Arber <larber@ncsa.uiuc.edu> | 2005-03-13 23:38:11 (GMT) |
commit | 82b3a0ca4a4c04c6ad75b30a5b8491b0f4321bd0 (patch) | |
tree | 5e4a52d66b2d9a8988d9eb5dd536725e664ebb2d /tools/lib/h5diff_util.c | |
parent | c33f593665c25e410d6da692daa322a1e88162eb (diff) | |
download | hdf5-82b3a0ca4a4c04c6ad75b30a5b8491b0f4321bd0.zip hdf5-82b3a0ca4a4c04c6ad75b30a5b8491b0f4321bd0.tar.gz hdf5-82b3a0ca4a4c04c6ad75b30a5b8491b0f4321bd0.tar.bz2 |
[svn-r10206]
Purpose:
Bug fix.
Description:
ph5diff fails on modi4 due to the way snprintf works on IRIX.
Solution:
The C99 standard says that, if there isn't enough room in the string,
snprintf should return the number of characters that
would have been written to the output string if there were enough room.
The snprintf on modi4 would return the number of characters that is was able to write
succesfully to the string if space ran out. The ph5diff logic that checks if
the output buffer was full did not handle this sort of return value correctly.
Used VSNPRINTF_WORKS from configure test to check how snprintf works and do
the logic accordingly.
Platforms tested:
modi4
Misc. update:
Diffstat (limited to 'tools/lib/h5diff_util.c')
-rw-r--r-- | tools/lib/h5diff_util.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/tools/lib/h5diff_util.c b/tools/lib/h5diff_util.c index c55028c..818a933 100644 --- a/tools/lib/h5diff_util.c +++ b/tools/lib/h5diff_util.c @@ -49,17 +49,20 @@ void parallel_print(const char* format, ...) if(overflow_file == NULL) /*no overflow has occurred yet */ { bytes_written = HDvsnprintf(outBuff+outBuffOffset, OUTBUFF_SIZE-outBuffOffset, format, ap); - - va_end(ap); + + va_end(ap); va_start(ap, format); - if(bytes_written >= (OUTBUFF_SIZE-outBuffOffset)) +#ifdef VSNPRINTF_WORKS + if(bytes_written >= (OUTBUFF_SIZE-outBuffOffset)) +#else + if((bytes_written+1) == (OUTBUFF_SIZE-outBuffOffset)) +#endif { /* Delete the characters that were written to outBuff since they will be written to the overflow_file */ - memset(outBuff+outBuffOffset, 0, OUTBUFF_SIZE - outBuffOffset); - + memset(outBuff+outBuffOffset, 0, OUTBUFF_SIZE - outBuffOffset); + overflow_file = tmpfile(); - if(overflow_file == NULL) printf("Warning: Could not create overflow file. Output may be truncated.\n"); else @@ -71,7 +74,6 @@ void parallel_print(const char* format, ...) else bytes_written = HDvfprintf(overflow_file, format, ap); - } va_end(ap); } |