summaryrefslogtreecommitdiffstats
path: root/c++/src/H5CommonFG.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'c++/src/H5CommonFG.cpp')
-rw-r--r--c++/src/H5CommonFG.cpp28
1 files changed, 16 insertions, 12 deletions
diff --git a/c++/src/H5CommonFG.cpp b/c++/src/H5CommonFG.cpp
index 6a8609f..dcc331f 100644
--- a/c++/src/H5CommonFG.cpp
+++ b/c++/src/H5CommonFG.cpp
@@ -68,25 +68,29 @@ namespace H5 {
//--------------------------------------------------------------------------
Group CommonFG::createGroup( const char* name, size_t size_hint ) const
{
- // Create group creation property list for size_hint
- hid_t gcpl_id = H5Pcreate(H5P_GROUP_CREATE);
-
- // If the creation of the property list failed, throw an exception
- if( gcpl_id < 0 )
- throwException("createGroup", "H5Pcreate failed");
+ // Group creation property list for size_hint
+ hid_t gcpl_id = 0;
// Set the local heap size hint
- if( H5Pset_local_heap_size_hint(gcpl_id, size_hint) < 0) {
- H5Pclose(gcpl_id);
- throwException("createGroup", "H5Pset_local_heap_size failed");
- }
+ if(!(size_hint == (size_t)-1 || size_hint == 0)) {
+
+ // If the creation of the property list failed, throw an exception
+ if((gcpl_id = H5Pcreate(H5P_GROUP_CREATE)) < 0)
+ throwException("createGroup", "H5Pcreate failed");
+
+ if( H5Pset_local_heap_size_hint(gcpl_id, size_hint) < 0) {
+ H5Pclose(gcpl_id);
+ throwException("createGroup", "H5Pset_local_heap_size failed");
+ }
+ }
// Call C routine H5Gcreate2 to create the named group, giving the
// location id which can be a file id or a group id
hid_t group_id = H5Gcreate2( getLocId(), name, H5P_DEFAULT, gcpl_id, H5P_DEFAULT );
- // Close the group creation property list
- H5Pclose(gcpl_id);
+ // Close the group creation property list, if necessary
+ if(gcpl_id > 0)
+ H5Pclose(gcpl_id);
// If the creation of the group failed, throw an exception
if( group_id < 0 )