summaryrefslogtreecommitdiffstats
path: root/test/file_image.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/file_image.c')
-rw-r--r--test/file_image.c824
1 files changed, 450 insertions, 374 deletions
diff --git a/test/file_image.c b/test/file_image.c
index b1b9d47..0398c15 100644
--- a/test/file_image.c
+++ b/test/file_image.c
@@ -1,74 +1,70 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* 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. *
+ * the COPYING file, which can be found at the root of the source code *
+ * distribution tree, or in https://www.hdfgroup.org/licenses. *
+ * If you do not have access to either file, you may request a copy from *
+ * help@hdfgroup.org. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/***********************************************************
-*
-* Test program: file_image
-*
-* Test setting file images
-*
-*************************************************************/
+ *
+ * Test program: file_image
+ *
+ * Test setting file images
+ *
+ *************************************************************/
#include "h5test.h"
-#include "H5srcdir.h"
#include "H5Fprivate.h" /* required to test property removals */
-#define VERIFY(condition, string) do { if (!(condition)) FAIL_PUTS_ERROR(string) } while(0)
+#define VERIFY(condition, string) \
+ do { \
+ if (!(condition)) \
+ FAIL_PUTS_ERROR(string); \
+ } while (0)
/* Values for callback bit field */
-#define MALLOC 0x01
-#define MEMCPY 0x02
-#define REALLOC 0x04
-#define FREE 0x08
-#define UDATA_COPY 0x10
-#define UDATA_FREE 0x20
-
-#define RANK 2
-#define DIM0 1024
-#define DIM1 32
+#define MALLOC 0x01
+#define MEMCPY 0x02
+#define REALLOC 0x04
+#define FREE 0x08
+#define UDATA_COPY 0x10
+#define UDATA_FREE 0x20
+
+#define RANK 2
+#define DIM0 1024
+#define DIM1 32
#define DSET_NAME "test_dset"
#define FAMILY_SIZE (2 * 1024)
-const char *FILENAME[] = {
- "file_image_core_test",
- NULL
-};
+#define USERBLOCK_SIZE 512
+
+const char *FILENAME[] = {"file_image_core_test", NULL};
/* need a second file name array, as the first file name array contains
* files we don't want to delete on cleanup.
*/
-const char *FILENAME2[] = {
- "sec2_get_file_image_test",
- "stdio_get_file_image_test",
- "core_get_file_image_test",
- "family_get_file_image_test",
- "multi_get_file_image_test",
- "split_get_file_image_test",
- "get_file_image_error_rejection_test",
- NULL
-};
+const char *FILENAME2[] = {"sec2_get_file_image_test",
+ "stdio_get_file_image_test",
+ "core_get_file_image_test",
+ "family_get_file_image_test",
+ "multi_get_file_image_test",
+ "split_get_file_image_test",
+ "get_file_image_error_rejection_test",
+ NULL};
typedef struct {
- unsigned char used_callbacks; /* Bitfield for tracking callbacks */
- H5FD_file_image_op_t malloc_src; /* Source of file image callbacks */
+ unsigned char used_callbacks; /* Bitfield for tracking callbacks */
+ H5FD_file_image_op_t malloc_src; /* Source of file image callbacks */
H5FD_file_image_op_t memcpy_src;
H5FD_file_image_op_t realloc_src;
H5FD_file_image_op_t free_src;
} udata_t;
-
/******************************************************************************
* Function: test_properties
*
@@ -86,19 +82,19 @@ typedef struct {
static int
test_properties(void)
{
- hid_t fapl_1 = -1;
- hid_t fapl_2 = -1;
- char *buffer = 0;
- int count = 10;
- void *temp = 0;
- char *temp2 = 0;
- int i;
- size_t size;
- size_t temp_size;
- int retval = 1;
+ hid_t fapl_1 = -1;
+ hid_t fapl_2 = -1;
+ char *buffer = 0;
+ int count = 10;
+ void *temp = 0;
+ char *temp2 = 0;
+ int i;
+ size_t size;
+ size_t temp_size;
+ int retval = 1;
TESTING("File image property list functions");
-
+
/* Initialize file image buffer
*
* Note: this image will not contain a valid HDF5 file, as it complicates testing
@@ -106,26 +102,31 @@ test_properties(void)
* not be the case.
*/
size = (size_t)count * sizeof(char);
- buffer = (char *)HDmalloc(size);
- for(i = 0; i < count - 1; i++)
+ if (NULL == (buffer = (char *)HDmalloc(size)))
+ TEST_ERROR;
+ for (i = 0; i < count - 1; i++)
buffer[i] = (char)(65 + i);
buffer[count - 1] = '\0';
/* Create fapl */
- if((fapl_1 = H5Pcreate(H5P_FILE_ACCESS)) < 0) FAIL_STACK_ERROR
+ if ((fapl_1 = H5Pcreate(H5P_FILE_ACCESS)) < 0)
+ FAIL_STACK_ERROR;
/* Get file image stuff */
- if(H5Pget_file_image(fapl_1, (void **)&temp, &temp_size) < 0) FAIL_STACK_ERROR
+ if (H5Pget_file_image(fapl_1, (void **)&temp, &temp_size) < 0)
+ FAIL_STACK_ERROR;
/* Check default values */
VERIFY(temp == NULL, "Default pointer is wrong");
VERIFY(temp_size == 0, "Default size is wrong");
/* Set file image stuff */
- if(H5Pset_file_image(fapl_1, (void *)buffer, size) < 0) FAIL_STACK_ERROR
-
+ if (H5Pset_file_image(fapl_1, (void *)buffer, size) < 0)
+ FAIL_STACK_ERROR;
+
/* Get the same */
- if(H5Pget_file_image(fapl_1, (void **)&temp, &temp_size) < 0) FAIL_STACK_ERROR
+ if (H5Pget_file_image(fapl_1, (void **)&temp, &temp_size) < 0)
+ FAIL_STACK_ERROR;
/* Check that sizes are the same, and that the buffers are identical but separate */
VERIFY(temp != NULL, "temp is null!");
@@ -134,36 +135,39 @@ test_properties(void)
VERIFY(0 == HDmemcmp(temp, buffer, size), "Buffers contain different data");
/* Copy the fapl */
- if((fapl_2 = H5Pcopy(fapl_1)) < 0) FAIL_STACK_ERROR
+ if ((fapl_2 = H5Pcopy(fapl_1)) < 0)
+ FAIL_STACK_ERROR;
/* Get values from the new fapl */
- if(H5Pget_file_image(fapl_2, (void **)&temp2, &temp_size) < 0) FAIL_STACK_ERROR
-
+ if (H5Pget_file_image(fapl_2, (void **)&temp2, &temp_size) < 0)
+ FAIL_STACK_ERROR;
+
/* Check that sizes are the same, and that the buffers are identical but separate */
- VERIFY(temp_size == size,"Sizes of buffers don't match");
- VERIFY(temp2 != NULL,"Recieved buffer not set");
+ VERIFY(temp_size == size, "Sizes of buffers don't match");
+ VERIFY(temp2 != NULL, "Received buffer not set");
VERIFY(temp2 != buffer, "Retrieved buffer is the same as original");
VERIFY(temp2 != temp, "Retrieved buffer is the same as previously retrieved buffer");
- VERIFY(0 == HDmemcmp(temp2, buffer, size),"Buffers contain different data");
+ VERIFY(0 == HDmemcmp(temp2, buffer, size), "Buffers contain different data");
retval = 0;
error:
/* Close everything */
- if(H5Pclose(fapl_1) < 0) retval = 1;
- if(H5Pclose(fapl_2) < 0) retval = 1;
+ if (H5Pclose(fapl_1) < 0)
+ retval = 1;
+ if (H5Pclose(fapl_2) < 0)
+ retval = 1;
HDfree(buffer);
- HDfree(temp);
- HDfree(temp2);
+ H5free_memory(temp);
+ H5free_memory(temp2);
- if(retval == 0)
+ if (retval == 0)
PASSED();
return retval;
} /* end test_properties() */
-
/******************************************************************************
* Function: malloc_cb
*
@@ -186,7 +190,6 @@ malloc_cb(size_t size, H5FD_file_image_op_t op, void *udata)
return HDmalloc(size);
}
-
/******************************************************************************
* Function: memcpy_cb
*
@@ -209,7 +212,6 @@ memcpy_cb(void *dest, const void *src, size_t size, H5FD_file_image_op_t op, voi
return HDmemcpy(dest, src, size);
}
-
/******************************************************************************
* Function: realloc_cb
*
@@ -229,10 +231,9 @@ realloc_cb(void *ptr, size_t size, H5FD_file_image_op_t op, void *udata)
u->used_callbacks |= REALLOC;
u->realloc_src = op;
- return HDrealloc(ptr,size);
+ return HDrealloc(ptr, size);
}
-
/******************************************************************************
* Function: free_cb
*
@@ -251,15 +252,14 @@ free_cb(void *ptr, H5FD_file_image_op_t op, void *udata)
u->used_callbacks |= FREE;
u->free_src = op;
HDfree(ptr);
- return(SUCCEED);
+ return (SUCCEED);
}
-
/******************************************************************************
* Function: udata_copy_cb
*
* Purpose: This function allows calls to the udata_copy callback to be tracked.
- * No copying actualy takes place; it is easier to deal with only one
+ * No copying actually takes place; it is easier to deal with only one
* instance of the udata.
*
* Returns: A pointer to the same udata that was passed in.
@@ -278,7 +278,6 @@ udata_copy_cb(void *udata)
return udata;
}
-
/******************************************************************************
* Function: udata_free_cb
*
@@ -299,10 +298,9 @@ udata_free_cb(void *udata)
udata_t *u = (udata_t *)udata;
u->used_callbacks |= UDATA_FREE;
- return(SUCCEED);
+ return (SUCCEED);
}
-
/******************************************************************************
* Function: reset_udata
*
@@ -321,7 +319,6 @@ reset_udata(udata_t *u)
u->malloc_src = u->memcpy_src = u->realloc_src = u->free_src = H5FD_FILE_IMAGE_OP_NO_OP;
}
-
/******************************************************************************
* Function: test_callbacks
*
@@ -335,42 +332,46 @@ reset_udata(udata_t *u)
static int
test_callbacks(void)
{
- H5FD_file_image_callbacks_t real_callbacks = {&malloc_cb, &memcpy_cb, &realloc_cb,
- &free_cb, &udata_copy_cb, &udata_free_cb, NULL};
+ H5FD_file_image_callbacks_t real_callbacks = {&malloc_cb, &memcpy_cb, &realloc_cb, &free_cb,
+ &udata_copy_cb, &udata_free_cb, NULL};
H5FD_file_image_callbacks_t null_callbacks = {NULL, NULL, NULL, NULL, NULL, NULL, NULL};
H5FD_file_image_callbacks_t callbacks;
- hid_t fapl_1;
- hid_t fapl_2;
- udata_t *udata;
- char *file_image;
- char *temp_file_image;
- int count = 10;
- int i;
- size_t size;
- size_t temp_size;
+ hid_t fapl_1;
+ hid_t fapl_2;
+ udata_t *udata = NULL;
+ char *file_image = NULL;
+ char *temp_file_image;
+ int count = 10;
+ int i;
+ size_t size;
+ size_t temp_size;
TESTING("Callback use in property list operations");
/* Allocate and initialize udata */
udata = (udata_t *)HDmalloc(sizeof(udata_t));
+ VERIFY(udata != NULL, "udata malloc failed");
reset_udata(udata);
/* copy the address of the user data into read_callbacks */
real_callbacks.udata = (void *)udata;
/* Allocate and initialize file image buffer */
- size = (size_t)count * sizeof(char);
+ size = (size_t)count * sizeof(char);
file_image = (char *)HDmalloc(size);
- for(i = 0; i < count - 1; i++)
+ VERIFY(file_image != NULL, "file_image malloc failed");
+ for (i = 0; i < count - 1; i++)
file_image[i] = (char)(65 + i);
file_image[count - 1] = '\0';
/* Create fapl */
- if((fapl_1 = H5Pcreate(H5P_FILE_ACCESS)) < 0) FAIL_STACK_ERROR
+ if ((fapl_1 = H5Pcreate(H5P_FILE_ACCESS)) < 0)
+ FAIL_STACK_ERROR;
/* Get file image stuff */
callbacks = real_callbacks;
- if(H5Pget_file_image_callbacks(fapl_1, &callbacks) < 0) FAIL_STACK_ERROR
+ if (H5Pget_file_image_callbacks(fapl_1, &callbacks) < 0)
+ FAIL_STACK_ERROR;
/* Check default values */
VERIFY(callbacks.image_malloc == NULL, "Default malloc callback is wrong");
@@ -381,17 +382,18 @@ test_callbacks(void)
VERIFY(callbacks.udata_free == NULL, "Default udata free callback is wrong");
VERIFY(callbacks.udata == NULL, "Default udata is wrong");
-
/* Set file image callbacks */
callbacks = real_callbacks;
- if(H5Pset_file_image_callbacks(fapl_1, &callbacks) < 0) FAIL_STACK_ERROR
+ if (H5Pset_file_image_callbacks(fapl_1, &callbacks) < 0)
+ FAIL_STACK_ERROR;
/* Get file image callbacks */
callbacks = null_callbacks;
- if(H5Pget_file_image_callbacks(fapl_1, &callbacks) < 0) FAIL_STACK_ERROR
-
+ if (H5Pget_file_image_callbacks(fapl_1, &callbacks) < 0)
+ FAIL_STACK_ERROR;
+
/* Verify values */
- VERIFY(callbacks.image_malloc == &malloc_cb, "malloc callback was not set or retrieved properly");
+ VERIFY(callbacks.image_malloc == &malloc_cb, "malloc callback was not set or retrieved properly");
VERIFY(callbacks.image_memcpy == &memcpy_cb, "memcpy callback was not set or retrieved properly");
VERIFY(callbacks.image_realloc == &realloc_cb, "realloc callback was not set or retrieved properly");
VERIFY(callbacks.image_free == &free_cb, "free callback was not set or retrieved properly");
@@ -399,106 +401,128 @@ test_callbacks(void)
VERIFY(callbacks.udata_free == &udata_free_cb, "udata free callback was not set or retrieved properly");
VERIFY(callbacks.udata == udata, "udata was not set or retrieved properly");
-
/*
* Check callbacks in internal function without a previously set file image
*/
/* Copy fapl */
reset_udata(udata);
- if((fapl_2 = H5Pcopy(fapl_1)) < 0) FAIL_STACK_ERROR
-
+ if ((fapl_2 = H5Pcopy(fapl_1)) < 0)
+ FAIL_STACK_ERROR;
+
/* Verify that the property's copy callback used the correct image callbacks */
VERIFY(udata->used_callbacks == (UDATA_COPY), "Copying a fapl with no image used incorrect callbacks");
/* Close fapl */
reset_udata(udata);
- if(H5Pclose(fapl_2) < 0) FAIL_STACK_ERROR
+ if (H5Pclose(fapl_2) < 0)
+ FAIL_STACK_ERROR;
/* Verify that the udata free callback was used */
VERIFY(udata->used_callbacks == (UDATA_FREE), "Closing a fapl with no image used incorrect callbacks");
/* Copy again */
- if((fapl_2 = H5Pcopy(fapl_1)) < 0) FAIL_STACK_ERROR
-
+ if ((fapl_2 = H5Pcopy(fapl_1)) < 0)
+ FAIL_STACK_ERROR;
+
/* Remove property from fapl */
reset_udata(udata);
- if(H5Premove(fapl_2, H5F_ACS_FILE_IMAGE_INFO_NAME) < 0) FAIL_STACK_ERROR
+ if (H5Premove(fapl_2, H5F_ACS_FILE_IMAGE_INFO_NAME) < 0)
+ FAIL_STACK_ERROR;
/* Verify that the property's delete callback was called using the correct image callbacks */
- VERIFY(udata->used_callbacks == (UDATA_FREE), "Removing a property from a fapl with no image used incorrect callbacks");
-
+ VERIFY(udata->used_callbacks == (UDATA_FREE),
+ "Removing a property from a fapl with no image used incorrect callbacks");
+
/* Close it again */
- if(H5Pclose(fapl_2) < 0) FAIL_STACK_ERROR
+ if (H5Pclose(fapl_2) < 0)
+ FAIL_STACK_ERROR;
/* Get file image */
reset_udata(udata);
- if(H5Pget_file_image(fapl_1, (void **)&temp_file_image, &temp_size) < 0) FAIL_STACK_ERROR
+ if (H5Pget_file_image(fapl_1, (void **)&temp_file_image, &temp_size) < 0)
+ FAIL_STACK_ERROR;
/* Verify that the correct callbacks were used */
- VERIFY(udata->used_callbacks == 0, "attempting to retrieve the image from a fapl without an image has an unexpected callback");
+ VERIFY(udata->used_callbacks == 0,
+ "attempting to retrieve the image from a fapl without an image has an unexpected callback");
/* Set file image */
reset_udata(udata);
- if(H5Pset_file_image(fapl_1, (void *)file_image, size) < 0) FAIL_STACK_ERROR
+ if (H5Pset_file_image(fapl_1, (void *)file_image, size) < 0)
+ FAIL_STACK_ERROR;
+
+ VERIFY(udata->used_callbacks == (MALLOC | MEMCPY),
+ "Setting a file image (first time) used incorrect callbacks");
- VERIFY(udata->used_callbacks == (MALLOC | MEMCPY), "Setting a file image (first time) used incorrect callbacks");
-
/*
* Check callbacks in internal functions with a previously set file image
*/
-
+
/* Copy fapl */
reset_udata(udata);
- if((fapl_2 = H5Pcopy(fapl_1)) < 0) FAIL_STACK_ERROR
-
+ if ((fapl_2 = H5Pcopy(fapl_1)) < 0)
+ FAIL_STACK_ERROR;
+
/* Verify that the property's copy callback used the correct image callbacks */
- VERIFY(udata->used_callbacks == (MALLOC | MEMCPY | UDATA_COPY), "Copying a fapl with an image used incorrect callbacks");
+ VERIFY(udata->used_callbacks == (MALLOC | MEMCPY | UDATA_COPY),
+ "Copying a fapl with an image used incorrect callbacks");
VERIFY(udata->malloc_src == H5FD_FILE_IMAGE_OP_PROPERTY_LIST_COPY, "malloc callback has wrong source");
VERIFY(udata->memcpy_src == H5FD_FILE_IMAGE_OP_PROPERTY_LIST_COPY, "memcpy callback has wrong source");
/* Close fapl */
reset_udata(udata);
- if(H5Pclose(fapl_2) < 0) FAIL_STACK_ERROR
+ if (H5Pclose(fapl_2) < 0)
+ FAIL_STACK_ERROR;
/* Verify that the udata free callback was used */
- VERIFY(udata->used_callbacks == (FREE | UDATA_FREE), "Closing a fapl with an image used incorrect callbacks");
+ VERIFY(udata->used_callbacks == (FREE | UDATA_FREE),
+ "Closing a fapl with an image used incorrect callbacks");
VERIFY(udata->free_src == H5FD_FILE_IMAGE_OP_PROPERTY_LIST_CLOSE, "free callback has wrong source");
/* Copy again */
- if((fapl_2 = H5Pcopy(fapl_1)) < 0) FAIL_STACK_ERROR
-
+ if ((fapl_2 = H5Pcopy(fapl_1)) < 0)
+ FAIL_STACK_ERROR;
+
/* Remove property from fapl */
reset_udata(udata);
- if(H5Premove(fapl_2, H5F_ACS_FILE_IMAGE_INFO_NAME) < 0) FAIL_STACK_ERROR
+ if (H5Premove(fapl_2, H5F_ACS_FILE_IMAGE_INFO_NAME) < 0)
+ FAIL_STACK_ERROR;
/* Verify that the property's delete callback was called using the correct image callbacks */
- VERIFY(udata->used_callbacks == (FREE | UDATA_FREE), "Removing a property from a fapl with an image used incorrect callbacks");
+ VERIFY(udata->used_callbacks == (FREE | UDATA_FREE),
+ "Removing a property from a fapl with an image used incorrect callbacks");
VERIFY(udata->free_src == H5FD_FILE_IMAGE_OP_PROPERTY_LIST_CLOSE, "free callback has wrong source");
-
+
/* Close it again */
- if(H5Pclose(fapl_2) < 0) FAIL_STACK_ERROR
+ if (H5Pclose(fapl_2) < 0)
+ FAIL_STACK_ERROR;
- /* Get file image */
+ /* Get file image */
reset_udata(udata);
- if(H5Pget_file_image(fapl_1, (void **)&temp_file_image, &temp_size) < 0) FAIL_STACK_ERROR
+ if (H5Pget_file_image(fapl_1, (void **)&temp_file_image, &temp_size) < 0)
+ FAIL_STACK_ERROR;
/* Verify that the correct callbacks were used */
- VERIFY(udata->used_callbacks == (MALLOC | MEMCPY), "attempting to retrieve the image from a fapl with an image has an unexpected callback");
+ VERIFY(udata->used_callbacks == (MALLOC | MEMCPY),
+ "attempting to retrieve the image from a fapl with an image has an unexpected callback");
VERIFY(udata->malloc_src == H5FD_FILE_IMAGE_OP_PROPERTY_LIST_GET, "malloc callback has wrong source");
VERIFY(udata->memcpy_src == H5FD_FILE_IMAGE_OP_PROPERTY_LIST_GET, "memcpy callback has wrong source");
/* Set file image */
reset_udata(udata);
- if(H5Pset_file_image(fapl_1, (void *)file_image, size) < 0) FAIL_STACK_ERROR
+ if (H5Pset_file_image(fapl_1, (void *)file_image, size) < 0)
+ FAIL_STACK_ERROR;
- VERIFY(udata->used_callbacks == (FREE | MALLOC | MEMCPY), "Setting a file image (second time) used incorrect callbacks");
+ VERIFY(udata->used_callbacks == (FREE | MALLOC | MEMCPY),
+ "Setting a file image (second time) used incorrect callbacks");
VERIFY(udata->malloc_src == H5FD_FILE_IMAGE_OP_PROPERTY_LIST_SET, "malloc callback has wrong source");
VERIFY(udata->memcpy_src == H5FD_FILE_IMAGE_OP_PROPERTY_LIST_SET, "memcpy callback has wrong source");
VERIFY(udata->free_src == H5FD_FILE_IMAGE_OP_PROPERTY_LIST_SET, "freec callback has wrong source");
/* Close stuff */
- if(H5Pclose(fapl_1) < 0) FAIL_STACK_ERROR
+ if (H5Pclose(fapl_1) < 0)
+ FAIL_STACK_ERROR;
HDfree(file_image);
HDfree(temp_file_image);
HDfree(udata);
@@ -507,10 +531,12 @@ test_callbacks(void)
return 0;
error:
+ HDfree(file_image);
+ HDfree(udata);
+
return 1;
} /* test_callbacks() */
-
/******************************************************************************
* Function: test_core
*
@@ -525,31 +551,31 @@ error:
static int
test_core(void)
{
- hid_t fapl;
- hid_t file;
- hid_t dset;
- hid_t space;
- udata_t *udata;
- unsigned char *file_image;
- char filename[1024];
- char copied_filename[1024];
- const char *tmp = NULL;
- size_t size;
- hsize_t dims[2];
- int fd;
- h5_stat_t sb;
- herr_t ret;
- H5FD_file_image_callbacks_t callbacks = {&malloc_cb, &memcpy_cb, &realloc_cb,
- &free_cb, &udata_copy_cb, &udata_free_cb, NULL};
+ hid_t fapl;
+ hid_t file;
+ hid_t dset;
+ hid_t space;
+ udata_t *udata;
+ unsigned char *file_image;
+ char filename[1024];
+ char copied_filename[1024];
+ const char *tmp = NULL;
+ size_t size;
+ hsize_t dims[2];
+ int fd;
+ h5_stat_t sb;
+ herr_t ret;
+ H5FD_file_image_callbacks_t callbacks = {&malloc_cb, &memcpy_cb, &realloc_cb, &free_cb,
+ &udata_copy_cb, &udata_free_cb, NULL};
TESTING("Initial file image and callbacks in Core VFD");
-
+
/* Create fapl */
fapl = h5_fileaccess();
VERIFY(fapl >= 0, "fapl creation failed");
/* Set up the core VFD */
- ret = H5Pset_fapl_core(fapl, 0, 0);
+ ret = H5Pset_fapl_core(fapl, (size_t)0, 0);
VERIFY(ret >= 0, "setting core driver in fapl failed");
tmp = h5_fixname(FILENAME[0], fapl, filename, sizeof(filename));
@@ -580,15 +606,18 @@ test_core(void)
reset_udata(udata);
file = H5Fopen(copied_filename, H5F_ACC_RDONLY, fapl);
VERIFY(file >= 0, "H5Fopen failed");
- VERIFY(udata->used_callbacks == MALLOC, "opening a core file used the wrong callbacks");
- VERIFY(udata->malloc_src == H5FD_FILE_IMAGE_OP_FILE_OPEN, "Malloc callback came from wrong sourc in core open");
+ VERIFY((udata->used_callbacks == MALLOC) || (udata->used_callbacks == (MALLOC | UDATA_COPY | UDATA_FREE)),
+ "opening a core file used the wrong callbacks");
+ VERIFY(udata->malloc_src == H5FD_FILE_IMAGE_OP_FILE_OPEN,
+ "Malloc callback came from wrong source in core open");
/* Close file */
reset_udata(udata);
ret = H5Fclose(file);
VERIFY(ret >= 0, "H5Fclose failed");
VERIFY(udata->used_callbacks == FREE, "Closing a core file used the wrong callbacks");
- VERIFY(udata->free_src == H5FD_FILE_IMAGE_OP_FILE_CLOSE, "Free callback came from wrong sourc in core close");
+ VERIFY(udata->free_src == H5FD_FILE_IMAGE_OP_FILE_CLOSE,
+ "Free callback came from wrong source in core close");
/* Reopen file */
file = H5Fopen(copied_filename, H5F_ACC_RDWR, fapl);
@@ -597,57 +626,63 @@ test_core(void)
/* Set up a new dset */
dims[0] = DIM0;
dims[1] = DIM1;
- space = H5Screate_simple(RANK, dims, dims);
+ space = H5Screate_simple(RANK, dims, dims);
VERIFY(space >= 0, "H5Screate failed");
-
+
/* Create new dset, invoking H5FD_core_write */
reset_udata(udata);
dset = H5Dcreate2(file, DSET_NAME, H5T_NATIVE_INT, space, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
- VERIFY(dset >=0, "H5Dcreate failed");
-
+ VERIFY(dset >= 0, "H5Dcreate failed");
+
/* Flush the write and check the realloc callback */
ret = H5Fflush(file, H5F_SCOPE_LOCAL);
VERIFY(ret >= 0, "H5Fflush failed");
VERIFY(udata->used_callbacks == (REALLOC), "core write used the wrong callbacks");
- VERIFY(udata->realloc_src == H5FD_FILE_IMAGE_OP_FILE_RESIZE, "Realloc callback came from wrong source in core write");
-
+ VERIFY(udata->realloc_src == H5FD_FILE_IMAGE_OP_FILE_RESIZE,
+ "Realloc callback came from wrong source in core write");
+
/* Close dset and space */
ret = H5Dclose(dset);
VERIFY(ret >= 0, "H5Dclose failed");
ret = H5Sclose(space);
VERIFY(ret >= 0, "H5Sclose failed");
-
+
/* Test file close */
reset_udata(udata);
ret = H5Fclose(file);
VERIFY(ret >= 0, "H5Fclose failed");
VERIFY(udata->used_callbacks == (FREE), "Closing a core file used the wrong callbacks");
- VERIFY(udata->free_src == H5FD_FILE_IMAGE_OP_FILE_CLOSE, "Free callback came from wrong sourc in core close");
+ VERIFY(udata->free_src == H5FD_FILE_IMAGE_OP_FILE_CLOSE,
+ "Free callback came from wrong source in core close");
/* Create file image buffer */
- fd = HDopen(copied_filename, O_RDONLY, 0666);
+ fd = HDopen(copied_filename, O_RDONLY);
VERIFY(fd > 0, "open failed");
ret = HDfstat(fd, &sb);
VERIFY(ret == 0, "fstat failed");
- size = (size_t)sb.st_size;
+ size = (size_t)sb.st_size;
file_image = (unsigned char *)HDmalloc(size);
- HDread(fd, file_image, size);
+ if (HDread(fd, file_image, size) < 0)
+ FAIL_PUTS_ERROR("unable to read from file descriptor");
ret = HDclose(fd);
VERIFY(ret == 0, "close failed");
/* Set file image in plist */
- if(H5Pset_file_image(fapl, file_image, size) < 0) FAIL_STACK_ERROR
+ if (H5Pset_file_image(fapl, file_image, size) < 0)
+ FAIL_STACK_ERROR;
/* Test open with file image */
- if((file = H5Fopen("dne.h5", H5F_ACC_RDONLY, fapl)) < 0) FAIL_STACK_ERROR
- if(H5Fclose(file) < 0) FAIL_STACK_ERROR
+ if ((file = H5Fopen("dne.h5", H5F_ACC_RDONLY, fapl)) < 0)
+ FAIL_STACK_ERROR;
+ if (H5Fclose(file) < 0)
+ FAIL_STACK_ERROR;
/* Release resources */
- h5_cleanup(FILENAME, fapl);
+ h5_clean_files(FILENAME, fapl);
HDfree(udata);
HDfree(file_image);
HDremove(copied_filename);
-
+
PASSED();
return 0;
@@ -656,7 +691,6 @@ error:
return 1;
} /* end test_core() */
-
/******************************************************************************
* Function: test_get_file_image
*
@@ -665,35 +699,46 @@ error:
* Programmer: John Mainzer
* Tuesday, November 15, 2011
*
+ * Modifications:
+ * Vailin Choi; July 2013
+ * Add the creation of user block to the file as indicated by the parameter "user".
+ *
******************************************************************************
*/
+/* Disable warning for "format not a string literal" here -QAK */
+/*
+ * This pragma only needs to surround the snprintf() calls with
+ * 'member_file_name' in the code below, but early (4.4.7, at least) gcc only
+ * allows diagnostic pragmas to be toggled outside of functions.
+ */
+H5_GCC_CLANG_DIAG_OFF("format-nonliteral")
static int
-test_get_file_image(const char * test_banner,
- const int file_name_num,
- hid_t fapl)
+test_get_file_image(const char *test_banner, const int file_name_num, hid_t fapl, hbool_t user)
{
- char file_name[1024] = "\0";
- void * insertion_ptr = NULL;
- void * image_ptr = NULL;
- void * file_image_ptr = NULL;
- hbool_t is_family_file = FALSE;
- hbool_t identical;
- int data[100];
- int i;
- int fd = -1;
- int result;
- hid_t driver = -1;
- hid_t file_id = -1;
- hid_t dset_id = -1;
- hid_t space_id = -1;
- hid_t core_fapl_id = -1;
- hid_t core_file_id = -1;
- herr_t err;
- hsize_t dims[2];
- ssize_t bytes_read;
- ssize_t image_size;
- ssize_t file_size;
+ char file_name[1024] = "\0";
+ void *insertion_ptr = NULL;
+ void *image_ptr = NULL;
+ void *file_image_ptr = NULL;
+ hbool_t is_family_file = FALSE;
+ hbool_t identical;
+ int data[100];
+ int i;
+ int fd = -1;
+ int result;
+ hid_t driver = -1;
+ hid_t file_id = -1;
+ hid_t dset_id = -1;
+ hid_t space_id = -1;
+ hid_t core_fapl_id = -1;
+ hid_t core_file_id = -1;
+ herr_t err;
+ hsize_t dims[2];
+ ssize_t bytes_read;
+ ssize_t image_size;
+ ssize_t file_size;
h5_stat_t stat_buf;
+ hid_t fcpl = -1;
+ herr_t ret;
TESTING(test_banner);
@@ -701,34 +746,40 @@ test_get_file_image(const char * test_banner,
driver = H5Pget_driver(fapl);
VERIFY(driver >= 0, "H5Pget_driver(fapl) failed");
- if(driver == H5FD_FAMILY)
+ if (driver == H5FD_FAMILY)
is_family_file = TRUE;
-
+
/* setup the file name */
h5_fixname(FILENAME2[file_name_num], fapl, file_name, sizeof(file_name));
- VERIFY(HDstrlen(file_name)>0, "h5_fixname failed");
+ VERIFY(HDstrlen(file_name) > 0, "h5_fixname failed");
+
+ fcpl = H5Pcreate(H5P_FILE_CREATE);
+ VERIFY(fcpl >= 0, "H5Pcreate");
+ if (user) {
+ ret = H5Pset_userblock(fcpl, (hsize_t)USERBLOCK_SIZE);
+ VERIFY(ret >= 0, "H5Pset_userblock");
+ }
/* create the file */
- file_id = H5Fcreate(file_name, 0, H5P_DEFAULT, fapl);
+ file_id = H5Fcreate(file_name, 0, fcpl, fapl);
VERIFY(file_id >= 0, "H5Fcreate() failed.");
/* Set up data space for new new data set */
- dims[0] = 10;
- dims[1] = 10;
+ dims[0] = 10;
+ dims[1] = 10;
space_id = H5Screate_simple(2, dims, dims);
VERIFY(space_id >= 0, "H5Screate() failed");
/* Create a dataset */
- dset_id = H5Dcreate2(file_id, "dset 0", H5T_NATIVE_INT, space_id,
- H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
- VERIFY(dset_id >=0, "H5Dcreate() failed");
+ dset_id = H5Dcreate2(file_id, "dset 0", H5T_NATIVE_INT, space_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+ VERIFY(dset_id >= 0, "H5Dcreate() failed");
/* write some data to the data set */
for (i = 0; i < 100; i++)
data[i] = i;
err = H5Dwrite(dset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, (void *)data);
VERIFY(err >= 0, "H5Dwrite() failed.");
-
+
/* Flush the file */
err = H5Fflush(file_id, H5F_SCOPE_GLOBAL);
VERIFY(err >= 0, "H5Fflush failed");
@@ -746,7 +797,7 @@ test_get_file_image(const char * test_banner,
VERIFY(bytes_read == image_size, "H5Fget_file_image(2) failed.");
/* Close dset and space */
- err = H5Dclose(dset_id);
+ err = H5Dclose(dset_id);
VERIFY(err >= 0, "H5Dclose failed");
err = H5Sclose(space_id);
VERIFY(err >= 0, "H5Sclose failed");
@@ -755,17 +806,21 @@ test_get_file_image(const char * test_banner,
err = H5Fclose(file_id);
VERIFY(err == SUCCEED, "H5Fclose(file_id) failed.");
- if(is_family_file) {
- char member_file_name[1024];
+ if (is_family_file) {
+ char member_file_name[1024];
ssize_t bytes_to_read;
ssize_t member_size;
ssize_t size_remaining;
- i = 0;
+ /*
+ * Modifications need to be made to accommodate userblock when
+ * H5Fget_file_image() works for family driver
+ */
+ i = 0;
file_size = 0;
do {
- HDsnprintf(member_file_name, 1024, file_name, i);
+ HDsnprintf(member_file_name, (size_t)1024, file_name, i);
/* get the size of the member file */
result = HDstat(member_file_name, &stat_buf);
@@ -775,7 +830,7 @@ test_get_file_image(const char * test_banner,
i++;
file_size += member_size;
- } while(member_size > 0);
+ } while (member_size > 0);
/* Since we use the eoa to calculate the image size, the file size
* may be larger. This is OK, as long as (in this specialized instance)
@@ -788,22 +843,23 @@ test_get_file_image(const char * test_banner,
VERIFY(file_image_ptr != NULL, "HDmalloc(2f) failed.");
size_remaining = image_size;
- insertion_ptr = file_image_ptr;
- i = 0;
+ insertion_ptr = file_image_ptr;
+ i = 0;
- while(size_remaining > 0) {
+ while (size_remaining > 0) {
/* construct the member file name */
HDsnprintf(member_file_name, 1024, file_name, i);
/* open the test file using standard I/O calls */
- fd = HDopen(member_file_name, O_RDONLY, 0666);
+ fd = HDopen(member_file_name, O_RDONLY);
VERIFY(fd >= 0, "HDopen() failed.");
- if(size_remaining >= FAMILY_SIZE ){
- bytes_to_read = FAMILY_SIZE;
+ if (size_remaining >= FAMILY_SIZE) {
+ bytes_to_read = FAMILY_SIZE;
size_remaining -= FAMILY_SIZE;
- } else {
- bytes_to_read = size_remaining;
+ }
+ else {
+ bytes_to_read = size_remaining;
size_remaining = 0;
}
@@ -819,7 +875,8 @@ test_get_file_image(const char * test_banner,
result = HDclose(fd);
VERIFY(result == 0, "HDclose() failed.");
}
- } else {
+ }
+ else {
/* get the size of the test file */
result = HDstat(file_name, &stat_buf);
VERIFY(result == 0, "HDstat() failed.");
@@ -829,9 +886,13 @@ test_get_file_image(const char * test_banner,
* the remainder of the file is all '\0's.
*/
file_size = (ssize_t)stat_buf.st_size;
+ if (user) {
+ VERIFY(file_size > USERBLOCK_SIZE, "file size !> userblock size.");
+ file_size -= USERBLOCK_SIZE;
+ }
- /* with latest mods to truncate call in core file drive,
- * file size should match image size
+ /* with latest mods to truncate call in core file drive,
+ * file size should match image size
*/
VERIFY(file_size == image_size, "file size != image size.");
@@ -840,9 +901,17 @@ test_get_file_image(const char * test_banner,
VERIFY(file_image_ptr != NULL, "HDmalloc(2) failed.");
/* open the test file using standard I/O calls */
- fd = HDopen(file_name, O_RDONLY, 0666);
+ fd = HDopen(file_name, O_RDONLY);
VERIFY(fd >= 0, "HDopen() failed.");
+ if (user) {
+ HDoff_t off;
+
+ /* Position at userblock */
+ off = HDlseek(fd, (off_t)USERBLOCK_SIZE, SEEK_SET);
+ VERIFY(off >= 0, "HDlseek() failed.");
+ }
+
/* read the test file from disk into the buffer */
bytes_read = HDread(fd, file_image_ptr, (size_t)file_size);
VERIFY(bytes_read == file_size, "HDread() failed.");
@@ -854,20 +923,19 @@ test_get_file_image(const char * test_banner,
/* verify that the file and the image contain the same data */
identical = TRUE;
- i = 0;
- while((i < (int)image_size) && identical) {
- if(((char *)image_ptr)[i] != ((char *)file_image_ptr)[i])
+ i = 0;
+ while ((i < (int)image_size) && identical) {
+ if (((char *)image_ptr)[i] != ((char *)file_image_ptr)[i])
identical = FALSE;
i++;
}
VERIFY(identical, "file and image differ.");
-
/* finally, verify that we can use the core file driver to open the image */
/* create fapl for core file driver */
core_fapl_id = H5Pcreate(H5P_FILE_ACCESS);
- VERIFY(core_fapl_id >=0, "H5Pcreate() failed");
+ VERIFY(core_fapl_id >= 0, "H5Pcreate() failed");
/* setup core_fapl_id to use the core file driver */
err = H5Pset_fapl_core(core_fapl_id, (size_t)(64 * 1024), FALSE);
@@ -885,22 +953,21 @@ test_get_file_image(const char * test_banner,
err = H5Fclose(core_file_id);
VERIFY(err == SUCCEED, "H5Fclose(core_file_id) failed.");
- /* dicard core fapl */
+ /* discard core fapl */
err = H5Pclose(core_fapl_id);
VERIFY(err == SUCCEED, "H5Pclose(core_fapl_id) failed.");
/* tidy up */
- result = h5_cleanup(FILENAME2, fapl);
- VERIFY(result != 0, "h5_cleanup() failed.");
+ h5_clean_files(FILENAME2, fapl);
/* discard the image buffer if it exists */
- if(image_ptr != NULL)
+ if (image_ptr != NULL)
HDfree(image_ptr);
/* discard the image buffer if it exists */
- if(file_image_ptr != NULL)
+ if (file_image_ptr != NULL)
HDfree(file_image_ptr);
-
+
PASSED();
return 0;
@@ -908,8 +975,8 @@ test_get_file_image(const char * test_banner,
error:
return 1;
} /* end test_get_file_image() */
+H5_GCC_CLANG_DIAG_ON("format-nonliteral")
-
/******************************************************************************
* Function: test_get_file_image_error_rejection
*
@@ -926,33 +993,31 @@ error:
static int
test_get_file_image_error_rejection(void)
{
- const char *memb_name[H5FD_MEM_NTYPES];
- char file_name[1024] = "\0";
- void * image_ptr = NULL;
- int data[100];
- int i;
- int result;
- hid_t fapl_id = -1;
- hid_t file_id = -1;
- hid_t dset_id = -1;
- hid_t space_id = -1;
- herr_t err;
- hsize_t dims[2];
- ssize_t bytes_read;
- ssize_t image_size;
- hid_t memb_fapl[H5FD_MEM_NTYPES];
- haddr_t memb_addr[H5FD_MEM_NTYPES];
- H5FD_mem_t mt;
- H5FD_mem_t memb_map[H5FD_MEM_NTYPES];
-
+ const char *memb_name[H5FD_MEM_NTYPES];
+ char file_name[1024] = "\0";
+ void *image_ptr = NULL;
+ int data[100];
+ int i;
+ hid_t fapl_id = -1;
+ hid_t file_id = -1;
+ hid_t dset_id = -1;
+ hid_t space_id = -1;
+ herr_t err;
+ hsize_t dims[2];
+ ssize_t bytes_read;
+ ssize_t image_size;
+ hid_t memb_fapl[H5FD_MEM_NTYPES];
+ haddr_t memb_addr[H5FD_MEM_NTYPES];
+ H5FD_mem_t mt;
+ H5FD_mem_t memb_map[H5FD_MEM_NTYPES];
TESTING("H5Fget_file_image() error rejection");
/************************ Sub-Test #1 ********************************/
- /* set up a test file, and try to get its image with a buffer that is
+ /* set up a test file, and try to get its image with a buffer that is
* too small. Call to H5Fget_file_image() should fail.
*
- * Since we have already done the necessary setup, verify that
+ * Since we have already done the necessary setup, verify that
* H5Fget_file_image() will fail with:
*
* bad file id, or
@@ -960,7 +1025,6 @@ test_get_file_image_error_rejection(void)
* good id, but not a file id
*/
-
/* setup fapl -- driver type doesn't matter much, so make it stdio */
fapl_id = H5Pcreate(H5P_FILE_ACCESS);
VERIFY(fapl_id >= 0, "H5Pcreate(1) failed");
@@ -970,30 +1034,28 @@ test_get_file_image_error_rejection(void)
/* setup the file name */
h5_fixname(FILENAME2[6], fapl_id, file_name, sizeof(file_name));
- VERIFY(HDstrlen(file_name)>0, "h5_fixname failed");
+ VERIFY(HDstrlen(file_name) > 0, "h5_fixname failed");
/* create the file */
file_id = H5Fcreate(file_name, 0, H5P_DEFAULT, fapl_id);
VERIFY(file_id >= 0, "H5Fcreate() failed.");
/* Set up data space for new new data set */
- dims[0] = 10;
- dims[1] = 10;
+ dims[0] = 10;
+ dims[1] = 10;
space_id = H5Screate_simple(2, dims, dims);
VERIFY(space_id >= 0, "H5Screate() failed");
/* Create a dataset */
- dset_id = H5Dcreate2(file_id, "dset 0", H5T_NATIVE_INT, space_id,
- H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
- VERIFY(dset_id >=0, "H5Dcreate() failed");
+ dset_id = H5Dcreate2(file_id, "dset 0", H5T_NATIVE_INT, space_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+ VERIFY(dset_id >= 0, "H5Dcreate() failed");
/* write some data to the data set */
for (i = 0; i < 100; i++)
data[i] = i;
- err = H5Dwrite(dset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL,
- H5P_DEFAULT, (void *)data);
+ err = H5Dwrite(dset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, (void *)data);
VERIFY(err >= 0, "H5Dwrite() failed.");
-
+
/* Flush the file */
err = H5Fflush(file_id, H5F_SCOPE_GLOBAL);
VERIFY(err >= 0, "H5Fflush failed");
@@ -1007,29 +1069,35 @@ test_get_file_image_error_rejection(void)
VERIFY(image_ptr != NULL, "HDmalloc(1) failed.");
/* load the image of the file into the buffer */
- H5E_BEGIN_TRY {
+ H5E_BEGIN_TRY
+ {
bytes_read = H5Fget_file_image(file_id, image_ptr, (size_t)(image_size - 1));
- } H5E_END_TRY;
+ }
+ H5E_END_TRY;
VERIFY(bytes_read < 0, "H5Fget_file_image(2 -- test 1) succeeded.");
/* Call H5Fget_file_image() with good buffer and buffer size,
- * but non-existant file_id. Should fail.
+ * but non-existent file_id. Should fail.
*/
- H5E_BEGIN_TRY {
+ H5E_BEGIN_TRY
+ {
bytes_read = H5Fget_file_image((hid_t)0, image_ptr, (size_t)(image_size));
- } H5E_END_TRY;
+ }
+ H5E_END_TRY;
VERIFY(bytes_read < 0, "H5Fget_file_image(3 -- test 1) succeeded.");
/* Call H5Fget_file_image() with good buffer and buffer size,
* but a file_id of the wrong type. Should fail.
*/
- H5E_BEGIN_TRY {
+ H5E_BEGIN_TRY
+ {
bytes_read = H5Fget_file_image(dset_id, image_ptr, (size_t)(image_size));
- } H5E_END_TRY;
+ }
+ H5E_END_TRY;
VERIFY(bytes_read < 0, "H5Fget_file_image(4 -- test 1) succeeded.");
/* Close dset and space */
- err = H5Dclose(dset_id);
+ err = H5Dclose(dset_id);
VERIFY(err >= 0, "H5Dclose failed");
err = H5Sclose(space_id);
VERIFY(err >= 0, "H5Sclose failed");
@@ -1039,20 +1107,19 @@ test_get_file_image_error_rejection(void)
VERIFY(err == SUCCEED, "H5Fclose(file_id) failed.");
/* tidy up */
- result = h5_cleanup(FILENAME2, fapl_id);
- VERIFY(result != 0, "h5_cleanup(1) failed.");
+ h5_clean_files(FILENAME2, fapl_id);
/* discard the image buffer if it exists */
- if(image_ptr != NULL)
+ if (image_ptr != NULL)
HDfree(image_ptr);
/************************** Test #2 **********************************/
- /* set up a multi file driver test file, and try to get its image
+ /* set up a multi file driver test file, and try to get its image
* with H5Fget_file_image(). Attempt should fail.
*/
/* setup parameters for multi file driver */
- for(mt = (H5FD_mem_t)0; mt < H5FD_MEM_NTYPES; mt = (H5FD_mem_t)(mt + 1)) {
+ for (mt = (H5FD_mem_t)0; mt < H5FD_MEM_NTYPES; mt = (H5FD_mem_t)(mt + 1)) {
memb_addr[mt] = HADDR_UNDEF;
memb_fapl[mt] = H5P_DEFAULT;
memb_map[mt] = H5FD_MEM_DRAW;
@@ -1069,10 +1136,10 @@ test_get_file_image_error_rejection(void)
memb_name[H5FD_MEM_BTREE] = "%s-b.h5";
memb_addr[H5FD_MEM_BTREE] = memb_addr[H5FD_MEM_SUPER] + TYPE_SLICE;
- memb_map[H5FD_MEM_DRAW] = H5FD_MEM_DRAW;
- memb_fapl[H5FD_MEM_DRAW] = H5P_DEFAULT;
- memb_name[H5FD_MEM_DRAW] = "%s-r.h5";
- memb_addr[H5FD_MEM_DRAW] = memb_addr[H5FD_MEM_BTREE] + TYPE_SLICE;
+ memb_map[H5FD_MEM_DRAW] = H5FD_MEM_DRAW;
+ memb_fapl[H5FD_MEM_DRAW] = H5P_DEFAULT;
+ memb_name[H5FD_MEM_DRAW] = "%s-r.h5";
+ memb_addr[H5FD_MEM_DRAW] = memb_addr[H5FD_MEM_BTREE] + TYPE_SLICE;
memb_map[H5FD_MEM_GHEAP] = H5FD_MEM_GHEAP;
memb_fapl[H5FD_MEM_GHEAP] = H5P_DEFAULT;
@@ -1084,58 +1151,57 @@ test_get_file_image_error_rejection(void)
memb_name[H5FD_MEM_LHEAP] = "%s-l.h5";
memb_addr[H5FD_MEM_LHEAP] = memb_addr[H5FD_MEM_GHEAP] + TYPE_SLICE;
- memb_map[H5FD_MEM_OHDR] = H5FD_MEM_OHDR;
- memb_fapl[H5FD_MEM_OHDR] = H5P_DEFAULT;
- memb_name[H5FD_MEM_OHDR] = "%s-o.h5";
- memb_addr[H5FD_MEM_OHDR] = memb_addr[H5FD_MEM_LHEAP] + TYPE_SLICE;
+ memb_map[H5FD_MEM_OHDR] = H5FD_MEM_OHDR;
+ memb_fapl[H5FD_MEM_OHDR] = H5P_DEFAULT;
+ memb_name[H5FD_MEM_OHDR] = "%s-o.h5";
+ memb_addr[H5FD_MEM_OHDR] = memb_addr[H5FD_MEM_LHEAP] + TYPE_SLICE;
/* setup fapl */
fapl_id = H5Pcreate(H5P_FILE_ACCESS);
VERIFY(fapl_id >= 0, "H5Pcreate(2) failed");
/* setup the fapl for the multi file driver */
- err = H5Pset_fapl_multi(fapl_id, memb_map, memb_fapl, memb_name,
- memb_addr, FALSE);
+ err = H5Pset_fapl_multi(fapl_id, memb_map, memb_fapl, memb_name, memb_addr, FALSE);
VERIFY(err >= 0, "H5Pset_fapl_multi failed");
/* setup the file name */
h5_fixname(FILENAME2[4], fapl_id, file_name, sizeof(file_name));
- VERIFY(HDstrlen(file_name)>0, "h5_fixname failed");
+ VERIFY(HDstrlen(file_name) > 0, "h5_fixname failed");
/* create the file */
file_id = H5Fcreate(file_name, 0, H5P_DEFAULT, fapl_id);
VERIFY(file_id >= 0, "H5Fcreate() failed.");
/* Set up data space for new new data set */
- dims[0] = 10;
- dims[1] = 10;
+ dims[0] = 10;
+ dims[1] = 10;
space_id = H5Screate_simple(2, dims, dims);
VERIFY(space_id >= 0, "H5Screate() failed");
/* Create a dataset */
- dset_id = H5Dcreate2(file_id, "dset 0", H5T_NATIVE_INT, space_id,
- H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
- VERIFY(dset_id >=0, "H5Dcreate() failed");
+ dset_id = H5Dcreate2(file_id, "dset 0", H5T_NATIVE_INT, space_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+ VERIFY(dset_id >= 0, "H5Dcreate() failed");
/* write some data to the data set */
for (i = 0; i < 100; i++)
data[i] = i;
- err = H5Dwrite(dset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL,
- H5P_DEFAULT, (void *)data);
+ err = H5Dwrite(dset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, (void *)data);
VERIFY(err >= 0, "H5Dwrite() failed.");
-
+
/* Flush the file */
err = H5Fflush(file_id, H5F_SCOPE_GLOBAL);
VERIFY(err >= 0, "H5Fflush failed");
/* attempt to get the size of the file -- should fail */
- H5E_BEGIN_TRY {
+ H5E_BEGIN_TRY
+ {
image_size = H5Fget_file_image(file_id, NULL, (size_t)0);
- } H5E_END_TRY;
+ }
+ H5E_END_TRY;
VERIFY(image_size == -1, "H5Fget_file_image(5) succeeded.");
/* Close dset and space */
- err = H5Dclose(dset_id);
+ err = H5Dclose(dset_id);
VERIFY(err >= 0, "H5Dclose failed");
err = H5Sclose(space_id);
VERIFY(err >= 0, "H5Sclose failed");
@@ -1145,15 +1211,14 @@ test_get_file_image_error_rejection(void)
VERIFY(err == SUCCEED, "H5Fclose(2) failed.");
/* tidy up */
- result = h5_cleanup(FILENAME2, fapl_id);
- VERIFY(result != 0, "h5_cleanup(2 failed.");
+ h5_clean_files(FILENAME2, fapl_id);
/************************** Test #3 **********************************/
- /* set up a split file driver test file, and try to get its image
+ /* set up a split file driver test file, and try to get its image
* with H5Fget_file_image(). Attempt should fail.
*/
- /* create fapl */
+ /* create fapl */
fapl_id = H5Pcreate(H5P_FILE_ACCESS);
VERIFY(fapl_id >= 0, "H5Pcreate(3) failed");
@@ -1163,42 +1228,42 @@ test_get_file_image_error_rejection(void)
/* setup the file name */
h5_fixname(FILENAME2[5], fapl_id, file_name, sizeof(file_name));
- VERIFY(HDstrlen(file_name)>0, "h5_fixname failed");
+ VERIFY(HDstrlen(file_name) > 0, "h5_fixname failed");
/* create the file */
file_id = H5Fcreate(file_name, 0, H5P_DEFAULT, fapl_id);
VERIFY(file_id >= 0, "H5Fcreate() failed.");
/* Set up data space for new new data set */
- dims[0] = 10;
- dims[1] = 10;
+ dims[0] = 10;
+ dims[1] = 10;
space_id = H5Screate_simple(2, dims, dims);
VERIFY(space_id >= 0, "H5Screate() failed");
/* Create a dataset */
- dset_id = H5Dcreate2(file_id, "dset 0", H5T_NATIVE_INT, space_id,
- H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
- VERIFY(dset_id >=0, "H5Dcreate() failed");
+ dset_id = H5Dcreate2(file_id, "dset 0", H5T_NATIVE_INT, space_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+ VERIFY(dset_id >= 0, "H5Dcreate() failed");
/* write some data to the data set */
for (i = 0; i < 100; i++)
data[i] = i;
- err = H5Dwrite(dset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL,
- H5P_DEFAULT, (void *)data);
+ err = H5Dwrite(dset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, (void *)data);
VERIFY(err >= 0, "H5Dwrite() failed.");
-
+
/* Flush the file */
err = H5Fflush(file_id, H5F_SCOPE_GLOBAL);
VERIFY(err >= 0, "H5Fflush failed");
/* attempt to get the size of the file -- should fail */
- H5E_BEGIN_TRY {
+ H5E_BEGIN_TRY
+ {
image_size = H5Fget_file_image(file_id, NULL, (size_t)0);
- } H5E_END_TRY;
+ }
+ H5E_END_TRY;
VERIFY(image_size == -1, "H5Fget_file_image(6) succeeded.");
/* Close dset and space */
- err = H5Dclose(dset_id);
+ err = H5Dclose(dset_id);
VERIFY(err >= 0, "H5Dclose failed");
err = H5Sclose(space_id);
VERIFY(err >= 0, "H5Sclose failed");
@@ -1208,15 +1273,14 @@ test_get_file_image_error_rejection(void)
VERIFY(err == SUCCEED, "H5Fclose(2) failed.");
/* tidy up */
- result = h5_cleanup(FILENAME2, fapl_id);
- VERIFY(result != 0, "h5_cleanup(2 failed.");
+ h5_clean_files(FILENAME2, fapl_id);
/************************** Test #4 **********************************/
- /* set up a family file driver test file, and try to get its image
+ /* set up a family file driver test file, and try to get its image
* with H5Fget_file_image(). Attempt should fail.
*/
- /* create fapl */
+ /* create fapl */
fapl_id = H5Pcreate(H5P_FILE_ACCESS);
VERIFY(fapl_id >= 0, "H5Pcreate(3) failed");
@@ -1224,42 +1288,42 @@ test_get_file_image_error_rejection(void)
VERIFY(err >= 0, "H5Pset_fapl_family failed");
h5_fixname(FILENAME2[3], fapl_id, file_name, sizeof(file_name));
- VERIFY(HDstrlen(file_name)>0, "h5_fixname failed");
+ VERIFY(HDstrlen(file_name) > 0, "h5_fixname failed");
/* create the file */
file_id = H5Fcreate(file_name, 0, H5P_DEFAULT, fapl_id);
VERIFY(file_id >= 0, "H5Fcreate() failed.");
/* Set up data space for new new data set */
- dims[0] = 10;
- dims[1] = 10;
+ dims[0] = 10;
+ dims[1] = 10;
space_id = H5Screate_simple(2, dims, dims);
VERIFY(space_id >= 0, "H5Screate() failed");
/* Create a dataset */
- dset_id = H5Dcreate2(file_id, "dset 0", H5T_NATIVE_INT, space_id,
- H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
- VERIFY(dset_id >=0, "H5Dcreate() failed");
+ dset_id = H5Dcreate2(file_id, "dset 0", H5T_NATIVE_INT, space_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+ VERIFY(dset_id >= 0, "H5Dcreate() failed");
/* write some data to the data set */
for (i = 0; i < 100; i++)
data[i] = i;
- err = H5Dwrite(dset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL,
- H5P_DEFAULT, (void *)data);
+ err = H5Dwrite(dset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, (void *)data);
VERIFY(err >= 0, "H5Dwrite() failed.");
-
+
/* Flush the file */
err = H5Fflush(file_id, H5F_SCOPE_GLOBAL);
VERIFY(err >= 0, "H5Fflush failed");
/* attempt to get the size of the file -- should fail */
- H5E_BEGIN_TRY {
+ H5E_BEGIN_TRY
+ {
image_size = H5Fget_file_image(file_id, NULL, (size_t)0);
- } H5E_END_TRY;
+ }
+ H5E_END_TRY;
VERIFY(image_size == -1, "H5Fget_file_image(7) succeeded.");
/* Close dset and space */
- err = H5Dclose(dset_id);
+ err = H5Dclose(dset_id);
VERIFY(err >= 0, "H5Dclose failed");
err = H5Sclose(space_id);
VERIFY(err >= 0, "H5Sclose failed");
@@ -1269,64 +1333,76 @@ test_get_file_image_error_rejection(void)
VERIFY(err == SUCCEED, "H5Fclose(2) failed.");
/* tidy up */
- result = h5_cleanup(FILENAME2, fapl_id);
- VERIFY(result != 0, "h5_cleanup(2 failed.");
-
+ h5_clean_files(FILENAME2, fapl_id);
+
PASSED();
return 0;
error:
return 1;
-}
+} /* test_get_file_image_error_rejection() */
+/*
+ * Modifications:
+ * Add testing for file image with or without user block in the file.
+ */
int
main(void)
{
- int errors = 0;
- hid_t fapl;
+ int errors = 0;
+ hid_t fapl;
+ hbool_t driver_is_default_compatible;
+ unsigned user;
h5_reset();
- printf("Testing File Image Functionality.\n");
+ HDprintf("Testing File Image Functionality.\n");
errors += test_properties();
errors += test_callbacks();
- errors += test_core();
- /* test H5Fget_file_image() with sec2 driver */
- fapl = H5Pcreate(H5P_FILE_ACCESS);
- if(H5Pset_fapl_sec2(fapl) < 0)
+ if (h5_driver_is_default_vfd_compatible(H5P_DEFAULT, &driver_is_default_compatible) < 0)
errors++;
- else
- errors += test_get_file_image("H5Fget_file_image() with sec2 driver",
- 0, fapl);
+ else if (driver_is_default_compatible) {
+ errors += test_core();
+ }
- /* test H5Fget_file_image() with stdio driver */
- fapl = H5Pcreate(H5P_FILE_ACCESS);
- if(H5Pset_fapl_stdio(fapl) < 0)
- errors++;
- else
- errors += test_get_file_image("H5Fget_file_image() with stdio driver",
- 1, fapl);
+ /* Perform tests with/without user block */
+ for (user = FALSE; user <= TRUE; user++) {
- /* test H5Fget_file_image() with core driver */
- fapl = H5Pcreate(H5P_FILE_ACCESS);
- if(H5Pset_fapl_core(fapl, (size_t)(64 *1024), TRUE) < 0)
- errors++;
- else
- errors += test_get_file_image("H5Fget_file_image() with core driver",
- 2, fapl);
+ /* test H5Fget_file_image() with sec2 driver */
+ fapl = H5Pcreate(H5P_FILE_ACCESS);
+ if (H5Pset_fapl_sec2(fapl) < 0)
+ errors++;
+ else
+ errors += test_get_file_image("H5Fget_file_image() with sec2 driver", 0, fapl, user);
+
+ /* test H5Fget_file_image() with stdio driver */
+ fapl = H5Pcreate(H5P_FILE_ACCESS);
+ if (H5Pset_fapl_stdio(fapl) < 0)
+ errors++;
+ else
+ errors += test_get_file_image("H5Fget_file_image() with stdio driver", 1, fapl, user);
+
+ /* test H5Fget_file_image() with core driver */
+ fapl = H5Pcreate(H5P_FILE_ACCESS);
+ if (H5Pset_fapl_core(fapl, (size_t)(64 * 1024), TRUE) < 0)
+ errors++;
+ else
+ errors += test_get_file_image("H5Fget_file_image() with core driver", 2, fapl, user);
+
+ } /* end for */
#if 0
- /* at present, H5Fget_file_image() rejects files opened with the
+ /* at present, H5Fget_file_image() rejects files opened with the
* family file driver, due to the addition of a driver info message
* in the super block. This message prevents the image being opened
- * with any driver other than the family file driver, which sort of
+ * with any driver other than the family file driver, which sort of
* defeats the purpose of the get file image operation.
*
* While this issues is quite fixable, we don't have time or resources
- * for this right now. Once we do, the following code should be
+ * for this right now. Once we do, the following code should be
* suitable for testing the fix.
*/
/* test H5Fget_file_image() with family file driver */
@@ -1340,14 +1416,14 @@ main(void)
errors += test_get_file_image_error_rejection();
+ /* Restore the default error handler (set in h5_reset()) */
+ h5_restore_err();
- if(errors) {
- printf("***** %d File Image TEST%s FAILED! *****\n",
- errors, errors > 1 ? "S" : "");
- return 1;
+ if (errors) {
+ HDprintf("***** %d File Image TEST%s FAILED! *****\n", errors, errors > 1 ? "S" : "");
+ return 1;
}
- printf("All File Image tests passed.\n");
+ HDprintf("All File Image tests passed.\n");
return 0;
}
-