diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/H5FDspace.c | 8 | ||||
-rw-r--r-- | src/H5Fsuper.c | 8 | ||||
-rw-r--r-- | src/H5Pfcpl.c | 37 |
3 files changed, 29 insertions, 24 deletions
diff --git a/src/H5FDspace.c b/src/H5FDspace.c index 5526b03..19f9281 100644 --- a/src/H5FDspace.c +++ b/src/H5FDspace.c @@ -149,9 +149,11 @@ H5FD_extend(H5FD_t *file, H5FD_mem_t type, hbool_t new_block, hsize_t size, hadd /* Check for EOA already aligned */ if((mis_align = (eoa % file->alignment)) > 0) { extra = file->alignment - mis_align; - if (frag_addr) *frag_addr = eoa; - if (frag_size) *frag_size = extra; - } + if(frag_addr) + *frag_addr = eoa - file->base_addr; /* adjust for file's base address */ + if(frag_size) + *frag_size = extra; + } /* end if */ } /* end if */ /* Add in extra allocation amount */ diff --git a/src/H5Fsuper.c b/src/H5Fsuper.c index 3be8069..f26d93f 100644 --- a/src/H5Fsuper.c +++ b/src/H5Fsuper.c @@ -419,6 +419,14 @@ H5F_super_init(H5F_t *f, hid_t dxpl_id) if(H5P_get(plist, H5F_CRT_USER_BLOCK_NAME, &userblock_size) < 0) HGOTO_ERROR(H5E_FILE, H5E_CANTGET, FAIL, "unable to get userblock size") + /* Sanity check the userblock size vs. the file's allocation alignment */ + if(userblock_size > 0) { + if(userblock_size < f->shared->alignment) + HGOTO_ERROR(H5E_FILE, H5E_BADVALUE, FAIL, "userblock size must be > file object alignment") + if(0 != (userblock_size % f->shared->alignment)) + HGOTO_ERROR(H5E_FILE, H5E_BADVALUE, FAIL, "userblock size must be an integral multiple of file object alignment") + } /* end if */ + sblock->base_addr = userblock_size; sblock->status_flags = 0; diff --git a/src/H5Pfcpl.c b/src/H5Pfcpl.c index 4d576c6..406dbe1 100644 --- a/src/H5Pfcpl.c +++ b/src/H5Pfcpl.c @@ -261,44 +261,39 @@ done: * Programmer: Robb Matzke * Tuesday, January 6, 1998 * - * Modifications: - * - * Raymond Lu, Oct 14, 2001 - * Changed to the new generic property list. - * *------------------------------------------------------------------------- */ herr_t H5Pset_userblock(hid_t plist_id, hsize_t size) { - unsigned i; H5P_genplist_t *plist; /* Property list pointer */ - herr_t ret_value=SUCCEED; /* return value */ + herr_t ret_value = SUCCEED; /* return value */ - FUNC_ENTER_API(H5Pset_userblock, FAIL); + FUNC_ENTER_API(H5Pset_userblock, FAIL) H5TRACE2("e", "ih", plist_id, size); - /* Check that the userblock size is a power of two */ - for (i=8; i<8*sizeof(hsize_t); i++) { - hsize_t p2 = 8==i ? 0 : ((hsize_t)1<<i); + /* Sanity check non-zero userblock sizes */ + if(size > 0) { + /* Check that the userblock size is >=512 */ + if(size < 512) + HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "userblock size is non-zero and less than 512") - if (size == p2) - break; - } - if (i>=8*sizeof(hsize_t)) - HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "userblock size is not valid"); + /* Check that the userblock size is a power of two */ + if(!POWER_OF_TWO(size)) + HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "userblock size is non-zero and not a power of two") + } /* end if */ /* Get the plist structure */ - if(NULL == (plist = H5P_object_verify(plist_id,H5P_FILE_CREATE))) - HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID"); + if(NULL == (plist = H5P_object_verify(plist_id, H5P_FILE_CREATE))) + HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID") /* Set value */ if(H5P_set(plist, H5F_CRT_USER_BLOCK_NAME, &size) < 0) - HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set user block"); + HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set user block") done: - FUNC_LEAVE_API(ret_value); -} + FUNC_LEAVE_API(ret_value) +} /* end H5Pset_userblock() */ /*------------------------------------------------------------------------- |