mirror of
https://github.com/HDFGroup/hdf5.git
synced 2025-02-17 16:10:24 +08:00
[svn-r24804] Description:
Brought changes from Coverity branch back to trunk, and cleaned up misc. other warnings & formatting issues: r20833: Fixed Coverity 667 and 668 with real integer overflow tests this time. r20834: Use HDstrncpy and HDstrncat. --gh r20835: Change to use strncpy - use base_len + 1 for line 156, use HDstrlen(path) + 1 for line 159 r20836: Fixed coverity 585 by casting output of fgetc() to a char. r20837: Changed sprintf calls to snprintf with size 1 less than the allocated buffer to address coverity issue #967. Tested on: Mac OSX/64 10.9.2 (amazon) w/C++, FORTRAN & parallel (too minor to require h5committest)
This commit is contained in:
parent
288c7760a4
commit
164b4c7534
@ -13,8 +13,10 @@
|
||||
* access to either file, you may request a copy from help@hdfgroup.org. *
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
#include <limits.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "h5hltest.h"
|
||||
#include "H5srcdir.h"
|
||||
#include "H5LTpublic.h"
|
||||
@ -622,10 +624,12 @@ static int test_generate(void)
|
||||
if(n_elements > INT_MAX / (int)sizeof(float))
|
||||
goto out;
|
||||
|
||||
data = (float *)HDmalloc((size_t)n_elements * sizeof( float ));
|
||||
HDassert(data);
|
||||
image_data = (unsigned char *)HDmalloc((size_t)n_elements * sizeof( unsigned char ));
|
||||
HDassert(image_data);
|
||||
data = (float *)HDmalloc((size_t)n_elements * sizeof(float));
|
||||
if(NULL == data)
|
||||
goto out;
|
||||
image_data = (unsigned char *)HDmalloc((size_t)n_elements * sizeof(unsigned char));
|
||||
if(NULL == image_data)
|
||||
goto out;
|
||||
|
||||
for ( i = 0; i < n_elements; i++ )
|
||||
{
|
||||
@ -794,9 +798,6 @@ static int read_data( const char* fname, /*IN*/
|
||||
fscanf(f, "%s", str);
|
||||
fscanf(f, "%d", &w);
|
||||
|
||||
*width = (hsize_t)w;
|
||||
*height = (hsize_t)h;
|
||||
|
||||
/* Check product for overflow */
|
||||
if(w < 1 || h < 1 || color_planes < 1)
|
||||
goto out;
|
||||
@ -813,13 +814,16 @@ static int read_data( const char* fname, /*IN*/
|
||||
goto out;
|
||||
|
||||
/* Release the buffer, if it was previously allocated */
|
||||
if(image_data) {
|
||||
if(image_data)
|
||||
HDfree(image_data);
|
||||
image_data = NULL;
|
||||
} /* end if */
|
||||
|
||||
/* Allocate the image data buffer */
|
||||
image_data = (unsigned char *)HDmalloc((size_t)n_elements * sizeof(unsigned char));
|
||||
if(NULL == image_data)
|
||||
goto out;
|
||||
|
||||
*width = (hsize_t)w;
|
||||
*height = (hsize_t)h;
|
||||
|
||||
/* Read data elements */
|
||||
for(i = 0; i < n_elements; i++) {
|
||||
|
@ -46,8 +46,8 @@ static const char *H5_get_srcdir_filename(const char *filename)
|
||||
|
||||
/* Build path to test file */
|
||||
if((HDstrlen(srcdir) + HDstrlen(filename) + 2) < sizeof(srcdir_testpath)) {
|
||||
HDstrcpy(srcdir_testpath, srcdir);
|
||||
#ifdef H5_VMS
|
||||
HDstrcpy(srcdir_testpath, srcdir);
|
||||
if(filename[0] == '[') {
|
||||
char *tmp = filename;
|
||||
|
||||
@ -57,8 +57,7 @@ static const char *H5_get_srcdir_filename(const char *filename)
|
||||
else
|
||||
HDstrcat(srcdir_testpath, filename);
|
||||
#else
|
||||
HDstrcat(srcdir_testpath, "/");
|
||||
HDstrcat(srcdir_testpath, filename);
|
||||
HDsnprintf(srcdir_testpath, sizeof(srcdir_testpath), "%s/%s", srcdir, filename);
|
||||
#endif
|
||||
return(srcdir_testpath);
|
||||
} /* end if */
|
||||
@ -77,8 +76,7 @@ static const char *H5_get_srcdir(void)
|
||||
|
||||
/* Build path to all test files */
|
||||
if((HDstrlen(srcdir) + 2) < sizeof(srcdir_path)) {
|
||||
HDstrcpy(srcdir_path, srcdir);
|
||||
HDstrcat(srcdir_path, "/");
|
||||
HDsnprintf(srcdir_path, sizeof(srcdir_path), "%s/", srcdir);
|
||||
return(srcdir_path);
|
||||
} /* end if */
|
||||
else
|
||||
|
174
test/dt_arith.c
174
test/dt_arith.c
@ -531,15 +531,14 @@ except_func(H5T_conv_except_t except_type, hid_t UNUSED src_id, hid_t UNUSED dst
|
||||
* Programmer: Robb Matzke
|
||||
* Tuesday, July 21, 1998
|
||||
*
|
||||
* Modifications:
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
void
|
||||
some_dummy_func(float x)
|
||||
{
|
||||
char s[128];
|
||||
sprintf(s, "%g", x);
|
||||
|
||||
HDsnprintf(s, sizeof(s), "%g", x);
|
||||
}
|
||||
|
||||
|
||||
@ -576,7 +575,8 @@ generates_sigfpe(void)
|
||||
HDexit(1);
|
||||
} else if (0==pid) {
|
||||
for (i=0; i<2000; i++) {
|
||||
for (j=0; j<sizeof(double); j++) dp[j] = HDrand();
|
||||
for(j = 0; j < sizeof(double); j++)
|
||||
dp[j] = (unsigned char)HDrand();
|
||||
f = (float)d;
|
||||
some_dummy_func((float)f);
|
||||
}
|
||||
@ -1044,14 +1044,14 @@ test_derived_flt(void)
|
||||
*/
|
||||
src_size = H5Tget_size(H5T_NATIVE_INT);
|
||||
endian = H5Tget_order(H5T_NATIVE_INT);
|
||||
buf = (unsigned char*)HDmalloc(nelmts * (MAX(src_size, size)));
|
||||
saved_buf = (unsigned char*)HDmalloc(nelmts * src_size);
|
||||
buf = (unsigned char *)HDmalloc(nelmts * (MAX(src_size, size)));
|
||||
saved_buf = (unsigned char *)HDmalloc(nelmts * src_size);
|
||||
HDmemset(buf, 0, nelmts * MAX(src_size, size));
|
||||
HDmemset(saved_buf, 0, nelmts * src_size);
|
||||
aligned = (int*)HDcalloc((size_t)1, src_size);
|
||||
aligned = (int *)HDcalloc((size_t)1, src_size);
|
||||
|
||||
for(i = 0; i < nelmts * src_size; i++)
|
||||
buf[i] = saved_buf[i] = HDrand();
|
||||
buf[i] = saved_buf[i] = (unsigned char)HDrand();
|
||||
|
||||
/* Convert data from native integer to derived floating-point type.
|
||||
* The mantissa is big enough to retain the integer's precision. */
|
||||
@ -1077,7 +1077,7 @@ test_derived_flt(void)
|
||||
|
||||
/* Print errors */
|
||||
if (0==fails_this_test++) {
|
||||
sprintf(str, "\nTesting random sw derived floating-point -> derived floating-point conversions");
|
||||
HDsnprintf(str, sizeof(str), "\nTesting random sw derived floating-point -> derived floating-point conversions");
|
||||
printf("%-70s", str);
|
||||
HDfflush(stdout);
|
||||
H5_FAILED();
|
||||
@ -1204,13 +1204,13 @@ test_derived_flt(void)
|
||||
src_size = H5Tget_size(tid2);
|
||||
dst_size = H5Tget_size(tid1);
|
||||
endian = H5Tget_order(tid2);
|
||||
buf = (unsigned char*)HDmalloc(nelmts*(MAX(src_size, dst_size)));
|
||||
saved_buf = (unsigned char*)HDmalloc(nelmts*src_size);
|
||||
HDmemset(buf, 0, nelmts*MAX(src_size, dst_size));
|
||||
buf = (unsigned char *)HDmalloc(nelmts*(MAX(src_size, dst_size)));
|
||||
saved_buf = (unsigned char *)HDmalloc(nelmts*src_size);
|
||||
HDmemset(buf, 0, nelmts * MAX(src_size, dst_size));
|
||||
HDmemset(saved_buf, 0, nelmts*src_size);
|
||||
|
||||
for(i=0; i<nelmts*src_size; i++)
|
||||
buf[i] = saved_buf[i] = HDrand();
|
||||
buf[i] = saved_buf[i] = (unsigned char)HDrand();
|
||||
|
||||
/* Convert data from the 2nd to the 1st derived floating-point type.
|
||||
* The mantissa and exponent of the 2nd type are big enough to retain
|
||||
@ -1245,7 +1245,7 @@ test_derived_flt(void)
|
||||
|
||||
/* Print errors */
|
||||
if (0==fails_this_test++) {
|
||||
sprintf(str, "\nTesting random sw derived floating-point -> derived floating-point conversions");
|
||||
HDsnprintf(str, sizeof(str), "\nTesting random sw derived floating-point -> derived floating-point conversions");
|
||||
printf("%-70s", str);
|
||||
HDfflush(stdout);
|
||||
H5_FAILED();
|
||||
@ -1514,13 +1514,13 @@ test_derived_integer(void)
|
||||
src_size = H5Tget_size(tid1);
|
||||
dst_size = H5Tget_size(tid2);
|
||||
endian = H5Tget_order(tid1);
|
||||
buf = (unsigned char*)HDmalloc(nelmts*(MAX(src_size, dst_size)));
|
||||
saved_buf = (unsigned char*)HDmalloc(nelmts*src_size);
|
||||
HDmemset(buf, 0, nelmts*MAX(src_size, dst_size));
|
||||
buf = (unsigned char *)HDmalloc(nelmts*(MAX(src_size, dst_size)));
|
||||
saved_buf = (unsigned char *)HDmalloc(nelmts*src_size);
|
||||
HDmemset(buf, 0, nelmts * MAX(src_size, dst_size));
|
||||
HDmemset(saved_buf, 0, nelmts*src_size);
|
||||
|
||||
for(i=0; i<nelmts*src_size; i++)
|
||||
buf[i] = saved_buf[i] = HDrand();
|
||||
for(i=0; i<nelmts * src_size; i++)
|
||||
buf[i] = saved_buf[i] = (unsigned char)HDrand();
|
||||
|
||||
/* Convert data from the 1st to the 2nd derived integer type.
|
||||
* The precision of the 2nd type are big enough to retain
|
||||
@ -1547,7 +1547,7 @@ test_derived_integer(void)
|
||||
|
||||
/* Print errors */
|
||||
if (0==fails_this_test++) {
|
||||
sprintf(str, "\nTesting random sw derived integer -> derived integer conversions");
|
||||
HDsnprintf(str, sizeof(str), "\nTesting random sw derived integer -> derived integer conversions");
|
||||
printf("%-70s", str);
|
||||
HDfflush(stdout);
|
||||
H5_FAILED();
|
||||
@ -1748,14 +1748,14 @@ test_conv_int_1(const char *name, hid_t src, hid_t dst)
|
||||
|
||||
/* Sanity checks */
|
||||
if (OTHER==src_type || OTHER==dst_type) {
|
||||
sprintf(str, "Testing %s %s -> %s conversions",
|
||||
HDsnprintf(str, sizeof(str), "Testing %s %s -> %s conversions",
|
||||
name, src_type_name, dst_type_name);
|
||||
printf("%-70s", str);
|
||||
H5_FAILED();
|
||||
HDputs(" Unknown data type.");
|
||||
goto error;
|
||||
} else {
|
||||
sprintf(str, "Testing %s %s -> %s conversions",
|
||||
HDsnprintf(str, sizeof(str), "Testing %s %s -> %s conversions",
|
||||
name, src_type_name, dst_type_name);
|
||||
printf("%-70s", str);
|
||||
HDfflush(stdout);
|
||||
@ -2718,17 +2718,20 @@ my_isnan(dtype_t type, void *val)
|
||||
if (!retval) {
|
||||
if (FLT_FLOAT==type) {
|
||||
float x;
|
||||
|
||||
HDmemcpy(&x, val, sizeof(float));
|
||||
sprintf(s, "%g", x);
|
||||
HDsnprintf(s, sizeof(s), "%g", x);
|
||||
} else if (FLT_DOUBLE==type) {
|
||||
double x;
|
||||
|
||||
HDmemcpy(&x, val, sizeof(double));
|
||||
sprintf(s, "%g", x);
|
||||
HDsnprintf(s, sizeof(s), "%g", x);
|
||||
#if H5_SIZEOF_LONG_DOUBLE!=H5_SIZEOF_DOUBLE && H5_SIZEOF_LONG_DOUBLE!=0
|
||||
} else if (FLT_LDOUBLE==type) {
|
||||
long double x;
|
||||
|
||||
HDmemcpy(&x, val, sizeof(long double));
|
||||
sprintf(s, "%Lg", x);
|
||||
HDsnprintf(s, sizeof(s), "%Lg", x);
|
||||
#endif
|
||||
} else {
|
||||
return 0;
|
||||
@ -2896,7 +2899,7 @@ test_conv_flt_1 (const char *name, int run_test, hid_t src, hid_t dst)
|
||||
} else if (WIFEXITED(status)) {
|
||||
return WEXITSTATUS(status);
|
||||
} else if (WIFSIGNALED(status)) {
|
||||
sprintf(str, " Child caught signal %d.", WTERMSIG(status));
|
||||
HDsnprintf(str, sizeof(str), " Child caught signal %d.", WTERMSIG(status));
|
||||
HDputs(str);
|
||||
return 1; /*child exit after catching non-SIGFPE signal */
|
||||
} else {
|
||||
@ -2952,16 +2955,16 @@ test_conv_flt_1 (const char *name, int run_test, hid_t src, hid_t dst)
|
||||
HDputs("Sizeof(float)==sizeof(double) - some tests may not be sensible.");
|
||||
if (OTHER==src_type || OTHER==dst_type) {
|
||||
if(!strcmp(name, "noop"))
|
||||
sprintf(str, "Testing %s %s -> %s conversions",
|
||||
HDsnprintf(str, sizeof(str), "Testing %s %s -> %s conversions",
|
||||
name, src_type_name, dst_type_name);
|
||||
else if(run_test==TEST_SPECIAL)
|
||||
sprintf(str, "Testing %s special %s -> %s conversions",
|
||||
HDsnprintf(str, sizeof(str), "Testing %s special %s -> %s conversions",
|
||||
name, src_type_name, dst_type_name);
|
||||
else if(run_test==TEST_NORMAL)
|
||||
sprintf(str, "Testing %s normalized %s -> %s conversions",
|
||||
HDsnprintf(str, sizeof(str), "Testing %s normalized %s -> %s conversions",
|
||||
name, src_type_name, dst_type_name);
|
||||
else if(run_test==TEST_DENORM)
|
||||
sprintf(str, "Testing %s denormalized %s -> %s conversions",
|
||||
HDsnprintf(str, sizeof(str), "Testing %s denormalized %s -> %s conversions",
|
||||
name, src_type_name, dst_type_name);
|
||||
|
||||
printf("%-70s", str);
|
||||
@ -2970,16 +2973,16 @@ test_conv_flt_1 (const char *name, int run_test, hid_t src, hid_t dst)
|
||||
goto error;
|
||||
} else {
|
||||
if(!strcmp(name, "noop"))
|
||||
sprintf(str, "Testing %s %s -> %s conversions",
|
||||
HDsnprintf(str, sizeof(str), "Testing %s %s -> %s conversions",
|
||||
name, src_type_name, dst_type_name);
|
||||
else if(run_test==TEST_SPECIAL)
|
||||
sprintf(str, "Testing %s special %s -> %s conversions",
|
||||
HDsnprintf(str, sizeof(str), "Testing %s special %s -> %s conversions",
|
||||
name, src_type_name, dst_type_name);
|
||||
else if(run_test==TEST_NORMAL)
|
||||
sprintf(str, "Testing %s normalized %s -> %s conversions",
|
||||
HDsnprintf(str, sizeof(str), "Testing %s normalized %s -> %s conversions",
|
||||
name, src_type_name, dst_type_name);
|
||||
else if(run_test==TEST_DENORM)
|
||||
sprintf(str, "Testing %s denormalized %s -> %s conversions",
|
||||
HDsnprintf(str, sizeof(str), "Testing %s denormalized %s -> %s conversions",
|
||||
name, src_type_name, dst_type_name);
|
||||
|
||||
printf("%-70s", str);
|
||||
@ -3097,10 +3100,10 @@ test_conv_flt_1 (const char *name, int run_test, hid_t src, hid_t dst)
|
||||
/* Check the software results against the hardware */
|
||||
for (j=0; j<nelmts; j++) {
|
||||
underflow = 0;
|
||||
hw_f = 911.0;
|
||||
hw_d = 911.0;
|
||||
hw_f = 911.0f;
|
||||
hw_d = 911.0f;
|
||||
#if H5_SIZEOF_LONG_DOUBLE!=H5_SIZEOF_DOUBLE
|
||||
hw_ld = 911.0;
|
||||
hw_ld = 911.0f;
|
||||
#endif
|
||||
|
||||
/* The hardware conversion */
|
||||
@ -3174,10 +3177,11 @@ test_conv_flt_1 (const char *name, int run_test, hid_t src, hid_t dst)
|
||||
* 0s before compare the values.
|
||||
*/
|
||||
#if H5_SIZEOF_LONG_DOUBLE !=0
|
||||
if(sendian==H5T_ORDER_LE && dst_type==FLT_LDOUBLE) {
|
||||
unsigned int q;
|
||||
for(q=dst_nbits/8; q<dst_size; q++) {
|
||||
buf[j*dst_size+q] = 0x00;
|
||||
if(sendian == H5T_ORDER_LE && dst_type == FLT_LDOUBLE) {
|
||||
size_t q;
|
||||
|
||||
for(q = dst_nbits / 8; q < dst_size; q++) {
|
||||
buf[j * dst_size + q] = 0x00;
|
||||
hw[q] = 0x00;
|
||||
}
|
||||
}
|
||||
@ -3652,7 +3656,7 @@ test_conv_int_fp(const char *name, int run_test, hid_t src, hid_t dst)
|
||||
|
||||
/* Sanity checks */
|
||||
if (OTHER==src_type || OTHER==dst_type) {
|
||||
sprintf(str, "Testing %s %s -> %s conversions",
|
||||
HDsnprintf(str, sizeof(str), "Testing %s %s -> %s conversions",
|
||||
name, src_type_name, dst_type_name);
|
||||
printf("%-70s", str);
|
||||
H5_FAILED();
|
||||
@ -3661,15 +3665,15 @@ test_conv_int_fp(const char *name, int run_test, hid_t src, hid_t dst)
|
||||
}
|
||||
|
||||
if ((INT_SCHAR==src_type || INT_UCHAR==src_type || INT_SHORT==src_type ||
|
||||
INT_USHORT==src_type || INT_INT==src_type || INT_UINT==src_type ||
|
||||
INT_LONG==src_type || INT_ULONG==src_type || INT_LLONG==src_type ||
|
||||
INT_ULLONG==src_type) &&
|
||||
(FLT_FLOAT!=dst_type && FLT_DOUBLE!=dst_type
|
||||
INT_USHORT==src_type || INT_INT==src_type || INT_UINT==src_type ||
|
||||
INT_LONG==src_type || INT_ULONG==src_type || INT_LLONG==src_type ||
|
||||
INT_ULLONG==src_type) &&
|
||||
(FLT_FLOAT!=dst_type && FLT_DOUBLE!=dst_type
|
||||
#if H5_SIZEOF_LONG_DOUBLE !=0
|
||||
&& FLT_LDOUBLE!=dst_type
|
||||
&& FLT_LDOUBLE!=dst_type
|
||||
#endif
|
||||
)) {
|
||||
sprintf(str, "Testing %s %s -> %s conversions",
|
||||
)) {
|
||||
HDsnprintf(str, sizeof(str), "Testing %s %s -> %s conversions",
|
||||
name, src_type_name, dst_type_name);
|
||||
printf("%-70s", str);
|
||||
H5_FAILED();
|
||||
@ -3679,14 +3683,14 @@ test_conv_int_fp(const char *name, int run_test, hid_t src, hid_t dst)
|
||||
|
||||
if ((FLT_FLOAT==src_type || FLT_DOUBLE==src_type
|
||||
#if H5_SIZEOF_LONG_DOUBLE !=0
|
||||
|| FLT_LDOUBLE==src_type
|
||||
|| FLT_LDOUBLE==src_type
|
||||
#endif
|
||||
)
|
||||
&& (INT_SCHAR!=dst_type && INT_UCHAR!=dst_type && INT_SHORT!=dst_type
|
||||
&& INT_USHORT!=dst_type && INT_INT!=dst_type && INT_UINT!=dst_type
|
||||
&& INT_LONG!=dst_type && INT_ULONG!=dst_type && INT_LLONG!=dst_type
|
||||
&& INT_ULLONG!=dst_type)) {
|
||||
sprintf(str, "Testing %s %s -> %s conversions",
|
||||
)
|
||||
&& (INT_SCHAR!=dst_type && INT_UCHAR!=dst_type && INT_SHORT!=dst_type
|
||||
&& INT_USHORT!=dst_type && INT_INT!=dst_type && INT_UINT!=dst_type
|
||||
&& INT_LONG!=dst_type && INT_ULONG!=dst_type && INT_LLONG!=dst_type
|
||||
&& INT_ULLONG!=dst_type)) {
|
||||
HDsnprintf(str, sizeof(str), "Testing %s %s -> %s conversions",
|
||||
name, src_type_name, dst_type_name);
|
||||
printf("%-70s", str);
|
||||
H5_FAILED();
|
||||
@ -3695,23 +3699,23 @@ test_conv_int_fp(const char *name, int run_test, hid_t src, hid_t dst)
|
||||
}
|
||||
|
||||
if (INT_SCHAR==src_type || INT_UCHAR==src_type || INT_SHORT==src_type ||
|
||||
INT_USHORT==src_type || INT_INT==src_type || INT_UINT==src_type ||
|
||||
INT_LONG==src_type || INT_ULONG==src_type || INT_LLONG==src_type ||
|
||||
INT_ULLONG==src_type) {
|
||||
sprintf(str, "Testing %s %s -> %s conversions",
|
||||
INT_USHORT==src_type || INT_INT==src_type || INT_UINT==src_type ||
|
||||
INT_LONG==src_type || INT_ULONG==src_type || INT_LLONG==src_type ||
|
||||
INT_ULLONG==src_type) {
|
||||
HDsnprintf(str, sizeof(str), "Testing %s %s -> %s conversions",
|
||||
name, src_type_name, dst_type_name);
|
||||
printf("%-70s", str);
|
||||
HDfflush(stdout);
|
||||
fails_this_test=0;
|
||||
} else {
|
||||
if(run_test==TEST_NORMAL)
|
||||
sprintf(str, "Testing %s normalized %s -> %s conversions",
|
||||
HDsnprintf(str, sizeof(str), "Testing %s normalized %s -> %s conversions",
|
||||
name, src_type_name, dst_type_name);
|
||||
else if(run_test==TEST_DENORM)
|
||||
sprintf(str, "Testing %s denormalized %s -> %s conversions",
|
||||
HDsnprintf(str, sizeof(str), "Testing %s denormalized %s -> %s conversions",
|
||||
name, src_type_name, dst_type_name);
|
||||
else
|
||||
sprintf(str, "Testing %s special %s -> %s conversions",
|
||||
HDsnprintf(str, sizeof(str), "Testing %s special %s -> %s conversions",
|
||||
name, src_type_name, dst_type_name);
|
||||
printf("%-70s", str);
|
||||
HDfflush(stdout);
|
||||
@ -5125,13 +5129,13 @@ run_int_fp_conv(const char *name)
|
||||
{
|
||||
char str[256]; /*hello string */
|
||||
|
||||
sprintf(str, "Testing %s %s -> %s conversions",
|
||||
HDsnprintf(str, sizeof(str), "Testing %s %s -> %s conversions",
|
||||
name, "unsigned long long", "float");
|
||||
printf("%-70s", str);
|
||||
SKIPPED();
|
||||
HDputs(" Test skipped due to compiler not handling conversion.");
|
||||
|
||||
sprintf(str, "Testing %s %s -> %s conversions",
|
||||
HDsnprintf(str, sizeof(str), "Testing %s %s -> %s conversions",
|
||||
name, "unsigned long long", "double");
|
||||
printf("%-70s", str);
|
||||
SKIPPED();
|
||||
@ -5153,19 +5157,19 @@ run_int_fp_conv(const char *name)
|
||||
nerrors += test_conv_int_fp(name, TEST_NORMAL, H5T_NATIVE_LONG, H5T_NATIVE_LDOUBLE);
|
||||
nerrors += test_conv_int_fp(name, TEST_NORMAL, H5T_NATIVE_ULONG, H5T_NATIVE_LDOUBLE);
|
||||
#else
|
||||
{
|
||||
char str[256]; /*string */
|
||||
{
|
||||
char str[256]; /*string */
|
||||
|
||||
sprintf(str, "Testing %s %s -> %s conversions",
|
||||
name, "(unsigned) long", "long double");
|
||||
printf("%-70s", str);
|
||||
SKIPPED();
|
||||
HDsnprintf(str, sizeof(str), "Testing %s %s -> %s conversions",
|
||||
name, "(unsigned) long", "long double");
|
||||
printf("%-70s", str);
|
||||
SKIPPED();
|
||||
#if H5_SIZEOF_LONG_DOUBLE!=0
|
||||
HDputs(" Test skipped due to the special algorithm of hardware conversion.");
|
||||
HDputs(" Test skipped due to the special algorithm of hardware conversion.");
|
||||
#else
|
||||
HDputs(" Test skipped due to disabled long double.");
|
||||
HDputs(" Test skipped due to disabled long double.");
|
||||
#endif
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#endif /* H5_SIZEOF_LONG!=H5_SIZEOF_INT */
|
||||
#if H5_SIZEOF_LONG_LONG!=H5_SIZEOF_LONG
|
||||
@ -5175,7 +5179,7 @@ run_int_fp_conv(const char *name)
|
||||
{
|
||||
char str[256]; /*hello string */
|
||||
|
||||
sprintf(str, "Testing %s %s -> %s conversions",
|
||||
HDsnprintf(str, sizeof(str), "Testing %s %s -> %s conversions",
|
||||
name, "long long", "long double");
|
||||
printf("%-70s", str);
|
||||
SKIPPED();
|
||||
@ -5188,7 +5192,7 @@ run_int_fp_conv(const char *name)
|
||||
{
|
||||
char str[256]; /*hello string */
|
||||
|
||||
sprintf(str, "Testing %s %s -> %s conversions",
|
||||
HDsnprintf(str, sizeof(str), "Testing %s %s -> %s conversions",
|
||||
name, "unsigned long long", "long double");
|
||||
printf("%-70s", str);
|
||||
SKIPPED();
|
||||
@ -5201,7 +5205,7 @@ run_int_fp_conv(const char *name)
|
||||
{
|
||||
char str[256]; /*string */
|
||||
|
||||
sprintf(str, "Testing %s %s -> %s conversions",
|
||||
HDsnprintf(str, sizeof(str), "Testing %s %s -> %s conversions",
|
||||
name, "all integers", "long double");
|
||||
printf("%-70s", str);
|
||||
SKIPPED();
|
||||
@ -5290,13 +5294,13 @@ run_fp_int_conv(const char *name)
|
||||
{
|
||||
char str[256]; /*hello string */
|
||||
|
||||
sprintf(str, "Testing %s %s -> %s conversions",
|
||||
HDsnprintf(str, sizeof(str), "Testing %s %s -> %s conversions",
|
||||
name, "float", "unsigned long long");
|
||||
printf("%-70s", str);
|
||||
SKIPPED();
|
||||
HDputs(" Test skipped due to hardware conversion error.");
|
||||
|
||||
sprintf(str, "Testing %s %s -> %s conversions",
|
||||
HDsnprintf(str, sizeof(str), "Testing %s %s -> %s conversions",
|
||||
name, "double", "unsigned long long");
|
||||
printf("%-70s", str);
|
||||
SKIPPED();
|
||||
@ -5318,7 +5322,7 @@ run_fp_int_conv(const char *name)
|
||||
{
|
||||
char str[256]; /*string */
|
||||
|
||||
sprintf(str, "Testing %s %s -> %s conversions",
|
||||
HDsnprintf(str, sizeof(str), "Testing %s %s -> %s conversions",
|
||||
name, "long double", "unsigned int");
|
||||
printf("%-70s", str);
|
||||
SKIPPED();
|
||||
@ -5337,7 +5341,7 @@ run_fp_int_conv(const char *name)
|
||||
{
|
||||
char str[256]; /*string */
|
||||
|
||||
sprintf(str, "Testing %s %s -> %s conversions",
|
||||
HDsnprintf(str, sizeof(str), "Testing %s %s -> %s conversions",
|
||||
name, "long double", "(unsigned) long");
|
||||
printf("%-70s", str);
|
||||
SKIPPED();
|
||||
@ -5357,7 +5361,7 @@ run_fp_int_conv(const char *name)
|
||||
{
|
||||
char str[256]; /*string */
|
||||
|
||||
sprintf(str, "Testing %s %s -> %s conversions",
|
||||
HDsnprintf(str, sizeof(str), "Testing %s %s -> %s conversions",
|
||||
name, "long double", "long long");
|
||||
printf("%-70s", str);
|
||||
SKIPPED();
|
||||
@ -5374,7 +5378,7 @@ run_fp_int_conv(const char *name)
|
||||
{
|
||||
char str[256]; /*string */
|
||||
|
||||
sprintf(str, "Testing %s %s -> %s conversions",
|
||||
HDsnprintf(str, sizeof(str), "Testing %s %s -> %s conversions",
|
||||
name, "long double", "unsigned long long");
|
||||
printf("%-70s", str);
|
||||
SKIPPED();
|
||||
@ -5391,7 +5395,7 @@ run_fp_int_conv(const char *name)
|
||||
{
|
||||
char str[256]; /*hello string */
|
||||
|
||||
sprintf(str, "Testing %s %s -> %s conversions",
|
||||
HDsnprintf(str, sizeof(str), "Testing %s %s -> %s conversions",
|
||||
name, "long double", "all integers");
|
||||
printf("%-70s", str);
|
||||
SKIPPED();
|
||||
@ -5412,7 +5416,7 @@ run_fp_int_conv(const char *name)
|
||||
*/
|
||||
char str[256]; /*string */
|
||||
|
||||
sprintf(str, "Testing %s %s -> %s conversions",
|
||||
HDsnprintf(str, sizeof(str), "Testing %s %s -> %s conversions",
|
||||
name, "all floating-point numbers", "all integers");
|
||||
printf("%-70s", str);
|
||||
SKIPPED();
|
||||
|
151
test/h5test.c
151
test/h5test.c
@ -131,63 +131,61 @@ h5_errors(hid_t estack, void UNUSED *client_data)
|
||||
* Programmer: Albert Cheng
|
||||
* May 28, 1998
|
||||
*
|
||||
* Modifications:
|
||||
* Albert Cheng, 2000-09-09
|
||||
* Added the explicite base_name argument to replace the
|
||||
* global variable FILENAME.
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
int
|
||||
h5_cleanup(const char *base_name[], hid_t fapl)
|
||||
{
|
||||
char filename[1024];
|
||||
char temp[2048];
|
||||
int i, j;
|
||||
int retval=0;
|
||||
hid_t driver;
|
||||
int retval = 0;
|
||||
|
||||
if (GetTestCleanup()){
|
||||
for (i = 0; base_name[i]; i++) {
|
||||
if (h5_fixname(base_name[i], fapl, filename, sizeof(filename)) == NULL)
|
||||
continue;
|
||||
if(GetTestCleanup()) {
|
||||
int i;
|
||||
|
||||
for(i = 0; base_name[i]; i++) {
|
||||
char filename[1024];
|
||||
char temp[2048];
|
||||
hid_t driver;
|
||||
|
||||
if(NULL == h5_fixname(base_name[i], fapl, filename, sizeof(filename)))
|
||||
continue;
|
||||
|
||||
driver = H5Pget_driver(fapl);
|
||||
|
||||
if (driver == H5FD_FAMILY) {
|
||||
for (j = 0; /*void*/; j++) {
|
||||
HDsnprintf(temp, sizeof temp, filename, j);
|
||||
if(driver == H5FD_FAMILY) {
|
||||
int j;
|
||||
|
||||
if (HDaccess(temp, F_OK) < 0)
|
||||
for(j = 0; /*void*/; j++) {
|
||||
HDsnprintf(temp, sizeof temp, filename, j);
|
||||
|
||||
if(HDaccess(temp, F_OK) < 0)
|
||||
break;
|
||||
|
||||
HDremove(temp);
|
||||
}
|
||||
} else if (driver == H5FD_CORE) {
|
||||
HDremove(temp);
|
||||
} /* end for */
|
||||
} else if(driver == H5FD_CORE) {
|
||||
hbool_t backing; /* Whether the core file has backing store */
|
||||
|
||||
H5Pget_fapl_core(fapl,NULL,&backing);
|
||||
H5Pget_fapl_core(fapl, NULL, &backing);
|
||||
|
||||
/* If the file was stored to disk with bacing store, remove it */
|
||||
if(backing)
|
||||
HDremove(filename);
|
||||
} else if (driver == H5FD_MULTI) {
|
||||
H5FD_mem_t mt;
|
||||
|
||||
} else if (driver == H5FD_MULTI) {
|
||||
H5FD_mem_t mt;
|
||||
assert(HDstrlen(multi_letters)==H5FD_MEM_NTYPES);
|
||||
HDassert(HDstrlen(multi_letters)==H5FD_MEM_NTYPES);
|
||||
|
||||
for (mt = H5FD_MEM_DEFAULT; mt < H5FD_MEM_NTYPES; H5_INC_ENUM(H5FD_mem_t,mt)) {
|
||||
HDsnprintf(temp, sizeof temp, "%s-%c.h5",
|
||||
filename, multi_letters[mt]);
|
||||
HDremove(temp); /*don't care if it fails*/
|
||||
}
|
||||
} else {
|
||||
HDremove(filename);
|
||||
}
|
||||
}
|
||||
for(mt = H5FD_MEM_DEFAULT; mt < H5FD_MEM_NTYPES; H5_INC_ENUM(H5FD_mem_t,mt)) {
|
||||
HDsnprintf(temp, sizeof temp, "%s-%c.h5", filename, multi_letters[mt]);
|
||||
HDremove(temp); /*don't care if it fails*/
|
||||
} /* end for */
|
||||
} else {
|
||||
HDremove(filename);
|
||||
}
|
||||
} /* end for */
|
||||
|
||||
retval = 1;
|
||||
}
|
||||
retval = 1;
|
||||
} /* end if */
|
||||
|
||||
H5Pclose(fapl);
|
||||
return retval;
|
||||
@ -204,8 +202,6 @@ h5_cleanup(const char *base_name[], hid_t fapl)
|
||||
* Programmer: Robb Matzke
|
||||
* Friday, November 20, 1998
|
||||
*
|
||||
* Modifications:
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
void
|
||||
@ -267,16 +263,6 @@ h5_reset(void)
|
||||
* Programmer: Robb Matzke
|
||||
* Thursday, November 19, 1998
|
||||
*
|
||||
* Modifications:
|
||||
* Robb Matzke, 1999-08-03
|
||||
* Modified to use the virtual file layer.
|
||||
*
|
||||
* Albert Cheng, 2000-01-25
|
||||
* Added prefix for parallel test files.
|
||||
*
|
||||
* Albert Cheng, 2003-05-08
|
||||
* Changed the default parallel prefix back to NULL but added
|
||||
* an explanation remark of $HDF5_PARAPREFIX.
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
char *
|
||||
@ -292,37 +278,36 @@ h5_fixname(const char *base_name, hid_t fapl, char *fullname, size_t size)
|
||||
if (!base_name || !fullname || size < 1)
|
||||
return NULL;
|
||||
|
||||
memset(fullname, 0, size);
|
||||
HDmemset(fullname, 0, size);
|
||||
|
||||
/* figure out the suffix */
|
||||
if (H5P_DEFAULT != fapl) {
|
||||
if ((driver = H5Pget_driver(fapl)) < 0)
|
||||
if(H5P_DEFAULT != fapl) {
|
||||
if((driver = H5Pget_driver(fapl)) < 0)
|
||||
return NULL;
|
||||
|
||||
if (H5FD_FAMILY == driver)
|
||||
suffix = "%05d.h5";
|
||||
else if (H5FD_MULTI == driver)
|
||||
suffix = NULL;
|
||||
if(H5FD_FAMILY == driver)
|
||||
suffix = "%05d.h5";
|
||||
else if (H5FD_MULTI == driver)
|
||||
suffix = NULL;
|
||||
}
|
||||
|
||||
/* Must first check fapl is not H5P_DEFAULT (-1) because H5FD_XXX
|
||||
* could be of value -1 if it is not defined.
|
||||
*/
|
||||
isppdriver = H5P_DEFAULT != fapl &&
|
||||
(H5FD_MPIO==driver || H5FD_MPIPOSIX==driver);
|
||||
isppdriver = H5P_DEFAULT != fapl && (H5FD_MPIO==driver || H5FD_MPIPOSIX==driver);
|
||||
|
||||
/* Check HDF5_NOCLEANUP environment setting.
|
||||
* (The #ifdef is needed to prevent compile failure in case MPI is not
|
||||
* configured.)
|
||||
*/
|
||||
if (isppdriver){
|
||||
if(isppdriver) {
|
||||
#ifdef H5_HAVE_PARALLEL
|
||||
if (getenv_all(MPI_COMM_WORLD, 0, "HDF5_NOCLEANUP"))
|
||||
SetTestNoCleanup();
|
||||
if(getenv_all(MPI_COMM_WORLD, 0, "HDF5_NOCLEANUP"))
|
||||
SetTestNoCleanup();
|
||||
#endif /* H5_HAVE_PARALLEL */
|
||||
}else{
|
||||
if (HDgetenv("HDF5_NOCLEANUP"))
|
||||
SetTestNoCleanup();
|
||||
} else {
|
||||
if(HDgetenv("HDF5_NOCLEANUP"))
|
||||
SetTestNoCleanup();
|
||||
}
|
||||
|
||||
/* Check what prefix to use for test files. Process HDF5_PARAPREFIX and
|
||||
@ -331,7 +316,7 @@ h5_fixname(const char *base_name, hid_t fapl, char *fullname, size_t size)
|
||||
* (The #ifdef is needed to prevent compile failure in case MPI is not
|
||||
* configured.)
|
||||
*/
|
||||
if (isppdriver){
|
||||
if(isppdriver) {
|
||||
#ifdef H5_HAVE_PARALLEL
|
||||
/*
|
||||
* For parallel:
|
||||
@ -340,38 +325,38 @@ h5_fixname(const char *base_name, hid_t fapl, char *fullname, size_t size)
|
||||
*/
|
||||
static int explained = 0;
|
||||
|
||||
prefix = (paraprefix ? paraprefix : getenv_all(MPI_COMM_WORLD, 0, "HDF5_PARAPREFIX"));
|
||||
prefix = (paraprefix ? paraprefix : getenv_all(MPI_COMM_WORLD, 0, "HDF5_PARAPREFIX"));
|
||||
|
||||
if (!prefix && !explained) {
|
||||
/* print hint by process 0 once. */
|
||||
int mpi_rank;
|
||||
if (!prefix && !explained) {
|
||||
/* print hint by process 0 once. */
|
||||
int mpi_rank;
|
||||
|
||||
MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);
|
||||
MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);
|
||||
|
||||
if (mpi_rank == 0)
|
||||
printf("*** Hint ***\n"
|
||||
"You can use environment variable HDF5_PARAPREFIX to "
|
||||
"run parallel test files in a\n"
|
||||
"different directory or to add file type prefix. E.g.,\n"
|
||||
" HDF5_PARAPREFIX=pfs:/PFS/user/me\n"
|
||||
" export HDF5_PARAPREFIX\n"
|
||||
"*** End of Hint ***\n");
|
||||
if (mpi_rank == 0)
|
||||
printf("*** Hint ***\n"
|
||||
"You can use environment variable HDF5_PARAPREFIX to "
|
||||
"run parallel test files in a\n"
|
||||
"different directory or to add file type prefix. E.g.,\n"
|
||||
" HDF5_PARAPREFIX=pfs:/PFS/user/me\n"
|
||||
" export HDF5_PARAPREFIX\n"
|
||||
"*** End of Hint ***\n");
|
||||
|
||||
explained = TRUE;
|
||||
explained = TRUE;
|
||||
#ifdef HDF5_PARAPREFIX
|
||||
prefix = HDF5_PARAPREFIX;
|
||||
#endif /* HDF5_PARAPREFIX */
|
||||
}
|
||||
}
|
||||
#endif /* H5_HAVE_PARALLEL */
|
||||
} else {
|
||||
/*
|
||||
/*
|
||||
* For serial:
|
||||
* First use the environment variable, then try the constant
|
||||
*/
|
||||
prefix = HDgetenv("HDF5_PREFIX");
|
||||
*/
|
||||
prefix = HDgetenv("HDF5_PREFIX");
|
||||
|
||||
#ifdef HDF5_PREFIX
|
||||
if (!prefix)
|
||||
if (!prefix)
|
||||
prefix = HDF5_PREFIX;
|
||||
#endif /* HDF5_PREFIX */
|
||||
}
|
||||
|
@ -863,11 +863,11 @@ static int processStrData(FILE *strm, struct Input *in, hid_t file_id)
|
||||
hid_t handle;
|
||||
hsize_t dims[1];
|
||||
char str[1024];
|
||||
char c;
|
||||
int c;
|
||||
int i = 0;
|
||||
int j;
|
||||
int nlines = 0;
|
||||
int line;
|
||||
hsize_t nlines = 0;
|
||||
hsize_t line;
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* get number of lines in the input file
|
||||
@ -877,9 +877,8 @@ static int processStrData(FILE *strm, struct Input *in, hid_t file_id)
|
||||
while (!HDfeof(strm)) {
|
||||
c = HDfgetc(strm);
|
||||
|
||||
if (c == 10) { /* eol */
|
||||
if (c == 10) /* eol */
|
||||
nlines++;
|
||||
}
|
||||
}
|
||||
|
||||
if (!nlines)
|
||||
@ -944,7 +943,7 @@ static int processStrData(FILE *strm, struct Input *in, hid_t file_id)
|
||||
while (!HDfeof(strm)) {
|
||||
c = HDfgetc(strm);
|
||||
|
||||
str[i] = c;
|
||||
str[i] = (char)c;
|
||||
|
||||
i++;
|
||||
|
||||
@ -1012,7 +1011,7 @@ static int processStrHDFData(FILE *strm, struct Input *in, hid_t file_id)
|
||||
char *str3 = NULL;
|
||||
char str[1024] = "";
|
||||
int j;
|
||||
int line;
|
||||
hsize_t line;
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* read file and generate an HDF5 dataset
|
||||
@ -1079,7 +1078,7 @@ static int processStrHDFData(FILE *strm, struct Input *in, hid_t file_id)
|
||||
str2 = NULL;
|
||||
str3 = NULL;
|
||||
#ifdef H5DEBUGIMPORT
|
||||
printf("processStrHDFData DATATYPE STRING[%d]={%s}\n", line, str1);
|
||||
printf("processStrHDFData DATATYPE STRING[%llu]={%s}\n", (unsigned long long)line, str1);
|
||||
#endif
|
||||
/* process string to remove the first and last quote char */
|
||||
str2 = strchr(str1, '"');
|
||||
@ -1108,7 +1107,7 @@ static int processStrHDFData(FILE *strm, struct Input *in, hid_t file_id)
|
||||
hsize_t count[1] = { 1 };
|
||||
|
||||
#ifdef H5DEBUGIMPORT
|
||||
printf("processStrHDFData DATATYPE STRING[%d] store %s\n", line, str2);
|
||||
printf("processStrHDFData DATATYPE STRING[%llu] store %s\n", (unsigned long long)line, str2);
|
||||
#endif
|
||||
if ((fspace_id = H5Dget_space(dset_id)) < 0)
|
||||
goto out;
|
||||
|
@ -1096,7 +1096,6 @@ hsize_t diff_match(hid_t file1_id, const char *grp1, trav_info_t *info1,
|
||||
char * grp2_path = "";
|
||||
char * obj1_fullpath = NULL;
|
||||
char * obj2_fullpath = NULL;
|
||||
h5trav_type_t objtype;
|
||||
diff_args_t argdata;
|
||||
size_t idx1 = 0;
|
||||
size_t idx2 = 0;
|
||||
@ -1163,7 +1162,6 @@ hsize_t diff_match(hid_t file1_id, const char *grp1, trav_info_t *info1,
|
||||
{
|
||||
if( table->objs[i].flags[0] && table->objs[i].flags[1])
|
||||
{
|
||||
objtype = table->objs[i].type;
|
||||
/* make full path for obj1 */
|
||||
obj1_fullpath = (char*)HDcalloc (HDstrlen(grp1_path) + strlen (table->objs[i].name) + 1, sizeof (char));
|
||||
HDstrcpy(obj1_fullpath, grp1_path);
|
||||
|
@ -21,13 +21,15 @@
|
||||
* local typedefs
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
typedef struct trav_addr_path_t {
|
||||
haddr_t addr;
|
||||
char *path;
|
||||
} trav_addr_path_t;
|
||||
|
||||
typedef struct trav_addr_t {
|
||||
size_t nalloc;
|
||||
size_t nused;
|
||||
struct {
|
||||
haddr_t addr;
|
||||
char *path;
|
||||
} *objs;
|
||||
trav_addr_path_t *objs;
|
||||
} trav_addr_t;
|
||||
|
||||
typedef struct {
|
||||
@ -132,7 +134,7 @@ trav_addr_add(trav_addr_t *visited, haddr_t addr, const char *path)
|
||||
/* Allocate space if necessary */
|
||||
if(visited->nused == visited->nalloc) {
|
||||
visited->nalloc = MAX(1, visited->nalloc * 2);;
|
||||
visited->objs = HDrealloc(visited->objs, visited->nalloc * sizeof(visited->objs[0]));
|
||||
visited->objs = (trav_addr_path_t *)HDrealloc(visited->objs, visited->nalloc * sizeof(trav_addr_path_t));
|
||||
} /* end if */
|
||||
|
||||
/* Append it */
|
||||
@ -194,14 +196,15 @@ traverse_cb(hid_t loc_id, const char *path, const H5L_info_t *linfo,
|
||||
/* Create the full path name for the link */
|
||||
if(udata->is_absolute) {
|
||||
size_t base_len = HDstrlen(udata->base_grp_name);
|
||||
size_t add_slash = base_len ? ((udata->base_grp_name)[base_len-1] != '/') : 1;
|
||||
size_t add_slash = base_len ? ((udata->base_grp_name)[base_len - 1] != '/') : 1;
|
||||
size_t new_name_len = base_len + add_slash + HDstrlen(path) + 1;
|
||||
|
||||
if(NULL == (new_name = (char*)HDmalloc(base_len + add_slash + HDstrlen(path) + 1)))
|
||||
if(NULL == (new_name = (char*)HDmalloc(new_name_len)))
|
||||
return(H5_ITER_ERROR);
|
||||
HDstrcpy(new_name, udata->base_grp_name);
|
||||
if (add_slash)
|
||||
new_name[base_len] = '/';
|
||||
HDstrcpy(new_name + base_len + add_slash, path);
|
||||
if(add_slash)
|
||||
HDsnprintf(new_name, new_name_len, "%s/%s", udata->base_grp_name, path);
|
||||
else
|
||||
HDsnprintf(new_name, new_name_len, "%s%s", udata->base_grp_name, path);
|
||||
full_name = new_name;
|
||||
} /* end if */
|
||||
else
|
||||
@ -216,7 +219,7 @@ traverse_cb(hid_t loc_id, const char *path, const H5L_info_t *linfo,
|
||||
if(new_name)
|
||||
HDfree(new_name);
|
||||
return(H5_ITER_ERROR);
|
||||
}
|
||||
} /* end if */
|
||||
|
||||
/* If the object has multiple links, add it to the list of addresses
|
||||
* already visited, if it isn't there already
|
||||
@ -231,7 +234,7 @@ traverse_cb(hid_t loc_id, const char *path, const H5L_info_t *linfo,
|
||||
if(new_name)
|
||||
HDfree(new_name);
|
||||
return(H5_ITER_ERROR);
|
||||
}
|
||||
} /* end if */
|
||||
} /* end if */
|
||||
else {
|
||||
/* Make 'visit link' callback */
|
||||
@ -240,7 +243,7 @@ traverse_cb(hid_t loc_id, const char *path, const H5L_info_t *linfo,
|
||||
if(new_name)
|
||||
HDfree(new_name);
|
||||
return(H5_ITER_ERROR);
|
||||
}
|
||||
} /* end if */
|
||||
} /* end else */
|
||||
|
||||
if(new_name)
|
||||
@ -730,7 +733,7 @@ trav_table_add(trav_table_t *table,
|
||||
|
||||
if(table->nobjs == table->size) {
|
||||
table->size = MAX(1, table->size * 2);
|
||||
table->objs = (trav_obj_t*)HDrealloc(table->objs, table->size * sizeof(trav_obj_t));
|
||||
table->objs = (trav_obj_t *)HDrealloc(table->objs, table->size * sizeof(trav_obj_t));
|
||||
} /* end if */
|
||||
|
||||
new_obj = table->nobjs++;
|
||||
@ -774,7 +777,7 @@ trav_table_addlink(trav_table_t *table, haddr_t objno, const char *path)
|
||||
/* allocate space if necessary */
|
||||
if(table->objs[i].nlinks == (unsigned)table->objs[i].sizelinks) {
|
||||
table->objs[i].sizelinks = MAX(1, table->objs[i].sizelinks * 2);
|
||||
table->objs[i].links = (trav_link_t*)HDrealloc(table->objs[i].links, table->objs[i].sizelinks * sizeof(trav_link_t));
|
||||
table->objs[i].links = (trav_link_t *)HDrealloc(table->objs[i].links, table->objs[i].sizelinks * sizeof(trav_link_t));
|
||||
} /* end if */
|
||||
|
||||
/* insert it */
|
||||
@ -1168,31 +1171,21 @@ h5trav_visit(hid_t fid, const char *grp_name, hbool_t visit_start,
|
||||
*
|
||||
* Date: September 5, 2008
|
||||
*
|
||||
* Modified:
|
||||
* Jonathan Kim
|
||||
* - Moved from h5ls.c to share among tools. (Sep 16, 2010)
|
||||
* - Renamed from elink_trav_add to symlink_visit_add for both soft and
|
||||
* external links. (May 25, 2010)
|
||||
* - Add type parameter to distingush between soft and external link for
|
||||
* sure, which prevent from mixing up visited link when the target names
|
||||
* are same between the soft and external link, as code marks with the
|
||||
* target name. (May 25,2010)
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
symlink_visit_add(symlink_trav_t *visited, H5L_type_t type, const char *file, const char *path)
|
||||
{
|
||||
size_t idx; /* Index of address to use */
|
||||
void *tmp_ptr;
|
||||
|
||||
/* Allocate space if necessary */
|
||||
if(visited->nused == visited->nalloc)
|
||||
{
|
||||
if(visited->nused == visited->nalloc) {
|
||||
void *tmp_ptr;
|
||||
|
||||
visited->nalloc = MAX(1, visited->nalloc * 2);
|
||||
if(NULL == (tmp_ptr = HDrealloc(visited->objs, visited->nalloc * sizeof(visited->objs[0]))))
|
||||
if(NULL == (tmp_ptr = HDrealloc(visited->objs, visited->nalloc * sizeof(symlink_trav_path_t))))
|
||||
return -1;
|
||||
visited->objs = tmp_ptr;
|
||||
visited->objs = (symlink_trav_path_t *)tmp_ptr;
|
||||
} /* end if */
|
||||
|
||||
/* Append it */
|
||||
@ -1202,22 +1195,19 @@ symlink_visit_add(symlink_trav_t *visited, H5L_type_t type, const char *file, co
|
||||
visited->objs[idx].file = NULL;
|
||||
visited->objs[idx].path = NULL;
|
||||
|
||||
if (type == H5L_TYPE_EXTERNAL)
|
||||
{
|
||||
if(NULL == (visited->objs[idx].file = HDstrdup(file)))
|
||||
{
|
||||
if(type == H5L_TYPE_EXTERNAL) {
|
||||
if(NULL == (visited->objs[idx].file = HDstrdup(file))) {
|
||||
visited->nused--;
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
} /* end if */
|
||||
} /* end if */
|
||||
|
||||
if(NULL == (visited->objs[idx].path = HDstrdup(path)))
|
||||
{
|
||||
if(NULL == (visited->objs[idx].path = HDstrdup(path))) {
|
||||
visited->nused--;
|
||||
if (visited->objs[idx].file)
|
||||
if(visited->objs[idx].file)
|
||||
HDfree (visited->objs[idx].file);
|
||||
return -1;
|
||||
}
|
||||
} /* end if */
|
||||
|
||||
return 0;
|
||||
} /* end symlink_visit_add() */
|
||||
@ -1235,16 +1225,6 @@ symlink_visit_add(symlink_trav_t *visited, H5L_type_t type, const char *file, co
|
||||
*
|
||||
* Date: September 5, 2008
|
||||
*
|
||||
* Modified:
|
||||
* Jonathan Kim
|
||||
* - Moved from h5ls.c to share among tools. (Sep 16, 2010)
|
||||
* - Renamed from elink_trav_visited to symlink_is_visited for both soft and
|
||||
* external links. (May 25, 2010)
|
||||
* - Add type parameter to distingush between soft and external link for
|
||||
* sure, which prevent from mixing up visited link when the target names
|
||||
* are same between the soft and external link, as code marks with the
|
||||
* target name. (May 25,2010)
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
hbool_t
|
||||
@ -1253,21 +1233,19 @@ symlink_is_visited(symlink_trav_t *visited, H5L_type_t type, const char *file, c
|
||||
size_t u; /* Local index variable */
|
||||
|
||||
/* Look for symlink */
|
||||
for(u = 0; u < visited->nused; u++)
|
||||
{
|
||||
for(u = 0; u < visited->nused; u++) {
|
||||
/* Check for symlink values already in array */
|
||||
/* check type and path pair to distingush between symbolic links */
|
||||
if ((visited->objs[u].type == type) && !HDstrcmp(visited->objs[u].path, path))
|
||||
{
|
||||
if((visited->objs[u].type == type) && !HDstrcmp(visited->objs[u].path, path)) {
|
||||
/* if external link, file need to be matched as well */
|
||||
if (visited->objs[u].type == H5L_TYPE_EXTERNAL)
|
||||
{
|
||||
if (!HDstrcmp(visited->objs[u].file, file))
|
||||
return (TRUE);
|
||||
}
|
||||
if(visited->objs[u].type == H5L_TYPE_EXTERNAL)
|
||||
if(!HDstrcmp(visited->objs[u].file, file))
|
||||
return(TRUE);
|
||||
|
||||
return (TRUE);
|
||||
}
|
||||
}
|
||||
} /* end if */
|
||||
} /* end for */
|
||||
|
||||
/* Didn't find symlink */
|
||||
return(FALSE);
|
||||
} /* end symlink_is_visited() */
|
||||
|
@ -51,14 +51,16 @@ typedef enum {
|
||||
/* Struct to keep track of symbolic link targets visited.
|
||||
* Functions: symlink_visit_add() and symlink_is_visited()
|
||||
*/
|
||||
typedef struct symlink_trav_path_t {
|
||||
H5L_type_t type;
|
||||
char *file;
|
||||
char *path;
|
||||
} symlink_trav_path_t;
|
||||
|
||||
typedef struct symlink_trav_t {
|
||||
size_t nalloc;
|
||||
size_t nused;
|
||||
struct {
|
||||
H5L_type_t type;
|
||||
char *file;
|
||||
char *path;
|
||||
} *objs;
|
||||
symlink_trav_path_t *objs;
|
||||
hbool_t dangle_link;
|
||||
} symlink_trav_t;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user