diff options
Diffstat (limited to 'test/vfd.c')
-rw-r--r-- | test/vfd.c | 64 |
1 files changed, 54 insertions, 10 deletions
@@ -28,6 +28,7 @@ #define FAMILY_SIZE2 (5*KB) #define MULTI_SIZE 128 #define CORE_INCREMENT (4*KB) +#define FILE_COPY_BUF_SIZE 4096 /*Macros for Direct VFD*/ #define MBOUNDARY 512 @@ -44,13 +45,16 @@ const char *FILENAME[] = { "sec2_file", "core_file", "family_file", + "family_v16_", + "new_family_v16_", "multi_file", "direct_file", NULL }; - +/* #define COMPAT_BASENAME "family_v16_" - +#define COMPAT_NEWNAME "new_family_v16_" +*/ /*------------------------------------------------------------------------- * Function: test_sec2 @@ -173,7 +177,7 @@ test_direct(void) fapl = h5_fileaccess(); if(H5Pset_fapl_direct(fapl, MBOUNDARY, FBSIZE, CBSIZE) < 0) TEST_ERROR; - h5_fixname(FILENAME[4], fapl, filename, sizeof filename); + h5_fixname(FILENAME[6], fapl, filename, sizeof filename); /* Verify the file access properties */ if(H5Pget_fapl_direct(fapl, &mbound, &fbsize, &cbsize) < 0) @@ -805,8 +809,14 @@ test_family_compat(void) hid_t dset; char dname[]="dataset"; char filename[1024]; - char pathname[1024]; + char pathname[1024], pathname_individual[1024]; + char newname[1024], newname_individual[1024]; char *srcdir = getenv("srcdir"); /*where the src code is located*/ + FILE *tmp_fp, *old_fp; /* Pointers to temp & old files */ + void *copy_buf; /* Pointer to buffer for copying data */ + size_t written; /* Amount of data written to new file */ + size_t read_in; /* Amount of data read in from old file */ + int counter = 0; TESTING("FAMILY file driver backward compatibility"); @@ -816,7 +826,8 @@ test_family_compat(void) if(H5Pset_fapl_family(fapl, (hsize_t)FAMILY_SIZE2, H5P_DEFAULT) < 0) TEST_ERROR; - h5_fixname(COMPAT_BASENAME, fapl, filename, sizeof filename); + h5_fixname(FILENAME[3], fapl, filename, sizeof filename); + h5_fixname(FILENAME[4], fapl, newname, sizeof newname); pathname[0] = '\0'; /* Generate correct name for test file by prepending the source path */ @@ -826,9 +837,42 @@ test_family_compat(void) } HDstrcat(pathname, filename); + /* The following code makes the copies of the family files in the source directory. + * Since we're going to open the files with write mode, this protects the original + * files. + */ + if(NULL == (copy_buf = HDmalloc((size_t)FILE_COPY_BUF_SIZE))) TEST_ERROR + + sprintf(newname_individual, newname, counter); + sprintf(pathname_individual, pathname, counter); + + /* Open the original files until no more left. Copy the content into the new files. */ + while((old_fp = HDfopen(pathname_individual,"rb"))) { + /* Open the new file */ + if(NULL == (tmp_fp = fopen(newname_individual,"wb"))) TEST_ERROR + + /* Copy data from the old file to the new file */ + while((read_in = HDfread(copy_buf, (size_t)1, (size_t)FILE_COPY_BUF_SIZE, old_fp)) > 0) + /* Write the data to the new file */ + if(read_in != (written = HDfwrite(copy_buf, (size_t)1, read_in, tmp_fp))) TEST_ERROR + + /* Close the old file */ + if(HDfclose(old_fp)) TEST_ERROR + + /* Close the new file */ + if(HDfclose(tmp_fp)) TEST_ERROR + + counter++; + sprintf(newname_individual, newname, counter); + sprintf(pathname_individual, pathname, counter); + } + + /* Free the copy buffer */ + free(copy_buf); + /* Make sure we can open the file. Use the read and write mode to flush the * superblock. */ - if((file = H5Fopen(pathname, H5F_ACC_RDWR, fapl)) < 0) + if((file = H5Fopen(newname, H5F_ACC_RDWR, fapl)) < 0) TEST_ERROR; if((dset = H5Dopen2(file, dname, H5P_DEFAULT)) < 0) @@ -841,7 +885,7 @@ test_family_compat(void) TEST_ERROR; /* Open the file again to make sure it isn't corrupted. */ - if((file = H5Fopen(pathname, H5F_ACC_RDWR, fapl)) < 0) + if((file = H5Fopen(newname, H5F_ACC_RDWR, fapl)) < 0) TEST_ERROR; if((dset = H5Dopen2(file, dname, H5P_DEFAULT)) < 0) @@ -853,8 +897,7 @@ test_family_compat(void) if(H5Fclose(file) < 0) TEST_ERROR; - if(H5Pclose(fapl) < 0) - TEST_ERROR; + h5_cleanup(FILENAME, fapl); PASSED(); @@ -863,6 +906,7 @@ test_family_compat(void) error: H5E_BEGIN_TRY { H5Fclose(file); + H5Pclose(fapl); } H5E_END_TRY; return -1; @@ -979,7 +1023,7 @@ test_multi(void) if(H5Pset_fapl_multi(fapl, memb_map, memb_fapl, memb_name, memb_addr, TRUE) < 0) TEST_ERROR; - h5_fixname(FILENAME[3], fapl, filename, sizeof filename); + h5_fixname(FILENAME[5], fapl, filename, sizeof filename); if((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR; |