summaryrefslogtreecommitdiffstats
path: root/tools/misc/h5clear_gentest.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/misc/h5clear_gentest.c')
-rw-r--r--tools/misc/h5clear_gentest.c147
1 files changed, 43 insertions, 104 deletions
diff --git a/tools/misc/h5clear_gentest.c b/tools/misc/h5clear_gentest.c
index 1468432..062e938 100644
--- a/tools/misc/h5clear_gentest.c
+++ b/tools/misc/h5clear_gentest.c
@@ -17,19 +17,13 @@
/* The HDF5 test files */
const char *FILENAME[] = {
- "h5clear_sec2.h5", /* 0 -- sec2 file */
- "h5clear_core.h5", /* 1 -- core file */
- "h5clear_fam_%05d.h5", /* 2 -- family files */
- "h5clear_split", /* 3 -- split files */
- "h5clear_invalid.h5" /* 4 -- sec2 file with invalid superblock version */
+ "h5clear_sec2_v3.h5", /* 0 -- sec2 file with superblock version 3 */
+ "h5clear_log_v3.h5", /* 1 -- log file with superblock veresion 3 */
+ "h5clear_sec2_v0.h5", /* 2 -- sec2 file with superblock version 0 */
+ "h5clear_sec2_v2.h5" /* 3 -- sec2 file with superblock version 2 */
};
-#define FAMILY_SIZE 1024U
-#define CORE_INCREMENT 1024U
-
-#define SUPER_VERS_OFF 8
-#define SUPER_VERS_SIZE 1
-#define SUPER_VERS_LATEST 2
+#define KB 1024U
/*-------------------------------------------------------------------------
* Function: main
@@ -37,11 +31,15 @@ const char *FILENAME[] = {
* Purpose: To create HDF5 files with non-zero status_flags in the superblock
* via flushing and exiting without closing the library.
*
- * Due to file locking, status_flag in the superblock will be
+ * Due to file locking, status_flags in the superblock will be
* nonzero after H5Fcreate. The library will clear status_flags
* on file closing. This program, after "H5Fcreate" the files,
* exits without going through library closing. Thus, status_flags
- * for these files are not cleared and users cannot open them.
+ * for these files are not cleared.
+ * The library will check consistency of status_flags when opening
+ * a file with superblock >= v3 and will return error accordingly.
+ * The library will not check status_flags when opening a file
+ * with < v3 superblock.
*
* These files are used by "h5clear" to see if the tool clears
* status_flags properly so users can open the files afterwards.
@@ -57,6 +55,7 @@ int
main(void)
{
hid_t fid; /* File ID */
+ hid_t fcpl; /* File creation property list */
hid_t fapl, new_fapl; /* File access property lists */
char fname[512]; /* File name */
unsigned new_format; /* To use latest library format or not */
@@ -75,7 +74,7 @@ main(void)
if(H5Pset_libver_bounds(new_fapl, H5F_LIBVER_LATEST, H5F_LIBVER_LATEST) < 0)
goto error;
- /* Create file with/without latest library format */
+ /* Files created within this for loop will have v3 superblock and nonzero status_flags */
for(new_format = FALSE; new_format <= TRUE; new_format++) {
hid_t fapl2, my_fapl; /* File access property lists */
@@ -91,7 +90,7 @@ main(void)
goto error;
/* Create the file */
sprintf(fname, "%s%s", new_format? "latest_":"", FILENAME[0]);
- if((fid = H5Fcreate(fname, H5F_ACC_TRUNC, H5P_DEFAULT, my_fapl)) < 0)
+ if((fid = H5Fcreate(fname, H5F_ACC_TRUNC | (new_format ? 0 : H5F_ACC_SWMR_WRITE), H5P_DEFAULT, my_fapl)) < 0)
goto error;
/* Flush the file */
@@ -103,19 +102,19 @@ main(void)
goto error;
/*
- * Create a core file
+ * Create a log file
*/
/* Create a copy of file access property list */
if((my_fapl = H5Pcopy(fapl2)) < 0)
goto error;
- /* Setup the fapl for the family file driver */
- if(H5Pset_fapl_core(my_fapl, (size_t)CORE_INCREMENT, TRUE) < 0)
+ /* Setup the fapl for the log driver */
+ if(H5Pset_fapl_log(my_fapl, "append.log", (unsigned long long)H5FD_LOG_ALL, (size_t)(4 * KB)) < 0)
goto error;
/* Create the file */
sprintf(fname, "%s%s", new_format? "latest_":"", FILENAME[1]);
- if((fid = H5Fcreate(fname, H5F_ACC_TRUNC, H5P_DEFAULT, my_fapl)) < 0)
+ if((fid = H5Fcreate(fname, H5F_ACC_TRUNC | (new_format ? 0 : H5F_ACC_SWMR_WRITE), H5P_DEFAULT, my_fapl)) < 0)
goto error;
/* Flush the file */
@@ -126,104 +125,44 @@ main(void)
if(H5Pclose(my_fapl) < 0)
goto error;
- /*
- * Create a family file
- */
- /* Create a copy of file access property list */
- if((my_fapl = H5Pcopy(fapl2)) < 0)
- goto error;
-
- /* Setup the fapl for the family file driver */
- if(H5Pset_fapl_family(my_fapl, (hsize_t)FAMILY_SIZE, H5P_DEFAULT) < 0)
- goto error;
-
- /* Create the file */
- sprintf(fname, "%s%s", new_format? "latest_":"", FILENAME[2]);
- if((fid = H5Fcreate(fname, H5F_ACC_TRUNC, H5P_DEFAULT, my_fapl)) < 0)
- goto error;
-
- /* Flush the file */
- if(H5Fflush(fid, H5F_SCOPE_GLOBAL) < 0)
- goto error;
-
- /* Close the property list */
- if(H5Pclose(my_fapl) < 0)
- goto error;
+ } /* end for */
- /*
- * Create a split file
- */
- /* Create a copy of file access property list */
- my_fapl = H5Pcopy(fapl2);
+ /*
+ * Create a sec2 file with v0 superblock but nonzero status_flags
+ */
+ if((fid = H5Fcreate(FILENAME[2], H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0)
+ goto error;
- /* Setup the fapl for the split file driver */
- H5Pset_fapl_split(my_fapl, "-m.h5", H5P_DEFAULT, "-r.h5", H5P_DEFAULT);
+ /* Flush the file */
+ if(H5Fflush(fid, H5F_SCOPE_GLOBAL) < 0)
+ goto error;
- /* Create the file */
- sprintf(fname, "%s%s", new_format? "latest_":"", FILENAME[3]);
- if((fid = H5Fcreate(fname, H5F_ACC_TRUNC, H5P_DEFAULT, my_fapl)) < 0)
- goto error;
- /* Flush the file */
- if(H5Fflush(fid, H5F_SCOPE_GLOBAL) < 0)
- goto error;
+ /*
+ * Create a sec2 file with v2 superblock but nonzero status_flags
+ */
+ if((fcpl = H5Pcreate(H5P_FILE_CREATE)) < 0)
+ goto error;
+ if(H5Pset_shared_mesg_nindexes(fcpl, 1) < 0)
+ goto error;
+ if(H5Pset_shared_mesg_index(fcpl, 0, H5O_SHMESG_DTYPE_FLAG, 50) < 0)
+ goto error;
- /* Close the property list */
- if(H5Pclose(my_fapl) < 0)
- goto error;
+ if((fid = H5Fcreate(FILENAME[3], H5F_ACC_TRUNC, fcpl, fapl)) < 0)
+ goto error;
- /*
- * Create a sec2 file but change its superblock version #
- */
- /* Create a copy of file access property list */
- if((my_fapl = H5Pcopy(fapl2)) < 0)
- goto error;
- /* Create the file */
- sprintf(fname, "%s%s", new_format? "latest_":"", FILENAME[4]);
- if((fid = H5Fcreate(fname, H5F_ACC_TRUNC, H5P_DEFAULT, my_fapl)) < 0)
- goto error;
+ /* Flush the file */
+ if(H5Fflush(fid, H5F_SCOPE_GLOBAL) < 0)
+ goto error;
- /* Flush the file */
- if(H5Fflush(fid, H5F_SCOPE_GLOBAL) < 0)
- goto error;
- /* Close the property list */
- if(H5Pclose(my_fapl) < 0)
- goto error;
-
- /* Open the test file via system call "open" */
- if((fd = HDopen(fname, O_RDWR, 0666)) < 0) {
- HDfprintf(stdout, "cannot open the file\n");
- goto error;
- }
-
- /* Position the file to superblock version via system call "lseek" */
- if(HDlseek(fd, (off_t)SUPER_VERS_OFF, SEEK_SET) < 0) {
- HDfprintf(stdout, "cannot lseek the file superblock version\n");
- goto error;
- }
-
- /* Change to an incorrect superblock version */
- super_vers = SUPER_VERS_LATEST + 1;
- /* Write to the file via system call "write" */
- if((bytes_written = HDwrite(fd, &super_vers, (size_t)SUPER_VERS_SIZE)) < 0) {
- HDfprintf(stdout, "cannot write to the file with incorrect superblock version\n");
- goto error;
- }
-
- /* Close the file via system call "close" */
- if(HDclose(fd) < 0) {
- HDfprintf(stdout, "cannot close the file\n");
- goto error;
- }
-
- } /* end for */
-
/* Close the property lists */
if(H5Pclose(fapl) < 0)
goto error;
if(H5Pclose(new_fapl) < 0)
goto error;
+ if(H5Pclose(fcpl) < 0)
+ goto error;
fflush(stdout);
fflush(stderr);