CPLErr HDF5Dataset::ReadGlobalAttributes(int bSUBDATASET) { HDF5GroupObjects *poRootGroup = static_cast<HDF5GroupObjects *>(CPLCalloc(sizeof(HDF5GroupObjects), 1)); poH5RootGroup = poRootGroup; poRootGroup->pszName = CPLStrdup("/"); poRootGroup->nType = H5G_GROUP; poRootGroup->poHparent = nullptr; poRootGroup->pszPath = nullptr; poRootGroup->pszUnderscorePath = nullptr; if( hHDF5 < 0 ) { CPLError(CE_Failure, CPLE_AppDefined, "hHDF5 < 0!"); return CE_None; } H5G_stat_t oStatbuf = {{0, 0}, {0, 0}, 0, H5G_UNKNOWN, 0, 0, {0, 0, 0, 0}}; if( H5Gget_objinfo(hHDF5, "/", FALSE, &oStatbuf) < 0 ) return CE_Failure; poRootGroup->objno[0] = oStatbuf.objno[0]; poRootGroup->objno[1] = oStatbuf.objno[1]; if( hGroupID > 0 ) H5Gclose(hGroupID); hGroupID = H5Gopen(hHDF5, "/"); if( hGroupID < 0 ) { CPLError(CE_Failure, CPLE_AppDefined, "hGroupId <0!"); return CE_None; } poRootGroup->nbAttrs = H5Aget_num_attrs(hGroupID); H5Gget_num_objs(hGroupID, &(poRootGroup->nbObjs)); if( poRootGroup->nbObjs > 0 ) { poRootGroup->poHchild = static_cast<HDF5GroupObjects *>( CPLCalloc(static_cast<size_t>(poRootGroup->nbObjs), sizeof(HDF5GroupObjects))); H5Giterate(hGroupID, "/", nullptr, HDF5CreateGroupObjs, poRootGroup); } else { poRootGroup->poHchild = nullptr; } HDF5ListGroupObjects(poRootGroup, bSUBDATASET); return CE_None; }
CPLErr HDF5Dataset::ReadGlobalAttributes(int bSUBDATASET) { HDF5GroupObjects *poRootGroup; poRootGroup = (HDF5GroupObjects*) CPLCalloc(sizeof(HDF5GroupObjects), 1); poH5RootGroup=poRootGroup; poRootGroup->pszName = CPLStrdup( "/" ); poRootGroup->nType = H5G_GROUP; poRootGroup->poHparent = NULL; poRootGroup->pszPath = NULL; poRootGroup->pszUnderscorePath = NULL; if( hHDF5 < 0 ) { printf( "hHDF5 <0!!\n" ); return CE_None; } H5G_stat_t oStatbuf; if( H5Gget_objinfo( hHDF5, "/", FALSE, &oStatbuf ) < 0 ) return CE_Failure; poRootGroup->objno[0] = oStatbuf.objno[0]; poRootGroup->objno[1] = oStatbuf.objno[1]; if( hGroupID > 0 ) H5Gclose( hGroupID ); hGroupID = H5Gopen( hHDF5, "/" ); if( hGroupID < 0 ){ printf( "hGroupID <0!!\n" ); return CE_None; } poRootGroup->nbAttrs = H5Aget_num_attrs( hGroupID ); H5Gget_num_objs( hGroupID, &( poRootGroup->nbObjs ) ); if( poRootGroup->nbObjs > 0 ) { poRootGroup->poHchild = ( HDF5GroupObjects * ) CPLCalloc( poRootGroup->nbObjs, sizeof( HDF5GroupObjects ) ); H5Giterate( hGroupID, "/", NULL, HDF5CreateGroupObjs, (void *)poRootGroup ); } else poRootGroup->poHchild = NULL; HDF5ListGroupObjects( poRootGroup, bSUBDATASET ); return CE_None; }