mirror of
https://github.com/HDFGroup/hdf5.git
synced 2025-03-13 16:47:58 +08:00
[svn-r15549] Description:
Initial checkin of extensible array data structure prototype code and regression tests. Initial definitions for revised FUNC_ENTER/LEAVE and error reporting macros, which are being vetted in the extensible array code. Minor warning and formatting cleanups in other sections of code. Tested on: Mac OS X/32 10.5.4 (amazon) in debug mode Mac OS X/32 10.5.4 (amazon) w/C++ & FORTRAN, w/threadsafe, in production mode FreeBSD/32 6.3 (duty) in debug mode FreeBSD/64 6.3 (liberty) w/C++ & FORTRAN, in debug mode Linux/32 2.6 (kagiso) w/PGI compilers, w/C++ & FORTRAN, w/threadsafe, in debug mode Linux/64-amd64 2.6 (smirom) w/Intel compilers w/default API=1.6.x, w/C++ & FORTRAN, in production mode Solaris/32 2.10 (linew) w/deprecated symbols disabled, w/C++ & FORTRAN, w/szip filter, in production mode Linux/64-ia64 2.6 (cobalt) w/Intel compilers, w/C++ & FORTRAN, in production mode Linux/64-ia64 2.4 (tg-login3) w/parallel, w/FORTRAN, in production mode Linux/64-amd64 2.6 (abe) w/parallel, w/FORTRAN, in production mode
This commit is contained in:
parent
d78821d619
commit
aa03e8bc94
8
MANIFEST
8
MANIFEST
@ -495,6 +495,13 @@
|
||||
./src/H5Epubgen.h
|
||||
./src/H5Epublic.h
|
||||
./src/H5Eterm.h
|
||||
./src/H5EA.c
|
||||
./src/H5EAcache.c
|
||||
./src/H5EAhdr.c
|
||||
./src/H5EAint.c
|
||||
./src/H5EApkg.h
|
||||
./src/H5EAprivate.h
|
||||
./src/H5EAtest.c
|
||||
./src/H5F.c
|
||||
./src/H5Fdbg.c
|
||||
./src/H5Ffake.c
|
||||
@ -767,6 +774,7 @@
|
||||
./test/dt_arith.c
|
||||
./test/dtypes.c
|
||||
./test/dtransform.c
|
||||
./test/earray.c
|
||||
./test/enum.c
|
||||
./test/extend.c
|
||||
./test/external.c
|
||||
|
@ -491,6 +491,7 @@ static const char * H5AC_entry_type_names[H5AC_NTYPES] =
|
||||
"free space sections",
|
||||
"shared OH message master table",
|
||||
"shared OH message index",
|
||||
"extensible array headers",
|
||||
"test entry" /* for testing only -- not used for actual files */
|
||||
};
|
||||
|
||||
|
@ -62,6 +62,7 @@ typedef enum {
|
||||
H5AC_FSPACE_SINFO_ID,/*free space sections */
|
||||
H5AC_SOHM_TABLE_ID, /*shared object header message master table */
|
||||
H5AC_SOHM_LIST_ID, /*shared message index stored as a list */
|
||||
H5AC_EARRAY_HDR_ID, /*extensible array header */
|
||||
H5AC_TEST_ID, /*test entry -- not used for actual files */
|
||||
H5AC_NTYPES /* Number of types, must be last */
|
||||
} H5AC_type_t;
|
||||
|
@ -802,7 +802,7 @@
|
||||
****************************************************************************/
|
||||
|
||||
#define H5C__H5C_T_MAGIC 0x005CAC0E
|
||||
#define H5C__MAX_NUM_TYPE_IDS 16
|
||||
#define H5C__MAX_NUM_TYPE_IDS 17
|
||||
#define H5C__PREFIX_LEN 32
|
||||
|
||||
struct H5C_t
|
||||
|
@ -1301,6 +1301,11 @@ H5Epush2(hid_t err_stack, const char *file, const char *func, unsigned line,
|
||||
if(maj_ptr->cls != min_ptr->cls)
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_UNSUPPORTED, FAIL, "major and minor errors not from same error class")
|
||||
|
||||
/* Note that the variable-argument parsing for the format is identical in
|
||||
* the H5E_printf_stack() routine - correct errors and make changes in both
|
||||
* places. -QAK
|
||||
*/
|
||||
|
||||
/* Format the description */
|
||||
va_start(ap, fmt);
|
||||
|
||||
|
403
src/H5EA.c
Normal file
403
src/H5EA.c
Normal file
@ -0,0 +1,403 @@
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
* Copyright by The HDF Group. *
|
||||
* Copyright by the Board of Trustees of the University of Illinois. *
|
||||
* All rights reserved. *
|
||||
* *
|
||||
* This file is part of HDF5. The full HDF5 copyright notice, including *
|
||||
* terms governing use, modification, and redistribution, is contained in *
|
||||
* the files COPYING and Copyright.html. COPYING can be found at the root *
|
||||
* of the source code distribution tree; Copyright.html can be found at the *
|
||||
* root level of an installed copy of the electronic HDF5 document set and *
|
||||
* is linked from the top-level documents page. It can also be found at *
|
||||
* http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
|
||||
* access to either file, you may request a copy from help@hdfgroup.org. *
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* Created: H5EA.c
|
||||
* Jun 17 2008
|
||||
* Quincey Koziol <koziol@hdfgroup.org>
|
||||
*
|
||||
* Purpose: Implements an "extensible array" for storing elements
|
||||
* in an array whose high bounds can extend and shrink.
|
||||
*
|
||||
* Please see the documentation in:
|
||||
* doc/html/TechNotes/ExtensibleArray.html for a full
|
||||
* description of how they work, etc.
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**********************/
|
||||
/* Module Declaration */
|
||||
/**********************/
|
||||
|
||||
#define H5EA_MODULE
|
||||
|
||||
|
||||
/***********************/
|
||||
/* Other Packages Used */
|
||||
/***********************/
|
||||
|
||||
|
||||
/***********/
|
||||
/* Headers */
|
||||
/***********/
|
||||
#include "H5private.h" /* Generic Functions */
|
||||
#include "H5Eprivate.h" /* Error handling */
|
||||
#include "H5EApkg.h" /* Extensible Arrays */
|
||||
|
||||
|
||||
/****************/
|
||||
/* Local Macros */
|
||||
/****************/
|
||||
|
||||
|
||||
/******************/
|
||||
/* Local Typedefs */
|
||||
/******************/
|
||||
|
||||
|
||||
/********************/
|
||||
/* Package Typedefs */
|
||||
/********************/
|
||||
|
||||
|
||||
/********************/
|
||||
/* Local Prototypes */
|
||||
/********************/
|
||||
|
||||
|
||||
/*********************/
|
||||
/* Package Variables */
|
||||
/*********************/
|
||||
|
||||
/* HDF5 API Entered variable */
|
||||
/* (move to H5.c when new FUNC_ENTER macros in actual use -QAK) */
|
||||
hbool_t H5_api_entered_g = FALSE;
|
||||
|
||||
|
||||
/*****************************/
|
||||
/* Library Private Variables */
|
||||
/*****************************/
|
||||
|
||||
|
||||
/*******************/
|
||||
/* Local Variables */
|
||||
/*******************/
|
||||
|
||||
/* Declare a free list to manage the H5EA_t struct */
|
||||
H5FL_DEFINE_STATIC(H5EA_t);
|
||||
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5EA_create
|
||||
*
|
||||
* Purpose: Creates a new empty extensible array in the file.
|
||||
*
|
||||
* Return: Pointer to earray wrapper on success
|
||||
* NULL on failure
|
||||
*
|
||||
* Programmer: Quincey Koziol
|
||||
* koziol@hdfgroup.org
|
||||
* Jun 17 2008
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
BEGIN_FUNC(PRIV, ERR,
|
||||
H5EA_t *, NULL, NULL,
|
||||
H5EA_create(H5F_t *f, hid_t dxpl_id, const H5EA_create_t *cparam))
|
||||
|
||||
/* Local variables */
|
||||
H5EA_t *ea = NULL; /* Pointer to new extensible array */
|
||||
H5EA_hdr_t *hdr = NULL; /* The extensible array header information */
|
||||
haddr_t ea_addr; /* Array header address */
|
||||
|
||||
#ifdef QAK
|
||||
HDfprintf(stderr, "%s: Called\n", FUNC);
|
||||
#endif /* QAK */
|
||||
|
||||
/*
|
||||
* Check arguments.
|
||||
*/
|
||||
HDassert(f);
|
||||
HDassert(cparam);
|
||||
|
||||
/* Create extensible array header */
|
||||
if(HADDR_UNDEF == (ea_addr = H5EA__hdr_create(f, dxpl_id, cparam)))
|
||||
H5E_THROW(H5E_CANTINIT, "can't create extensible array header")
|
||||
|
||||
/* Allocate extensible array wrapper */
|
||||
if(NULL == (ea = H5FL_MALLOC(H5EA_t)))
|
||||
H5E_THROW(H5E_CANTALLOC, "memory allocation failed for extensible array info")
|
||||
|
||||
/* Lock the array header into memory */
|
||||
if(NULL == (hdr = (H5EA_hdr_t *)H5AC_protect(f, dxpl_id, H5AC_EARRAY_HDR, ea_addr, NULL, NULL, H5AC_WRITE)))
|
||||
H5E_THROW(H5E_CANTPROTECT, "unable to load extensible array header")
|
||||
|
||||
/* Point extensible array wrapper at header and bump it's ref count */
|
||||
ea->hdr = hdr;
|
||||
if(H5EA__hdr_incr(ea->hdr) < 0)
|
||||
H5E_THROW(H5E_CANTINC, "can't increment reference count on shared array header")
|
||||
|
||||
/* Increment # of files using this array header */
|
||||
if(H5EA__hdr_fuse_incr(ea->hdr) < 0)
|
||||
H5E_THROW(H5E_CANTINC, "can't increment file reference count on shared array header")
|
||||
|
||||
/* Set file pointer for this array open context */
|
||||
ea->f = f;
|
||||
|
||||
/* Set the return value */
|
||||
ret_value = ea;
|
||||
|
||||
CATCH
|
||||
|
||||
if(hdr && H5AC_unprotect(f, dxpl_id, H5AC_EARRAY_HDR, ea_addr, hdr, H5AC__NO_FLAGS_SET) < 0)
|
||||
H5E_THROW(H5E_CANTUNPROTECT, "unable to release extensible array header")
|
||||
if(!ret_value)
|
||||
if(ea && H5EA_close(ea, dxpl_id) < 0)
|
||||
H5E_THROW(H5E_CLOSEERROR, "unable to close extensible array")
|
||||
|
||||
END_FUNC(PRIV) /* end H5EA_create() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5EA_get_nelmts
|
||||
*
|
||||
* Purpose: Query the current number of elements in array
|
||||
*
|
||||
* Return: SUCCEED/FAIL
|
||||
*
|
||||
* Programmer: Quincey Koziol
|
||||
* koziol@hdfgroup.org
|
||||
* Aug 21 2008
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
BEGIN_FUNC(PRIV, NOERR,
|
||||
herr_t, SUCCEED, -,
|
||||
H5EA_get_nelmts(const H5EA_t *ea, hsize_t *nelmts))
|
||||
|
||||
/* Local variables */
|
||||
|
||||
#ifdef QAK
|
||||
HDfprintf(stderr, "%s: Called\n", FUNC);
|
||||
#endif /* QAK */
|
||||
|
||||
/*
|
||||
* Check arguments.
|
||||
*/
|
||||
HDassert(ea);
|
||||
HDassert(nelmts);
|
||||
|
||||
/* Placeholder value */
|
||||
*nelmts = 0;
|
||||
|
||||
END_FUNC(PRIV) /* end H5EA_get_nelmts() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5EA_get_addr
|
||||
*
|
||||
* Purpose: Query the address of the array
|
||||
*
|
||||
* Return: SUCCEED/FAIL
|
||||
*
|
||||
* Programmer: Quincey Koziol
|
||||
* koziol@hdfgroup.org
|
||||
* Aug 21 2008
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
BEGIN_FUNC(PRIV, NOERR,
|
||||
herr_t, SUCCEED, -,
|
||||
H5EA_get_addr(const H5EA_t *ea, haddr_t *addr))
|
||||
|
||||
/* Local variables */
|
||||
|
||||
#ifdef QAK
|
||||
HDfprintf(stderr, "%s: Called\n", FUNC);
|
||||
#endif /* QAK */
|
||||
|
||||
/*
|
||||
* Check arguments.
|
||||
*/
|
||||
HDassert(ea);
|
||||
HDassert(ea->hdr);
|
||||
HDassert(addr);
|
||||
|
||||
/* Retrieve the address of the extensible array's header */
|
||||
*addr = ea->hdr->addr;
|
||||
|
||||
END_FUNC(PRIV) /* end H5EA_get_addr() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5EA_get_stats
|
||||
*
|
||||
* Purpose: Query the metadata stats of an array
|
||||
*
|
||||
* Return: SUCCEED/FAIL
|
||||
*
|
||||
* Programmer: Quincey Koziol
|
||||
* koziol@hdfgroup.org
|
||||
* Aug 21 2008
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
BEGIN_FUNC(PRIV, NOERR,
|
||||
herr_t, SUCCEED, -,
|
||||
H5EA_get_stats(const H5EA_t *ea, H5EA_stat_t *stats))
|
||||
|
||||
/* Local variables */
|
||||
|
||||
#ifdef QAK
|
||||
HDfprintf(stderr, "%s: Called\n", FUNC);
|
||||
#endif /* QAK */
|
||||
|
||||
/*
|
||||
* Check arguments.
|
||||
*/
|
||||
HDassert(ea);
|
||||
HDassert(stats);
|
||||
|
||||
/* Placeholder value */
|
||||
HDmemset(stats, 0, sizeof(*stats));
|
||||
|
||||
END_FUNC(PRIV) /* end H5EA_get_stats() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5EA_delete
|
||||
*
|
||||
* Purpose: Delete an extensible array
|
||||
*
|
||||
* Return: SUCCEED/FAIL
|
||||
*
|
||||
* Programmer: Quincey Koziol
|
||||
* koziol@hdfgroup.org
|
||||
* Aug 28 2008
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
BEGIN_FUNC(PRIV, ERR,
|
||||
herr_t, SUCCEED, FAIL,
|
||||
H5EA_delete(H5F_t *f, hid_t dxpl_id, haddr_t ea_addr))
|
||||
|
||||
/* Local variables */
|
||||
H5EA_hdr_t *hdr = NULL; /* The fractal heap header information */
|
||||
|
||||
/*
|
||||
* Check arguments.
|
||||
*/
|
||||
HDassert(f);
|
||||
HDassert(H5F_addr_defined(ea_addr));
|
||||
|
||||
/* Lock the array header into memory */
|
||||
#ifdef QAK
|
||||
HDfprintf(stderr, "%s: ea_addr = %a\n", FUNC, ea_addr);
|
||||
#endif /* QAK */
|
||||
if(NULL == (hdr = (H5EA_hdr_t *)H5AC_protect(f, dxpl_id, H5AC_EARRAY_HDR, ea_addr, NULL, NULL, H5AC_WRITE)))
|
||||
H5E_THROW(H5E_CANTPROTECT, "unable to protect extensible array header, address = %llu", (unsigned long_long)ea_addr)
|
||||
|
||||
/* Check for files using shared array header */
|
||||
if(hdr->file_rc)
|
||||
hdr->pending_delete = TRUE;
|
||||
else {
|
||||
/* Set the shared array header's file context for this operation */
|
||||
hdr->f = f;
|
||||
|
||||
/* Delete array now, starting with header (unprotects header) */
|
||||
if(H5EA__hdr_delete(hdr, dxpl_id) < 0)
|
||||
H5E_THROW(H5E_CANTDELETE, "unable to delete extensible array")
|
||||
hdr = NULL;
|
||||
} /* end if */
|
||||
|
||||
CATCH
|
||||
|
||||
/* Unprotect the header, if an error occurred */
|
||||
if(hdr && H5AC_unprotect(f, dxpl_id, H5AC_EARRAY_HDR, ea_addr, hdr, H5AC__NO_FLAGS_SET) < 0)
|
||||
H5E_THROW(H5E_CANTUNPROTECT, "unable to release extensible array header")
|
||||
|
||||
END_FUNC(PRIV) /* end H5EA_delete() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5EA_close
|
||||
*
|
||||
* Purpose: Close an extensible array
|
||||
*
|
||||
* Return: SUCCEED/FAIL
|
||||
*
|
||||
* Programmer: Quincey Koziol
|
||||
* koziol@hdfgroup.org
|
||||
* Aug 21 2008
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
BEGIN_FUNC(PRIV, ERR,
|
||||
herr_t, SUCCEED, FAIL,
|
||||
H5EA_close(H5EA_t *ea, hid_t dxpl_id))
|
||||
|
||||
/* Local variables */
|
||||
hbool_t pending_delete = FALSE; /* Whether the array is pending deletion */
|
||||
haddr_t ea_addr = HADDR_UNDEF; /* Address of array (for deletion) */
|
||||
|
||||
#ifdef QAK
|
||||
HDfprintf(stderr, "%s: Called\n", FUNC);
|
||||
#endif /* QAK */
|
||||
|
||||
/*
|
||||
* Check arguments.
|
||||
*/
|
||||
HDassert(ea);
|
||||
|
||||
/* Decrement file reference & check if this is the last open extensible array using the shared array header */
|
||||
if(0 == H5EA__hdr_fuse_decr(ea->hdr)) {
|
||||
/* Set the shared array header's file context for this operation */
|
||||
ea->hdr->f = ea->f;
|
||||
|
||||
/* Shut down anything that can't be put in the header's 'flush' callback */
|
||||
|
||||
/* Check for pending array deletion */
|
||||
if(ea->hdr->pending_delete) {
|
||||
/* Set local info, so array deletion can occur after decrementing the
|
||||
* header's ref count
|
||||
*/
|
||||
pending_delete = TRUE;
|
||||
ea_addr = ea->hdr->addr;
|
||||
} /* end if */
|
||||
} /* end if */
|
||||
|
||||
/* Decrement the reference count on the array header */
|
||||
/* (don't put in H5EA_hdr_fuse_decr() as the array header may be evicted
|
||||
* immediately -QAK)
|
||||
*/
|
||||
if(H5EA__hdr_decr(ea->hdr) < 0)
|
||||
H5E_THROW(H5E_CANTDEC, "can't decrement reference count on shared array header")
|
||||
|
||||
/* Check for pending array deletion */
|
||||
if(pending_delete) {
|
||||
H5EA_hdr_t *hdr; /* Another pointer to extensible array header */
|
||||
|
||||
/* Lock the array header into memory */
|
||||
if(NULL == (hdr = (H5EA_hdr_t *)H5AC_protect(ea->f, dxpl_id, H5AC_EARRAY_HDR, ea_addr, NULL, NULL, H5AC_WRITE)))
|
||||
H5E_THROW(H5E_CANTLOAD, "unable to load extensible array header")
|
||||
|
||||
/* Set the shared array header's file context for this operation */
|
||||
hdr->f = ea->f;
|
||||
|
||||
/* Delete array, starting with header (unprotects header) */
|
||||
if(H5EA__hdr_delete(hdr, dxpl_id) < 0)
|
||||
H5E_THROW(H5E_CANTDELETE, "unable to delete extensible array")
|
||||
} /* end if */
|
||||
|
||||
/* Release the extensible array wrapper */
|
||||
(void)H5FL_FREE(H5EA_t, ea);
|
||||
|
||||
CATCH
|
||||
|
||||
END_FUNC(PRIV) /* end H5EA_close() */
|
||||
|
392
src/H5EAcache.c
Normal file
392
src/H5EAcache.c
Normal file
@ -0,0 +1,392 @@
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
* Copyright by The HDF Group. *
|
||||
* Copyright by the Board of Trustees of the University of Illinois. *
|
||||
* All rights reserved. *
|
||||
* *
|
||||
* This file is part of HDF5. The full HDF5 copyright notice, including *
|
||||
* terms governing use, modification, and redistribution, is contained in *
|
||||
* the files COPYING and Copyright.html. COPYING can be found at the root *
|
||||
* of the source code distribution tree; Copyright.html can be found at the *
|
||||
* root level of an installed copy of the electronic HDF5 document set and *
|
||||
* is linked from the top-level documents page. It can also be found at *
|
||||
* http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
|
||||
* access to either file, you may request a copy from help@hdfgroup.org. *
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* Created: H5EAcache.c
|
||||
* Aug 26 2008
|
||||
* Quincey Koziol <koziol@hdfgroup.org>
|
||||
*
|
||||
* Purpose: Implement extensible array metadata cache methods.
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**********************/
|
||||
/* Module Declaration */
|
||||
/**********************/
|
||||
|
||||
#define H5EA_MODULE
|
||||
|
||||
|
||||
/***********************/
|
||||
/* Other Packages Used */
|
||||
/***********************/
|
||||
|
||||
|
||||
/***********/
|
||||
/* Headers */
|
||||
/***********/
|
||||
#include "H5private.h" /* Generic Functions */
|
||||
#include "H5Eprivate.h" /* Error handling */
|
||||
#include "H5EApkg.h" /* Extensible Arrays */
|
||||
#include "H5MFprivate.h" /* File memory management */
|
||||
#include "H5WBprivate.h" /* Wrapped Buffers */
|
||||
|
||||
|
||||
/****************/
|
||||
/* Local Macros */
|
||||
/****************/
|
||||
|
||||
/* Fractal heap format version #'s */
|
||||
#define H5EA_HDR_VERSION 0 /* Header */
|
||||
|
||||
/* Size of stack buffer for serialized headers */
|
||||
#define H5EA_HDR_BUF_SIZE 512
|
||||
|
||||
|
||||
/******************/
|
||||
/* Local Typedefs */
|
||||
/******************/
|
||||
|
||||
|
||||
/********************/
|
||||
/* Package Typedefs */
|
||||
/********************/
|
||||
|
||||
|
||||
/********************/
|
||||
/* Local Prototypes */
|
||||
/********************/
|
||||
|
||||
/* Metadata cache (H5AC) callbacks */
|
||||
static H5EA_hdr_t *H5EA__cache_hdr_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, const void *udata, void *udata2);
|
||||
static herr_t H5EA__cache_hdr_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr, H5EA_hdr_t *hdr, unsigned UNUSED * flags_ptr);
|
||||
static herr_t H5EA__cache_hdr_clear(H5F_t *f, H5EA_hdr_t *hdr, hbool_t destroy);
|
||||
static herr_t H5EA__cache_hdr_size(const H5F_t *f, const H5EA_hdr_t *hdr, size_t *size_ptr);
|
||||
|
||||
|
||||
/*********************/
|
||||
/* Package Variables */
|
||||
/*********************/
|
||||
|
||||
/* H5EA header inherits cache-like properties from H5AC */
|
||||
const H5AC_class_t H5AC_EARRAY_HDR[1] = {{
|
||||
H5AC_EARRAY_HDR_ID,
|
||||
(H5AC_load_func_t)H5EA__cache_hdr_load,
|
||||
(H5AC_flush_func_t)H5EA__cache_hdr_flush,
|
||||
(H5AC_dest_func_t)H5EA__cache_hdr_dest,
|
||||
(H5AC_clear_func_t)H5EA__cache_hdr_clear,
|
||||
(H5AC_size_func_t)H5EA__cache_hdr_size,
|
||||
}};
|
||||
|
||||
|
||||
/*****************************/
|
||||
/* Library Private Variables */
|
||||
/*****************************/
|
||||
|
||||
|
||||
/*******************/
|
||||
/* Local Variables */
|
||||
/*******************/
|
||||
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5EA_cache_hdr_load
|
||||
*
|
||||
* Purpose: Loads an extensible array header from the disk.
|
||||
*
|
||||
* Return: Success: Pointer to a new extensible array
|
||||
* Failure: NULL
|
||||
*
|
||||
* Programmer: Quincey Koziol
|
||||
* koziol@hdfgroup.org
|
||||
* Aug 26 2008
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
BEGIN_FUNC(STATIC, ERR,
|
||||
H5EA_hdr_t *, NULL, NULL,
|
||||
H5EA__cache_hdr_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, const void UNUSED *udata1, void UNUSED *udata2))
|
||||
|
||||
H5EA_hdr_t *hdr = NULL; /* Fractal heap info */
|
||||
size_t size; /* Header size */
|
||||
H5WB_t *wb = NULL; /* Wrapped buffer for header data */
|
||||
uint8_t hdr_buf[H5EA_HDR_BUF_SIZE]; /* Buffer for header */
|
||||
uint8_t *buf; /* Pointer to header buffer */
|
||||
const uint8_t *p; /* Pointer into raw data buffer */
|
||||
uint32_t stored_chksum; /* Stored metadata checksum value */
|
||||
uint32_t computed_chksum; /* Computed metadata checksum value */
|
||||
|
||||
/* Check arguments */
|
||||
HDassert(f);
|
||||
HDassert(H5F_addr_defined(addr));
|
||||
|
||||
/* Allocate space for the extensible array data structure */
|
||||
if(NULL == (hdr = H5EA__hdr_alloc(f)))
|
||||
H5E_THROW(H5E_CANTALLOC, "memory allocation failed for extensible array shared header")
|
||||
|
||||
/* Set the extensible array header's address */
|
||||
hdr->addr = addr;
|
||||
|
||||
/* Wrap the local buffer for serialized header info */
|
||||
if(NULL == (wb = H5WB_wrap(hdr_buf, sizeof(hdr_buf))))
|
||||
H5E_THROW(H5E_CANTINIT, "can't wrap buffer")
|
||||
|
||||
/* Compute the 'base' size of the fractal heap header on disk */
|
||||
size = H5EA_HEADER_SIZE(hdr);
|
||||
|
||||
/* Get a pointer to a buffer that's large enough for serialized header */
|
||||
if(NULL == (buf = (uint8_t *)H5WB_actual(wb, size)))
|
||||
H5E_THROW(H5E_CANTGET, "can't get actual buffer")
|
||||
|
||||
/* Read header from disk */
|
||||
if(H5F_block_read(f, H5FD_MEM_EARRAY_HDR, addr, size, dxpl_id, buf) < 0)
|
||||
H5E_THROW(H5E_READERROR, "can't read extensible array header")
|
||||
|
||||
/* Get temporary pointer to serialized header */
|
||||
p = buf;
|
||||
|
||||
/* Magic number */
|
||||
if(HDmemcmp(p, H5EA_HDR_MAGIC, (size_t)H5EA_SIZEOF_MAGIC))
|
||||
H5E_THROW(H5E_BADVALUE, "wrong extensible array header signature")
|
||||
p += H5EA_SIZEOF_MAGIC;
|
||||
|
||||
/* Version */
|
||||
if(*p++ != H5EA_HDR_VERSION)
|
||||
H5E_THROW(H5E_VERSION, "wrong extensible array header version")
|
||||
|
||||
/* General array information */
|
||||
hdr->elmt_size = *p++; /* Element size (in bytes) */
|
||||
hdr->idx_blk_elmts = *p++; /* # of elements to store in index block */
|
||||
hdr->data_blk_min_elmts = *p++; /* Min. # of elements per data block */
|
||||
hdr->sup_blk_min_data_ptrs = *p++; /* Min. # of data block pointers for a super block */
|
||||
|
||||
/* Sanity check */
|
||||
/* (allow for checksum not decoded yet) */
|
||||
HDassert((size_t)(p - buf) == (size - H5EA_SIZEOF_CHKSUM));
|
||||
|
||||
/* Set the array header's size */
|
||||
hdr->size = size;
|
||||
|
||||
/* Compute checksum on entire header */
|
||||
/* (including the filter information, if present) */
|
||||
computed_chksum = H5_checksum_metadata(buf, (size_t)(p - buf), 0);
|
||||
|
||||
/* Metadata checksum */
|
||||
UINT32DECODE(p, stored_chksum);
|
||||
|
||||
/* Sanity check */
|
||||
HDassert((size_t)(p - buf) == hdr->size);
|
||||
|
||||
/* Verify checksum */
|
||||
if(stored_chksum != computed_chksum)
|
||||
H5E_THROW(H5E_BADVALUE, "incorrect metadata checksum for extensible array header")
|
||||
|
||||
/* Set return value */
|
||||
ret_value = hdr;
|
||||
|
||||
CATCH
|
||||
|
||||
/* Release resources */
|
||||
if(wb && H5WB_unwrap(wb) < 0)
|
||||
H5E_THROW(H5E_CLOSEERROR, "can't close wrapped buffer")
|
||||
if(!ret_value)
|
||||
if(hdr && H5EA__cache_hdr_dest(f, hdr) < 0)
|
||||
H5E_THROW(H5E_CANTFREE, "unable to destroy extensible array header")
|
||||
|
||||
END_FUNC(STATIC) /* end H5EA__cache_hdr_load() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5EA__cache_hdr_flush
|
||||
*
|
||||
* Purpose: Flushes a dirty extensible array header to disk.
|
||||
*
|
||||
* Return: Non-negative on success/Negative on failure
|
||||
*
|
||||
* Programmer: Quincey Koziol
|
||||
* koziol@hdfgroup.org
|
||||
* Aug 26 2008
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
BEGIN_FUNC(STATIC, ERR,
|
||||
herr_t, SUCCEED, FAIL,
|
||||
H5EA__cache_hdr_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr, H5EA_hdr_t *hdr, unsigned UNUSED * flags_ptr))
|
||||
|
||||
H5WB_t *wb = NULL; /* Wrapped buffer for header data */
|
||||
uint8_t hdr_buf[H5EA_HDR_BUF_SIZE]; /* Buffer for header */
|
||||
|
||||
/* check arguments */
|
||||
HDassert(f);
|
||||
HDassert(H5F_addr_defined(addr));
|
||||
HDassert(hdr);
|
||||
|
||||
if(hdr->cache_info.is_dirty) {
|
||||
uint8_t *buf; /* Temporary raw data buffer */
|
||||
uint8_t *p; /* Pointer into raw data buffer */
|
||||
size_t size; /* Header size on disk */
|
||||
uint32_t metadata_chksum; /* Computed metadata checksum value */
|
||||
|
||||
/* Wrap the local buffer for serialized header info */
|
||||
if(NULL == (wb = H5WB_wrap(hdr_buf, sizeof(hdr_buf))))
|
||||
H5E_THROW(H5E_CANTINIT, "can't wrap buffer")
|
||||
|
||||
/* Compute the size of the heap header on disk */
|
||||
size = hdr->size;
|
||||
|
||||
/* Get a pointer to a buffer that's large enough for serialized header */
|
||||
if(NULL == (buf = (uint8_t *)H5WB_actual(wb, size)))
|
||||
H5E_THROW(H5E_CANTGET, "can't get actual buffer")
|
||||
|
||||
/* Get temporary pointer to serialized header */
|
||||
p = buf;
|
||||
|
||||
/* Magic number */
|
||||
HDmemcpy(p, H5EA_HDR_MAGIC, (size_t)H5EA_SIZEOF_MAGIC);
|
||||
p += H5EA_SIZEOF_MAGIC;
|
||||
|
||||
/* Version # */
|
||||
*p++ = H5EA_HDR_VERSION;
|
||||
|
||||
/* General array information */
|
||||
*p++ = hdr->elmt_size; /* Element size (in bytes) */
|
||||
*p++ = hdr->idx_blk_elmts; /* # of elements to store in index block */
|
||||
*p++ = hdr->data_blk_min_elmts; /* Min. # of elements per data block */
|
||||
*p++ = hdr->sup_blk_min_data_ptrs; /* Min. # of data block pointers for a super block */
|
||||
|
||||
/* Compute metadata checksum */
|
||||
metadata_chksum = H5_checksum_metadata(buf, (size_t)(p - buf), 0);
|
||||
|
||||
/* Metadata checksum */
|
||||
UINT32ENCODE(p, metadata_chksum);
|
||||
|
||||
/* Write the array header. */
|
||||
HDassert((size_t)(p - buf) == size);
|
||||
if(H5F_block_write(f, H5FD_MEM_EARRAY_HDR, addr, size, dxpl_id, buf) < 0)
|
||||
H5E_THROW(H5E_WRITEERROR, "unable to save extensible array header to disk")
|
||||
|
||||
hdr->cache_info.is_dirty = FALSE;
|
||||
} /* end if */
|
||||
|
||||
if(destroy)
|
||||
if(H5EA__cache_hdr_dest(f, hdr) < 0)
|
||||
H5E_THROW(H5E_CANTFREE, "unable to destroy extensible array header")
|
||||
|
||||
CATCH
|
||||
|
||||
/* Release resources */
|
||||
if(wb && H5WB_unwrap(wb) < 0)
|
||||
H5E_THROW(H5E_CLOSEERROR, "can't close wrapped buffer")
|
||||
|
||||
END_FUNC(STATIC) /* end H5EA__cache_hdr_flush() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5EA__cache_hdr_dest
|
||||
*
|
||||
* Purpose: Destroys a extensible array header in memory.
|
||||
*
|
||||
* Return: Non-negative on success/Negative on failure
|
||||
*
|
||||
* Programmer: Quincey Koziol
|
||||
* koziol@hdfgroup.org
|
||||
* Aug 26 2008
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
/* ARGSUSED */
|
||||
BEGIN_FUNC(PKG, NOERR,
|
||||
herr_t, SUCCEED, -,
|
||||
H5EA__cache_hdr_dest(H5F_t UNUSED *f, H5EA_hdr_t *hdr))
|
||||
|
||||
/*
|
||||
* Check arguments.
|
||||
*/
|
||||
HDassert(hdr);
|
||||
HDassert(hdr->rc == 0);
|
||||
|
||||
/* Free the shared info itself */
|
||||
(void)H5FL_FREE(H5EA_hdr_t, hdr);
|
||||
|
||||
END_FUNC(PKG) /* end H5EA__cache_hdr_dest() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5EA__cache_hdr_clear
|
||||
*
|
||||
* Purpose: Mark a extensible array header in memory as non-dirty.
|
||||
*
|
||||
* Return: Non-negative on success/Negative on failure
|
||||
*
|
||||
* Programmer: Quincey Koziol
|
||||
* koziol@hdfgroup.org
|
||||
* Aug 26 2008
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
BEGIN_FUNC(STATIC, ERR,
|
||||
herr_t, SUCCEED, FAIL,
|
||||
H5EA__cache_hdr_clear(H5F_t *f, H5EA_hdr_t *hdr, hbool_t destroy))
|
||||
|
||||
/*
|
||||
* Check arguments.
|
||||
*/
|
||||
HDassert(hdr);
|
||||
|
||||
/* Reset the dirty flag. */
|
||||
hdr->cache_info.is_dirty = FALSE;
|
||||
|
||||
if(destroy)
|
||||
if(H5EA__cache_hdr_dest(f, hdr) < 0)
|
||||
H5E_THROW(H5E_CANTFREE, "unable to destroy extensible array header")
|
||||
|
||||
CATCH
|
||||
|
||||
END_FUNC(STATIC) /* end H5EA__cache_hdr_clear() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5EA__cache_hdr_size
|
||||
*
|
||||
* Purpose: Compute the size in bytes of a extensible array header
|
||||
* on disk, and return it in *size_ptr. On failure,
|
||||
* the value of *size_ptr is undefined.
|
||||
*
|
||||
* Return: Non-negative on success/Negative on failure
|
||||
*
|
||||
* Programmer: Quincey Koziol
|
||||
* koziol@hdfgroup.org
|
||||
* Aug 26 2008
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
/* ARGSUSED */
|
||||
BEGIN_FUNC(STATIC, NOERR,
|
||||
herr_t, SUCCEED, -,
|
||||
H5EA__cache_hdr_size(const H5F_t UNUSED *f, const H5EA_hdr_t *hdr, size_t *size_ptr))
|
||||
|
||||
/* check arguments */
|
||||
HDassert(f);
|
||||
HDassert(hdr);
|
||||
HDassert(size_ptr);
|
||||
|
||||
/* Set size value */
|
||||
*size_ptr = hdr->size;
|
||||
|
||||
END_FUNC(STATIC) /* end H5EA__cache_hdr_size() */
|
||||
|
413
src/H5EAhdr.c
Normal file
413
src/H5EAhdr.c
Normal file
@ -0,0 +1,413 @@
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
* Copyright by The HDF Group. *
|
||||
* Copyright by the Board of Trustees of the University of Illinois. *
|
||||
* All rights reserved. *
|
||||
* *
|
||||
* This file is part of HDF5. The full HDF5 copyright notice, including *
|
||||
* terms governing use, modification, and redistribution, is contained in *
|
||||
* the files COPYING and Copyright.html. COPYING can be found at the root *
|
||||
* of the source code distribution tree; Copyright.html can be found at the *
|
||||
* root level of an installed copy of the electronic HDF5 document set and *
|
||||
* is linked from the top-level documents page. It can also be found at *
|
||||
* http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
|
||||
* access to either file, you may request a copy from help@hdfgroup.org. *
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* Created: H5EAhdr.c
|
||||
* Aug 26 2008
|
||||
* Quincey Koziol <koziol@hdfgroup.org>
|
||||
*
|
||||
* Purpose: Array header routines for extensible arrays.
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**********************/
|
||||
/* Module Declaration */
|
||||
/**********************/
|
||||
|
||||
#define H5EA_MODULE
|
||||
|
||||
|
||||
/***********************/
|
||||
/* Other Packages Used */
|
||||
/***********************/
|
||||
|
||||
|
||||
/***********/
|
||||
/* Headers */
|
||||
/***********/
|
||||
#include "H5private.h" /* Generic Functions */
|
||||
#include "H5Eprivate.h" /* Error handling */
|
||||
#include "H5EApkg.h" /* Extensible Arrays */
|
||||
#include "H5MFprivate.h" /* File memory management */
|
||||
|
||||
|
||||
/****************/
|
||||
/* Local Macros */
|
||||
/****************/
|
||||
|
||||
|
||||
/******************/
|
||||
/* Local Typedefs */
|
||||
/******************/
|
||||
|
||||
|
||||
/********************/
|
||||
/* Package Typedefs */
|
||||
/********************/
|
||||
|
||||
|
||||
/********************/
|
||||
/* Local Prototypes */
|
||||
/********************/
|
||||
|
||||
|
||||
/*********************/
|
||||
/* Package Variables */
|
||||
/*********************/
|
||||
|
||||
|
||||
/*****************************/
|
||||
/* Library Private Variables */
|
||||
/*****************************/
|
||||
|
||||
|
||||
/*******************/
|
||||
/* Local Variables */
|
||||
/*******************/
|
||||
|
||||
/* Declare a free list to manage the H5EA_hdr_t struct */
|
||||
H5FL_DEFINE(H5EA_hdr_t);
|
||||
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5EA__hdr_alloc
|
||||
*
|
||||
* Purpose: Allocate shared extensible array header
|
||||
*
|
||||
* Return: Non-negative on success/Negative on failure
|
||||
*
|
||||
* Programmer: Quincey Koziol
|
||||
* koziol@hdfgroup.org
|
||||
* Aug 26 2008
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
BEGIN_FUNC(PKG, ERR,
|
||||
H5EA_hdr_t *, NULL, NULL,
|
||||
H5EA__hdr_alloc(H5F_t *f))
|
||||
|
||||
H5EA_hdr_t *hdr = NULL; /* Shared fractal heap header */
|
||||
|
||||
/*
|
||||
* Check arguments.
|
||||
*/
|
||||
HDassert(f);
|
||||
|
||||
/* Allocate space for the shared information */
|
||||
if(NULL == (hdr = H5FL_CALLOC(H5EA_hdr_t)))
|
||||
H5E_THROW(H5E_CANTALLOC, "memory allocation failed for extensible array shared header")
|
||||
|
||||
/* Set the internal parameters for the array */
|
||||
hdr->f = f;
|
||||
|
||||
/* Set the return value */
|
||||
ret_value = hdr;
|
||||
|
||||
CATCH
|
||||
if(!ret_value)
|
||||
if(hdr && H5EA__cache_hdr_dest(f, hdr) < 0)
|
||||
H5E_THROW(H5E_CANTFREE, "unable to destroy extensible array header")
|
||||
|
||||
END_FUNC(PKG) /* end H5EA__hdr_alloc() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5EA_hdr_create
|
||||
*
|
||||
* Purpose: Creates a new extensible array header in the file
|
||||
*
|
||||
* Return: SUCCEED/FAIL
|
||||
*
|
||||
* Programmer: Quincey Koziol
|
||||
* koziol@hdfgroup.org
|
||||
* Jun 17 2008
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
BEGIN_FUNC(PKG, ERR,
|
||||
haddr_t, HADDR_UNDEF, HADDR_UNDEF,
|
||||
H5EA__hdr_create(H5F_t *f, hid_t dxpl_id, const H5EA_create_t *cparam))
|
||||
|
||||
H5EA_hdr_t *hdr; /* Extensible array header */
|
||||
|
||||
#ifdef QAK
|
||||
HDfprintf(stderr, "%s: Called\n", FUNC);
|
||||
#endif /* QAK */
|
||||
|
||||
/*
|
||||
* Check arguments.
|
||||
*/
|
||||
HDassert(f);
|
||||
HDassert(cparam);
|
||||
|
||||
#ifndef NDEBUG
|
||||
/* Check for valid parameters */
|
||||
if(cparam->elmt_size == 0)
|
||||
H5E_THROW(H5E_BADVALUE, "element size must be greater than zero")
|
||||
if(!POWER_OF_TWO(cparam->sup_blk_min_data_ptrs))
|
||||
H5E_THROW(H5E_BADVALUE, "min # of data block pointers in super block not power of two")
|
||||
if(!POWER_OF_TWO(cparam->data_blk_min_elmts))
|
||||
H5E_THROW(H5E_BADVALUE, "min # of elements per data block not power of two")
|
||||
#endif /* NDEBUG */
|
||||
|
||||
/* Allocate space for the shared information */
|
||||
if(NULL == (hdr = H5EA__hdr_alloc(f)))
|
||||
H5E_THROW(H5E_CANTALLOC, "memory allocation failed for extensible array shared header")
|
||||
|
||||
/* Set the internal parameters for the array */
|
||||
|
||||
/* Set the creation parameters for the array */
|
||||
hdr->elmt_size = cparam->elmt_size;
|
||||
hdr->idx_blk_elmts = cparam->idx_blk_elmts;
|
||||
hdr->sup_blk_min_data_ptrs = cparam->sup_blk_min_data_ptrs;
|
||||
hdr->data_blk_min_elmts = cparam->data_blk_min_elmts;
|
||||
|
||||
/* Set size of header on disk */
|
||||
hdr->size = H5EA_HEADER_SIZE(hdr);
|
||||
|
||||
/* Allocate space for the header on disk */
|
||||
if(HADDR_UNDEF == (hdr->addr = H5MF_alloc(f, H5FD_MEM_EARRAY_HDR, dxpl_id, hdr->size)))
|
||||
H5E_THROW(H5E_CANTALLOC, "file allocation failed for extensible array header")
|
||||
|
||||
/* Cache the new extensible array header */
|
||||
if(H5AC_set(f, dxpl_id, H5AC_EARRAY_HDR, hdr->addr, hdr, H5AC__NO_FLAGS_SET) < 0)
|
||||
H5E_THROW(H5E_CANTINSERT, "can't add extensible array header to cache")
|
||||
|
||||
/* Set address of array header to return */
|
||||
ret_value = hdr->addr;
|
||||
|
||||
|
||||
CATCH
|
||||
|
||||
END_FUNC(PKG) /* end H5EA__hdr_create() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5EA_hdr_incr
|
||||
*
|
||||
* Purpose: Increment component reference count on shared array header
|
||||
*
|
||||
* Return: Non-negative on success/Negative on failure
|
||||
*
|
||||
* Programmer: Quincey Koziol
|
||||
* koziol@hdfgroup.org
|
||||
* Aug 26 2008
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
BEGIN_FUNC(PKG, ERR,
|
||||
herr_t, SUCCEED, FAIL,
|
||||
H5EA__hdr_incr(H5EA_hdr_t *hdr))
|
||||
|
||||
/* Sanity check */
|
||||
HDassert(hdr);
|
||||
|
||||
/* Mark header as un-evictable when something is depending on it */
|
||||
if(hdr->rc == 0)
|
||||
if(H5AC_pin_protected_entry(hdr->f, hdr) < 0)
|
||||
H5E_THROW(H5E_CANTPIN, "unable to pin extensible array header")
|
||||
|
||||
/* Increment reference count on shared header */
|
||||
hdr->rc++;
|
||||
|
||||
CATCH
|
||||
|
||||
END_FUNC(PKG) /* end H5EA__hdr_incr() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5EA_hdr_decr
|
||||
*
|
||||
* Purpose: Decrement component reference count on shared array header
|
||||
*
|
||||
* Return: Non-negative on success/Negative on failure
|
||||
*
|
||||
* Programmer: Quincey Koziol
|
||||
* koziol@hdfgroup.org
|
||||
* Aug 26 2008
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
BEGIN_FUNC(PKG, ERR,
|
||||
herr_t, SUCCEED, FAIL,
|
||||
H5EA__hdr_decr(H5EA_hdr_t *hdr))
|
||||
|
||||
/* Sanity check */
|
||||
HDassert(hdr);
|
||||
HDassert(hdr->rc);
|
||||
|
||||
/* Decrement reference count on shared header */
|
||||
hdr->rc--;
|
||||
|
||||
/* Mark header as evictable again when nothing depend on it */
|
||||
if(hdr->rc == 0) {
|
||||
HDassert(hdr->file_rc == 0);
|
||||
if(H5AC_unpin_entry(hdr->f, hdr) < 0)
|
||||
H5E_THROW(H5E_CANTUNPIN, "unable to unpin extensible array header")
|
||||
} /* end if */
|
||||
|
||||
CATCH
|
||||
|
||||
END_FUNC(PKG) /* end H5EA__hdr_decr() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5EA_hdr_fuse_incr
|
||||
*
|
||||
* Purpose: Increment file reference count on shared array header
|
||||
*
|
||||
* Return: Non-negative on success/Negative on failure
|
||||
*
|
||||
* Programmer: Quincey Koziol
|
||||
* koziol@hdfgroup.org
|
||||
* Aug 26 2008
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
BEGIN_FUNC(PKG, NOERR,
|
||||
herr_t, SUCCEED, -,
|
||||
H5EA__hdr_fuse_incr(H5EA_hdr_t *hdr))
|
||||
|
||||
/* Sanity check */
|
||||
HDassert(hdr);
|
||||
|
||||
/* Increment file reference count on shared header */
|
||||
hdr->file_rc++;
|
||||
|
||||
END_FUNC(PKG) /* end H5EA__hdr_fuse_incr() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5EA_hdr_fuse_decr
|
||||
*
|
||||
* Purpose: Decrement file reference count on shared array header
|
||||
*
|
||||
* Return: Non-negative on success/Negative on failure
|
||||
*
|
||||
* Programmer: Quincey Koziol
|
||||
* koziol@hdfgroup.org
|
||||
* Aug 26 2008
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
BEGIN_FUNC(PKG, NOERR,
|
||||
size_t, 0, -,
|
||||
H5EA__hdr_fuse_decr(H5EA_hdr_t *hdr))
|
||||
|
||||
/* Sanity check */
|
||||
HDassert(hdr);
|
||||
HDassert(hdr->file_rc);
|
||||
|
||||
/* Decrement file reference count on shared header */
|
||||
hdr->file_rc--;
|
||||
|
||||
/* Set return value */
|
||||
ret_value = hdr->file_rc;
|
||||
|
||||
END_FUNC(PKG) /* end H5EA__hdr_fuse_decr() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5EA__hdr_delete
|
||||
*
|
||||
* Purpose: Delete an extensible array, starting with the header
|
||||
*
|
||||
* Return: SUCCEED/FAIL
|
||||
*
|
||||
* Programmer: Quincey Koziol
|
||||
* koziol@hdfgroup.org
|
||||
* Aug 26 2008
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
BEGIN_FUNC(PKG, ERR,
|
||||
herr_t, SUCCEED, FAIL,
|
||||
H5EA__hdr_delete(H5EA_hdr_t *hdr, hid_t dxpl_id))
|
||||
|
||||
/*
|
||||
* Check arguments.
|
||||
*/
|
||||
HDassert(hdr);
|
||||
HDassert(!hdr->file_rc);
|
||||
|
||||
#ifndef NDEBUG
|
||||
{
|
||||
unsigned hdr_status = 0; /* Array header's status in the metadata cache */
|
||||
|
||||
/* Check the array header's status in the metadata cache */
|
||||
if(H5AC_get_entry_status(hdr->f, hdr->addr, &hdr_status) < 0)
|
||||
H5E_THROW(H5E_CANTGET, "unable to check metadata cache status for array header")
|
||||
|
||||
/* Sanity checks on array header */
|
||||
HDassert(hdr_status & H5AC_ES__IN_CACHE);
|
||||
HDassert(hdr_status & H5AC_ES__IS_PROTECTED);
|
||||
} /* end block */
|
||||
#endif /* NDEBUG */
|
||||
|
||||
#ifdef LATER
|
||||
/* Check for root direct/indirect block */
|
||||
if(H5F_addr_defined(hdr->man_dtable.table_addr)) {
|
||||
#ifdef QAK
|
||||
HDfprintf(stderr, "%s: hdr->man_dtable.table_addr = %a\n", FUNC, hdr->man_dtable.table_addr);
|
||||
#endif /* QAK */
|
||||
if(hdr->man_dtable.curr_root_rows == 0) {
|
||||
hsize_t dblock_size; /* Size of direct block */
|
||||
|
||||
/* Check for I/O filters on this heap */
|
||||
if(hdr->filter_len > 0) {
|
||||
dblock_size = (hsize_t)hdr->pline_root_direct_size;
|
||||
#ifdef QAK
|
||||
HDfprintf(stderr, "%s: hdr->pline_root_direct_size = %Zu\n", FUNC, hdr->pline_root_direct_size);
|
||||
#endif /* QAK */
|
||||
|
||||
/* Reset the header's pipeline information */
|
||||
hdr->pline_root_direct_size = 0;
|
||||
hdr->pline_root_direct_filter_mask = 0;
|
||||
} /* end else */
|
||||
else
|
||||
dblock_size = (hsize_t)hdr->man_dtable.cparam.start_block_size;
|
||||
|
||||
/* Delete root direct block */
|
||||
if(H5HF_man_dblock_delete(hdr->f, dxpl_id, hdr->man_dtable.table_addr, dblock_size) < 0)
|
||||
HGOTO_ERROR(H5E_HEAP, H5E_CANTFREE, FAIL, "unable to release fractal heap root direct block")
|
||||
} /* end if */
|
||||
else {
|
||||
/* Delete root indirect block */
|
||||
if(H5HF_man_iblock_delete(hdr, dxpl_id, hdr->man_dtable.table_addr, hdr->man_dtable.curr_root_rows, NULL, 0) < 0)
|
||||
HGOTO_ERROR(H5E_HEAP, H5E_CANTFREE, FAIL, "unable to release fractal heap root indirect block")
|
||||
} /* end else */
|
||||
} /* end if */
|
||||
#endif /* LATER */
|
||||
|
||||
/* Release header's disk space */
|
||||
if(H5MF_xfree(hdr->f, H5FD_MEM_EARRAY_HDR, dxpl_id, hdr->addr, (hsize_t)hdr->size) < 0)
|
||||
H5E_THROW(H5E_CANTFREE, "unable to release extensible array header")
|
||||
|
||||
/* Finished deleting header */
|
||||
if(H5AC_unprotect(hdr->f, dxpl_id, H5AC_EARRAY_HDR, hdr->addr, hdr, H5AC__DIRTIED_FLAG | H5AC__DELETED_FLAG) < 0)
|
||||
H5E_THROW(H5E_CANTUNPROTECT, "unable to release extensible array header")
|
||||
hdr = NULL;
|
||||
|
||||
CATCH
|
||||
|
||||
/* Unprotect the header, if an error occurred */
|
||||
if(hdr && H5AC_unprotect(hdr->f, dxpl_id, H5AC_EARRAY_HDR, hdr->addr, hdr, H5AC__NO_FLAGS_SET) < 0)
|
||||
H5E_THROW(H5E_CANTUNPROTECT, "unable to release extensible array header")
|
||||
|
||||
END_FUNC(PKG) /* end H5EA__hdr_delete() */
|
||||
|
81
src/H5EAint.c
Normal file
81
src/H5EAint.c
Normal file
@ -0,0 +1,81 @@
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
* Copyright by The HDF Group. *
|
||||
* Copyright by the Board of Trustees of the University of Illinois. *
|
||||
* All rights reserved. *
|
||||
* *
|
||||
* This file is part of HDF5. The full HDF5 copyright notice, including *
|
||||
* terms governing use, modification, and redistribution, is contained in *
|
||||
* the files COPYING and Copyright.html. COPYING can be found at the root *
|
||||
* of the source code distribution tree; Copyright.html can be found at the *
|
||||
* root level of an installed copy of the electronic HDF5 document set and *
|
||||
* is linked from the top-level documents page. It can also be found at *
|
||||
* http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
|
||||
* access to either file, you may request a copy from help@hdfgroup.org. *
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* Created: H5EAint.c
|
||||
* Jun 17 2008
|
||||
* Quincey Koziol <koziol@hdfgroup.org>
|
||||
*
|
||||
* Purpose: Internal routines for extnsible arrays.
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**********************/
|
||||
/* Module Declaration */
|
||||
/**********************/
|
||||
|
||||
#define H5EA_MODULE
|
||||
|
||||
|
||||
/***********************/
|
||||
/* Other Packages Used */
|
||||
/***********************/
|
||||
|
||||
|
||||
/***********/
|
||||
/* Headers */
|
||||
/***********/
|
||||
#include "H5private.h" /* Generic Functions */
|
||||
#include "H5Eprivate.h" /* Error handling */
|
||||
#include "H5EApkg.h" /* Extensible Arrays */
|
||||
|
||||
|
||||
/****************/
|
||||
/* Local Macros */
|
||||
/****************/
|
||||
|
||||
|
||||
/******************/
|
||||
/* Local Typedefs */
|
||||
/******************/
|
||||
|
||||
|
||||
/********************/
|
||||
/* Package Typedefs */
|
||||
/********************/
|
||||
|
||||
|
||||
/********************/
|
||||
/* Local Prototypes */
|
||||
/********************/
|
||||
|
||||
|
||||
/*********************/
|
||||
/* Package Variables */
|
||||
/*********************/
|
||||
|
||||
|
||||
/*****************************/
|
||||
/* Library Private Variables */
|
||||
/*****************************/
|
||||
|
||||
|
||||
/*******************/
|
||||
/* Local Variables */
|
||||
/*******************/
|
||||
|
||||
|
440
src/H5EApkg.h
Normal file
440
src/H5EApkg.h
Normal file
@ -0,0 +1,440 @@
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
* Copyright by The HDF Group. *
|
||||
* Copyright by the Board of Trustees of the University of Illinois. *
|
||||
* All rights reserved. *
|
||||
* *
|
||||
* This file is part of HDF5. The full HDF5 copyright notice, including *
|
||||
* terms governing use, modification, and redistribution, is contained in *
|
||||
* the files COPYING and Copyright.html. COPYING can be found at the root *
|
||||
* of the source code distribution tree; Copyright.html can be found at the *
|
||||
* root level of an installed copy of the electronic HDF5 document set and *
|
||||
* is linked from the top-level documents page. It can also be found at *
|
||||
* http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
|
||||
* access to either file, you may request a copy from help@hdfgroup.org. *
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
/*
|
||||
* Programmer: Quincey Koziol <koziol@hdfgroup.org>
|
||||
* Tuesday, June 17, 2008
|
||||
*
|
||||
* Purpose: This file contains declarations which are visible only within
|
||||
* the H5EA package. Source files outside the H5EA package should
|
||||
* include H5EAprivate.h instead.
|
||||
*/
|
||||
#if !(defined(H5EA_PACKAGE) | defined(H5EA_MODULE))
|
||||
#error "Do not include this file outside the H5EA package!"
|
||||
#endif
|
||||
|
||||
#ifndef _H5EApkg_H
|
||||
#define _H5EApkg_H
|
||||
|
||||
/* Get package's private header */
|
||||
#include "H5EAprivate.h"
|
||||
|
||||
/* Other private headers needed by this file */
|
||||
#include "H5ACprivate.h" /* Metadata cache */
|
||||
#include "H5FLprivate.h" /* Free Lists */
|
||||
|
||||
/************************************************/
|
||||
/* Revisions to FUNC_ENTER/LEAVE & Error Macros */
|
||||
/************************************************/
|
||||
|
||||
#ifndef NDEBUG
|
||||
/* `S' is the name of a function which is being tested to check if it's */
|
||||
/* a public API function */
|
||||
#define H5_IS_PUB(S) (((HDisdigit(S[1]) || HDisupper(S[1])) && HDislower(S[2])) || \
|
||||
((HDisdigit(S[2]) || HDisupper(S[2])) && HDislower(S[3])) || \
|
||||
(!S[4] || ((HDisdigit(S[3]) || HDisupper(S[3])) && HDislower(S[4]))))
|
||||
|
||||
/* `S' is the name of a function which is being tested to check if it's */
|
||||
/* a private library function */
|
||||
#define H5_IS_PRIV(S) (((HDisdigit(S[1]) || HDisupper(S[1])) && '_' == S[2] && HDislower(S[3])) || \
|
||||
((HDisdigit(S[2]) || HDisupper(S[2])) && '_' == S[3] && HDislower(S[4])) || \
|
||||
((HDisdigit(S[3]) || HDisupper(S[3])) && '_' == S[4] && HDislower(S[5])))
|
||||
|
||||
/* `S' is the name of a function which is being tested to check if it's */
|
||||
/* a package private function */
|
||||
#define H5_IS_PKG(S) (((HDisdigit(S[1]) || HDisupper(S[1])) && '_' == S[2] && '_' == S[3] && HDislower(S[4])) || \
|
||||
((HDisdigit(S[2]) || HDisupper(S[2])) && '_' == S[3] && '_' == S[4] && HDislower(S[5])) || \
|
||||
((HDisdigit(S[3]) || HDisupper(S[3])) && '_' == S[4] && '_' == S[5] && HDislower(S[6])))
|
||||
|
||||
#define FUNC_ENTER_NAME_CHECK(asrt) \
|
||||
{ \
|
||||
static hbool_t func_check = FALSE; \
|
||||
\
|
||||
if(!func_check) { \
|
||||
/* Check function naming status */ \
|
||||
HDassert(asrt); \
|
||||
\
|
||||
/* Don't check again */ \
|
||||
func_check = TRUE; \
|
||||
} /* end if */ \
|
||||
} /* end scope */
|
||||
#else /* NDEBUG */
|
||||
#define FUNC_ENTER_NAME_CHECK(asrt)
|
||||
#define H5_IS_PUB(S)
|
||||
#define H5_IS_PRIV(S)
|
||||
#define H5_IS_PKG(S)
|
||||
#endif /* NDEBUG */
|
||||
|
||||
/* Macro for referencing package initialization variables */
|
||||
#define H5_PACKAGE_INIT_VAR(x) H5_GLUE3(H5_, x, _init_g)
|
||||
|
||||
/* Macros to check if a package is initialized */
|
||||
#define H5_CHECK_PACKAGE_INIT_REG_YES(asrt) HDassert(H5_PACKAGE_INIT_VAR(pkg));
|
||||
#define H5_CHECK_PACKAGE_INIT_REG_NO(asrt)
|
||||
#define H5_CHECK_PACKAGE_INIT_INIT_YES(asrt)
|
||||
#define H5_CHECK_PACKAGE_INIT_INIT_NO(asrt)
|
||||
|
||||
/* Macros to initialize package, if a package initialization routine is defined */
|
||||
#define H5_PKG_YES_INIT(pkg) \
|
||||
if(!H5_PACKAGE_INIT_VAR(pkg)) { \
|
||||
if(H5_GLUE(pkg, _pkg_init)() < 0) { \
|
||||
/* (Can't use H5E_THROW here) */ \
|
||||
H5E_PRINTF(H5E_CANTINIT, "interface initialization failed"); \
|
||||
ret_value = fail_value; \
|
||||
goto func_init_failed; \
|
||||
} /* end if */ \
|
||||
} /* end if */
|
||||
#define H5_PKG_NO_INIT(pkg)
|
||||
|
||||
/* Macros to declare package initialization variable, if a package initialization routine is defined */
|
||||
#define H5_PKG_YES_INIT_VAR(pkg) extern hbool_t H5_PACKAGE_INIT_VAR(H5_MY_PKG);
|
||||
#define H5_PKG_NO_INIT_VAR(pkg)
|
||||
|
||||
/* Declare package initialization variable (if in a package) */
|
||||
#define H5_DECLARE_PKG_VAR(pkg_init, pkg) H5_GLUE3(H5_PKG_, pkg_init, _INIT_VAR)(pkg)
|
||||
#ifdef H5_MY_PKG
|
||||
H5_DECLARE_PKG_VAR(H5_MY_PKG_INIT, H5_MY_PKG)
|
||||
#endif /* H5_MY_PKG */
|
||||
|
||||
/* API re-entrance variable */
|
||||
extern hbool_t H5_api_entered_g; /* Has library already been entered through API? */
|
||||
|
||||
/* Macros for entering different scopes of routines */
|
||||
#define H5_PACKAGE_ENTER(pkg, pkg_init, init) \
|
||||
FUNC_ENTER_NAME_CHECK(H5_IS_PKG(__func__)) \
|
||||
\
|
||||
/* The library should be initialized already */ \
|
||||
HDassert(H5_INIT_GLOBAL); \
|
||||
\
|
||||
/* This interface should be initialized already */ \
|
||||
/* (except for package initialization routines :-) */ \
|
||||
H5_GLUE4(H5_CHECK_PACKAGE_INIT_, init, _, pkg_init)(pkg) \
|
||||
\
|
||||
/* Push the name of this function on the function stack */ \
|
||||
H5_PUSH_FUNC(__func__) \
|
||||
\
|
||||
/* Enter scope for this type of function */ \
|
||||
{
|
||||
|
||||
#define H5_PRIVATE_ENTER(pkg, pkg_init) \
|
||||
FUNC_ENTER_NAME_CHECK(H5_IS_PRIV(__func__)) \
|
||||
\
|
||||
/* The library should be initialized already */ \
|
||||
HDassert(H5_INIT_GLOBAL); \
|
||||
\
|
||||
/* Initialize this interface if desired */ \
|
||||
H5_GLUE3(H5_PKG_, pkg_init, _INIT)(pkg) \
|
||||
\
|
||||
/* Push the name of this function on the function stack */ \
|
||||
H5_PUSH_FUNC(__func__) \
|
||||
\
|
||||
/* Enter scope for this type of function */ \
|
||||
{{
|
||||
|
||||
/* Remove this shim and change H5TRACE* macros when this change is permanent -QAK */
|
||||
#ifdef H5_DEBUG_API
|
||||
#define FUNC __func__
|
||||
#endif
|
||||
|
||||
#define H5_PUBLIC_ENTER(pkg, pkg_init) \
|
||||
FUNC_ENTER_API_VARS(__func__) \
|
||||
FUNC_ENTER_API_THREADSAFE; \
|
||||
FUNC_ENTER_NAME_CHECK(H5_IS_PUB(__func__)) \
|
||||
\
|
||||
/* Clear thread error stack when entering public functions */ \
|
||||
H5E_clear_stack(NULL); \
|
||||
\
|
||||
/* Initialize the library or bust */ \
|
||||
if(!(H5_INIT_GLOBAL)) { \
|
||||
H5_INIT_GLOBAL = TRUE; \
|
||||
if(H5_init_library() < 0) { \
|
||||
/* (Can't use H5E_THROW here) */ \
|
||||
H5E_PRINTF(H5E_CANTINIT, "interface initialization failed"); \
|
||||
ret_value = fail_value; \
|
||||
goto func_init_failed; \
|
||||
} /* end if */ \
|
||||
} /* end if */ \
|
||||
\
|
||||
/* Initialize this interface if desired */ \
|
||||
H5_GLUE3(H5_PKG_, pkg_init, _INIT)(pkg) \
|
||||
\
|
||||
/* Check for re-entering API routine */ \
|
||||
HDassert(!H5_api_entered_g); \
|
||||
H5_api_entered_g = TRUE; \
|
||||
\
|
||||
/* Start logging MPI's MPE information */ \
|
||||
BEGIN_MPE_LOG(__func__) \
|
||||
\
|
||||
/* Push the name of this function on the function stack */ \
|
||||
H5_PUSH_FUNC(__func__) \
|
||||
\
|
||||
/* Enter scope for this type of function */ \
|
||||
{{{
|
||||
|
||||
/* Macros for substituting the package name */
|
||||
#define FUNC_ENTER_STATIC H5_PACKAGE_ENTER(H5_MY_PKG, H5_MY_PKG_INIT, REG)
|
||||
#define FUNC_ENTER_PKGINIT H5_PACKAGE_ENTER(H5_MY_PKG, H5_MY_PKG_INIT, INIT)
|
||||
#define FUNC_ENTER_PKG H5_PACKAGE_ENTER(H5_MY_PKG, H5_MY_PKG_INIT, REG)
|
||||
#define FUNC_ENTER_PRIV H5_PRIVATE_ENTER(H5_MY_PKG, H5_MY_PKG_INIT)
|
||||
#define FUNC_ENTER_PUB H5_PUBLIC_ENTER(H5_MY_PKG, H5_MY_PKG_INIT)
|
||||
|
||||
/* Macros for substituting a function prefix */
|
||||
#define FUNC_PREFIX_STATIC static
|
||||
#define FUNC_PREFIX_PKGINIT
|
||||
#define FUNC_PREFIX_PKG
|
||||
#define FUNC_PREFIX_PRIV
|
||||
#define FUNC_PREFIX_PUB
|
||||
|
||||
/* Macros for declaring error variables */
|
||||
#define FUNC_ERR_VAR_ERR(ret_typ, err) \
|
||||
hbool_t past_catch = FALSE; \
|
||||
ret_typ fail_value = err;
|
||||
#define FUNC_ERR_VAR_ERRCATCH(ret_typ, err) \
|
||||
hbool_t past_catch = FALSE;
|
||||
#define FUNC_ERR_VAR_NOERR(ret_typ, err)
|
||||
|
||||
/* Use this macro when entering all functions */
|
||||
#define BEGIN_FUNC(scope, use_err, ret_typ, ret_init, err, func) \
|
||||
H5_GLUE(FUNC_PREFIX_, scope) \
|
||||
ret_typ \
|
||||
func \
|
||||
/* Open function */ \
|
||||
{ \
|
||||
ret_typ ret_value = ret_init; \
|
||||
H5_GLUE(FUNC_ERR_VAR_, use_err)(ret_typ, err) \
|
||||
H5_GLUE(FUNC_ENTER_, scope)
|
||||
|
||||
/* Macros for label when a function initialization can fail */
|
||||
#define H5_PRIV_YES_FUNC_INIT_FAILED func_init_failed:
|
||||
#define H5_PRIV_NO_FUNC_INIT_FAILED
|
||||
#define H5_PRIV_FUNC_INIT_FAILED(pkg_init) H5_GLUE3(H5_PRIV_, pkg_init, _FUNC_INIT_FAILED)
|
||||
|
||||
/* Macros for leaving different scopes of routines */
|
||||
#define FUNC_LEAVE_STATIC \
|
||||
/* Leave scope for this type of function */ \
|
||||
} \
|
||||
\
|
||||
/* Pop the name of this function off the function stack */ \
|
||||
H5_POP_FUNC
|
||||
|
||||
#define FUNC_LEAVE_PKG \
|
||||
/* Leave scope for this type of function */ \
|
||||
} \
|
||||
\
|
||||
/* Pop the name of this function off the function stack */ \
|
||||
H5_POP_FUNC
|
||||
|
||||
#define FUNC_LEAVE_PRIV \
|
||||
/* Leave scope for this type of function */ \
|
||||
}} \
|
||||
\
|
||||
/* Label for errors during FUNC_ENTER */ \
|
||||
H5_PRIV_FUNC_INIT_FAILED(H5_MY_PKG_INIT) \
|
||||
\
|
||||
/* Pop the name of this function off the function stack */ \
|
||||
H5_POP_FUNC
|
||||
|
||||
#define FUNC_LEAVE_PUB \
|
||||
/* Leave scope for this type of function */ \
|
||||
}}} \
|
||||
\
|
||||
/* Label for errors during FUNC_ENTER */ \
|
||||
func_init_failed: \
|
||||
\
|
||||
/* Dump error stack if an error occurred during API routine */ \
|
||||
if(ret_value == fail_value) \
|
||||
(void)H5E_dump_api_stack(TRUE); \
|
||||
\
|
||||
/* Finish the API tracing info */ \
|
||||
H5TRACE_RETURN(ret_value); \
|
||||
\
|
||||
/* Pop the name of this function off the function stack */ \
|
||||
H5_POP_FUNC \
|
||||
\
|
||||
/* Finish the MPE tracing info */ \
|
||||
FINISH_MPE_LOG; \
|
||||
\
|
||||
/* Check for leaving API routine */ \
|
||||
HDassert(H5_api_entered_g); \
|
||||
H5_api_entered_g = FALSE; \
|
||||
\
|
||||
/* Release thread-safety semaphore */ \
|
||||
FUNC_LEAVE_API_THREADSAFE
|
||||
|
||||
/* Use this macro when leaving all functions */
|
||||
#define END_FUNC(scope) \
|
||||
/* Scope-specific function conclusion */ \
|
||||
H5_GLUE(FUNC_LEAVE_, scope) \
|
||||
\
|
||||
/* Leave routine */ \
|
||||
return(ret_value); \
|
||||
\
|
||||
/* Close Function */ \
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* H5E_PRINTF macro, used to facilitate error reporting between a BEGIN_FUNC()
|
||||
* and an END_FUNC() within a function body. The arguments are the minor
|
||||
* error number, a description of the error (as a printf-like format string),
|
||||
* and an optional set of arguments for the printf format arguments.
|
||||
*/
|
||||
#define H5E_PRINTF(...) H5E_printf_stack(NULL, __FILE__, __func__, __LINE__, H5E_ERR_CLS_g, H5_MY_PKG_ERR, __VA_ARGS__)
|
||||
|
||||
/*
|
||||
* H5_LEAVE macro, used to facilitate control flow between a
|
||||
* BEGIN_FUNC() and an END_FUNC() within a function body. The argument is
|
||||
* the return value.
|
||||
* The return value is assigned to a variable `ret_value' and control branches
|
||||
* to the `catch' label, if we're not already past it.
|
||||
*/
|
||||
#define H5_LEAVE(v) { \
|
||||
ret_value = v; \
|
||||
if(!past_catch) \
|
||||
goto catch; \
|
||||
}
|
||||
|
||||
/*
|
||||
* H5E_THROW macro, used to facilitate error reporting between a
|
||||
* FUNC_ENTER() and a FUNC_LEAVE() within a function body. The arguments are
|
||||
* the minor error number, and an error string.
|
||||
* The return value is assigned to a variable `ret_value' and control branches
|
||||
* to the `catch' label, if we're not already past it.
|
||||
*/
|
||||
#define H5E_THROW(...) { \
|
||||
H5E_PRINTF(__VA_ARGS__); \
|
||||
H5_LEAVE(fail_value) \
|
||||
}
|
||||
|
||||
/* Macro for "catching" flow of control when an error occurs. Note that the
|
||||
* H5_LEAVE macro won't jump back here once it's past this point.
|
||||
*/
|
||||
#define CATCH past_catch = TRUE; catch:;
|
||||
|
||||
|
||||
/**************************/
|
||||
/* Package Private Macros */
|
||||
/**************************/
|
||||
|
||||
/* If this package header is being included in one of the H5EA modules, define
|
||||
* the proper control macros for the generic FUNC_ENTER/LEAVE and error
|
||||
* reporting macros.
|
||||
*/
|
||||
#ifdef H5EA_MODULE
|
||||
#define H5_MY_PKG H5EA
|
||||
#define H5_MY_PKG_ERR H5E_EARRAY
|
||||
#define H5_MY_PKG_INIT NO
|
||||
#endif /* H5EA_MODULE */
|
||||
|
||||
/* Size of signature information (on disk) */
|
||||
#define H5EA_SIZEOF_MAGIC 4
|
||||
|
||||
/* Fractal heap signatures */
|
||||
#define H5EA_HDR_MAGIC "EAHD" /* Header */
|
||||
|
||||
/* Size of checksum information (on disk) */
|
||||
#define H5EA_SIZEOF_CHKSUM 4
|
||||
|
||||
/* "Standard" size of prefix information for extensible array metadata */
|
||||
#define H5EA_METADATA_PREFIX_SIZE(c) ( \
|
||||
H5EA_SIZEOF_MAGIC /* Signature */ \
|
||||
+ 1 /* Version */ \
|
||||
+ ((c) ? H5EA_SIZEOF_CHKSUM : 0) /* Metadata checksum */ \
|
||||
)
|
||||
|
||||
/* Size of the extensible array header on disk */
|
||||
#define H5EA_HEADER_SIZE(h) ( \
|
||||
/* General metadata fields */ \
|
||||
H5EA_METADATA_PREFIX_SIZE(TRUE) \
|
||||
\
|
||||
/* Extensible Array Header specific fields */ \
|
||||
\
|
||||
/* General heap information */ \
|
||||
+ 1 /* Element Size */ \
|
||||
+ 1 /* # of elements to store in index block */ \
|
||||
+ 1 /* Min. # elements per data block */ \
|
||||
+ 1 /* Min. # of data block pointers for a super block */ \
|
||||
)
|
||||
|
||||
|
||||
/****************************/
|
||||
/* Package Private Typedefs */
|
||||
/****************************/
|
||||
|
||||
/* The extensible array header information */
|
||||
/* (Each extensible array header has certain information that is shared across
|
||||
* all the blocks in that extensible array)
|
||||
*/
|
||||
typedef struct H5EA_hdr_t {
|
||||
/* Information for H5AC cache functions, _must_ be first field in structure */
|
||||
H5AC_info_t cache_info;
|
||||
|
||||
/* Extensible array configuration/creation parameters (stored) */
|
||||
uint8_t elmt_size; /* Element size (in bytes) */
|
||||
uint8_t idx_blk_elmts; /* # of elements to store in index block */
|
||||
uint8_t data_blk_min_elmts; /* Min. # of elements per data block */
|
||||
uint8_t sup_blk_min_data_ptrs; /* Min. # of data block pointers for a super block */
|
||||
|
||||
/* Computed/cached values */
|
||||
size_t rc; /* Reference count of heap's components using heap header */
|
||||
haddr_t addr; /* Address of header in file */
|
||||
size_t size; /* Size of header in file */
|
||||
H5F_t *f; /* Pointer to file for extensible array */
|
||||
size_t file_rc; /* Reference count of files using array header */
|
||||
hbool_t pending_delete; /* Array is pending deletion */
|
||||
} H5EA_hdr_t;
|
||||
|
||||
/* Extensible array */
|
||||
struct H5EA_t {
|
||||
H5EA_hdr_t *hdr; /* Pointer to internal extensible array header info */
|
||||
H5F_t *f; /* Pointer to file for extensible array */
|
||||
};
|
||||
|
||||
|
||||
/*****************************/
|
||||
/* Package Private Variables */
|
||||
/*****************************/
|
||||
|
||||
/* H5EA header inherits cache-like properties from H5AC */
|
||||
H5_DLLVAR const H5AC_class_t H5AC_EARRAY_HDR[1];
|
||||
|
||||
/* Declare a free list to manage the H5EA_hdr_t struct */
|
||||
H5FL_EXTERN(H5EA_hdr_t);
|
||||
|
||||
|
||||
/******************************/
|
||||
/* Package Private Prototypes */
|
||||
/******************************/
|
||||
|
||||
/* Header routines */
|
||||
H5_DLL H5EA_hdr_t *H5EA__hdr_alloc(H5F_t *f);
|
||||
H5_DLL haddr_t H5EA__hdr_create(H5F_t *f, hid_t dxpl_id, const H5EA_create_t *cparam);
|
||||
H5_DLL herr_t H5EA__hdr_incr(H5EA_hdr_t *hdr);
|
||||
H5_DLL herr_t H5EA__hdr_decr(H5EA_hdr_t *hdr);
|
||||
H5_DLL herr_t H5EA__hdr_fuse_incr(H5EA_hdr_t *hdr);
|
||||
H5_DLL size_t H5EA__hdr_fuse_decr(H5EA_hdr_t *hdr);
|
||||
H5_DLL herr_t H5EA__hdr_delete(H5EA_hdr_t *hdr, hid_t dxpl_id);
|
||||
|
||||
/* Metadata cache callbacks */
|
||||
H5_DLL herr_t H5EA__cache_hdr_dest(H5F_t *f, H5EA_hdr_t *hdr);
|
||||
|
||||
/* Testing routines */
|
||||
#ifdef H5EA_TESTING
|
||||
H5_DLL herr_t H5EA_get_cparam_test(const H5EA_t *ea, H5EA_create_t *cparam);
|
||||
H5_DLL int H5EA_cmp_cparam_test(const H5EA_create_t *cparam1, const H5EA_create_t *cparam2);
|
||||
#endif /* H5EA_TESTING */
|
||||
|
||||
#endif /* _H5EApkg_H */
|
||||
|
91
src/H5EAprivate.h
Normal file
91
src/H5EAprivate.h
Normal file
@ -0,0 +1,91 @@
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
* Copyright by The HDF Group. *
|
||||
* Copyright by the Board of Trustees of the University of Illinois. *
|
||||
* All rights reserved. *
|
||||
* *
|
||||
* This file is part of HDF5. The full HDF5 copyright notice, including *
|
||||
* terms governing use, modification, and redistribution, is contained in *
|
||||
* the files COPYING and Copyright.html. COPYING can be found at the root *
|
||||
* of the source code distribution tree; Copyright.html can be found at the *
|
||||
* root level of an installed copy of the electronic HDF5 document set and *
|
||||
* is linked from the top-level documents page. It can also be found at *
|
||||
* http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
|
||||
* access to either file, you may request a copy from help@hdfgroup.org. *
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* Created: H5EAprivate.h
|
||||
* Jun 17 2008
|
||||
* Quincey Koziol <koziol@hdfgroup.org>
|
||||
*
|
||||
* Purpose: Private header for library accessible extensible
|
||||
* array routines.
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#ifndef _H5EAprivate_H
|
||||
#define _H5EAprivate_H
|
||||
|
||||
/* Include package's public header */
|
||||
#ifdef NOT_YET
|
||||
#include "H5EApublic.h"
|
||||
#endif /* NOT_YET */
|
||||
|
||||
/* Private headers needed by this file */
|
||||
#include "H5Fprivate.h" /* File access */
|
||||
|
||||
|
||||
/**************************/
|
||||
/* Library Private Macros */
|
||||
/**************************/
|
||||
|
||||
|
||||
/****************************/
|
||||
/* Library Private Typedefs */
|
||||
/****************************/
|
||||
|
||||
/* Extensible array creation parameters */
|
||||
typedef struct H5EA_create_t {
|
||||
uint8_t elmt_size; /* Element size (in bytes) */
|
||||
uint8_t idx_blk_elmts; /* # of elements to store in index block */
|
||||
uint8_t data_blk_min_elmts; /* Min. # of elements per data block */
|
||||
uint8_t sup_blk_min_data_ptrs; /* Min. # of data block pointers for a super block */
|
||||
} H5EA_create_t;
|
||||
|
||||
/* Extensible array metadata statistics info */
|
||||
typedef struct H5EA_stat_t {
|
||||
hsize_t nsuper_blks; /* # of super blocks */
|
||||
hsize_t ndata_blks; /* # of data blocks */
|
||||
} H5EA_stat_t;
|
||||
|
||||
/* Extensible array info (forward decl - defined in H5EApkg.h) */
|
||||
typedef struct H5EA_t H5EA_t;
|
||||
|
||||
|
||||
/*****************************/
|
||||
/* Library-private Variables */
|
||||
/*****************************/
|
||||
|
||||
|
||||
/***************************************/
|
||||
/* Library-private Function Prototypes */
|
||||
/***************************************/
|
||||
|
||||
/* General routines */
|
||||
H5_DLL H5EA_t *H5EA_create(H5F_t *f, hid_t dxpl_id, const H5EA_create_t *cparam);
|
||||
H5_DLL herr_t H5EA_get_nelmts(const H5EA_t *ea, hsize_t *nelmts);
|
||||
H5_DLL herr_t H5EA_get_addr(const H5EA_t *ea, haddr_t *addr);
|
||||
H5_DLL herr_t H5EA_delete(H5F_t *f, hid_t dxpl_id, haddr_t ea_addr);
|
||||
H5_DLL herr_t H5EA_close(H5EA_t *ea, hid_t dxpl_id);
|
||||
|
||||
/* Statistics routines */
|
||||
H5_DLL herr_t H5EA_get_stats(const H5EA_t *ea, H5EA_stat_t *stats);
|
||||
|
||||
/* Debugging routines */
|
||||
#ifdef H5EA_DEBUGGING
|
||||
#endif /* H5EA_DEBUGGING */
|
||||
|
||||
#endif /* _H5EAprivate_H */
|
||||
|
152
src/H5EAtest.c
Normal file
152
src/H5EAtest.c
Normal file
@ -0,0 +1,152 @@
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
* Copyright by The HDF Group. *
|
||||
* Copyright by the Board of Trustees of the University of Illinois. *
|
||||
* All rights reserved. *
|
||||
* *
|
||||
* This file is part of HDF5. The full HDF5 copyright notice, including *
|
||||
* terms governing use, modification, and redistribution, is contained in *
|
||||
* the files COPYING and Copyright.html. COPYING can be found at the root *
|
||||
* of the source code distribution tree; Copyright.html can be found at the *
|
||||
* root level of an installed copy of the electronic HDF5 document set and *
|
||||
* is linked from the top-level documents page. It can also be found at *
|
||||
* http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
|
||||
* access to either file, you may request a copy from help@hdfgroup.org. *
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
/* Programmer: Quincey Koziol <koziol@hdfgroup.org>
|
||||
* Thursday, August 28, 2008
|
||||
*
|
||||
* Purpose: Extensible array testing functions.
|
||||
*
|
||||
*/
|
||||
|
||||
/**********************/
|
||||
/* Module Declaration */
|
||||
/**********************/
|
||||
|
||||
#define H5EA_MODULE
|
||||
#define H5EA_TESTING
|
||||
|
||||
|
||||
/***********************/
|
||||
/* Other Packages Used */
|
||||
/***********************/
|
||||
|
||||
|
||||
/***********/
|
||||
/* Headers */
|
||||
/***********/
|
||||
#include "H5private.h" /* Generic Functions */
|
||||
#include "H5Eprivate.h" /* Error handling */
|
||||
#include "H5EApkg.h" /* Extensible Arrays */
|
||||
|
||||
|
||||
/****************/
|
||||
/* Local Macros */
|
||||
/****************/
|
||||
|
||||
|
||||
/******************/
|
||||
/* Local Typedefs */
|
||||
/******************/
|
||||
|
||||
|
||||
/********************/
|
||||
/* Package Typedefs */
|
||||
/********************/
|
||||
|
||||
|
||||
/********************/
|
||||
/* Local Prototypes */
|
||||
/********************/
|
||||
|
||||
|
||||
/*********************/
|
||||
/* Package Variables */
|
||||
/*********************/
|
||||
|
||||
|
||||
/*****************************/
|
||||
/* Library Private Variables */
|
||||
/*****************************/
|
||||
|
||||
|
||||
/*******************/
|
||||
/* Local Variables */
|
||||
/*******************/
|
||||
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5EA_get_cparam_test
|
||||
*
|
||||
* Purpose: Retrieve the parameters used to create the extensible array
|
||||
*
|
||||
* Return: Success: non-negative
|
||||
* Failure: negative
|
||||
*
|
||||
* Programmer: Quincey Koziol
|
||||
* Thursday, August 28, 2008
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
BEGIN_FUNC(PRIV, NOERR,
|
||||
herr_t, SUCCEED, -,
|
||||
H5EA_get_cparam_test(const H5EA_t *ea, H5EA_create_t *cparam))
|
||||
|
||||
/* Check arguments. */
|
||||
HDassert(ea);
|
||||
HDassert(cparam);
|
||||
|
||||
/* Get extensible array creation parameters */
|
||||
cparam->elmt_size = ea->hdr->elmt_size;
|
||||
cparam->idx_blk_elmts = ea->hdr->idx_blk_elmts;
|
||||
cparam->sup_blk_min_data_ptrs = ea->hdr->sup_blk_min_data_ptrs;
|
||||
cparam->data_blk_min_elmts = ea->hdr->data_blk_min_elmts;
|
||||
|
||||
END_FUNC(PRIV) /* end H5EA_get_cparam_test() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5EA_cmp_cparam_test
|
||||
*
|
||||
* Purpose: Compare the parameters used to create the extensible array
|
||||
*
|
||||
* Return: Success: non-negative
|
||||
* Failure: negative
|
||||
*
|
||||
* Programmer: Quincey Koziol
|
||||
* Thursday, August 28, 2008
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
BEGIN_FUNC(PRIV, ERRCATCH,
|
||||
int, 0, -,
|
||||
H5EA_cmp_cparam_test(const H5EA_create_t *cparam1, const H5EA_create_t *cparam2))
|
||||
|
||||
/* Check arguments. */
|
||||
HDassert(cparam1);
|
||||
HDassert(cparam2);
|
||||
|
||||
/* Compare creation parameters for array */
|
||||
if(cparam1->elmt_size < cparam2->elmt_size)
|
||||
H5_LEAVE(-1)
|
||||
else if(cparam1->elmt_size > cparam2->elmt_size)
|
||||
H5_LEAVE(1)
|
||||
if(cparam1->idx_blk_elmts < cparam2->idx_blk_elmts)
|
||||
H5_LEAVE(-1)
|
||||
else if(cparam1->idx_blk_elmts > cparam2->idx_blk_elmts)
|
||||
H5_LEAVE(1)
|
||||
if(cparam1->sup_blk_min_data_ptrs < cparam2->sup_blk_min_data_ptrs)
|
||||
H5_LEAVE(-1)
|
||||
else if(cparam1->sup_blk_min_data_ptrs > cparam2->sup_blk_min_data_ptrs)
|
||||
H5_LEAVE(1)
|
||||
if(cparam1->data_blk_min_elmts < cparam2->data_blk_min_elmts)
|
||||
H5_LEAVE(-1)
|
||||
else if(cparam1->data_blk_min_elmts > cparam2->data_blk_min_elmts)
|
||||
H5_LEAVE(1)
|
||||
|
||||
CATCH
|
||||
|
||||
END_FUNC(PRIV) /* end H5EA_cmp_cparam_test() */
|
||||
|
@ -47,6 +47,7 @@ hid_t H5E_SLIST_g = FAIL; /* Skip Lists */
|
||||
hid_t H5E_EFL_g = FAIL; /* External file list */
|
||||
hid_t H5E_TST_g = FAIL; /* Ternary Search Trees */
|
||||
hid_t H5E_ARGS_g = FAIL; /* Invalid arguments to routine */
|
||||
hid_t H5E_EARRAY_g = FAIL; /* Extensible Array */
|
||||
hid_t H5E_ERROR_g = FAIL; /* Error API */
|
||||
hid_t H5E_PLINE_g = FAIL; /* Data filters */
|
||||
hid_t H5E_FSPACE_g = FAIL; /* Free Space Manager */
|
||||
|
@ -154,6 +154,11 @@ if((msg = H5E_create_msg(cls, H5E_MAJOR, "Invalid arguments to routine"))==NULL)
|
||||
HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
|
||||
if((H5E_ARGS_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
|
||||
HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
|
||||
assert(H5E_EARRAY_g==(-1));
|
||||
if((msg = H5E_create_msg(cls, H5E_MAJOR, "Extensible Array"))==NULL)
|
||||
HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
|
||||
if((H5E_EARRAY_g = H5I_register(H5I_ERROR_MSG, msg, FALSE))<0)
|
||||
HGOTO_ERROR(H5E_ERROR, H5E_CANTREGISTER, FAIL, "can't register error message")
|
||||
assert(H5E_ERROR_g==(-1));
|
||||
if((msg = H5E_create_msg(cls, H5E_MAJOR, "Error API"))==NULL)
|
||||
HGOTO_ERROR(H5E_ERROR, H5E_CANTINIT, FAIL, "error message initialization failed")
|
||||
|
103
src/H5Eint.c
103
src/H5Eint.c
@ -658,6 +658,107 @@ H5E_set_auto(H5E_t *estack, const H5E_auto_op_t *op, void *client_data)
|
||||
FUNC_LEAVE_NOAPI(SUCCEED)
|
||||
} /* end H5E_set_auto() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5E_printf_stack
|
||||
*
|
||||
* Purpose: Printf-like wrapper around H5E_push_stack.
|
||||
*
|
||||
* Return: Non-negative on success/Negative on failure
|
||||
*
|
||||
* Programmer: Quincey Koziol
|
||||
* Tuesday, August 12, 2008
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5E_printf_stack(H5E_t *estack, const char *file, const char *func, unsigned line,
|
||||
hid_t cls_id, hid_t maj_id, hid_t min_id, const char *fmt, ...)
|
||||
{
|
||||
va_list ap; /* Varargs info */
|
||||
#ifndef H5_HAVE_VASPRINTF
|
||||
int tmp_len; /* Current size of description buffer */
|
||||
int desc_len; /* Actual length of description when formatted */
|
||||
#endif /* H5_HAVE_VASPRINTF */
|
||||
char *tmp = NULL; /* Buffer to place formatted description in */
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
|
||||
/*
|
||||
* WARNING: We cannot call HERROR() from within this function or else we
|
||||
* could enter infinite recursion. Furthermore, we also cannot
|
||||
* call any other HDF5 macro or function which might call
|
||||
* HERROR(). HERROR() is called by HRETURN_ERROR() which could
|
||||
* be called by FUNC_ENTER().
|
||||
*/
|
||||
FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5E_printf_stack)
|
||||
|
||||
/* Sanity check */
|
||||
HDassert(cls_id > 0);
|
||||
HDassert(maj_id > 0);
|
||||
HDassert(min_id > 0);
|
||||
HDassert(fmt);
|
||||
|
||||
/* Note that the variable-argument parsing for the format is identical in
|
||||
* the H5Epush2() routine - correct errors and make changes in both
|
||||
* places. -QAK
|
||||
*/
|
||||
|
||||
/* Start the variable-argument parsing */
|
||||
va_start(ap, fmt);
|
||||
|
||||
#ifdef H5_HAVE_VASPRINTF
|
||||
/* Use the vasprintf() routine, since it does what we're trying to do below */
|
||||
if(HDvasprintf(&tmp, fmt, ap) < 0)
|
||||
HGOTO_DONE(FAIL)
|
||||
#else /* H5_HAVE_VASPRINTF */
|
||||
/* Allocate space for the formatted description buffer */
|
||||
tmp_len = 128;
|
||||
if(NULL == (tmp = H5MM_malloc((size_t)tmp_len)))
|
||||
HGOTO_DONE(FAIL)
|
||||
|
||||
/* If the description doesn't fit into the initial buffer size, allocate more space and try again */
|
||||
while((desc_len = HDvsnprintf(tmp, (size_t)tmp_len, fmt, ap))
|
||||
#ifdef H5_VSNPRINTF_WORKS
|
||||
>
|
||||
#else /* H5_VSNPRINTF_WORKS */
|
||||
>=
|
||||
#endif /* H5_VSNPRINTF_WORKS */
|
||||
(tmp_len - 1)
|
||||
#ifndef H5_VSNPRINTF_WORKS
|
||||
|| (desc_len < 0)
|
||||
#endif /* H5_VSNPRINTF_WORKS */
|
||||
) {
|
||||
/* shutdown & restart the va_list */
|
||||
va_end(ap);
|
||||
va_start(ap, fmt);
|
||||
|
||||
/* Release the previous description, it's too small */
|
||||
H5MM_xfree(tmp);
|
||||
|
||||
/* Allocate a description of the appropriate length */
|
||||
#ifdef H5_VSNPRINTF_WORKS
|
||||
tmp_len = desc_len + 1;
|
||||
#else /* H5_VSNPRINTF_WORKS */
|
||||
tmp_len = 2 * tmp_len;
|
||||
#endif /* H5_VSNPRINTF_WORKS */
|
||||
if(NULL == (tmp = H5MM_malloc((size_t)tmp_len)))
|
||||
HGOTO_DONE(FAIL)
|
||||
} /* end while */
|
||||
#endif /* H5_HAVE_VASPRINTF */
|
||||
|
||||
va_end(ap);
|
||||
|
||||
/* Push the error on the stack */
|
||||
if(H5E_push_stack(estack, file, func, line, cls_id, maj_id, min_id, tmp) < 0)
|
||||
HGOTO_DONE(FAIL)
|
||||
|
||||
done:
|
||||
if(tmp)
|
||||
H5MM_xfree(tmp);
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
} /* end H5E_printf_stack() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5E_push_stack
|
||||
@ -886,7 +987,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5E_dump_api_stack(int is_api)
|
||||
H5E_dump_api_stack(hbool_t is_api)
|
||||
{
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
|
||||
|
@ -40,7 +40,7 @@ typedef struct H5E_t H5E_t;
|
||||
*/
|
||||
#define HCOMMON_ERROR(maj, min, str) \
|
||||
HERROR(maj, min, str); \
|
||||
(void)H5E_dump_api_stack((int)H5_IS_API(FUNC));
|
||||
(void)H5E_dump_api_stack((hbool_t)H5_IS_API(FUNC));
|
||||
|
||||
/*
|
||||
* HDONE_ERROR macro, used to facilitate error reporting between a
|
||||
@ -78,10 +78,12 @@ typedef struct H5E_t H5E_t;
|
||||
|
||||
/* Library-private functions defined in H5E package */
|
||||
H5_DLL herr_t H5E_init(void);
|
||||
H5_DLL herr_t H5E_push_stack(H5E_t *estack, const char *file, const char *func, unsigned line,
|
||||
hid_t cls_id, hid_t maj_id, hid_t min_id, const char *desc);
|
||||
H5_DLL herr_t H5E_push_stack(H5E_t *estack, const char *file, const char *func,
|
||||
unsigned line, hid_t cls_id, hid_t maj_id, hid_t min_id, const char *desc);
|
||||
H5_DLL herr_t H5E_printf_stack(H5E_t *estack, const char *file, const char *func,
|
||||
unsigned line, hid_t cls_id, hid_t maj_id, hid_t min_id, const char *fmt, ...);
|
||||
H5_DLL herr_t H5E_clear_stack(H5E_t *estack);
|
||||
H5_DLL herr_t H5E_dump_api_stack(int is_api);
|
||||
H5_DLL herr_t H5E_dump_api_stack(hbool_t is_api);
|
||||
|
||||
/*
|
||||
* Macros handling system error messages as described in C standard.
|
||||
|
@ -50,6 +50,7 @@
|
||||
#define H5E_EFL (H5OPEN H5E_EFL_g)
|
||||
#define H5E_TST (H5OPEN H5E_TST_g)
|
||||
#define H5E_ARGS (H5OPEN H5E_ARGS_g)
|
||||
#define H5E_EARRAY (H5OPEN H5E_EARRAY_g)
|
||||
#define H5E_ERROR (H5OPEN H5E_ERROR_g)
|
||||
#define H5E_PLINE (H5OPEN H5E_PLINE_g)
|
||||
#define H5E_FSPACE (H5OPEN H5E_FSPACE_g)
|
||||
@ -80,6 +81,7 @@ H5_DLLVAR hid_t H5E_SLIST_g; /* Skip Lists */
|
||||
H5_DLLVAR hid_t H5E_EFL_g; /* External file list */
|
||||
H5_DLLVAR hid_t H5E_TST_g; /* Ternary Search Trees */
|
||||
H5_DLLVAR hid_t H5E_ARGS_g; /* Invalid arguments to routine */
|
||||
H5_DLLVAR hid_t H5E_EARRAY_g; /* Extensible Array */
|
||||
H5_DLLVAR hid_t H5E_ERROR_g; /* Error API */
|
||||
H5_DLLVAR hid_t H5E_PLINE_g; /* Data filters */
|
||||
H5_DLLVAR hid_t H5E_FSPACE_g; /* Free Space Manager */
|
||||
|
@ -48,6 +48,7 @@ H5E_SLIST_g=
|
||||
H5E_EFL_g=
|
||||
H5E_TST_g=
|
||||
H5E_ARGS_g=
|
||||
H5E_EARRAY_g=
|
||||
H5E_ERROR_g=
|
||||
H5E_PLINE_g=
|
||||
H5E_FSPACE_g=
|
||||
|
@ -89,6 +89,14 @@ typedef enum H5FD_mem_t {
|
||||
#define H5FD_MEM_SOHM_TABLE H5FD_MEM_OHDR
|
||||
#define H5FD_MEM_SOHM_INDEX H5FD_MEM_BTREE
|
||||
|
||||
/* Map "extensible array" header blocks to 'ohdr' type file memory, since its
|
||||
* a fair amount of work to add a new kind of file memory and they are similar
|
||||
* enough to object headers and probably too minor to deserve their own type.
|
||||
*
|
||||
* -QAK
|
||||
*/
|
||||
#define H5FD_MEM_EARRAY_HDR H5FD_MEM_OHDR
|
||||
|
||||
/*
|
||||
* A free-list map which maps all types of allocation requests to a single
|
||||
* free list. This is useful for drivers that don't really care about
|
||||
|
@ -847,6 +847,9 @@ HDfprintf(stderr, "%s; After iterator reset fh->hdr->rc = %Zu\n", FUNC, fh->hdr-
|
||||
} /* end if */
|
||||
|
||||
/* Decrement the reference count on the heap header */
|
||||
/* (don't put in H5HF_hdr_fuse_decr() as the heap header may be evicted
|
||||
* immediately -QAK)
|
||||
*/
|
||||
if(H5HF_hdr_decr(fh->hdr) < 0)
|
||||
HGOTO_ERROR(H5E_HEAP, H5E_CANTDEC, FAIL, "can't decrement reference count on shared heap header")
|
||||
|
||||
@ -912,6 +915,9 @@ HDfprintf(stderr, "%s: fh_addr = %a\n", FUNC, fh_addr);
|
||||
if(hdr->file_rc)
|
||||
hdr->pending_delete = TRUE;
|
||||
else {
|
||||
/* Set the shared heap header's file context for this operation */
|
||||
hdr->f = f;
|
||||
|
||||
/* Delete heap now, starting with header (unprotects header) */
|
||||
if(H5HF_hdr_delete(hdr, dxpl_id) < 0)
|
||||
HGOTO_ERROR(H5E_HEAP, H5E_CANTDELETE, FAIL, "unable to delete fractal heap")
|
||||
|
@ -74,6 +74,7 @@ MAJOR, H5E_ERROR, Error API
|
||||
MAJOR, H5E_SLIST, Skip Lists
|
||||
MAJOR, H5E_FSPACE, Free Space Manager
|
||||
MAJOR, H5E_SOHM, Shared Object Header Messages
|
||||
MAJOR, H5E_EARRAY, Extensible Array
|
||||
MAJOR, H5E_NONE_MAJOR, No error
|
||||
|
||||
# Sections (for grouping minor errors)
|
||||
|
@ -1612,8 +1612,8 @@ extern hbool_t H5_libinit_g; /* Has the library been initialized? */
|
||||
/* Include required function stack header */
|
||||
#include "H5CSprivate.h"
|
||||
|
||||
#define H5_PUSH_FUNC(func_name) H5CS_push(#func_name)
|
||||
#define H5_POP_FUNC H5CS_pop()
|
||||
#define H5_PUSH_FUNC(func_name) H5CS_push(func_name);
|
||||
#define H5_POP_FUNC H5CS_pop();
|
||||
#else /* H5_HAVE_CODESTACK */
|
||||
#define H5_PUSH_FUNC(func_name) /* void */
|
||||
#define H5_POP_FUNC /* void */
|
||||
@ -1723,7 +1723,7 @@ static herr_t H5_INTERFACE_INIT_FUNC(void);
|
||||
FUNC_ENTER_API_VARS(func_name) \
|
||||
FUNC_ENTER_COMMON(func_name,H5_IS_API(#func_name)); \
|
||||
FUNC_ENTER_API_THREADSAFE; \
|
||||
H5_PUSH_FUNC(func_name); \
|
||||
H5_PUSH_FUNC(#func_name) \
|
||||
BEGIN_MPE_LOG(func_name); \
|
||||
{
|
||||
|
||||
@ -1763,7 +1763,7 @@ static herr_t H5_INTERFACE_INIT_FUNC(void);
|
||||
*/
|
||||
#define FUNC_ENTER_NOAPI_NOINIT(func_name) { \
|
||||
FUNC_ENTER_COMMON(func_name,!H5_IS_API(#func_name)); \
|
||||
H5_PUSH_FUNC(func_name); \
|
||||
H5_PUSH_FUNC(#func_name) \
|
||||
{
|
||||
|
||||
/*
|
||||
@ -1780,7 +1780,7 @@ static herr_t H5_INTERFACE_INIT_FUNC(void);
|
||||
*/
|
||||
#define FUNC_ENTER_NOAPI_NOINIT_NOFUNC(func_name) { \
|
||||
FUNC_ENTER_COMMON_NOFUNC(func_name,!H5_IS_API(#func_name)); \
|
||||
H5_PUSH_FUNC(func_name); \
|
||||
H5_PUSH_FUNC(#func_name) \
|
||||
{
|
||||
|
||||
/*
|
||||
@ -1809,7 +1809,7 @@ static herr_t H5_INTERFACE_INIT_FUNC(void);
|
||||
H5_INTERFACE_INIT(err) \
|
||||
\
|
||||
/* Push the name of this function on the function stack */ \
|
||||
H5_PUSH_FUNC(func_name); \
|
||||
H5_PUSH_FUNC(#func_name) \
|
||||
\
|
||||
BEGIN_MPE_LOG(func_name)
|
||||
|
||||
@ -1819,7 +1819,7 @@ static herr_t H5_INTERFACE_INIT_FUNC(void);
|
||||
H5_INTERFACE_INIT(err) \
|
||||
\
|
||||
/* Push the name of this function on the function stack */ \
|
||||
H5_PUSH_FUNC(func_name);
|
||||
H5_PUSH_FUNC(#func_name)
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Purpose: Register function exit for code profiling. This should be
|
||||
@ -1840,7 +1840,7 @@ static herr_t H5_INTERFACE_INIT_FUNC(void);
|
||||
#define FUNC_LEAVE_API(ret_value) \
|
||||
FINISH_MPE_LOG; \
|
||||
H5TRACE_RETURN(ret_value); \
|
||||
H5_POP_FUNC; \
|
||||
H5_POP_FUNC \
|
||||
FUNC_LEAVE_API_THREADSAFE \
|
||||
return (ret_value); \
|
||||
} /*end scope from end of FUNC_ENTER*/ \
|
||||
@ -1855,13 +1855,13 @@ static herr_t H5_INTERFACE_INIT_FUNC(void);
|
||||
}} /*end scope from beginning of FUNC_ENTER*/
|
||||
|
||||
#define FUNC_LEAVE_NOAPI(ret_value) \
|
||||
H5_POP_FUNC; \
|
||||
H5_POP_FUNC \
|
||||
return (ret_value); \
|
||||
} /*end scope from end of FUNC_ENTER*/ \
|
||||
} /*end scope from beginning of FUNC_ENTER*/
|
||||
|
||||
#define FUNC_LEAVE_NOAPI_VOID \
|
||||
H5_POP_FUNC; \
|
||||
H5_POP_FUNC \
|
||||
return; \
|
||||
} /*end scope from end of FUNC_ENTER*/ \
|
||||
} /*end scope from beginning of FUNC_ENTER*/
|
||||
@ -1880,6 +1880,7 @@ static herr_t H5_INTERFACE_INIT_FUNC(void);
|
||||
/* Macro for "glueing" together items, for re-scanning macros */
|
||||
#define H5_GLUE(x,y) x##y
|
||||
#define H5_GLUE3(x,y,z) x##y##z
|
||||
#define H5_GLUE4(w,x,y,z) w##x##y##z
|
||||
|
||||
/* Compile-time "assert" macro */
|
||||
#define HDcompile_assert(e) do { enum { compile_assert__ = 1 / (e) }; } while(0)
|
||||
|
@ -51,6 +51,7 @@ libhdf5_la_SOURCES= H5.c H5checksum.c H5dbg.c H5system.c H5timer.c H5trace.c \
|
||||
H5Dio.c \
|
||||
H5Distore.c H5Dmpio.c H5Doh.c H5Dscatgath.c H5Dselect.c H5Dtest.c \
|
||||
H5E.c H5Edeprec.c H5Eint.c \
|
||||
H5EA.c H5EAcache.c H5EAhdr.c H5EAint.c H5EAtest.c \
|
||||
H5F.c H5Fdbg.c H5Ffake.c H5Fmount.c H5Fsfile.c H5Fsuper.c H5Ftest.c \
|
||||
H5FD.c H5FDcore.c \
|
||||
H5FDdirect.c H5FDfamily.c H5FDlog.c H5FDmpi.c H5FDmpio.c \
|
||||
|
@ -86,16 +86,16 @@ am_libhdf5_la_OBJECTS = H5.lo H5checksum.lo H5dbg.lo H5system.lo \
|
||||
H5Dcontig.lo H5Ddbg.lo H5Ddeprec.lo H5Defl.lo H5Dfill.lo \
|
||||
H5Dint.lo H5Dio.lo H5Distore.lo H5Dmpio.lo H5Doh.lo \
|
||||
H5Dscatgath.lo H5Dselect.lo H5Dtest.lo H5E.lo H5Edeprec.lo \
|
||||
H5Eint.lo H5F.lo H5Fdbg.lo H5Ffake.lo H5Fmount.lo H5Fsfile.lo \
|
||||
H5Fsuper.lo H5Ftest.lo H5FD.lo H5FDcore.lo H5FDdirect.lo \
|
||||
H5FDfamily.lo H5FDlog.lo H5FDmpi.lo H5FDmpio.lo \
|
||||
H5FDmpiposix.lo H5FDmulti.lo H5FDsec2.lo H5FDspace.lo \
|
||||
H5FDstdio.lo H5FL.lo H5FO.lo H5FS.lo H5FScache.lo H5FSdbg.lo \
|
||||
H5FSsection.lo H5G.lo H5Gbtree2.lo H5Gcompact.lo H5Gdense.lo \
|
||||
H5Gdeprec.lo H5Gent.lo H5Gint.lo H5Glink.lo H5Gloc.lo \
|
||||
H5Gname.lo H5Gnode.lo H5Gobj.lo H5Goh.lo H5Gstab.lo H5Gtest.lo \
|
||||
H5Gtraverse.lo H5HF.lo H5HFbtree2.lo H5HFcache.lo H5HFdbg.lo \
|
||||
H5HFdblock.lo H5HFdtable.lo H5HFhdr.lo H5HFhuge.lo \
|
||||
H5Eint.lo H5EA.lo H5EAcache.lo H5EAhdr.lo H5EAint.lo H5EAtest.lo H5F.lo H5Fdbg.lo H5Ffake.lo \
|
||||
H5Fmount.lo H5Fsfile.lo H5Fsuper.lo H5Ftest.lo H5FD.lo \
|
||||
H5FDcore.lo H5FDdirect.lo H5FDfamily.lo H5FDlog.lo H5FDmpi.lo \
|
||||
H5FDmpio.lo H5FDmpiposix.lo H5FDmulti.lo H5FDsec2.lo \
|
||||
H5FDspace.lo H5FDstdio.lo H5FL.lo H5FO.lo H5FS.lo H5FScache.lo \
|
||||
H5FSdbg.lo H5FSsection.lo H5G.lo H5Gbtree2.lo H5Gcompact.lo \
|
||||
H5Gdense.lo H5Gdeprec.lo H5Gent.lo H5Gint.lo H5Glink.lo \
|
||||
H5Gloc.lo H5Gname.lo H5Gnode.lo H5Gobj.lo H5Goh.lo H5Gstab.lo \
|
||||
H5Gtest.lo H5Gtraverse.lo H5HF.lo H5HFbtree2.lo H5HFcache.lo \
|
||||
H5HFdbg.lo H5HFdblock.lo H5HFdtable.lo H5HFhdr.lo H5HFhuge.lo \
|
||||
H5HFiblock.lo H5HFiter.lo H5HFman.lo H5HFsection.lo \
|
||||
H5HFspace.lo H5HFstat.lo H5HFtest.lo H5HFtiny.lo H5HG.lo \
|
||||
H5HGdbg.lo H5HL.lo H5HLdbg.lo H5HP.lo H5I.lo H5L.lo \
|
||||
@ -429,6 +429,7 @@ libhdf5_la_SOURCES = H5.c H5checksum.c H5dbg.c H5system.c H5timer.c H5trace.c \
|
||||
H5Dio.c \
|
||||
H5Distore.c H5Dmpio.c H5Doh.c H5Dscatgath.c H5Dselect.c H5Dtest.c \
|
||||
H5E.c H5Edeprec.c H5Eint.c \
|
||||
H5EA.c H5EAcache.c H5EAhdr.c H5EAint.c H5EAtest.c \
|
||||
H5F.c H5Fdbg.c H5Ffake.c H5Fmount.c H5Fsfile.c H5Fsuper.c H5Ftest.c \
|
||||
H5FD.c H5FDcore.c \
|
||||
H5FDdirect.c H5FDfamily.c H5FDlog.c H5FDmpi.c H5FDmpio.c \
|
||||
@ -638,6 +639,11 @@ distclean-compile:
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5Dselect.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5Dtest.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5E.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5EA.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5EAcache.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5EAhdr.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5EAint.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5EAtest.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5Edeprec.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5Eint.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5F.Plo@am__quote@
|
||||
|
@ -42,7 +42,7 @@ TEST_PROG=testhdf5 lheap ohdr stab gheap cache cache_api \
|
||||
fillval mount flush1 flush2 app_ref enum \
|
||||
set_extent ttsafe \
|
||||
getname vfd ntypes dangle dtransform reserved cross_read \
|
||||
btree2 fheap
|
||||
btree2 fheap earray
|
||||
|
||||
# List programs to be built when testing here. error_test and err_compat are
|
||||
# built at the same time as the other tests, but executed by testerror.sh.
|
||||
@ -120,7 +120,7 @@ CHECK_CLEANFILES+=cmpd_dset.h5 compact_dataset.h5 dataset.h5 dset_offset.h5 \
|
||||
new_move_[ab].h5 ntypes.h5 dangle.h5 error_test.h5 err_compat.h5 \
|
||||
dtransform.h5 test_filters.h5 get_file_name.h5 tstint[1-2].h5 \
|
||||
unlink_chunked.h5 btree2.h5 objcopy_src.h5 objcopy_dst.h5 \
|
||||
objcopy_ext.dat trefer1.h5 trefer2.h5 app_ref.h5
|
||||
objcopy_ext.dat trefer1.h5 trefer2.h5 app_ref.h5 earray.h5
|
||||
|
||||
# Sources for testhdf5 executable
|
||||
testhdf5_SOURCES=testhdf5.c tarray.c tattr.c tchecksum.c tconfig.c tfile.c \
|
||||
|
@ -80,7 +80,8 @@ am__EXEEXT_1 = testhdf5$(EXEEXT) lheap$(EXEEXT) ohdr$(EXEEXT) \
|
||||
app_ref$(EXEEXT) enum$(EXEEXT) set_extent$(EXEEXT) \
|
||||
ttsafe$(EXEEXT) getname$(EXEEXT) vfd$(EXEEXT) ntypes$(EXEEXT) \
|
||||
dangle$(EXEEXT) dtransform$(EXEEXT) reserved$(EXEEXT) \
|
||||
cross_read$(EXEEXT) btree2$(EXEEXT) fheap$(EXEEXT)
|
||||
cross_read$(EXEEXT) btree2$(EXEEXT) fheap$(EXEEXT) \
|
||||
earray$(EXEEXT)
|
||||
am__EXEEXT_2 = gen_bad_ohdr$(EXEEXT) gen_bogus$(EXEEXT) \
|
||||
gen_cross$(EXEEXT) gen_deflate$(EXEEXT) gen_filters$(EXEEXT) \
|
||||
gen_new_array$(EXEEXT) gen_new_fill$(EXEEXT) \
|
||||
@ -141,6 +142,10 @@ dtypes_SOURCES = dtypes.c
|
||||
dtypes_OBJECTS = dtypes.$(OBJEXT)
|
||||
dtypes_LDADD = $(LDADD)
|
||||
dtypes_DEPENDENCIES = libh5test.la $(LIBHDF5)
|
||||
earray_SOURCES = earray.c
|
||||
earray_OBJECTS = earray.$(OBJEXT)
|
||||
earray_LDADD = $(LDADD)
|
||||
earray_DEPENDENCIES = libh5test.la $(LIBHDF5)
|
||||
enum_SOURCES = enum.c
|
||||
enum_OBJECTS = enum.$(OBJEXT)
|
||||
enum_LDADD = $(LDADD)
|
||||
@ -337,7 +342,7 @@ LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
|
||||
$(LDFLAGS) -o $@
|
||||
SOURCES = $(libh5test_la_SOURCES) app_ref.c big.c bittests.c btree2.c \
|
||||
cache.c cache_api.c cmpd_dset.c cross_read.c dangle.c dsets.c \
|
||||
dt_arith.c dtransform.c dtypes.c enum.c err_compat.c \
|
||||
dt_arith.c dtransform.c dtypes.c earray.c enum.c err_compat.c \
|
||||
error_test.c extend.c external.c fheap.c fillval.c flush1.c \
|
||||
flush2.c gen_bad_ohdr.c gen_bogus.c gen_cross.c gen_deflate.c \
|
||||
gen_filters.c gen_new_array.c gen_new_fill.c gen_new_group.c \
|
||||
@ -349,16 +354,16 @@ SOURCES = $(libh5test_la_SOURCES) app_ref.c big.c bittests.c btree2.c \
|
||||
vfd.c
|
||||
DIST_SOURCES = $(libh5test_la_SOURCES) app_ref.c big.c bittests.c \
|
||||
btree2.c cache.c cache_api.c cmpd_dset.c cross_read.c dangle.c \
|
||||
dsets.c dt_arith.c dtransform.c dtypes.c enum.c err_compat.c \
|
||||
error_test.c extend.c external.c fheap.c fillval.c flush1.c \
|
||||
flush2.c gen_bad_ohdr.c gen_bogus.c gen_cross.c gen_deflate.c \
|
||||
gen_filters.c gen_new_array.c gen_new_fill.c gen_new_group.c \
|
||||
gen_new_mtime.c gen_new_super.c gen_noencoder.c \
|
||||
gen_nullspace.c gen_udlinks.c getname.c gheap.c hyperslab.c \
|
||||
istore.c lheap.c links.c mount.c mtime.c ntypes.c objcopy.c \
|
||||
ohdr.c pool.c reserved.c set_extent.c space_overflow.c stab.c \
|
||||
$(testhdf5_SOURCES) testmeta.c $(ttsafe_SOURCES) unlink.c \
|
||||
vfd.c
|
||||
dsets.c dt_arith.c dtransform.c dtypes.c earray.c enum.c \
|
||||
err_compat.c error_test.c extend.c external.c fheap.c \
|
||||
fillval.c flush1.c flush2.c gen_bad_ohdr.c gen_bogus.c \
|
||||
gen_cross.c gen_deflate.c gen_filters.c gen_new_array.c \
|
||||
gen_new_fill.c gen_new_group.c gen_new_mtime.c gen_new_super.c \
|
||||
gen_noencoder.c gen_nullspace.c gen_udlinks.c getname.c \
|
||||
gheap.c hyperslab.c istore.c lheap.c links.c mount.c mtime.c \
|
||||
ntypes.c objcopy.c ohdr.c pool.c reserved.c set_extent.c \
|
||||
space_overflow.c stab.c $(testhdf5_SOURCES) testmeta.c \
|
||||
$(ttsafe_SOURCES) unlink.c vfd.c
|
||||
ETAGS = etags
|
||||
CTAGS = ctags
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
@ -633,7 +638,7 @@ CHECK_CLEANFILES = *.chkexe *.chklog *.clog cmpd_dset.h5 \
|
||||
err_compat.h5 dtransform.h5 test_filters.h5 get_file_name.h5 \
|
||||
tstint[1-2].h5 unlink_chunked.h5 btree2.h5 objcopy_src.h5 \
|
||||
objcopy_dst.h5 objcopy_ext.dat trefer1.h5 trefer2.h5 \
|
||||
app_ref.h5
|
||||
app_ref.h5 earray.h5
|
||||
INCLUDES = -I$(top_srcdir)/src -I$(top_builddir)/src
|
||||
|
||||
# Test script for error_test and err_compat
|
||||
@ -654,7 +659,7 @@ TEST_PROG = testhdf5 lheap ohdr stab gheap cache cache_api \
|
||||
fillval mount flush1 flush2 app_ref enum \
|
||||
set_extent ttsafe \
|
||||
getname vfd ntypes dangle dtransform reserved cross_read \
|
||||
btree2 fheap
|
||||
btree2 fheap earray
|
||||
|
||||
|
||||
# These programs generate test files for the tests. They don't need to be
|
||||
@ -807,6 +812,9 @@ dtransform$(EXEEXT): $(dtransform_OBJECTS) $(dtransform_DEPENDENCIES)
|
||||
dtypes$(EXEEXT): $(dtypes_OBJECTS) $(dtypes_DEPENDENCIES)
|
||||
@rm -f dtypes$(EXEEXT)
|
||||
$(LINK) $(dtypes_OBJECTS) $(dtypes_LDADD) $(LIBS)
|
||||
earray$(EXEEXT): $(earray_OBJECTS) $(earray_DEPENDENCIES)
|
||||
@rm -f earray$(EXEEXT)
|
||||
$(LINK) $(earray_OBJECTS) $(earray_LDADD) $(LIBS)
|
||||
enum$(EXEEXT): $(enum_OBJECTS) $(enum_DEPENDENCIES)
|
||||
@rm -f enum$(EXEEXT)
|
||||
$(LINK) $(enum_OBJECTS) $(enum_LDADD) $(LIBS)
|
||||
@ -957,6 +965,7 @@ distclean-compile:
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dt_arith.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dtransform.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dtypes.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earray.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/enum.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/err_compat.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/error_test.Po@am__quote@
|
||||
|
381
test/earray.c
Normal file
381
test/earray.c
Normal file
@ -0,0 +1,381 @@
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
* Copyright by The HDF Group. *
|
||||
* Copyright by the Board of Trustees of the University of Illinois. *
|
||||
* All rights reserved. *
|
||||
* *
|
||||
* This file is part of HDF5. The full HDF5 copyright notice, including *
|
||||
* terms governing use, modification, and redistribution, is contained in *
|
||||
* the files COPYING and Copyright.html. COPYING can be found at the root *
|
||||
* of the source code distribution tree; Copyright.html can be found at the *
|
||||
* root level of an installed copy of the electronic HDF5 document set and *
|
||||
* is linked from the top-level documents page. It can also be found at *
|
||||
* http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
|
||||
* access to either file, you may request a copy from help@hdfgroup.org. *
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
/* Programmer: Quincey Koziol <koziol@hdfgroup.org>
|
||||
* Tuesday, June 17, 2008
|
||||
*/
|
||||
#include "h5test.h"
|
||||
|
||||
/*
|
||||
* This file needs to access private datatypes from the H5EA package.
|
||||
* This file also needs to access the extensible array testing code.
|
||||
*/
|
||||
#define H5EA_PACKAGE
|
||||
#define H5EA_TESTING
|
||||
#include "H5EApkg.h" /* Extensible Arrays */
|
||||
|
||||
/* Other private headers that this test requires */
|
||||
#include "H5Iprivate.h" /* IDs */
|
||||
|
||||
|
||||
/* Local macros */
|
||||
|
||||
/* Max. testfile name length */
|
||||
#define EARRAY_FILENAME_LEN 1024
|
||||
|
||||
/* Extensible array creation values */
|
||||
#define ELMT_SIZE sizeof(haddr_t)
|
||||
#define IDX_BLK_ELMTS 4
|
||||
#define SUP_BLK_MIN_DATA_PTRS 4
|
||||
#define DATA_BLK_MIN_ELMTS 16
|
||||
|
||||
/* Local typedefs */
|
||||
|
||||
/* Types of tests to perform */
|
||||
typedef enum {
|
||||
EARRAY_TEST_NORMAL, /* "Normal" test, with no testing parameters set */
|
||||
EARRAY_TEST_REOPEN, /* Set the reopen_array flag */
|
||||
EARRAY_TEST_NTESTS /* The number of test types, must be last */
|
||||
} earray_test_type_t;
|
||||
|
||||
/* Whether to compress data blocks */
|
||||
typedef enum {
|
||||
EARRAY_TEST_NO_COMPRESS, /* Don't compress data blocks */
|
||||
EARRAY_TEST_COMPRESS, /* Compress data blocks */
|
||||
EARRAY_TEST_COMP_N /* The number of different ways to test compressing array blocks, must be last */
|
||||
} earray_test_comp_t;
|
||||
|
||||
/* Testing parameters */
|
||||
typedef struct earray_test_param_t {
|
||||
earray_test_type_t reopen_array; /* Whether to re-open the array during the test */
|
||||
earray_test_comp_t comp; /* Whether to compress the blocks or not */
|
||||
} earray_test_param_t;
|
||||
|
||||
/* Extensible array state information */
|
||||
typedef struct earray_state_t {
|
||||
hsize_t nsuper_blks; /* # of super blocks */
|
||||
hsize_t ndata_blks; /* # of data blocks */
|
||||
} earray_state_t;
|
||||
|
||||
/* Local variables */
|
||||
const char *FILENAME[] = {
|
||||
"earray",
|
||||
NULL
|
||||
};
|
||||
|
||||
/* Local routines */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: init_cparam
|
||||
*
|
||||
* Purpose: Initialize array creation parameter structure
|
||||
*
|
||||
* Return: Success: 0
|
||||
* Failure: 1
|
||||
*
|
||||
* Programmer: Quincey Koziol
|
||||
* Thursday, August 21, 2008
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static int
|
||||
init_cparam(H5EA_create_t *cparam)
|
||||
{
|
||||
/* Wipe out background */
|
||||
HDmemset(cparam, 0, sizeof(*cparam));
|
||||
|
||||
/* General parameters */
|
||||
cparam->elmt_size = ELMT_SIZE;
|
||||
cparam->idx_blk_elmts = IDX_BLK_ELMTS;
|
||||
cparam->sup_blk_min_data_ptrs = SUP_BLK_MIN_DATA_PTRS;
|
||||
cparam->data_blk_min_elmts = DATA_BLK_MIN_ELMTS;
|
||||
|
||||
return(0);
|
||||
} /* init_cparam() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: check_stats
|
||||
*
|
||||
* Purpose: Verify stats for an extensible array
|
||||
*
|
||||
* Return: Success: 0
|
||||
* Failure: 1
|
||||
*
|
||||
* Programmer: Quincey Koziol
|
||||
* Thursday, August 21, 2008
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static int
|
||||
check_stats(const H5EA_t *ea, const earray_state_t *state)
|
||||
{
|
||||
H5EA_stat_t earray_stats; /* Statistics about the array */
|
||||
|
||||
/* Get statistics for extensible array and verify they are correct */
|
||||
if(H5EA_get_stats(ea, &earray_stats) < 0)
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Compare information */
|
||||
if(earray_stats.nsuper_blks != state->nsuper_blks) {
|
||||
HDfprintf(stdout, "earray_stats.nsuper_blks = %Hu, state->nsuper_blks = %Hu\n", earray_stats.nsuper_blks, state->nsuper_blks);
|
||||
TEST_ERROR
|
||||
} /* end if */
|
||||
if(earray_stats.ndata_blks != state->ndata_blks) {
|
||||
HDfprintf(stdout, "earray_stats.ndata_blks = %Hu, state->ndata_blks = %Hu\n", earray_stats.ndata_blks, state->ndata_blks);
|
||||
TEST_ERROR
|
||||
} /* end if */
|
||||
|
||||
/* All tests passed */
|
||||
return(0);
|
||||
|
||||
error:
|
||||
return(1);
|
||||
} /* check_stats() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: test_basic
|
||||
*
|
||||
* Purpose: Basic tests for extensible arrays
|
||||
*
|
||||
* Return: Success: 0
|
||||
* Failure: 1
|
||||
*
|
||||
* Programmer: Quincey Koziol
|
||||
* Thursday, August 7, 2008
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static unsigned
|
||||
test_create(hid_t fapl, H5EA_create_t *cparam, earray_test_param_t UNUSED *tparam)
|
||||
{
|
||||
hid_t file = -1; /* File ID */
|
||||
char filename[EARRAY_FILENAME_LEN]; /* Filename to use */
|
||||
H5F_t *f = NULL; /* Internal file object pointer */
|
||||
H5EA_create_t test_cparam; /* Creation parameters for array */
|
||||
H5EA_t *ea = NULL; /* Extensible array wrapper */
|
||||
haddr_t ea_addr; /* Array address in file */
|
||||
hsize_t nelmts; /* Number of elements in array */
|
||||
earray_state_t state; /* State of extensible array */
|
||||
h5_stat_size_t empty_size; /* File size, w/o array */
|
||||
h5_stat_size_t file_size; /* File size, after deleting array */
|
||||
|
||||
/* Set the filename to use for this test (dependent on fapl) */
|
||||
h5_fixname(FILENAME[0], fapl, filename, sizeof(filename));
|
||||
|
||||
/* Create the file to work on */
|
||||
if((file = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0)
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Close file */
|
||||
if(H5Fclose(file) < 0)
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Get the size of a file w/empty heap*/
|
||||
if((empty_size = h5_get_file_size(filename)) < 0)
|
||||
TEST_ERROR
|
||||
|
||||
/* Re-open the file */
|
||||
if((file = H5Fopen(filename, H5F_ACC_RDWR, fapl)) < 0)
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Get a pointer to the internal file object */
|
||||
if(NULL == (f = (H5F_t *)H5I_object(file)))
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/*
|
||||
* Display testing message
|
||||
*/
|
||||
TESTING("invalid extensible array creation parameters");
|
||||
|
||||
#ifndef NDEBUG
|
||||
/* Set invalid element size */
|
||||
HDmemcpy(&test_cparam, cparam, sizeof(test_cparam));
|
||||
test_cparam.elmt_size = 0;
|
||||
H5E_BEGIN_TRY {
|
||||
ea = H5EA_create(f, H5P_DATASET_XFER_DEFAULT, &test_cparam);
|
||||
} H5E_END_TRY;
|
||||
if(ea) {
|
||||
/* Close opened extensible array */
|
||||
H5EA_close(ea, H5P_DATASET_XFER_DEFAULT);
|
||||
|
||||
/* Indicate error */
|
||||
TEST_ERROR
|
||||
} /* end if */
|
||||
|
||||
/* Set invalid min. # of data block pointers in super blocks */
|
||||
HDmemcpy(&test_cparam, cparam, sizeof(test_cparam));
|
||||
test_cparam.sup_blk_min_data_ptrs = 0;
|
||||
H5E_BEGIN_TRY {
|
||||
ea = H5EA_create(f, H5P_DATASET_XFER_DEFAULT, &test_cparam);
|
||||
} H5E_END_TRY;
|
||||
if(ea) {
|
||||
/* Close opened extensible array */
|
||||
H5EA_close(ea, H5P_DATASET_XFER_DEFAULT);
|
||||
|
||||
/* Indicate error */
|
||||
TEST_ERROR
|
||||
} /* end if */
|
||||
|
||||
/* Set invalid min. # of elements per data block */
|
||||
HDmemcpy(&test_cparam, cparam, sizeof(test_cparam));
|
||||
test_cparam.data_blk_min_elmts = 0;
|
||||
H5E_BEGIN_TRY {
|
||||
ea = H5EA_create(f, H5P_DATASET_XFER_DEFAULT, &test_cparam);
|
||||
} H5E_END_TRY;
|
||||
if(ea) {
|
||||
/* Close opened extensible array */
|
||||
H5EA_close(ea, H5P_DATASET_XFER_DEFAULT);
|
||||
|
||||
/* Indicate error */
|
||||
TEST_ERROR
|
||||
} /* end if */
|
||||
|
||||
PASSED()
|
||||
#else /* NDEBUG */
|
||||
SKIPPED();
|
||||
puts(" Not tested when assertions are disabled");
|
||||
#endif /* NDEBUG */
|
||||
|
||||
/*
|
||||
* Display testing message
|
||||
*/
|
||||
TESTING("extensible array creation");
|
||||
|
||||
if(NULL == (ea = H5EA_create(f, H5P_DATASET_XFER_DEFAULT, cparam)))
|
||||
FAIL_STACK_ERROR
|
||||
nelmts = 0;
|
||||
if(H5EA_get_nelmts(ea, &nelmts) < 0)
|
||||
FAIL_STACK_ERROR
|
||||
if(nelmts > 0)
|
||||
TEST_ERROR
|
||||
if(H5EA_get_addr(ea, &ea_addr) < 0)
|
||||
FAIL_STACK_ERROR
|
||||
if(!H5F_addr_defined(ea_addr))
|
||||
TEST_ERROR
|
||||
HDmemset(&state, 0, sizeof(state));
|
||||
if(check_stats(ea, &state))
|
||||
TEST_ERROR
|
||||
PASSED()
|
||||
|
||||
/* Query the type of address mapping */
|
||||
TESTING("query array creation parameters");
|
||||
HDmemset(&test_cparam, 0, sizeof(H5EA_create_t));
|
||||
if(H5EA_get_cparam_test(ea, &test_cparam) < 0)
|
||||
FAIL_STACK_ERROR
|
||||
if(H5EA_cmp_cparam_test(cparam, &test_cparam))
|
||||
TEST_ERROR
|
||||
|
||||
/* Close the extensible array */
|
||||
if(H5EA_close(ea, H5P_DATASET_XFER_DEFAULT) < 0)
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Delete array */
|
||||
if(H5EA_delete(f, H5P_DATASET_XFER_DEFAULT, ea_addr) < 0)
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Close the file */
|
||||
if(H5Fclose(file) < 0)
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
|
||||
/* Get the size of the file */
|
||||
if((file_size = h5_get_file_size(filename)) < 0)
|
||||
TEST_ERROR
|
||||
|
||||
/* Verify the file is correct size */
|
||||
if(file_size != empty_size)
|
||||
TEST_ERROR
|
||||
|
||||
/* All tests passed */
|
||||
PASSED()
|
||||
|
||||
return 0;
|
||||
|
||||
error:
|
||||
H5E_BEGIN_TRY {
|
||||
if(ea)
|
||||
H5EA_close(ea, H5P_DATASET_XFER_DEFAULT);
|
||||
H5Fclose(file);
|
||||
} H5E_END_TRY;
|
||||
|
||||
return 1;
|
||||
} /* end test_create() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: main
|
||||
*
|
||||
* Purpose: Test the extensible array code
|
||||
*
|
||||
* Return: Success: 0
|
||||
* Failure: 1
|
||||
*
|
||||
* Programmer: Quincey Koziol
|
||||
* Tuesday, June 17, 2008
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
int
|
||||
main(void)
|
||||
{
|
||||
H5EA_create_t cparam; /* Creation parameters for extensible array */
|
||||
earray_test_param_t tparam; /* Testing parameters */
|
||||
hid_t fapl = -1; /* File access property list for data files */
|
||||
unsigned nerrors = 0; /* Cumulative error count */
|
||||
int ExpressMode; /* Test express value */
|
||||
const char *envval; /* File Driver value from environment */
|
||||
|
||||
/* Reset library */
|
||||
h5_reset();
|
||||
fapl = h5_fileaccess();
|
||||
ExpressMode = GetTestExpress();
|
||||
if(ExpressMode > 1)
|
||||
printf("***Express test mode on. Some tests may be skipped\n");
|
||||
|
||||
if(NULL == (envval = HDgetenv("HDF5_DRIVER")))
|
||||
envval = "nomatch";
|
||||
|
||||
/* Initialize extensible array creation parameters */
|
||||
init_cparam(&cparam);
|
||||
|
||||
/* Clear the testing parameters */
|
||||
HDmemset(&tparam, 0, sizeof(tparam));
|
||||
|
||||
/* Tests */
|
||||
nerrors = test_create(fapl, &cparam, &tparam);
|
||||
|
||||
if(nerrors)
|
||||
goto error;
|
||||
puts("All extensible array tests passed.");
|
||||
|
||||
|
||||
/* Clean up file used */
|
||||
h5_cleanup(FILENAME, fapl);
|
||||
|
||||
return 0;
|
||||
|
||||
error:
|
||||
puts("*** TESTS FAILED ***");
|
||||
|
||||
H5E_BEGIN_TRY {
|
||||
H5Pclose(fapl);
|
||||
} H5E_END_TRY;
|
||||
|
||||
return 1;
|
||||
} /* end main() */
|
||||
|
132
test/fheap.c
132
test/fheap.c
@ -27,7 +27,7 @@
|
||||
#include "H5HFpkg.h" /* Fractal heaps */
|
||||
|
||||
/* Other private headers that this test requires */
|
||||
#include "H5Iprivate.h"
|
||||
#include "H5Iprivate.h" /* IDs */
|
||||
#include "H5MMprivate.h" /* Memory management */
|
||||
#include "H5Vprivate.h" /* Vectors and arrays */
|
||||
|
||||
@ -125,7 +125,7 @@ typedef struct fheap_test_param_t {
|
||||
fheap_test_del_drain_t drain_half; /* Whether to drain half of the objects & refill, when deleting objects */
|
||||
fheap_test_fill_t fill; /* How to "bulk" fill heap blocks */
|
||||
size_t actual_id_len; /* The actual length of heap IDs for a test */
|
||||
fheap_test_comp_t comp; /* Whether to compressed the blocks or not */
|
||||
fheap_test_comp_t comp; /* Whether to compress the blocks or not */
|
||||
} fheap_test_param_t;
|
||||
|
||||
/* Heap state information */
|
||||
@ -586,7 +586,7 @@ reopen_file(hid_t *file, H5F_t **f, const char *filename, hid_t fapl, hid_t dxpl
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Get a pointer to the internal file object */
|
||||
if(NULL == (*f = H5I_object(*file)))
|
||||
if(NULL == (*f = (H5F_t *)H5I_object(*file)))
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Re-open heap */
|
||||
@ -633,7 +633,7 @@ open_heap(char *filename, hid_t fapl, hid_t dxpl, const H5HF_create_t *cparam,
|
||||
/* Check for deleting the entire heap */
|
||||
if(tparam->del_dir != FHEAP_DEL_HEAP) {
|
||||
/* Get a pointer to the internal file object */
|
||||
if(NULL == (*f = H5I_object(*file)))
|
||||
if(NULL == (*f = (H5F_t *)H5I_object(*file)))
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Create absolute heap */
|
||||
@ -671,7 +671,7 @@ open_heap(char *filename, hid_t fapl, hid_t dxpl, const H5HF_create_t *cparam,
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Get a pointer to the internal file object */
|
||||
if(NULL == (*f = H5I_object(*file)))
|
||||
if(NULL == (*f = (H5F_t *)H5I_object(*file)))
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Check for deleting the entire heap */
|
||||
@ -1839,7 +1839,7 @@ test_create(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t UNUSED *tparam
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Get a pointer to the internal file object */
|
||||
if(NULL == (f = H5I_object(file)))
|
||||
if(NULL == (f = (H5F_t *)H5I_object(file)))
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/*
|
||||
@ -1939,7 +1939,7 @@ test_reopen(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t UNUSED *tparam
|
||||
TEST_ERROR
|
||||
|
||||
/* Get a pointer to the internal file object */
|
||||
if(NULL == (f = H5I_object(file)))
|
||||
if(NULL == (f = (H5F_t *)H5I_object(file)))
|
||||
STACK_ERROR
|
||||
|
||||
/*
|
||||
@ -2038,7 +2038,7 @@ test_open_twice(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t UNUSED *tp
|
||||
TEST_ERROR
|
||||
|
||||
/* Get a pointer to the internal file object */
|
||||
if(NULL == (f = H5I_object(file)))
|
||||
if(NULL == (f = (H5F_t *)H5I_object(file)))
|
||||
STACK_ERROR
|
||||
|
||||
/* Re-open the file */
|
||||
@ -2046,7 +2046,7 @@ test_open_twice(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t UNUSED *tp
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Get a pointer to the internal file object */
|
||||
if(NULL == (f2 = H5I_object(file2)))
|
||||
if(NULL == (f2 = (H5F_t *)H5I_object(file2)))
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/*
|
||||
@ -2184,7 +2184,7 @@ test_delete_open(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t UNUSED *t
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Get a pointer to the internal file object */
|
||||
if(NULL == (f = H5I_object(file)))
|
||||
if(NULL == (f = (H5F_t *)H5I_object(file)))
|
||||
STACK_ERROR
|
||||
|
||||
/* Display test banner */
|
||||
@ -2321,7 +2321,7 @@ test_id_limits(hid_t fapl, H5HF_create_t *cparam)
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Get a pointer to the internal file object */
|
||||
if(NULL == (f = H5I_object(file)))
|
||||
if(NULL == (f = (H5F_t *)H5I_object(file)))
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Display testing message */
|
||||
@ -2660,7 +2660,7 @@ test_filtered_create(hid_t fapl, H5HF_create_t *cparam)
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Get a pointer to the internal file object */
|
||||
if(NULL == (f = H5I_object(file)))
|
||||
if(NULL == (f = (H5F_t *)H5I_object(file)))
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Display testing message */
|
||||
@ -2701,7 +2701,7 @@ test_filtered_create(hid_t fapl, H5HF_create_t *cparam)
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Get a pointer to the internal file object */
|
||||
if(NULL == (f = H5I_object(file)))
|
||||
if(NULL == (f = (H5F_t *)H5I_object(file)))
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Re-open the heap */
|
||||
@ -2779,7 +2779,7 @@ test_size(hid_t fapl, H5HF_create_t *cparam)
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Get a pointer to the internal file object */
|
||||
if(NULL == (f = H5I_object(file)))
|
||||
if(NULL == (f = (H5F_t *)H5I_object(file)))
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Display testing message */
|
||||
@ -2829,7 +2829,7 @@ test_size(hid_t fapl, H5HF_create_t *cparam)
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Get a pointer to the internal file object */
|
||||
if(NULL == (f = H5I_object(file)))
|
||||
if(NULL == (f = (H5F_t *)H5I_object(file)))
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Re-open the heap */
|
||||
@ -2914,7 +2914,7 @@ test_man_insert_weird(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tpa
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Get a pointer to the internal file object */
|
||||
if(NULL == (f = H5I_object(file)))
|
||||
if(NULL == (f = (H5F_t *)H5I_object(file)))
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Create absolute heap */
|
||||
@ -3020,7 +3020,7 @@ test_man_insert_first(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tpa
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Get a pointer to the internal file object */
|
||||
if(NULL == (f = H5I_object(file)))
|
||||
if(NULL == (f = (H5F_t *)H5I_object(file)))
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Create absolute heap */
|
||||
@ -3117,7 +3117,7 @@ test_man_insert_second(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tp
|
||||
TEST_ERROR
|
||||
|
||||
/* Get a pointer to the internal file object */
|
||||
if(NULL == (f = H5I_object(file)))
|
||||
if(NULL == (f = (H5F_t *)H5I_object(file)))
|
||||
STACK_ERROR
|
||||
|
||||
/* Create absolute heap */
|
||||
@ -3210,7 +3210,7 @@ test_man_insert_root_mult(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t
|
||||
TEST_ERROR
|
||||
|
||||
/* Get a pointer to the internal file object */
|
||||
if(NULL == (f = H5I_object(file)))
|
||||
if(NULL == (f = (H5F_t *)H5I_object(file)))
|
||||
STACK_ERROR
|
||||
|
||||
/* Create absolute heap */
|
||||
@ -3305,7 +3305,7 @@ test_man_insert_force_indirect(hid_t fapl, H5HF_create_t *cparam, fheap_test_par
|
||||
TEST_ERROR
|
||||
|
||||
/* Get a pointer to the internal file object */
|
||||
if(NULL == (f = H5I_object(file)))
|
||||
if(NULL == (f = (H5F_t *)H5I_object(file)))
|
||||
STACK_ERROR
|
||||
|
||||
/* Create absolute heap */
|
||||
@ -3407,7 +3407,7 @@ test_man_insert_fill_second(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_
|
||||
TEST_ERROR
|
||||
|
||||
/* Get a pointer to the internal file object */
|
||||
if(NULL == (f = H5I_object(file)))
|
||||
if(NULL == (f = (H5F_t *)H5I_object(file)))
|
||||
STACK_ERROR
|
||||
|
||||
/* Create absolute heap */
|
||||
@ -3510,7 +3510,7 @@ test_man_insert_third_direct(hid_t fapl, H5HF_create_t *cparam, fheap_test_param
|
||||
TEST_ERROR
|
||||
|
||||
/* Get a pointer to the internal file object */
|
||||
if(NULL == (f = H5I_object(file)))
|
||||
if(NULL == (f = (H5F_t *)H5I_object(file)))
|
||||
STACK_ERROR
|
||||
|
||||
/* Create absolute heap */
|
||||
@ -3617,7 +3617,7 @@ test_man_fill_first_row(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *t
|
||||
TEST_ERROR
|
||||
|
||||
/* Get a pointer to the internal file object */
|
||||
if(NULL == (f = H5I_object(file)))
|
||||
if(NULL == (f = (H5F_t *)H5I_object(file)))
|
||||
STACK_ERROR
|
||||
|
||||
/* Create absolute heap */
|
||||
@ -3709,7 +3709,7 @@ test_man_start_second_row(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t
|
||||
TEST_ERROR
|
||||
|
||||
/* Get a pointer to the internal file object */
|
||||
if(NULL == (f = H5I_object(file)))
|
||||
if(NULL == (f = (H5F_t *)H5I_object(file)))
|
||||
STACK_ERROR
|
||||
|
||||
/* Create absolute heap */
|
||||
@ -3808,7 +3808,7 @@ test_man_fill_second_row(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *
|
||||
TEST_ERROR
|
||||
|
||||
/* Get a pointer to the internal file object */
|
||||
if(NULL == (f = H5I_object(file)))
|
||||
if(NULL == (f = (H5F_t *)H5I_object(file)))
|
||||
STACK_ERROR
|
||||
|
||||
/* Create absolute heap */
|
||||
@ -3905,7 +3905,7 @@ test_man_start_third_row(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *
|
||||
TEST_ERROR
|
||||
|
||||
/* Get a pointer to the internal file object */
|
||||
if(NULL == (f = H5I_object(file)))
|
||||
if(NULL == (f = (H5F_t *)H5I_object(file)))
|
||||
STACK_ERROR
|
||||
|
||||
/* Create absolute heap */
|
||||
@ -4012,7 +4012,7 @@ test_man_fill_fourth_row(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *
|
||||
TEST_ERROR
|
||||
|
||||
/* Get a pointer to the internal file object */
|
||||
if(NULL == (f = H5I_object(file)))
|
||||
if(NULL == (f = (H5F_t *)H5I_object(file)))
|
||||
STACK_ERROR
|
||||
|
||||
/* Create absolute heap */
|
||||
@ -4105,7 +4105,7 @@ test_man_fill_all_root_direct(hid_t fapl, H5HF_create_t *cparam, fheap_test_para
|
||||
TEST_ERROR
|
||||
|
||||
/* Get a pointer to the internal file object */
|
||||
if(NULL == (f = H5I_object(file)))
|
||||
if(NULL == (f = (H5F_t *)H5I_object(file)))
|
||||
STACK_ERROR
|
||||
|
||||
/* Create absolute heap */
|
||||
@ -4197,7 +4197,7 @@ test_man_first_recursive_indirect(hid_t fapl, H5HF_create_t *cparam, fheap_test_
|
||||
TEST_ERROR
|
||||
|
||||
/* Get a pointer to the internal file object */
|
||||
if(NULL == (f = H5I_object(file)))
|
||||
if(NULL == (f = (H5F_t *)H5I_object(file)))
|
||||
STACK_ERROR
|
||||
|
||||
/* Create absolute heap */
|
||||
@ -4295,7 +4295,7 @@ test_man_second_direct_recursive_indirect(hid_t fapl, H5HF_create_t *cparam, fhe
|
||||
TEST_ERROR
|
||||
|
||||
/* Get a pointer to the internal file object */
|
||||
if(NULL == (f = H5I_object(file)))
|
||||
if(NULL == (f = (H5F_t *)H5I_object(file)))
|
||||
STACK_ERROR
|
||||
|
||||
/* Create absolute heap */
|
||||
@ -4401,7 +4401,7 @@ test_man_fill_first_recursive_indirect(hid_t fapl, H5HF_create_t *cparam, fheap_
|
||||
TEST_ERROR
|
||||
|
||||
/* Get a pointer to the internal file object */
|
||||
if(NULL == (f = H5I_object(file)))
|
||||
if(NULL == (f = (H5F_t *)H5I_object(file)))
|
||||
STACK_ERROR
|
||||
|
||||
/* Create absolute heap */
|
||||
@ -4500,7 +4500,7 @@ test_man_second_recursive_indirect(hid_t fapl, H5HF_create_t *cparam, fheap_test
|
||||
TEST_ERROR
|
||||
|
||||
/* Get a pointer to the internal file object */
|
||||
if(NULL == (f = H5I_object(file)))
|
||||
if(NULL == (f = (H5F_t *)H5I_object(file)))
|
||||
STACK_ERROR
|
||||
|
||||
/* Create absolute heap */
|
||||
@ -4607,7 +4607,7 @@ test_man_fill_second_recursive_indirect(hid_t fapl, H5HF_create_t *cparam, fheap
|
||||
TEST_ERROR
|
||||
|
||||
/* Get a pointer to the internal file object */
|
||||
if(NULL == (f = H5I_object(file)))
|
||||
if(NULL == (f = (H5F_t *)H5I_object(file)))
|
||||
STACK_ERROR
|
||||
|
||||
/* Create absolute heap */
|
||||
@ -4711,7 +4711,7 @@ test_man_fill_recursive_indirect_row(hid_t fapl, H5HF_create_t *cparam, fheap_te
|
||||
TEST_ERROR
|
||||
|
||||
/* Get a pointer to the internal file object */
|
||||
if(NULL == (f = H5I_object(file)))
|
||||
if(NULL == (f = (H5F_t *)H5I_object(file)))
|
||||
STACK_ERROR
|
||||
|
||||
/* Create absolute heap */
|
||||
@ -4809,7 +4809,7 @@ test_man_start_2nd_recursive_indirect(hid_t fapl, H5HF_create_t *cparam, fheap_t
|
||||
TEST_ERROR
|
||||
|
||||
/* Get a pointer to the internal file object */
|
||||
if(NULL == (f = H5I_object(file)))
|
||||
if(NULL == (f = (H5F_t *)H5I_object(file)))
|
||||
STACK_ERROR
|
||||
|
||||
/* Create absolute heap */
|
||||
@ -4914,7 +4914,7 @@ test_man_recursive_indirect_two_deep(hid_t fapl, H5HF_create_t *cparam, fheap_te
|
||||
TEST_ERROR
|
||||
|
||||
/* Get a pointer to the internal file object */
|
||||
if(NULL == (f = H5I_object(file)))
|
||||
if(NULL == (f = (H5F_t *)H5I_object(file)))
|
||||
STACK_ERROR
|
||||
|
||||
/* Create absolute heap */
|
||||
@ -5013,7 +5013,7 @@ test_man_start_3rd_recursive_indirect(hid_t fapl, H5HF_create_t *cparam, fheap_t
|
||||
TEST_ERROR
|
||||
|
||||
/* Get a pointer to the internal file object */
|
||||
if(NULL == (f = H5I_object(file)))
|
||||
if(NULL == (f = (H5F_t *)H5I_object(file)))
|
||||
STACK_ERROR
|
||||
|
||||
/* Create absolute heap */
|
||||
@ -5119,7 +5119,7 @@ test_man_fill_first_3rd_recursive_indirect(hid_t fapl, H5HF_create_t *cparam, fh
|
||||
TEST_ERROR
|
||||
|
||||
/* Get a pointer to the internal file object */
|
||||
if(NULL == (f = H5I_object(file)))
|
||||
if(NULL == (f = (H5F_t *)H5I_object(file)))
|
||||
STACK_ERROR
|
||||
|
||||
/* Create absolute heap */
|
||||
@ -5226,7 +5226,7 @@ test_man_fill_3rd_recursive_indirect_row(hid_t fapl, H5HF_create_t *cparam, fhea
|
||||
TEST_ERROR
|
||||
|
||||
/* Get a pointer to the internal file object */
|
||||
if(NULL == (f = H5I_object(file)))
|
||||
if(NULL == (f = (H5F_t *)H5I_object(file)))
|
||||
STACK_ERROR
|
||||
|
||||
/* Create absolute heap */
|
||||
@ -5329,7 +5329,7 @@ test_man_fill_all_3rd_recursive_indirect(hid_t fapl, H5HF_create_t *cparam, fhea
|
||||
TEST_ERROR
|
||||
|
||||
/* Get a pointer to the internal file object */
|
||||
if(NULL == (f = H5I_object(file)))
|
||||
if(NULL == (f = (H5F_t *)H5I_object(file)))
|
||||
STACK_ERROR
|
||||
|
||||
/* Create absolute heap */
|
||||
@ -5433,7 +5433,7 @@ test_man_start_4th_recursive_indirect(hid_t fapl, H5HF_create_t *cparam, fheap_t
|
||||
TEST_ERROR
|
||||
|
||||
/* Get a pointer to the internal file object */
|
||||
if(NULL == (f = H5I_object(file)))
|
||||
if(NULL == (f = (H5F_t *)H5I_object(file)))
|
||||
STACK_ERROR
|
||||
|
||||
/* Create absolute heap */
|
||||
@ -5544,7 +5544,7 @@ test_man_fill_first_4th_recursive_indirect(hid_t fapl, H5HF_create_t *cparam, fh
|
||||
TEST_ERROR
|
||||
|
||||
/* Get a pointer to the internal file object */
|
||||
if(NULL == (f = H5I_object(file)))
|
||||
if(NULL == (f = (H5F_t *)H5I_object(file)))
|
||||
STACK_ERROR
|
||||
|
||||
/* Create absolute heap */
|
||||
@ -5660,7 +5660,7 @@ test_man_fill_4th_recursive_indirect_row(hid_t fapl, H5HF_create_t *cparam, fhea
|
||||
TEST_ERROR
|
||||
|
||||
/* Get a pointer to the internal file object */
|
||||
if(NULL == (f = H5I_object(file)))
|
||||
if(NULL == (f = (H5F_t *)H5I_object(file)))
|
||||
STACK_ERROR
|
||||
|
||||
/* Create absolute heap */
|
||||
@ -5768,7 +5768,7 @@ test_man_fill_all_4th_recursive_indirect(hid_t fapl, H5HF_create_t *cparam, fhea
|
||||
TEST_ERROR
|
||||
|
||||
/* Get a pointer to the internal file object */
|
||||
if(NULL == (f = H5I_object(file)))
|
||||
if(NULL == (f = (H5F_t *)H5I_object(file)))
|
||||
STACK_ERROR
|
||||
|
||||
/* Create absolute heap */
|
||||
@ -5879,7 +5879,7 @@ test_man_start_5th_recursive_indirect(hid_t fapl, H5HF_create_t *cparam, fheap_t
|
||||
TEST_ERROR
|
||||
|
||||
/* Get a pointer to the internal file object */
|
||||
if(NULL == (f = H5I_object(file)))
|
||||
if(NULL == (f = (H5F_t *)H5I_object(file)))
|
||||
STACK_ERROR
|
||||
|
||||
/* Create absolute heap */
|
||||
@ -6009,7 +6009,7 @@ test_man_remove_bogus(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tpa
|
||||
TEST_ERROR
|
||||
|
||||
/* Get a pointer to the internal file object */
|
||||
if(NULL == (f = H5I_object(file)))
|
||||
if(NULL == (f = (H5F_t *)H5I_object(file)))
|
||||
STACK_ERROR
|
||||
|
||||
/* Create absolute heap */
|
||||
@ -6158,7 +6158,7 @@ test_man_remove_one(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tpara
|
||||
TEST_ERROR
|
||||
|
||||
/* Get a pointer to the internal file object */
|
||||
if(NULL == (f = H5I_object(file)))
|
||||
if(NULL == (f = (H5F_t *)H5I_object(file)))
|
||||
STACK_ERROR
|
||||
|
||||
/* Create absolute heap */
|
||||
@ -6195,7 +6195,7 @@ test_man_remove_one(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tpara
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Get a pointer to the internal file object */
|
||||
if(NULL == (f = H5I_object(file)))
|
||||
if(NULL == (f = (H5F_t *)H5I_object(file)))
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Re-open heap */
|
||||
@ -6314,7 +6314,7 @@ test_man_remove_two(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tpara
|
||||
TEST_ERROR
|
||||
|
||||
/* Get a pointer to the internal file object */
|
||||
if(NULL == (f = H5I_object(file)))
|
||||
if(NULL == (f = (H5F_t *)H5I_object(file)))
|
||||
STACK_ERROR
|
||||
|
||||
/* Create absolute heap */
|
||||
@ -6351,7 +6351,7 @@ test_man_remove_two(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tpara
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Get a pointer to the internal file object */
|
||||
if(NULL == (f = H5I_object(file)))
|
||||
if(NULL == (f = (H5F_t *)H5I_object(file)))
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Re-open heap */
|
||||
@ -6499,7 +6499,7 @@ test_man_remove_one_larger(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t
|
||||
TEST_ERROR
|
||||
|
||||
/* Get a pointer to the internal file object */
|
||||
if(NULL == (f = H5I_object(file)))
|
||||
if(NULL == (f = (H5F_t *)H5I_object(file)))
|
||||
STACK_ERROR
|
||||
|
||||
/* Create absolute heap */
|
||||
@ -6536,7 +6536,7 @@ test_man_remove_one_larger(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Get a pointer to the internal file object */
|
||||
if(NULL == (f = H5I_object(file)))
|
||||
if(NULL == (f = (H5F_t *)H5I_object(file)))
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Re-open heap */
|
||||
@ -6660,7 +6660,7 @@ test_man_remove_two_larger(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t
|
||||
TEST_ERROR
|
||||
|
||||
/* Get a pointer to the internal file object */
|
||||
if(NULL == (f = H5I_object(file)))
|
||||
if(NULL == (f = (H5F_t *)H5I_object(file)))
|
||||
STACK_ERROR
|
||||
|
||||
/* Create absolute heap */
|
||||
@ -6697,7 +6697,7 @@ test_man_remove_two_larger(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Get a pointer to the internal file object */
|
||||
if(NULL == (f = H5I_object(file)))
|
||||
if(NULL == (f = (H5F_t *)H5I_object(file)))
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Re-open heap */
|
||||
@ -6896,7 +6896,7 @@ test_man_remove_three_larger(hid_t fapl, H5HF_create_t *cparam, fheap_test_param
|
||||
TEST_ERROR
|
||||
|
||||
/* Get a pointer to the internal file object */
|
||||
if(NULL == (f = H5I_object(file)))
|
||||
if(NULL == (f = (H5F_t *)H5I_object(file)))
|
||||
STACK_ERROR
|
||||
|
||||
/* Create absolute heap */
|
||||
@ -6933,7 +6933,7 @@ test_man_remove_three_larger(hid_t fapl, H5HF_create_t *cparam, fheap_test_param
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Get a pointer to the internal file object */
|
||||
if(NULL == (f = H5I_object(file)))
|
||||
if(NULL == (f = (H5F_t *)H5I_object(file)))
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Re-open heap */
|
||||
@ -13279,7 +13279,7 @@ test_filtered_huge(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Get a pointer to the internal file object */
|
||||
if(NULL == (f = H5I_object(file)))
|
||||
if(NULL == (f = (H5F_t *)H5I_object(file)))
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Re-open the heap */
|
||||
@ -14455,7 +14455,7 @@ test_filtered_man_root_direct(hid_t fapl, H5HF_create_t *cparam, fheap_test_para
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Get a pointer to the internal file object */
|
||||
if(NULL == (f = H5I_object(file)))
|
||||
if(NULL == (f = (H5F_t *)H5I_object(file)))
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Re-open the heap */
|
||||
@ -14636,7 +14636,7 @@ test_filtered_man_root_indirect(hid_t fapl, H5HF_create_t *cparam, fheap_test_pa
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Get a pointer to the internal file object */
|
||||
if(NULL == (f = H5I_object(file)))
|
||||
if(NULL == (f = (H5F_t *)H5I_object(file)))
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Re-open the heap */
|
||||
@ -14696,7 +14696,7 @@ test_filtered_man_root_indirect(hid_t fapl, H5HF_create_t *cparam, fheap_test_pa
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Get a pointer to the internal file object */
|
||||
if(NULL == (f = H5I_object(file)))
|
||||
if(NULL == (f = (H5F_t *)H5I_object(file)))
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Re-open the heap */
|
||||
@ -14728,7 +14728,7 @@ test_filtered_man_root_indirect(hid_t fapl, H5HF_create_t *cparam, fheap_test_pa
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Get a pointer to the internal file object */
|
||||
if(NULL == (f = H5I_object(file)))
|
||||
if(NULL == (f = (H5F_t *)H5I_object(file)))
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Re-open the heap */
|
||||
@ -14761,7 +14761,7 @@ test_filtered_man_root_indirect(hid_t fapl, H5HF_create_t *cparam, fheap_test_pa
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Get a pointer to the internal file object */
|
||||
if(NULL == (f = H5I_object(file)))
|
||||
if(NULL == (f = (H5F_t *)H5I_object(file)))
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Re-open the heap */
|
||||
@ -14793,7 +14793,7 @@ test_filtered_man_root_indirect(hid_t fapl, H5HF_create_t *cparam, fheap_test_pa
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Get a pointer to the internal file object */
|
||||
if(NULL == (f = H5I_object(file)))
|
||||
if(NULL == (f = (H5F_t *)H5I_object(file)))
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Re-open the heap */
|
||||
@ -15431,7 +15431,7 @@ test_write(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Get a pointer to the internal file object */
|
||||
if(NULL == (f = H5I_object(file)))
|
||||
if(NULL == (f = (H5F_t *)H5I_object(file)))
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Re-open the heap */
|
||||
@ -15589,7 +15589,7 @@ test_bug1(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Get a pointer to the internal file object */
|
||||
if(NULL == (f = H5I_object(file)))
|
||||
if(NULL == (f = (H5F_t *)H5I_object(file)))
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Re-open the heap */
|
||||
@ -15615,7 +15615,7 @@ test_bug1(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Get a pointer to the internal file object */
|
||||
if(NULL == (f = H5I_object(file)))
|
||||
if(NULL == (f = (H5F_t *)H5I_object(file)))
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Re-open the heap */
|
||||
|
Loading…
x
Reference in New Issue
Block a user