summaryrefslogtreecommitdiffstats
path: root/c++
diff options
context:
space:
mode:
authorBinh-Minh Ribler <bmribler@hdfgroup.org>2006-12-11 01:23:04 (GMT)
committerBinh-Minh Ribler <bmribler@hdfgroup.org>2006-12-11 01:23:04 (GMT)
commitc0ffce092fb97e2996678d2fd8e45d2b8f560126 (patch)
treee5349c765b866968b4da1ca5a2377ee3899c0643 /c++
parent14e9b46ca21d49e2c3f3b670d4fbf72d7ce14d90 (diff)
downloadhdf5-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.cpp16
-rw-r--r--c++/src/H5StrType.cpp2
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);
}