diff options
author | Binh-Minh Ribler <bmribler@hdfgroup.org> | 2006-12-11 01:23:04 (GMT) |
---|---|---|
committer | Binh-Minh Ribler <bmribler@hdfgroup.org> | 2006-12-11 01:23:04 (GMT) |
commit | c0ffce092fb97e2996678d2fd8e45d2b8f560126 (patch) | |
tree | e5349c765b866968b4da1ca5a2377ee3899c0643 /c++ | |
parent | 14e9b46ca21d49e2c3f3b670d4fbf72d7ce14d90 (diff) | |
download | hdf5-c0ffce092fb97e2996678d2fd8e45d2b8f560126.zip hdf5-c0ffce092fb97e2996678d2fd8e45d2b8f560126.tar.gz hdf5-c0ffce092fb97e2996678d2fd8e45d2b8f560126.tar.bz2 |
[svn-r13038] Purpose: Fixed user reported bug
Description:
In Attribute::read, H5Aread malloc's memory for the read data buffer,
so Attribute::read shouldn't allocate the buffer, but needs to
deallocate with HDfree.
Fixed a typo in H5StrType.cpp, should pass PredType::C_S1 to "copy"
instead of H5T_C_S1.
Platforms tested:
AIX 5.1 (copper)
Linux 2.6 (kagiso)
SunOS 5.8 64-bit (sol)
Diffstat (limited to 'c++')
-rw-r--r-- | c++/src/H5Attribute.cpp | 16 | ||||
-rw-r--r-- | c++/src/H5StrType.cpp | 2 |
2 files changed, 12 insertions, 6 deletions
diff --git a/c++/src/H5Attribute.cpp b/c++/src/H5Attribute.cpp index ec12d6b..438f6e7 100644 --- a/c++/src/H5Attribute.cpp +++ b/c++/src/H5Attribute.cpp @@ -30,6 +30,7 @@ #include "H5CommonFG.h" #include "H5DataType.h" #include "H5DataSpace.h" +#include "H5private.h" #ifndef H5_NO_NAMESPACE namespace H5 { @@ -128,18 +129,23 @@ void Attribute::read( const DataType& mem_type, void *buf ) const ///\param strg - IN: Buffer for read string ///\exception H5::AttributeIException // Programmer Binh-Minh Ribler - Apr, 2003 +// Modification +// 2006/12/9 - H5Aread allocates memory for character string +// buffer with malloc, therefore, no allocation here, +// but HDfree is needed. - BMR //-------------------------------------------------------------------------- void Attribute::read( const DataType& mem_type, H5std_string& strg ) const { - size_t size = mem_type.getSize(); - char* strg_C = new char[size+1]; // temporary C-string for C API - herr_t ret_value = H5Aread( id, mem_type.getId(), &strg_C ); + char* strg_C; // temporary C-string for C API + + // call C API to get the attribute string of chars + herr_t ret_value = H5Aread( id, mem_type.getId(), &strg_C); if( ret_value < 0 ) { throw AttributeIException("Attribute::read", "H5Aread failed"); } - strg = strg_C; - delete []strg_C; + strg = strg_C; // get 'string' from the C char* + HDfree(strg_C); } //-------------------------------------------------------------------------- diff --git a/c++/src/H5StrType.cpp b/c++/src/H5StrType.cpp index 849f345..bbf2bf5 100644 --- a/c++/src/H5StrType.cpp +++ b/c++/src/H5StrType.cpp @@ -102,7 +102,7 @@ StrType::StrType( const int dummy, const size_t& size ) : AtomType() { // use DataType::copy to make a copy of the string predefined type // then set its length - copy(H5T_C_S1); + copy(PredType::C_S1); setSize(size); } |