Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Step:15-SP4
hdf5.34207
Add-H5T_is_numeric_with_unusual_unused_bits.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File Add-H5T_is_numeric_with_unusual_unused_bits.patch of Package hdf5.34207
From: Egbert Eich <eich@suse.com> Date: Tue May 21 13:45:37 2024 +0200 Subject: Add H5T_is_numeric_with_unusual_unused_bits() Patch-mainline: Upstream Git-repo: https://github.com/HDFGroup/hdf5 Git-commit: efdc817f62e410f8f2167a1230290bc1b47f4b50 References: bsc#1224158 Signed-off-by: Egbert Eich <eich@suse.de> --- src/H5T.c | 41 +++++++++++++++++++++++++++++++++++++++++ src/H5Tprivate.h | 1 + 2 files changed, 42 insertions(+) diff --git a/src/H5T.c b/src/H5T.c index 3c596127ae..9bc8e8bbbd 100644 --- a/src/H5T.c +++ b/src/H5T.c @@ -39,6 +39,7 @@ #include "H5MMprivate.h" /* Memory management */ #include "H5Pprivate.h" /* Property lists */ #include "H5Tpkg.h" /* Datatypes */ +#include "H5VMprivate.h" /* Vectors and arrays */ /****************/ /* Local Macros */ @@ -6066,3 +6067,43 @@ H5T_patch_vlen_file(H5T_t *dt, H5F_t *file) FUNC_LEAVE_NOAPI(SUCCEED) } /* end H5T_patch_vlen_file() */ + +/*------------------------------------------------------------------------- + * Function: H5T_is_numeric_with_unusual_unused_bits + * + * Purpose: Detect if a datatype is a numeric datatype (int, float, or + * bitfield) with an unusual # of unused bits. This means + * that the precision (i.e. the # of bits used) is less than + * the size of the datatype, at power-of-two boundaries. + * + * Return: true/false on success, can't fail + * + *------------------------------------------------------------------------- + */ +bool +H5T_is_numeric_with_unusual_unused_bits(const H5T_t *dt) +{ + bool ret_value = false; + + FUNC_ENTER_NOAPI_NOINIT_NOERR + + /* Sanity check */ + assert(dt); + assert(dt->shared); + + /* Is the correct type? */ + if (H5T_INTEGER == dt->shared->type || H5T_FLOAT == dt->shared->type || H5T_BITFIELD == dt->shared->type) + + /* Has unused bits? */ + if (dt->shared->u.atomic.prec < (dt->shared->size * 8)) { + unsigned surround_bits = + 1U << (1 + H5VM_log2_gen((dt->shared->u.atomic.prec + dt->shared->u.atomic.offset) - 1)); + + /* Unused bits are unusually large? */ + if (dt->shared->size > 1 && ((dt->shared->size * 8) > surround_bits)) + HGOTO_DONE(true); + } + +done: + FUNC_LEAVE_NOAPI(ret_value) +} /* end H5T_is_numeric_with_unusual_unused_bits() */ diff --git a/src/H5Tprivate.h b/src/H5Tprivate.h index ebc506351c..4b29fa3382 100644 --- a/src/H5Tprivate.h +++ b/src/H5Tprivate.h @@ -136,6 +136,7 @@ H5_DLL herr_t H5T_patch_file(H5T_t *dt, H5F_t *f); H5_DLL herr_t H5T_patch_vlen_file(H5T_t *dt, H5F_t *f); H5_DLL htri_t H5T_is_variable_str(const H5T_t *dt); H5_DLL htri_t H5T_is_vl_storage(const H5T_t *dt); +H5_DLL bool H5T_is_numeric_with_unusual_unused_bits(const H5T_t *dt); /* Reference specific functions */ H5_DLL H5R_type_t H5T_get_ref_type(const H5T_t *dt);
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor