Compare commits

...

7 Commits

33 changed files with 1788 additions and 307 deletions

View File

@@ -677,6 +677,8 @@
./src/H5FDmpiposix.h
./src/H5FDmulti.c
./src/H5FDmulti.h
./src/H5FDnull.c
./src/H5FDnull.h
./src/H5FDpkg.h
./src/H5FDprivate.h
./src/H5FDpublic.h

View File

@@ -443,11 +443,11 @@ H5FD_get_class(hid_t id)
HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, NULL, "can't find object for ID")
if(TRUE == H5P_isa_class(id, H5P_FILE_ACCESS)) {
if(H5P_get(plist, H5F_ACS_FILE_DRV_ID_NAME, &driver_id) < 0)
if((driver_id = H5P_get_driver(plist)) < 0 )
HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, NULL, "can't get driver ID")
ret_value = H5FD_get_class(driver_id);
} else if(TRUE == H5P_isa_class(id, H5P_DATASET_XFER)) {
if(H5P_get(plist, H5D_XFER_VFL_ID_NAME, &driver_id) < 0)
if((driver_id = H5P_get_driver(plist)) < 0 )
HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, NULL, "can't get driver ID")
ret_value = H5FD_get_class(driver_id);
} else {
@@ -561,6 +561,50 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5FD_sb_decode() */
/*-------------------------------------------------------------------------
* Function: H5FD_sb_verify
*
* Purpose: Verify that the driver is compatable with the driver
* that created the file. During file creation, drivers that
* modify the HDF5 file structure when interacting with the
* filesystem identify themselves in the file superblock.
* When the file is reopened, the opening driver must verify
* that it can reconstruct a logical HDF5 file from the
* modified structure in the filesystem.
*
* Return: Success: TRUE if the driver is compatable, else FALSE
* Failure: Negative
*
* Programmer: Jacob Gruber
* Friday, January 13, 2012
*
*-------------------------------------------------------------------------
*/
htri_t
H5FD_sb_verify(H5FD_t *file, const char *sb_driver_id)
{
htri_t ret_value = FALSE; /* Return value */
FUNC_ENTER_NOAPI(FAIL)
HDassert(file && file->cls);
/* Delegate to the driver if possible. If driver doesn't implement
* an sb_verify callback, the default return value is used,
* indicating incompatablility.
*/
if(file->cls->sb_verify) {
ret_value = (file->cls->sb_verify)(file, sb_driver_id);
if(ret_value < 0)
HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, FAIL, "driver sb_verify request failed")
} /* end if */
done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5FD_sb_verify() */
/*-------------------------------------------------------------------------
* Function: H5FD_pl_copy
@@ -1054,7 +1098,7 @@ H5FD_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxaddr)
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not a file access property list")
/* Get the VFD to open the file with */
if(H5P_get(plist, H5F_ACS_FILE_DRV_ID_NAME, &driver_id) < 0)
if((driver_id = H5P_get_driver(plist)) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, NULL, "can't get driver ID")
/* Get driver info */

View File

@@ -160,6 +160,7 @@ static const H5FD_class_t H5FD_core_g = {
NULL, /*sb_size */
NULL, /*sb_encode */
NULL, /*sb_decode */
NULL, /*sb_verify */
sizeof(H5FD_core_fapl_t), /*fapl_size */
H5FD_core_fapl_get, /*fapl_get */
NULL, /*fapl_copy */

View File

@@ -181,6 +181,7 @@ static const H5FD_class_t H5FD_direct_g = {
NULL, /*sb_size */
NULL, /*sb_encode */
NULL, /*sb_decode */
NULL, /*sb_verify */
sizeof(H5FD_direct_fapl_t), /*fapl_size */
H5FD_direct_fapl_get, /*fapl_get */
H5FD_direct_fapl_copy, /*fapl_copy */

View File

@@ -42,7 +42,7 @@
#include "H5Eprivate.h" /* Error handling */
#include "H5Fprivate.h" /* File access */
#include "H5FDprivate.h" /* File drivers */
#include "H5FDfamily.h" /* Family file driver */
#include "H5FDfamily.h" /* Family file driver */
#include "H5Iprivate.h" /* IDs */
#include "H5MMprivate.h" /* Memory management */
#include "H5Pprivate.h" /* Property lists */
@@ -99,6 +99,7 @@ static herr_t H5FD_family_sb_encode(H5FD_t *_file, char *name/*out*/,
unsigned char *buf/*out*/);
static herr_t H5FD_family_sb_decode(H5FD_t *_file, const char *name,
const unsigned char *buf);
static htri_t H5FD_family_sb_verify(H5FD_t *_file, const char *driver_id);
static H5FD_t *H5FD_family_open(const char *name, unsigned flags,
hid_t fapl_id, haddr_t maxaddr);
static herr_t H5FD_family_close(H5FD_t *_file);
@@ -124,6 +125,7 @@ static const H5FD_class_t H5FD_family_g = {
H5FD_family_sb_size, /*sb_size */
H5FD_family_sb_encode, /*sb_encode */
H5FD_family_sb_decode, /*sb_decode */
H5FD_family_sb_verify, /*sb_verify */
sizeof(H5FD_family_fapl_t), /*fapl_size */
H5FD_family_fapl_get, /*fapl_get */
H5FD_family_fapl_copy, /*fapl_copy */
@@ -623,7 +625,7 @@ H5FD_family_sb_encode(H5FD_t *_file, char *name/*out*/, unsigned char *buf/*out*
FUNC_ENTER_NOAPI_NOINIT_NOERR
/* Name and version number */
HDstrncpy(name, "NCSAfami", (size_t)9);
HDstrncpy(name, H5FD_DRIVER_ID_FAMILY, (size_t)9);
name[8] = '\0';
/* Store member file size. Use the member file size from the property here.
@@ -699,6 +701,37 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5FD_family_sb_decode() */
/*-------------------------------------------------------------------------
* Function: H5FD_family_sb_verify
*
* Purpose: Verify that the family driver is compatable with the driver
* that created the file.
*
* Return: Success: TRUE if the driver is compatible, esle FALSE
* Failure: Negative
*
* Programmer: Jacob Gruber
* Friday, January 13, 2012
*
*-------------------------------------------------------------------------
*/
static htri_t
H5FD_family_sb_verify(H5FD_t UNUSED *_file, const char *sb_driver_id)
{
htri_t ret_value = FALSE; /* Return value */
FUNC_ENTER_NOAPI(FAIL)
/* Check if the suerblock was written by a family driver. */
if(HDstrncmp(sb_driver_id, H5FD_DRIVER_ID_FAMILY, (size_t)8) == 0) {
ret_value = TRUE;
}
done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5FD_family_sb_verify() */
/*-------------------------------------------------------------------------
* Function: H5FD_family_open

View File

@@ -23,6 +23,7 @@
#define H5FDfamily_H
#define H5FD_FAMILY (H5FD_family_init())
#define H5FD_DRIVER_ID_FAMILY "NCSAfami"
#ifdef __cplusplus
extern "C" {

View File

@@ -209,6 +209,7 @@ static const H5FD_class_t H5FD_log_g = {
NULL, /*sb_size */
NULL, /*sb_encode */
NULL, /*sb_decode */
NULL, /*sb_verify */
sizeof(H5FD_log_fapl_t), /*fapl_size */
H5FD_log_fapl_get, /*fapl_get */
H5FD_log_fapl_copy, /*fapl_copy */

View File

@@ -103,6 +103,7 @@ static const H5FD_class_mpi_t H5FD_mpio_g = {
NULL, /*sb_size */
NULL, /*sb_encode */
NULL, /*sb_decode */
NULL, /*sb_verify */
sizeof(H5FD_mpio_fapl_t), /*fapl_size */
H5FD_mpio_fapl_get, /*fapl_get */
H5FD_mpio_fapl_copy, /*fapl_copy */

View File

@@ -212,6 +212,7 @@ static const H5FD_class_mpi_t H5FD_mpiposix_g = {
NULL, /*sb_size */
NULL, /*sb_encode */
NULL, /*sb_decode */
NULL, /*sb_verify */
sizeof(H5FD_mpiposix_fapl_t), /*fapl_size */
H5FD_mpiposix_fapl_get, /*fapl_get */
H5FD_mpiposix_fapl_copy, /*fapl_copy */

View File

@@ -123,6 +123,7 @@ static herr_t H5FD_multi_sb_encode(H5FD_t *file, char *name/*out*/,
unsigned char *buf/*out*/);
static herr_t H5FD_multi_sb_decode(H5FD_t *file, const char *name,
const unsigned char *buf);
static htri_t H5FD_multi_sb_verify(H5FD_t *file, const char *driver_id);
static void *H5FD_multi_fapl_get(H5FD_t *file);
static void *H5FD_multi_fapl_copy(const void *_old_fa);
static herr_t H5FD_multi_fapl_free(void *_fa);
@@ -157,6 +158,7 @@ static const H5FD_class_t H5FD_multi_g = {
H5FD_multi_sb_size, /*sb_size */
H5FD_multi_sb_encode, /*sb_encode */
H5FD_multi_sb_decode, /*sb_decode */
H5FD_multi_sb_verify, /*sb_verify */
sizeof(H5FD_multi_fapl_t), /*fapl_size */
H5FD_multi_fapl_get, /*fapl_get */
H5FD_multi_fapl_copy, /*fapl_copy */
@@ -778,7 +780,7 @@ H5FD_multi_sb_encode(H5FD_t *_file, char *name/*out*/,
H5Eclear2(H5E_DEFAULT);
/* Name and version number */
strncpy(name, "NCSAmulti", (size_t)8);
strncpy(name, H5FD_DRIVER_ID_MULTI, (size_t)8);
name[8] = '\0';
assert(7==H5FD_MEM_NTYPES);
@@ -863,7 +865,7 @@ H5FD_multi_sb_decode(H5FD_t *_file, const char *name, const unsigned char *buf)
H5Eclear2(H5E_DEFAULT);
/* Make sure the name/version number is correct */
if (strcmp(name, "NCSAmult"))
if (strcmp(name, H5FD_DRIVER_ID_MULTI))
H5Epush_ret(func, H5E_ERR_CLS, H5E_FILE, H5E_BADVALUE, "invalid multi superblock", -1)
/* Set default values */
@@ -981,6 +983,34 @@ H5FD_multi_sb_decode(H5FD_t *_file, const char *name, const unsigned char *buf)
return 0;
} /* end H5FD_multi_sb_decode() */
/*-------------------------------------------------------------------------
* Function: H5FD_multi_sb_verify
*
* Purpose: Verify that the multi driver is compatable with the driver
* that created the file.
*
* Return: Success: TRUE if the driver is compatible, else FALSE
* Failure: Negative
*
* Programmer: Jacob Gruber
* Friday, January 13, 2012
*
*-------------------------------------------------------------------------
*/
static htri_t
H5FD_multi_sb_verify(H5FD_t *_file, const char *sb_driver_id)
{
static const char *func = "H5FD_multi_sb_verify";
/* Check that the superblock was written by the multi driver */
if(strncmp(sb_driver_id, H5FD_DRIVER_ID_MULTI, (size_t)8) == 0) {
return 1;
}
return 0;
} /* end H5FD_family_sb_verify() */
/*-------------------------------------------------------------------------
* Function: H5FD_multi_fapl_get

View File

@@ -23,6 +23,7 @@
#define H5FDmulti_H
#define H5FD_MULTI (H5FD_multi_init())
#define H5FD_DRIVER_ID_MULTI "NCSAmult"
#ifdef __cplusplus
extern "C" {

1353
src/H5FDnull.c Normal file

File diff suppressed because it is too large Load Diff

41
src/H5FDnull.h Normal file
View File

@@ -0,0 +1,41 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* 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: Jacob Gruber
* Thursday, January 5, 2012
*
* Purpose: The public header file for the null driver.
*/
#ifndef H5FDnull_H
#define H5FDnull_H
#include "H5Ipublic.h"
#define H5FD_NULL (H5FD_null_init())
#ifdef __cplusplus
extern "C" {
#endif
H5_DLL hid_t H5FD_null_init(void);
H5_DLL herr_t H5Pset_fapl_null(hid_t fapl_id, hid_t inner_fapl_id);
H5_DLL herr_t H5Pget_fapl_null(hid_t fapl_id, hid_t *inner_fapl_id/*out*/);
#ifdef __cplusplus
}
#endif
#endif

View File

@@ -38,7 +38,6 @@
/* Package Private Macros */
/**************************/
/****************************/
/* Package Private Typedefs */
/****************************/

View File

@@ -39,7 +39,6 @@
/* Length of filename buffer */
#define H5FD_MAX_FILENAME_LEN 1024
/****************************/
/* Library Private Typedefs */
/****************************/
@@ -93,6 +92,7 @@ H5_DLL H5FD_class_t *H5FD_get_class(hid_t id);
H5_DLL hsize_t H5FD_sb_size(H5FD_t *file);
H5_DLL herr_t H5FD_sb_encode(H5FD_t *file, char *name/*out*/, uint8_t *buf);
H5_DLL herr_t H5FD_sb_decode(H5FD_t *file, const char *name, const uint8_t *buf);
H5_DLL herr_t H5FD_sb_verify(H5FD_t *file, const char *sb_driver_id);
H5_DLL void *H5FD_fapl_get(H5FD_t *file);
H5_DLL herr_t H5FD_fapl_open(struct H5P_genplist_t *plist, hid_t driver_id, const void *driver_info);
H5_DLL herr_t H5FD_fapl_close(hid_t driver_id, void *fapl);
@@ -125,10 +125,6 @@ H5_DLL herr_t H5FD_get_fileno(const H5FD_t *file, unsigned long *filenum);
H5_DLL herr_t H5FD_get_vfd_handle(H5FD_t *file, hid_t fapl, void** file_handle);
H5_DLL herr_t H5FD_set_base_addr(H5FD_t *file, haddr_t base_addr);
H5_DLL haddr_t H5FD_get_base_addr(const H5FD_t *file);
#ifdef H5_HAVE_PARALLEL
H5_DLL herr_t H5FD_set_mpio_atomicity(H5FD_t *file, hbool_t flag);
H5_DLL herr_t H5FD_get_mpio_atomicity(H5FD_t *file, hbool_t *flag);
#endif /* H5_HAVE_PARALLEL */
#endif /* !_H5FDprivate_H */

View File

@@ -235,6 +235,12 @@ typedef enum H5F_mem_t H5FD_mem_t;
*/
#define H5FD_FEAT_CAN_USE_FILE_IMAGE_CALLBACKS 0x00000800
/*
* Define the internal 8 character identifier stored in the superblock for
* files created by drivers that modify the file structure.
*/
#define H5FD_DRIVER_ID_FAMILY "NCSAfami"
#define H5FD_DRIVER_ID_MULTI "NCSAmulti"
/* Forward declaration */
typedef struct H5FD_t H5FD_t;
@@ -249,6 +255,7 @@ typedef struct H5FD_class_t {
herr_t (*sb_encode)(H5FD_t *file, char *name/*out*/,
unsigned char *p/*out*/);
herr_t (*sb_decode)(H5FD_t *f, const char *name, const unsigned char *p);
htri_t (*sb_verify)(H5FD_t *file, const char *sb_driver_id);
size_t fapl_size;
void * (*fapl_get)(H5FD_t *file);
void * (*fapl_copy)(const void *fapl);

View File

@@ -167,6 +167,7 @@ static const H5FD_class_t H5FD_sec2_g = {
NULL, /*sb_size */
NULL, /*sb_encode */
NULL, /*sb_decode */
NULL, /*sb_verify */
0, /*fapl_size */
NULL, /*fapl_get */
NULL, /*fapl_copy */

View File

@@ -202,6 +202,7 @@ static const H5FD_class_t H5FD_stdio_g = {
NULL, /* sb_size */
NULL, /* sb_encode */
NULL, /* sb_decode */
NULL, /* sb_verify */
0, /* fapl_size */
NULL, /* fapl_get */
NULL, /* fapl_copy */

View File

@@ -128,6 +128,7 @@ H5F_sblock_load(H5F_t *f, hid_t dxpl_id, haddr_t UNUSED addr, void *_udata)
uint8_t *p; /* Temporary pointer into encoding buffer */
unsigned super_vers; /* Superblock version */
hbool_t *dirtied = (hbool_t *)_udata; /* Set up dirtied out value */
htri_t sb_verify_result; /* Result of sb_verify call */
H5F_super_t *ret_value; /* Return value */
FUNC_ENTER_NOAPI_NOINIT
@@ -360,13 +361,11 @@ H5F_sblock_load(H5F_t *f, hid_t dxpl_id, haddr_t UNUSED addr, void *_udata)
drv_name[8] = '\0';
p += 8; /* advance past name/version */
/* Check if driver matches driver information saved. Unfortunately, we can't push this
* function to each specific driver because we're checking if the driver is correct.
*/
if(!HDstrncmp(drv_name, "NCSAfami", (size_t)8) && HDstrcmp(lf->cls->name, "family"))
HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "family driver should be used")
if(!HDstrncmp(drv_name, "NCSAmult", (size_t)8) && HDstrcmp(lf->cls->name, "multi"))
HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "multi driver should be used")
/* Check if the driver is compatible with the driver information saved. */
if((sb_verify_result = H5FD_sb_verify(lf, drv_name)) < 0)
HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "unable to determine driver compatability")
else if(sb_verify_result == 0)
HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "driver does not support this file")
/* Read in variable-sized portion of driver info block */
if(H5FD_set_eoa(lf, H5FD_MEM_SUPER, sblock->driver_addr + H5F_DRVINFOBLOCK_HDR_SIZE + drv_variable_size) < 0)
@@ -522,13 +521,11 @@ H5F_sblock_load(H5F_t *f, hid_t dxpl_id, haddr_t UNUSED addr, void *_udata)
if(NULL == H5O_msg_read(&ext_loc, H5O_DRVINFO_ID, &drvinfo, dxpl_id))
HGOTO_ERROR(H5E_FILE, H5E_CANTGET, NULL, "driver info message not present")
/* Check if driver matches driver information saved. Unfortunately, we can't push this
* function to each specific driver because we're checking if the driver is correct.
*/
if(!HDstrncmp(drvinfo.name, "NCSAfami", (size_t)8) && HDstrcmp(lf->cls->name, "family"))
HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "family driver should be used")
if(!HDstrncmp(drvinfo.name, "NCSAmult", (size_t)8) && HDstrcmp(lf->cls->name, "multi"))
HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "multi driver should be used")
/* Check if the driver is compatible with the driver information saved. */
if((sb_verify_result = H5FD_sb_verify(lf, drvinfo.name)) < 0)
HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "unable to determine driver compatability")
else if(sb_verify_result == 0)
HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "driver does not support this file")
/* Decode driver information */
if(H5FD_sb_decode(lf, drvinfo.name, drvinfo.buf) < 0)

View File

@@ -91,7 +91,7 @@
#define H5F_ACS_GARBG_COLCT_REF_DEF 0
/* Definition for file driver ID */
#define H5F_ACS_FILE_DRV_ID_SIZE sizeof(hid_t)
#define H5F_ACS_FILE_DRV_ID_DEF H5_DEFAULT_VFD
#define H5F_ACS_FILE_DRV_ID_DEF H5FD_VFD_DEFAULT
/* Definition for file driver info */
#define H5F_ACS_FILE_DRV_INFO_SIZE sizeof(void*)
#define H5F_ACS_FILE_DRV_INFO_DEF NULL
@@ -352,7 +352,8 @@ H5P_facc_create(hid_t fapl_id, void UNUSED *copy_data)
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property list")
/* Retrieve driver ID property */
if(H5P_get(plist, H5F_ACS_FILE_DRV_ID_NAME, &driver_id) < 0)
//if(H5P_get(plist, H5F_ACS_FILE_DRV_ID_NAME, &driver_id) < 0)
if((driver_id = H5P_get_driver(plist)) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get driver ID")
if(driver_id > 0) {
@@ -400,7 +401,8 @@ H5P_facc_copy(hid_t dst_fapl_id, hid_t src_fapl_id, void UNUSED *copy_data)
/* Get driver ID from source property list */
if(NULL == (src_plist = (H5P_genplist_t *)H5I_object(src_fapl_id)))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "can't get property list")
if(H5P_get(src_plist, H5F_ACS_FILE_DRV_ID_NAME, &driver_id) < 0)
//if(H5P_get(src_plist, H5F_ACS_FILE_DRV_ID_NAME, &driver_id) < 0)
if((driver_id = H5P_get_driver(src_plist)) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get driver ID")
if(driver_id > 0) {
@@ -453,7 +455,8 @@ H5P_facc_close(hid_t fapl_id, void UNUSED *close_data)
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property list")
/* Get driver ID property */
if(H5P_get(plist, H5F_ACS_FILE_DRV_ID_NAME, &driver_id) < 0)
//if(H5P_get(plist, H5F_ACS_FILE_DRV_ID_NAME, &driver_id) < 0)
if((driver_id = H5P_get_driver(plist)) < 0)
HGOTO_DONE(FAIL) /* Can't return errors when library is shutting down */
if(driver_id > 0) {

View File

@@ -61,7 +61,7 @@ libhdf5_la_SOURCES= H5.c H5checksum.c H5dbg.c H5system.c H5timer.c H5trace.c \
H5FAstat.c H5FAtest.c \
H5FD.c H5FDcore.c \
H5FDdirect.c H5FDfamily.c H5FDint.c H5FDlog.c H5FDmpi.c H5FDmpio.c \
H5FDmpiposix.c H5FDmulti.c H5FDsec2.c H5FDspace.c H5FDstdio.c \
H5FDmpiposix.c H5FDmulti.c H5FDnull.c H5FDsec2.c H5FDspace.c H5FDstdio.c \
H5FL.c H5FO.c H5FS.c H5FScache.c H5FSdbg.c H5FSsection.c H5FSstat.c H5FStest.c \
H5G.c H5Gbtree2.c H5Gcache.c \
H5Gcompact.c H5Gdense.c H5Gdeprec.c H5Gent.c \
@@ -113,8 +113,8 @@ include_HEADERS = hdf5.h H5api_adpt.h H5overflow.h H5pubconf.h H5public.h H5vers
H5Apublic.h H5ACpublic.h \
H5Cpublic.h H5Dpublic.h \
H5Epubgen.h H5Epublic.h H5Fpublic.h H5FDpublic.h H5FDcore.h H5FDdirect.h \
H5FDfamily.h H5FDlog.h H5FDmpi.h H5FDmpio.h H5FDmpiposix.h \
H5FDmulti.h H5FDsec2.h H5FDstdio.h \
H5FDfamily.h H5FDlog.h H5FDmpi.h H5FDmpio.h H5FDmpiposix.h \
H5FDmulti.h H5FDnull.h H5FDsec2.h H5FDstdio.h \
H5Gpublic.h H5Ipublic.h H5Lpublic.h \
H5MMpublic.h H5Opublic.h H5Ppublic.h H5Rpublic.h H5Spublic.h \
H5Tpublic.h H5Zpublic.h

View File

@@ -112,10 +112,10 @@ am_libhdf5_la_OBJECTS = H5.lo H5checksum.lo H5dbg.lo H5system.lo \
H5FAcache.lo H5FAdbg.lo H5FAdblock.lo H5FAdblkpage.lo \
H5FAhdr.lo H5FAstat.lo H5FAtest.lo H5FD.lo H5FDcore.lo \
H5FDdirect.lo H5FDfamily.lo H5FDint.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 H5FSstat.lo H5FStest.lo H5G.lo \
H5Gbtree2.lo H5Gcache.lo H5Gcompact.lo H5Gdense.lo \
H5FDmpio.lo H5FDmpiposix.lo H5FDmulti.lo H5FDnull.lo \
H5FDsec2.lo H5FDspace.lo H5FDstdio.lo H5FL.lo H5FO.lo H5FS.lo \
H5FScache.lo H5FSdbg.lo H5FSsection.lo H5FSstat.lo H5FStest.lo \
H5G.lo H5Gbtree2.lo H5Gcache.lo H5Gcompact.lo H5Gdense.lo \
H5Gdeprec.lo H5Gent.lo H5Gint.lo H5Glink.lo H5Gloc.lo \
H5Gname.lo H5Gnode.lo H5Gobj.lo H5Goh.lo H5Groot.lo H5Gstab.lo \
H5Gtest.lo H5Gtraverse.lo H5HF.lo H5HFbtree2.lo H5HFcache.lo \
@@ -520,7 +520,7 @@ libhdf5_la_SOURCES = H5.c H5checksum.c H5dbg.c H5system.c H5timer.c H5trace.c \
H5FAstat.c H5FAtest.c \
H5FD.c H5FDcore.c \
H5FDdirect.c H5FDfamily.c H5FDint.c H5FDlog.c H5FDmpi.c H5FDmpio.c \
H5FDmpiposix.c H5FDmulti.c H5FDsec2.c H5FDspace.c H5FDstdio.c \
H5FDmpiposix.c H5FDmulti.c H5FDnull.c H5FDsec2.c H5FDspace.c H5FDstdio.c \
H5FL.c H5FO.c H5FS.c H5FScache.c H5FSdbg.c H5FSsection.c H5FSstat.c H5FStest.c \
H5G.c H5Gbtree2.c H5Gcache.c \
H5Gcompact.c H5Gdense.c H5Gdeprec.c H5Gent.c \
@@ -572,8 +572,8 @@ include_HEADERS = hdf5.h H5api_adpt.h H5overflow.h H5pubconf.h H5public.h H5vers
H5Apublic.h H5ACpublic.h \
H5Cpublic.h H5Dpublic.h \
H5Epubgen.h H5Epublic.h H5Fpublic.h H5FDpublic.h H5FDcore.h H5FDdirect.h \
H5FDfamily.h H5FDlog.h H5FDmpi.h H5FDmpio.h H5FDmpiposix.h \
H5FDmulti.h H5FDsec2.h H5FDstdio.h \
H5FDfamily.h H5FDlog.h H5FDmpi.h H5FDmpio.h H5FDmpiposix.h \
H5FDmulti.h H5FDnull.h H5FDsec2.h H5FDstdio.h \
H5Gpublic.h H5Ipublic.h H5Lpublic.h \
H5MMpublic.h H5Opublic.h H5Ppublic.h H5Rpublic.h H5Spublic.h \
H5Tpublic.h H5Zpublic.h
@@ -777,6 +777,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5FDmpio.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5FDmpiposix.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5FDmulti.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5FDnull.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5FDsec2.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5FDspace.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5FDstdio.Plo@am__quote@

View File

@@ -48,6 +48,7 @@
#include "H5FDmulti.h" /* Usage-partitioned file family */
#include "H5FDsec2.h" /* POSIX unbuffered file I/O */
#include "H5FDstdio.h" /* Standard C buffered I/O */
#include "H5FDnull.h" /* Basic stackable file driver */
#ifdef H5_HAVE_WINDOWS
#include "H5FDwindows.h" /* Windows buffered I/O */
#endif

View File

@@ -51,6 +51,8 @@ const char *FILENAME[] = {
"stdio_file", /*7*/
"windows_file", /*8*/
"new_multi_file_v16",/*9*/
"null_core_file", /*10*/
"null_family_file", /*11*/
NULL
};
@@ -1291,6 +1293,229 @@ error:
return -1;
}
/*-------------------------------------------------------------------------
* Function: test_null
*
* Purpose: Tests the file handle interface for the NULL driver.
* The first component of this test is to wrap the null driver
* around the core driver and run the core test suite.
* Since the core driver does not implement all VFD features,
* other drivers need to be tested as well.
*
* Return: Success: 0
* Failure: -1
*
* Programmer: Jacob Gruber
* Friday, January 5, 2012
*
*-------------------------------------------------------------------------
*/
static herr_t
test_null(void)
{
hid_t file=(-1), null_fapl, core_fapl, family_fapl;
hid_t null_fapl2=(-1), core_fapl2=(-1);
hid_t dset1=(-1), space1=(-1);
char filename[1024];
void *fhandle=NULL;
hsize_t file_size, dims1[2];
int i, j, n, *points, *check, *p1, *p2;
TESTING("NULL file driver");
/* Set property list for the CORE driver */
core_fapl = h5_fileaccess();
if(H5Pset_fapl_core(core_fapl, (size_t)CORE_INCREMENT, TRUE) < 0)
TEST_ERROR;
/* Stack the null driver on top of the core driver. */
null_fapl = h5_fileaccess();
if(H5Pset_fapl_null(null_fapl, core_fapl) < 0)
TEST_ERROR;
/* Set the file name in the core driver */
h5_fixname(FILENAME[10], null_fapl, filename, sizeof filename);
/* Create the file with the null driver */
if((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, null_fapl)) < 0)
TEST_ERROR;
/* Retrieve the top access property list... */
if((null_fapl2 = H5Fget_access_plist(file)) < 0)
TEST_ERROR;
/* Retrieve the bottom access property list */
if (H5Pget_fapl_null(null_fapl2, &core_fapl2) < 0)
TEST_ERROR;
if (core_fapl2 < 0)
TEST_ERROR;
/* Check that the top driver is correct */
if(H5FD_NULL != H5Pget_driver(null_fapl2))
TEST_ERROR;
/* Check that the bottom driver is correct */
if(H5FD_CORE != H5Pget_driver(core_fapl2))
TEST_ERROR;
/* Close the bottom property list */
if (H5Pclose(core_fapl2) < 0)
TEST_ERROR;
/* ...and close the top property list */
if (H5Pclose(null_fapl2) < 0)
TEST_ERROR;
/* Check the file handle API */
if(H5Fget_vfd_handle(file, H5P_DEFAULT, &fhandle) < 0)
TEST_ERROR;
if(fhandle == NULL)
TEST_ERROR;
/* Check file size API */
if(H5Fget_filesize(file, &file_size) < 0)
TEST_ERROR;
/* There is no garantee the size of metadata in file is constant.
* Just try to check if it's reasonable. Why is this 4KB?
*/
if(file_size<2*KB || file_size>6*KB)
TEST_ERROR;
/* Close the file */
if(H5Fclose(file) < 0)
TEST_ERROR;
/* Turn off the backing store in the core driver. This is done
* to increase the speed of the test. The null driver only stores
* a reference to this fapl, so the change is immediately
* recognized.
*/
if(H5Pset_fapl_core(core_fapl, (size_t)CORE_INCREMENT, FALSE) < 0)
TEST_ERROR;
/* Open the file with the null driver */
if((file=H5Fopen(filename, H5F_ACC_RDWR, null_fapl)) < 0)
TEST_ERROR;
/* Allocate memory for data set. */
points=(int*)malloc(DSET1_DIM1*DSET1_DIM2*sizeof(int));
check=(int*)malloc(DSET1_DIM1*DSET1_DIM2*sizeof(int));
/* Initialize the dset1 */
p1 = points;
for(i = n = 0; i < DSET1_DIM1; i++)
for(j = 0; j < DSET1_DIM2; j++)
*p1++ = n++;
/* Create the data space1 */
dims1[0] = DSET1_DIM1;
dims1[1] = DSET1_DIM2;
if((space1 = H5Screate_simple(2, dims1, NULL)) < 0)
TEST_ERROR;
/* Create the dset1 */
if((dset1 = H5Dcreate2(file, DSET1_NAME, H5T_NATIVE_INT, space1, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0)
TEST_ERROR;
/* Write the data to the dset1 */
if(H5Dwrite(dset1, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, points) < 0)
TEST_ERROR;
/* Close the dset */
if(H5Dclose(dset1) < 0)
TEST_ERROR;
/* Reopen the dset */
if((dset1 = H5Dopen2(file, DSET1_NAME, H5P_DEFAULT)) < 0)
TEST_ERROR;
/* Read the data back from dset1 */
if(H5Dread(dset1, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, check) < 0)
TEST_ERROR;
/* Check that the values read are the same as the values written */
p1 = points;
p2 = check;
for(i = 0; i < DSET1_DIM1; i++)
for(j = 0; j < DSET1_DIM2; j++)
if(*p1++ != *p2++) {
H5_FAILED();
printf(" Read different values than written in data set 1.\n");
printf(" At index %d,%d\n", i, j);
TEST_ERROR;
} /* end if */
/* Clean up */
if(H5Sclose(space1) < 0)
TEST_ERROR;
if(H5Dclose(dset1) < 0)
TEST_ERROR;
if(H5Fclose(file) < 0)
TEST_ERROR;
if(points)
free(points);
if(check)
free(check);
if(H5Pclose(core_fapl) < 0)
TEST_ERROR;
h5_cleanup(FILENAME, null_fapl);
/* Test the superblock fucntions. The superblock is only used when
* testing the compatibility of the family and multi drivers, so
* a separate test is needed.
*/
/* Set up family FAPL */
family_fapl = h5_fileaccess();
if(H5Pset_fapl_family(family_fapl, (hsize_t)FAMILY_SIZE, H5P_DEFAULT) < 0)
TEST_ERROR;
/* Wrap null around family driver */
null_fapl = h5_fileaccess();
if(H5Pset_fapl_null(null_fapl, family_fapl) < 0)
TEST_ERROR;
/* Set the file name. Thsi must be done with the family driver so that
* the member numbers are properly set up.
*/
h5_fixname(FILENAME[11], family_fapl, filename, sizeof filename);
/* Create file with the null driver*/
if((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, null_fapl)) < 0)
TEST_ERROR;
/* close file */
if(H5Fclose(file) < 0)
TEST_ERROR;
/* Reopen file, testing suplerblocks for compatability */
if((file=H5Fopen(filename, H5F_ACC_RDWR, null_fapl)) < 0)
TEST_ERROR;
/* Cleanup */
if(H5Fclose(file) < 0)
TEST_ERROR;
h5_cleanup(FILENAME, family_fapl);
if(H5Pclose(null_fapl) < 0)
TEST_ERROR;
PASSED();
return 0;
error:
H5E_BEGIN_TRY {
H5Pclose (core_fapl);
H5Pclose (null_fapl);
H5Fclose(file);
} H5E_END_TRY;
return -1;
}
/*-------------------------------------------------------------------------
* Function: test_log
@@ -1411,6 +1636,11 @@ test_stdio(void)
if((access_fapl = H5Fget_access_plist(file)) < 0)
TEST_ERROR;
/* Check that the driver is correct */
/* Retrieve the access property list... */
if((access_fapl = H5Fget_access_plist(file)) < 0)
TEST_ERROR;
/* Check that the driver is correct */
if(H5FD_STDIO != H5Pget_driver(access_fapl))
TEST_ERROR;
@@ -1572,6 +1802,7 @@ main(void)
nerrors += test_family_compat() < 0 ? 1 : 0;
nerrors += test_multi() < 0 ? 1 : 0;
nerrors += test_multi_compat() < 0 ? 1 : 0;
nerrors += test_null() < 0 ? 1 : 0;
nerrors += test_direct() < 0 ? 1 : 0;
nerrors += test_log() < 0 ? 1 : 0;
nerrors += test_stdio() < 0 ? 1 : 0;

View File

@@ -1,5 +0,0 @@
obj1 </soft_link1> is a dangling link.
obj2 </soft_link1> is a dangling link.
dangling link: </soft_link1> and </soft_link1>
0 differences found
EXIT CODE: 0

View File

@@ -1,3 +0,0 @@
obj2 </soft_link2> is a dangling link.
1 differences found
EXIT CODE: 1

View File

@@ -1,5 +0,0 @@
obj1 </ext_link4> is a dangling link.
obj2 </ext_link4> is a dangling link.
dangling link: </ext_link4> and </ext_link4>
0 differences found
EXIT CODE: 0

View File

@@ -1,3 +0,0 @@
obj2 </ext_link2> is a dangling link.
1 differences found
EXIT CODE: 1

View File

@@ -1,42 +0,0 @@
HDF5 "tarray2.h5" {
DATASET "Dataset1" {
DATATYPE H5T_ARRAY { [3][4][5] H5T_STD_I32LE }
DATASPACE SIMPLE { ( 4 ) / ( 4 ) }
}
}
HDF5 "tarray3.h5" {
DATASET "Dataset1" {
DATATYPE H5T_ARRAY { [4] H5T_ARRAY { [6][3] H5T_STD_I32LE } }
DATASPACE SIMPLE { ( 4 ) / ( 4 ) }
}
}
HDF5 "tarray4.h5" {
DATASET "Dataset1" {
DATATYPE H5T_ARRAY { [4] H5T_COMPOUND {
H5T_STD_I32LE "i";
H5T_IEEE_F32LE "f";
} }
DATASPACE SIMPLE { ( 4 ) / ( 4 ) }
}
}
HDF5 "tarray5.h5" {
DATASET "Dataset1" {
DATATYPE H5T_ARRAY { [4] H5T_COMPOUND {
H5T_STD_I32LE "i";
H5T_ARRAY { [4] H5T_IEEE_F32LE } "f";
} }
DATASPACE SIMPLE { ( 4 ) / ( 4 ) }
}
}
HDF5 "tarray6.h5" {
DATASET "Dataset1" {
DATATYPE H5T_ARRAY { [4] H5T_VLEN { H5T_STD_U32LE} }
DATASPACE SIMPLE { ( 4 ) / ( 4 ) }
}
}
HDF5 "tarray7.h5" {
DATASET "Dataset1" {
DATATYPE H5T_ARRAY { [4] H5T_VLEN { H5T_ARRAY { [4] H5T_STD_U32LE }} }
DATASPACE SIMPLE { ( 4 ) / ( 4 ) }
}
}

View File

@@ -1,6 +0,0 @@
dset1 Dataset {5}
g1 Group
g2 Group
g3 Group, same as /
slink1 Soft Link {somevalue}
slink2 Soft Link {linkvalue}

View File

@@ -1,83 +0,0 @@
HDF5 "tarray1.h5" {
DATASET "Dataset1" {
DATATYPE H5T_ARRAY { [4] H5T_STD_I32LE }
DATASPACE SIMPLE { ( 4 ) / ( 4 ) }
}
}
HDF5 "tarray2.h5" {
DATASET "Dataset1" {
DATATYPE H5T_ARRAY { [3][4][5] H5T_STD_I32LE }
DATASPACE SIMPLE { ( 4 ) / ( 4 ) }
}
}
HDF5 "tarray3.h5" {
DATASET "Dataset1" {
DATATYPE H5T_ARRAY { [4] H5T_ARRAY { [6][3] H5T_STD_I32LE } }
DATASPACE SIMPLE { ( 4 ) / ( 4 ) }
}
}
HDF5 "tarray4.h5" {
DATASET "Dataset1" {
DATATYPE H5T_ARRAY { [4] H5T_COMPOUND {
H5T_STD_I32LE "i";
H5T_IEEE_F32LE "f";
} }
DATASPACE SIMPLE { ( 4 ) / ( 4 ) }
}
}
HDF5 "tarray5.h5" {
DATASET "Dataset1" {
DATATYPE H5T_ARRAY { [4] H5T_COMPOUND {
H5T_STD_I32LE "i";
H5T_ARRAY { [4] H5T_IEEE_F32LE } "f";
} }
DATASPACE SIMPLE { ( 4 ) / ( 4 ) }
}
}
HDF5 "tarray6.h5" {
DATASET "Dataset1" {
DATATYPE H5T_ARRAY { [4] H5T_VLEN { H5T_STD_U32LE} }
DATASPACE SIMPLE { ( 4 ) / ( 4 ) }
}
}
HDF5 "tarray7.h5" {
DATASET "Dataset1" {
DATATYPE H5T_ARRAY { [4] H5T_VLEN { H5T_ARRAY { [4] H5T_STD_U32LE }} }
DATASPACE SIMPLE { ( 4 ) / ( 4 ) }
}
}
HDF5 "tarray8.h5" {
}
HDF5-DIAG: Error detected in HDF5 (version (number)) thread (IDs):
#000: (file name) line (number) in H5Dopen2(): not found
major: Dataset
minor: Object not found
#001: (file name) line (number) in H5G_loc_find(): can't find object
major: Symbol table
minor: Object not found
#002: (file name) line (number) in H5G_traverse(): internal path traversal failed
major: Symbol table
minor: Object not found
#003: (file name) line (number) in H5G_traverse_real(): traversal operator failed
major: Symbol table
minor: Callback failed
#004: (file name) line (number) in H5G_loc_find_cb(): object 'Dataset1' doesn't exist
major: Symbol table
minor: Object not found
HDF5-DIAG: Error detected in HDF5 (version (number)) thread (IDs):
#000: (file name) line (number) in H5Lget_info(): unable to get link info
major: Symbol table
minor: Object not found
#001: (file name) line (number) in H5L_get_info(): name doesn't exist
major: Symbol table
minor: Object already exists
#002: (file name) line (number) in H5G_traverse(): internal path traversal failed
major: Symbol table
minor: Object not found
#003: (file name) line (number) in H5G_traverse_real(): traversal operator failed
major: Symbol table
minor: Callback failed
#004: (file name) line (number) in H5L_get_info_cb(): name doesn't exist
major: Symbol table
minor: Object not found
h5dump error: unable to get link info from "Dataset1"

View File

@@ -1,30 +0,0 @@
HDF5 "tslink.h5" {
SOFTLINK "/slink1" {
LINKTARGET "somevalue"
}
}
HDF5-DIAG: Error detected in HDF5 (version (number)) thread (IDs):
#000: (file name) line (number) in H5Dopen2(): not found
major: Dataset
minor: Object not found
#001: (file name) line (number) in H5G_loc_find(): can't find object
major: Symbol table
minor: Object not found
#002: (file name) line (number) in H5G_traverse(): internal path traversal failed
major: Symbol table
minor: Object not found
#003: (file name) line (number) in H5G_traverse_real(): special link traversal failed
major: Links
minor: Link traversal failure
#004: (file name) line (number) in H5G__traverse_special(): symbolic link traversal failed
major: Links
minor: Link traversal failure
#005: (file name) line (number) in H5G_traverse_slink(): unable to follow symbolic link
major: Symbol table
minor: Object not found
#006: (file name) line (number) in H5G_traverse_real(): traversal operator failed
major: Symbol table
minor: Callback failed
#007: (file name) line (number) in H5G_traverse_slink_cb(): component not found
major: Symbol table
minor: Object not found

View File

@@ -1,89 +0,0 @@
HDF5 "tarray1_big.h5" {
DATASET "Dataset1" {
DATATYPE H5T_ARRAY { [1000] H5T_STD_I32LE }
DATASPACE SIMPLE { ( 2000 ) / ( 2000 ) }
}
}
HDF5 "tarray1.h5" {
DATASET "Dataset1" {
DATATYPE H5T_ARRAY { [4] H5T_STD_I32LE }
DATASPACE SIMPLE { ( 4 ) / ( 4 ) }
}
}
HDF5 "tarray2.h5" {
DATASET "Dataset1" {
DATATYPE H5T_ARRAY { [3][4][5] H5T_STD_I32LE }
DATASPACE SIMPLE { ( 4 ) / ( 4 ) }
}
}
HDF5 "tarray3.h5" {
DATASET "Dataset1" {
DATATYPE H5T_ARRAY { [4] H5T_ARRAY { [6][3] H5T_STD_I32LE } }
DATASPACE SIMPLE { ( 4 ) / ( 4 ) }
}
}
HDF5 "tarray4.h5" {
DATASET "Dataset1" {
DATATYPE H5T_ARRAY { [4] H5T_COMPOUND {
H5T_STD_I32LE "i";
H5T_IEEE_F32LE "f";
} }
DATASPACE SIMPLE { ( 4 ) / ( 4 ) }
}
}
HDF5 "tarray5.h5" {
DATASET "Dataset1" {
DATATYPE H5T_ARRAY { [4] H5T_COMPOUND {
H5T_STD_I32LE "i";
H5T_ARRAY { [4] H5T_IEEE_F32LE } "f";
} }
DATASPACE SIMPLE { ( 4 ) / ( 4 ) }
}
}
HDF5 "tarray6.h5" {
DATASET "Dataset1" {
DATATYPE H5T_ARRAY { [4] H5T_VLEN { H5T_STD_U32LE} }
DATASPACE SIMPLE { ( 4 ) / ( 4 ) }
}
}
HDF5 "tarray7.h5" {
DATASET "Dataset1" {
DATATYPE H5T_ARRAY { [4] H5T_VLEN { H5T_ARRAY { [4] H5T_STD_U32LE }} }
DATASPACE SIMPLE { ( 4 ) / ( 4 ) }
}
}
HDF5 "tarray8.h5" {
}
HDF5-DIAG: Error detected in HDF5 (version (number)) thread (IDs):
#000: (file name) line (number) in H5Dopen2(): not found
major: Dataset
minor: Object not found
#001: (file name) line (number) in H5G_loc_find(): can't find object
major: Symbol table
minor: Object not found
#002: (file name) line (number) in H5G_traverse(): internal path traversal failed
major: Symbol table
minor: Object not found
#003: (file name) line (number) in H5G_traverse_real(): traversal operator failed
major: Symbol table
minor: Callback failed
#004: (file name) line (number) in H5G_loc_find_cb(): object 'Dataset1' doesn't exist
major: Symbol table
minor: Object not found
HDF5-DIAG: Error detected in HDF5 (version (number)) thread (IDs):
#000: (file name) line (number) in H5Lget_info(): unable to get link info
major: Symbol table
minor: Object not found
#001: (file name) line (number) in H5L_get_info(): name doesn't exist
major: Symbol table
minor: Object already exists
#002: (file name) line (number) in H5G_traverse(): internal path traversal failed
major: Symbol table
minor: Object not found
#003: (file name) line (number) in H5G_traverse_real(): traversal operator failed
major: Symbol table
minor: Callback failed
#004: (file name) line (number) in H5L_get_info_cb(): name doesn't exist
major: Symbol table
minor: Object not found
h5dump error: unable to get link info from "Dataset1"