From 6beaf50c8fc861e99b46500b4dc7f606e8f72ffb Mon Sep 17 00:00:00 2001 From: Quincey Koziol Date: Thu, 8 Jul 2004 21:06:32 -0500 Subject: [svn-r8846] Purpose: Bug fix Description: The "shared" raw B-tree node can get freed before all the B-tree nodes had been flushed out to disk and released by the cache. Solution: Implement a simple reference counting wrapper for objects in the library and use it to hold the shared raw B-tree nodes so they aren't freed before all references to them in memory are released. Platforms tested: Solaris 2.7 (arabica) FreeBSD 4.10 (sleipnir) IRIX64 6.5 (modei4) --- MANIFEST | 2 ++ src/H5B.c | 10 ++++++++-- src/H5Bpkg.h | 2 ++ src/H5Distore.c | 44 ++++++++++++++++++++++++++++++++++++++++---- src/H5F.c | 14 +++++--------- src/H5Fpkg.h | 3 ++- src/H5Fprivate.h | 7 ++++--- src/H5G.c | 24 ++++++++++++++---------- src/H5Gnode.c | 46 +++++++++++++++++++++++++++++++++++++++++----- src/H5Oprivate.h | 3 ++- src/H5RC.c | 4 ++++ src/Makefile.in | 16 ++++++++-------- 12 files changed, 132 insertions(+), 43 deletions(-) diff --git a/MANIFEST b/MANIFEST index 5b200b4..d8426a8 100644 --- a/MANIFEST +++ b/MANIFEST @@ -949,6 +949,8 @@ ./src/H5R.c ./src/H5Rprivate.h ./src/H5Rpublic.h +./src/H5RC.c +./src/H5RCprivate.h ./src/H5RS.c ./src/H5RSprivate.h ./src/H5S.c diff --git a/src/H5B.c b/src/H5B.c index f28701a..a795927 100644 --- a/src/H5B.c +++ b/src/H5B.c @@ -243,8 +243,9 @@ H5B_create(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, void *udata, bt->left = HADDR_UNDEF; bt->right = HADDR_UNDEF; bt->nchildren = 0; - if((bt->raw_page=(type->get_page)(f, udata))==NULL) + if((bt->rc_page=(type->get_page)(f, udata))==NULL) HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "can't retrieve B-tree node buffer") + bt->raw_page=H5RC_GET_OBJ(bt->rc_page); if (NULL==(bt->native=H5FL_BLK_MALLOC(native_block,total_native_keysize)) || NULL==(bt->child=H5FL_SEQ_MALLOC(haddr_t,(size_t)(2*H5F_KVALUE(f,type)))) || NULL==(bt->nkey=H5FL_SEQ_MALLOC(voidp,(size_t)(2*H5F_KVALUE(f,type)+1)))) @@ -342,8 +343,9 @@ H5B_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, const void *_type, void *udata) NULL==(bt->child=H5FL_SEQ_MALLOC(haddr_t,(size_t)(2*H5F_KVALUE(f,type))))) HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed") - if((bt->raw_page=(type->get_page)(f, udata))==NULL) + if((bt->rc_page=(type->get_page)(f, udata))==NULL) HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "can't retrieve B-tree node buffer") + bt->raw_page=H5RC_GET_OBJ(bt->rc_page); if (H5F_block_read(f, H5FD_MEM_BTREE, addr, size, dxpl_id, bt->raw_page)<0) HGOTO_ERROR(H5E_BTREE, H5E_READERROR, NULL, "can't read B-tree node") @@ -576,6 +578,7 @@ H5B_dest(H5F_t UNUSED *f, H5B_t *bt) H5FL_SEQ_FREE(haddr_t,bt->child); H5FL_SEQ_FREE(voidp,bt->nkey); H5FL_BLK_FREE(native_block,bt->native); + H5RC_DEC(bt->rc_page); H5FL_FREE(H5B_t,bt); FUNC_LEAVE_NOAPI(SUCCEED) @@ -2148,6 +2151,9 @@ H5B_copy(const H5F_t *f, const H5B_t *old_bt) new_node->nkey[u] = NULL; } + /* Increment the ref-count on the raw page */ + H5RC_INC(new_node->rc_page); + /* Set return value */ ret_value=new_node; diff --git a/src/H5Bpkg.h b/src/H5Bpkg.h index 67b49db..67135cf 100644 --- a/src/H5Bpkg.h +++ b/src/H5Bpkg.h @@ -31,6 +31,7 @@ #include "H5Bprivate.h" /* Other private headers needed by this file */ +#include "H5RCprivate.h" /* Reference counted object functions */ /**************************/ /* Package Private Macros */ @@ -54,6 +55,7 @@ struct H5B_t { haddr_t left; /*address of left sibling */ haddr_t right; /*address of right sibling */ unsigned nchildren; /*number of child pointers */ + H5RC_t *rc_page; /*ref-counted disk page */ uint8_t *raw_page; /*disk page (shared) */ uint8_t *native; /*array of keys in native format */ void **nkey; /*2k+1 key entries */ diff --git a/src/H5Distore.c b/src/H5Distore.c index 6bfdf40..70ca239 100644 --- a/src/H5Distore.c +++ b/src/H5Distore.c @@ -154,6 +154,7 @@ static haddr_t H5D_istore_get_addr(H5F_t *f, hid_t dxpl_id, const H5O_layout_t * const hssize_t offset[], H5D_istore_ud1_t *_udata); static void *H5D_istore_chunk_alloc(size_t size, const H5O_pline_t *pline); static void *H5D_istore_chunk_xfree(void *chk, const H5O_pline_t *pline); +static herr_t H5D_istore_page_free (void *page); /* B-tree iterator callbacks */ static int H5D_istore_iter_allocated(H5F_t *f, hid_t dxpl_id, void *left_key, haddr_t addr, @@ -286,9 +287,13 @@ H5D_istore_get_page(H5F_t UNUSED *f, const void *_udata) assert(udata); assert(udata->mesg); - assert(udata->mesg->u.chunk.raw_page); + assert(udata->mesg->u.chunk.rc_page); - FUNC_LEAVE_NOAPI(udata->mesg->u.chunk.raw_page); + /* Increment reference count on B-tree node */ + H5RC_INC(udata->mesg->u.chunk.rc_page); + + /* Get the pointer to the ref-count object */ + FUNC_LEAVE_NOAPI(udata->mesg->u.chunk.rc_page); } /* end H5D_istore_get_page() */ @@ -906,6 +911,7 @@ H5D_istore_init (H5F_t *f, H5D_t *dset) size_t sizeof_rkey; /* Single raw key size */ size_t size; /* Raw B-tree node size */ H5D_rdcc_t *rdcc = &(dset->cache.chunk); + void *page; /* Buffer for raw B-tree node */ herr_t ret_value=SUCCEED; /* Return value */ FUNC_ENTER_NOAPI(H5D_istore_init, FAIL); @@ -927,9 +933,13 @@ H5D_istore_init (H5F_t *f, H5D_t *dset) assert(sizeof_rkey); size = H5B_nodesize(f, H5B_ISTORE, NULL, sizeof_rkey); assert(size); - if(NULL==(dset->layout.u.chunk.raw_page=H5FL_BLK_MALLOC(chunk_page,size))) + if(NULL==(page=H5FL_BLK_MALLOC(chunk_page,size))) HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for B-tree page") + /* Make page buffer reference counted */ + if(NULL==(dset->layout.u.chunk.rc_page=H5RC_create(page,H5D_istore_page_free))) + HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't create ref-count wrapper for page") + done: FUNC_LEAVE_NOAPI(ret_value); } /* end H5D_istore_init() */ @@ -1225,7 +1235,8 @@ H5D_istore_dest (H5F_t *f, hid_t dxpl_id, H5D_t *dset) HDmemset (rdcc, 0, sizeof(H5D_rdcc_t)); /* Free the raw B-tree node buffer */ - H5FL_BLK_FREE(chunk_page,dset->layout.u.chunk.raw_page); + if(H5RC_DEC(dset->layout.u.chunk.rc_page)<0) + HGOTO_ERROR (H5E_IO, H5E_CANTFREE, FAIL, "unable to decrement ref-counted page"); done: FUNC_LEAVE_NOAPI(ret_value); @@ -1233,6 +1244,31 @@ done: /*------------------------------------------------------------------------- + * Function: H5D_istore_page_free + * + * Purpose: Free a B-tree node + * + * Return: Non-negative on success/Negative on failure + * + * Programmer: Quincey Koziol + * Thursday, July 8, 2004 + * + * Modifications: + * + *------------------------------------------------------------------------- + */ +static herr_t +H5D_istore_page_free (void *page) +{ + FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5D_istore_page_free) + + H5FL_BLK_FREE(chunk_page,page); + + FUNC_LEAVE_NOAPI(SUCCEED) +} /* end H5D_istore_page_free() */ + + +/*------------------------------------------------------------------------- * Function: H5D_istore_prune * * Purpose: Prune the cache by preempting some things until the cache has diff --git a/src/H5F.c b/src/H5F.c index 5ae0435..a55ebea 100644 --- a/src/H5F.c +++ b/src/H5F.c @@ -1554,10 +1554,6 @@ H5F_new(H5F_file_t *shared, hid_t fcpl_id, hid_t fapl_id) /* Create the file's "open object" information */ if(H5FO_create(f)<0) HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, NULL, "unable to create open object TBBT") - - /* Create information needed for group nodes */ - if(H5G_node_init(f)<0) - HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, NULL, "unable to create group node info") } /* end else */ f->shared->nrefs++; @@ -4671,7 +4667,7 @@ done: /*------------------------------------------------------------------------- - * Function: H5F_raw_page + * Function: H5F_rc_page * * Purpose: Replaced a macro to retrieve the raw B-tree page value * now that the generic properties are being used to store @@ -4690,15 +4686,15 @@ done: * *------------------------------------------------------------------------- */ -void *H5F_raw_page(const H5F_t *f) +H5RC_t *H5F_rc_page(const H5F_t *f) { /* Use FUNC_ENTER_NOAPI_NOINIT_NOFUNC here to avoid performance issues */ - FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5F_raw_page) + FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5F_rc_page) assert(f); assert(f->shared); - FUNC_LEAVE_NOAPI(f->shared->raw_page) + FUNC_LEAVE_NOAPI(f->shared->rc_page) } /* end H5F_raw_page() */ @@ -4709,7 +4705,7 @@ void *H5F_raw_page(const H5F_t *f) * is called after an existing file is opened in order * to learn the true size of the underlying file. * - * Return: Success: File size + * Return: Success: Non-negative * Failure: Negative * * Programmer: David Pitt diff --git a/src/H5Fpkg.h b/src/H5Fpkg.h index 34a2197..0fd35f1 100644 --- a/src/H5Fpkg.h +++ b/src/H5Fpkg.h @@ -37,6 +37,7 @@ #include "H5private.h" /* Generic Functions */ #include "H5FOprivate.h" /* File objects */ #include "H5Gprivate.h" /* Groups */ +#include "H5RCprivate.h" /* Reference counted object functions */ /* * Feature: Define this constant to be non-zero if you want to enable code @@ -126,7 +127,7 @@ typedef struct H5F_file_t { struct H5HG_heap_t **cwfs; /* Global heap cache */ H5FO_t *open_objs; /* Open objects in file */ H5F_close_degree_t fc_degree; /* File close behavior degree */ - void *raw_page; /* Pointer to raw B-tree node buffer */ + H5RC_t *rc_page; /* Pointer to ref-counted raw B-tree node buffer */ } H5F_file_t; /* A record of the mount table */ diff --git a/src/H5Fprivate.h b/src/H5Fprivate.h index a7ecc41..b160419 100644 --- a/src/H5Fprivate.h +++ b/src/H5Fprivate.h @@ -212,7 +212,7 @@ typedef struct H5F_t H5F_t; /* Check for file driver feature enabled */ #define H5F_HAS_FEATURE(F,FL) ((F)->shared->lf->feature_flags&(FL)) /* B-tree node raw page */ -#define H5F_RAW_PAGE(F) ((F)->shared->raw_page) +#define H5F_RC_PAGE(F) ((F)->shared->rc_page) #else /* H5F_PACKAGE */ #define H5F_SIZEOF_ADDR(F) (H5F_sizeof_addr(F)) #define H5F_SIZEOF_SIZE(F) (H5F_sizeof_size(F)) @@ -222,7 +222,7 @@ typedef struct H5F_t H5F_t; #define H5F_RDCC_NBYTES(F) (H5F_rdcc_nbytes(F)) #define H5F_RDCC_W0(F) (H5F_rdcc_w0(F)) #define H5F_HAS_FEATURE(F,FL) (H5F_has_feature(F,FL)) -#define H5F_RAW_PAGE(F) (H5F_raw_page(F)) +#define H5F_RC_PAGE(F) (H5F_rc_page(F)) #endif /* H5F_PACKAGE */ @@ -388,6 +388,7 @@ typedef struct H5F_t H5F_t; /* Forward declarations for prototype arguments */ struct H5B_class_t; +struct H5RC_t; /* Private functions, not part of the publicly documented API */ H5_DLL herr_t H5F_init(void); @@ -417,7 +418,7 @@ H5_DLL hbool_t H5F_has_feature(const H5F_t *f, unsigned feature); H5_DLL size_t H5F_rdcc_nbytes(const H5F_t *f); H5_DLL size_t H5F_rdcc_nelmts(const H5F_t *f); H5_DLL double H5F_rdcc_w0(const H5F_t *f); -H5_DLL void *H5F_raw_page(const H5F_t *f); +H5_DLL struct H5RC_t *H5F_rc_page(const H5F_t *f); /* Functions that operate on blocks of bytes wrt super block */ H5_DLL herr_t H5F_block_read(const H5F_t *f, H5FD_mem_t type, haddr_t addr, diff --git a/src/H5G.c b/src/H5G.c index ae638c4..8ab9c59 100644 --- a/src/H5G.c +++ b/src/H5G.c @@ -88,6 +88,10 @@ #define H5G_PACKAGE /*suppress error message about including H5Gpkg.h */ #define H5F_PACKAGE /*suppress error about including H5Fpkg */ +/* Pablo information */ +/* (Put before include files to avoid problems with inline functions) */ +#define PABLO_MASK H5G_mask + /* Packages needed by this file... */ #include "H5private.h" /* Generic Functions */ #include "H5Aprivate.h" /* Attributes */ @@ -117,8 +121,6 @@ #define H5G_TARGET_SLINK 0x0001 #define H5G_TARGET_MOUNT 0x0002 -#define PABLO_MASK H5G_mask - /* Interface initialization */ static int interface_initialize_g = 0; #define INTERFACE_INIT H5G_init_interface @@ -1064,8 +1066,8 @@ H5G_term_interface(void) * * Purpose: Register a new object type so H5G_get_type() can detect it. * One should always register a general type before a more - * specific type. For instance, any object that has a data type - * message is a data type, but only some of those objects are + * specific type. For instance, any object that has a datatype + * message is a datatype, but only some of those objects are * datasets. * * Return: Success: Non-negative @@ -1686,6 +1688,10 @@ H5G_mkroot (H5F_t *f, hid_t dxpl_id, H5G_entry_t *ent) if (f->shared->root_grp) HGOTO_DONE(SUCCEED); + /* Create information needed for group nodes */ + if(H5G_node_init(f)<0) + HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to create group node info") + /* * If there is no root object then create one. The root group always has * a hard link count of one since it's pointed to by the boot block. @@ -1763,7 +1769,7 @@ static H5G_t * H5G_create(H5G_entry_t *loc, const char *name, size_t size_hint, hid_t dxpl_id) { H5G_t *grp = NULL; /*new group */ - H5F_t *file=NULL; /* File new group will be in */ + H5F_t *file = NULL; /* File new group will be in */ unsigned stab_init=0; /* Flag to indicate that the symbol stable was created successfully */ H5G_t *ret_value; /* Return value */ @@ -2312,11 +2318,11 @@ H5G_loc (hid_t loc_id) if (NULL==(dt=H5I_object(loc_id))) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, NULL, "invalid type ID"); if (NULL==(ret_value=H5T_entof(dt))) - HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, NULL, "unable to get symbol table entry of data type"); + HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, NULL, "unable to get symbol table entry of datatype"); break; case H5I_DATASPACE: - HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, NULL, "unable to get symbol table entry of data space"); + HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, NULL, "unable to get symbol table entry of dataspace"); case H5I_DATASET: if (NULL==(dset=H5I_object(loc_id))) @@ -2482,7 +2488,6 @@ done: if(norm_new_name) H5MM_xfree(norm_new_name); - FUNC_LEAVE_NOAPI(ret_value); } @@ -2586,7 +2591,6 @@ H5G_get_objinfo (H5G_entry_t *loc, const char *name, hbool_t follow_link, statbuf->nlink = 0; statbuf->type = H5G_LINK; statbuf->mtime = 0; - } else { /* Some other type of object */ statbuf->objno[0] = (unsigned long)(obj_ent.header); @@ -3332,7 +3336,7 @@ H5G_replace_name(int type, H5G_entry_t *loc, search_dataset=1; break; - /* Object is a named data type */ + /* Object is a named datatype */ case H5G_TYPE: /* Search and replace names through datatype IDs */ search_datatype=1; diff --git a/src/H5Gnode.c b/src/H5Gnode.c index 5458245..54786ee 100644 --- a/src/H5Gnode.c +++ b/src/H5Gnode.c @@ -63,6 +63,7 @@ typedef struct H5G_node_key_t { /* PRIVATE PROTOTYPES */ static size_t H5G_node_size(H5F_t *f); +static herr_t H5G_node_page_free (void *page); /* Metadata cache callbacks */ static H5G_node_t *H5G_node_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, const void *_udata1, @@ -197,7 +198,11 @@ H5G_node_get_page(H5F_t *f, const void UNUSED *_udata) assert(f); - FUNC_LEAVE_NOAPI(H5F_RAW_PAGE(f)); + /* Increment reference count on B-tree node */ + H5RC_INC(H5F_RC_PAGE(f)); + + /* Get the pointer to the ref-count object */ + FUNC_LEAVE_NOAPI(H5F_RC_PAGE(f)); } /* end H5G_node_get_page() */ @@ -1512,8 +1517,9 @@ done: herr_t H5G_node_init(H5F_t *f) { - size_t sizeof_rkey; /* Single raw key size */ - size_t size; /* Raw B-tree node size */ + size_t sizeof_rkey; /* Single raw key size */ + size_t size; /* Raw B-tree node size */ + void *page; /* Buffer for raw B-tree node */ herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_NOAPI(H5G_node_init, FAIL); @@ -1526,9 +1532,13 @@ H5G_node_init(H5F_t *f) assert(sizeof_rkey); size = H5B_nodesize(f, H5B_SNODE, NULL, sizeof_rkey); assert(size); - if(NULL==(f->shared->raw_page=H5FL_BLK_MALLOC(grp_page,size))) + if(NULL==(page=H5FL_BLK_MALLOC(grp_page,size))) HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for B-tree page") + /* Make page buffer reference counted */ + if(NULL==(f->shared->rc_page=H5RC_create(page,H5G_node_page_free))) + HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't create ref-count wrapper for page") + done: FUNC_LEAVE_NOAPI(ret_value); } /* end H5G_node_init() */ @@ -1560,7 +1570,7 @@ H5G_node_close(const H5F_t *f) assert(f); /* Free the raw B-tree node buffer */ - H5FL_BLK_FREE(grp_page,f->shared->raw_page); + H5RC_DEC(f->shared->rc_page); done: FUNC_LEAVE_NOAPI(ret_value); @@ -1568,6 +1578,32 @@ done: /*------------------------------------------------------------------------- + * Function: H5G_node_page_free + * + * Purpose: Free a B-tree node + * + * Return: Non-negative on success/Negative on failure + * + * Programmer: Quincey Koziol + * Thursday, July 8, 2004 + * + * Modifications: + * + *------------------------------------------------------------------------- + */ +static herr_t +H5G_node_page_free (void *page) +{ + FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5G_node_page_free) + + /* Free the raw B-tree node buffer */ + H5FL_BLK_FREE(grp_page,page); + + FUNC_LEAVE_NOAPI(SUCCEED) +} /* end H5G_node_page_free() */ + + +/*------------------------------------------------------------------------- * Function: H5G_node_debug * * Purpose: Prints debugging information about a symbol table node diff --git a/src/H5Oprivate.h b/src/H5Oprivate.h index ec4d7da..a87e52d 100644 --- a/src/H5Oprivate.h +++ b/src/H5Oprivate.h @@ -37,6 +37,7 @@ /* Private headers needed by this file */ #include "H5private.h" /* Generic functions */ #include "H5HGprivate.h" /* Global heap functions */ +#include "H5RCprivate.h" /* Reference counted object functions */ #include "H5Tprivate.h" /* Datatype functions */ #include "H5Zprivate.h" /* I/O pipeline filters */ @@ -133,7 +134,7 @@ typedef struct H5O_layout_chunk_t { unsigned ndims; /* Num dimensions in chunk */ size_t dim[H5O_LAYOUT_NDIMS]; /* Size of chunk in elements */ size_t size; /* Size of chunk in bytes */ - void *raw_page; /* Buffer for raw B-tree page */ + H5RC_t *rc_page; /* Ref-counted buffer for raw B-tree page */ } H5O_layout_chunk_t; typedef struct H5O_layout_compact_t { diff --git a/src/H5RC.c b/src/H5RC.c index 8ab1818..644ef3a 100644 --- a/src/H5RC.c +++ b/src/H5RC.c @@ -27,6 +27,10 @@ #include "H5FLprivate.h" /* Free lists */ #include "H5RCprivate.h" /* Reference-counted buffers */ +/* Interface initialization */ +static int interface_initialize_g = 0; +#define INTERFACE_INIT NULL + /* Private typedefs & structs */ /* Declare a free list to manage the H5RC_t struct */ diff --git a/src/Makefile.in b/src/Makefile.in index 551f708..f3cf5fe 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -39,13 +39,13 @@ LIB_SRC=H5.c H5A.c H5AC.c H5B.c H5D.c H5Dcontig.c H5Dcompact.c H5Dio.c \ H5MM.c H5O.c H5Oattr.c H5Obogus.c H5Ocont.c H5Odtype.c H5Oefl.c \ H5Ofill.c H5Olayout.c H5Omtime.c H5Oname.c H5Onull.c H5Opline.c \ H5Osdspace.c H5Oshared.c H5Ostab.c H5P.c H5Pdcpl.c H5Pdxpl.c \ - H5Pfapl.c H5Pfcpl.c H5Ptest.c H5R.c H5RS.c H5S.c H5Sall.c H5Shyper.c \ - H5Smpio.c H5Snone.c H5Spoint.c H5Sselect.c H5Stest.c H5ST.c H5T.c \ - H5Tarray.c H5Tbit.c H5Tcommit.c H5Tcompound.c H5Tconv.c H5Tcset.c \ - H5Tenum.c H5Tfields.c H5Tfixed.c H5Tfloat.c H5Tinit.c H5Tnative.c \ - H5Toffset.c H5Topaque.c H5Torder.c H5Tpad.c H5Tprecis.c H5Tstrpad.c \ - H5Tvlen.c H5TB.c H5TS.c H5V.c H5Z.c H5Zdeflate.c H5Zfletcher32.c \ - H5Zshuffle.c H5Zszip.c + H5Pfapl.c H5Pfcpl.c H5Ptest.c H5R.c H5RC.c H5RS.c H5S.c H5Sall.c \ + H5Shyper.c H5Smpio.c H5Snone.c H5Spoint.c H5Sselect.c H5Stest.c \ + H5ST.c H5T.c H5Tarray.c H5Tbit.c H5Tcommit.c H5Tcompound.c H5Tconv.c \ + H5Tcset.c H5Tenum.c H5Tfields.c H5Tfixed.c H5Tfloat.c H5Tinit.c \ + H5Tnative.c H5Toffset.c H5Topaque.c H5Torder.c H5Tpad.c H5Tprecis.c \ + H5Tstrpad.c H5Tvlen.c H5TB.c H5TS.c H5V.c H5Z.c H5Zdeflate.c \ + H5Zfletcher32.c H5Zshuffle.c H5Zszip.c LIB_OBJ=$(LIB_SRC:.c=.lo) @@ -67,7 +67,7 @@ PRIVATE_HDR=H5private.h H5Aprivate.h H5Apkg.h H5ACprivate.h H5Bprivate.h \ H5FOprivate.h H5FPprivate.h H5FSprivate.h H5Gprivate.h H5Gpkg.h \ H5HGprivate.h H5HLprivate.h H5HPprivate.h H5Iprivate.h H5MFprivate.h \ H5MMprivate.h H5Oprivate.h H5Opkg.h H5Pprivate.h H5Ppkg.h \ - H5Rprivate.h H5RSprivate.h H5Sprivate.h H5STprivate.h \ + H5Rprivate.h H5RCprivate.h H5RSprivate.h H5Sprivate.h H5STprivate.h \ H5Tprivate.h H5TBprivate.h H5Tpkg.h H5TSprivate.h H5Vprivate.h \ H5Zprivate.h H5Zpkg.h H5config.h -- cgit v0.12