From 5077ac0c90290efc9611fcfca7c689f9b66b6d0d Mon Sep 17 00:00:00 2001 From: Binh-Minh Ribler Date: Wed, 14 Nov 2001 17:14:05 -0500 Subject: [svn-r4605] Purpose: Bug fix Description: Add the overloaded member function Attribute::getName to return the attribute name's length as in C API. This functionality was missing. Note that the current getName that returns "string" is not removed, for different way of using getName. Platforms tested: SunOS 5.7 (arabica) Windows 98 --- c++/src/H5Attribute.cpp | 21 +++++++++++++++------ c++/src/H5Attribute.h | 3 ++- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/c++/src/H5Attribute.cpp b/c++/src/H5Attribute.cpp index 86f1377..fa37059 100644 --- a/c++/src/H5Attribute.cpp +++ b/c++/src/H5Attribute.cpp @@ -76,23 +76,32 @@ hid_t Attribute::p_getType() const } } -// Gets the name of this attribute. -string Attribute::getName( size_t buf_size ) const +// Gets the name of this attribute, returning its length. +ssize_t Attribute::getName( size_t buf_size, string& attr_name ) const { char* name_C = new char[buf_size+1]; // temporary C-string for C API // Calls C routine H5Aget_name to get the name of the attribute - herr_t name_size = H5Aget_name( id, buf_size, name_C ); + ssize_t name_size = H5Aget_name( id, buf_size, name_C ); // If H5Aget_name returns a negative value, raise an exception, if( name_size < 0 ) { throw AttributeIException("Attribute::getName", "H5Aget_name failed"); } - // otherwise, create the string to hold the attribute name and return it - string name = string( name_C ); + // otherwise, convert the C string attribute name and return + attr_name = string( name_C ); delete name_C; - return( name ); + return( name_size ); +} + +// Gets the name of this attribute, returning the name, not the length. +string Attribute::getName( size_t buf_size ) const +{ + string attr_name; + ssize_t name_size = getName( buf_size, attr_name ); + return( attr_name ); + // let caller catch exception if any } // This private function calls the C API H5Aclose to close this attribute. diff --git a/c++/src/H5Attribute.h b/c++/src/H5Attribute.h index 9f1435b..7c509d5 100644 --- a/c++/src/H5Attribute.h +++ b/c++/src/H5Attribute.h @@ -18,7 +18,8 @@ class Attribute : public AbstractDs { virtual DataSpace getSpace() const; // Gets the name of this attribute. - string getName( size_t buf_size ) const; + ssize_t getName( size_t buf_size, string& attr_name ) const; + string getName( size_t buf_size ) const; // returns name, not its length // do not inherit iterateAttrs from H5Object int iterateAttrs() { return 0; } -- cgit v0.12