1.10 Merge of tools perform reorg and command line args (#960)
* Merge of tools perform reorg and command line args Also sync tools change with 1.12 * Add missing file
This commit is contained in:
73
MANIFEST
73
MANIFEST
@@ -1116,6 +1116,7 @@
|
||||
./test/cmpd_dtransform.c
|
||||
./test/cork.c
|
||||
./test/corrupt_stab_msg.h5
|
||||
./test/corrupted_name_len.h5
|
||||
./test/cross_read.c
|
||||
./test/dangle.c
|
||||
./test/deflate.h5
|
||||
@@ -1123,13 +1124,15 @@
|
||||
./test/direct_chunk.c
|
||||
./test/dsets.c
|
||||
./test/dt_arith.c
|
||||
./test/dtypes.c
|
||||
./test/dtransform.c
|
||||
./test/dtypes.c
|
||||
./test/earray.c
|
||||
./test/efc.c
|
||||
./test/enc_dec_plist.c
|
||||
./test/enc_dec_plist_cross_platform.c
|
||||
./test/enum.c
|
||||
./test/err_compat.c
|
||||
./test/error_test.c
|
||||
./test/evict_on_close.c
|
||||
./test/extend.c
|
||||
./test/external.c
|
||||
@@ -1137,25 +1140,21 @@
|
||||
./test/external_common.h
|
||||
./test/external_env.c
|
||||
./test/external_fname.h
|
||||
./test/error_test.c
|
||||
./test/err_compat.c
|
||||
./test/filter_error.h5
|
||||
./test/links_env.c
|
||||
./test/family_v16_00000.h5
|
||||
./test/family_v16_00001.h5
|
||||
./test/family_v16_00002.h5
|
||||
./test/family_v16_00003.h5
|
||||
./test/farray.c
|
||||
./test/fheap.c
|
||||
./test/filespace_1_8.h5
|
||||
./test/filespace_1_6.h5
|
||||
./test/freespace.c
|
||||
./test/filenotclosed.c
|
||||
./test/file_image.c
|
||||
./test/file_image_core_test.h5
|
||||
./test/fill_old.h5
|
||||
./test/filenotclosed.c
|
||||
./test/filespace_1_6.h5
|
||||
./test/filespace_1_8.h5
|
||||
./test/fill18.h5
|
||||
./test/fill_old.h5
|
||||
./test/fillval.c
|
||||
./test/filter_error.h5
|
||||
./test/filter_fail.c
|
||||
./test/filter_plugin.c
|
||||
./test/filter_plugin1_dsets.c
|
||||
@@ -1165,13 +1164,12 @@
|
||||
./test/flush1.c
|
||||
./test/flush2.c
|
||||
./test/flushrefresh.c
|
||||
./test/freespace.c
|
||||
./test/fsm_aggr_nopersist.h5
|
||||
./test/fsm_aggr_persist.h5
|
||||
./test/genall5.c
|
||||
./test/genall5.h
|
||||
./test/gen_bad_compound.c
|
||||
./test/gen_bad_offset.c
|
||||
./test/gen_bad_ohdr.c
|
||||
./test/gen_bad_compound.c
|
||||
./test/gen_bogus.c
|
||||
./test/gen_bounds.c
|
||||
./test/gen_cross.c
|
||||
@@ -1195,6 +1193,8 @@
|
||||
./test/gen_sizes_lheap.c
|
||||
./test/gen_specmetaread.c
|
||||
./test/gen_udlinks.c
|
||||
./test/genall5.c
|
||||
./test/genall5.h
|
||||
./test/getname.c
|
||||
./test/gheap.c
|
||||
./test/group_old.h5
|
||||
@@ -1214,7 +1214,7 @@
|
||||
./test/le_extlink2.h5
|
||||
./test/lheap.c
|
||||
./test/links.c
|
||||
./test/corrupted_name_len.h5
|
||||
./test/links_env.c
|
||||
./test/mergemsg.h5
|
||||
./test/mf.c
|
||||
./test/mirror_vfd.c
|
||||
@@ -1225,14 +1225,14 @@
|
||||
./test/noencoder.h5
|
||||
./test/none.h5
|
||||
./test/ntypes.c
|
||||
./test/ohdr.c
|
||||
./test/objcopy.c
|
||||
./test/ohdr.c
|
||||
./test/page_buffer.c
|
||||
./test/paged_nopersist.h5
|
||||
./test/paged_persist.h5
|
||||
./test/pool.c
|
||||
./test/reserved.c
|
||||
./test/ros3.c
|
||||
./test/pool.c
|
||||
./test/s3comms.c
|
||||
./test/set_extent.c
|
||||
# ====distribute this for now. See HDFFV-8236====
|
||||
@@ -1258,29 +1258,29 @@
|
||||
./test/tattr.c
|
||||
./test/tbad_msg_count.h5
|
||||
./test/tbogus.h5
|
||||
./test/tchecksum.c
|
||||
./test/tcheck_version.c
|
||||
./test/tchecksum.c
|
||||
./test/tconfig.c
|
||||
./test/tcoords.c
|
||||
./test/test_filter_plugin.sh.in
|
||||
./test/test_filters_be.h5
|
||||
./test/test_filters_le.h5
|
||||
./test/test_usecases.sh.in
|
||||
./test/testabort_fail.sh.in
|
||||
./test/testcheck_version.sh.in
|
||||
./test/testexternal_env.sh.in
|
||||
./test/testerror.sh.in
|
||||
./test/testlinks_env.sh.in
|
||||
./test/test_filter_plugin.sh.in
|
||||
./test/test_filters_le.h5
|
||||
./test/test_filters_be.h5
|
||||
./test/testexternal_env.sh.in
|
||||
./test/testflushrefresh.sh.in
|
||||
./test/testframe.c
|
||||
./test/testhdf5.c
|
||||
./test/testhdf5.h
|
||||
./test/testlibinfo.sh.in
|
||||
./test/test_mirror.sh.in
|
||||
./test/test_usecases.sh.in
|
||||
./test/testlinks_env.sh.in
|
||||
./test/testmeta.c
|
||||
./test/test_mirror.sh.in
|
||||
./test/testswmr.sh.in
|
||||
./test/testvdsswmr.sh.in
|
||||
./test/testvds_env.sh.in
|
||||
./test/testvdsswmr.sh.in
|
||||
./test/tfile.c
|
||||
./test/tgenprop.c
|
||||
./test/th5o.c
|
||||
@@ -1296,13 +1296,13 @@
|
||||
./test/tmisc.c
|
||||
./test/tmtimen.h5
|
||||
./test/tmtimeo.h5
|
||||
./test/ttime.c
|
||||
./test/trefer.c
|
||||
./test/trefstr.c
|
||||
./test/tselect.c
|
||||
./test/tsizeslheap.h5
|
||||
./test/tskiplist.c
|
||||
./test/tsohm.c
|
||||
./test/ttime.c
|
||||
./test/ttsafe.c
|
||||
./test/ttsafe.h
|
||||
./test/ttsafe_acreate.c
|
||||
@@ -1316,19 +1316,19 @@
|
||||
./test/twriteorder.c
|
||||
./test/unlink.c
|
||||
./test/unregister.c
|
||||
./test/use.h
|
||||
./test/use_append_chunk.c
|
||||
./test/use_append_chunk_mirror.c
|
||||
./test/use_append_mchunks.c
|
||||
./test/use_common.c
|
||||
./test/use_disable_mdc_flushes.c
|
||||
./test/use.h
|
||||
./test/version_bounds_1_10.c
|
||||
./test/vds.c
|
||||
./test/vds_env.c
|
||||
./test/vds_swmr.h
|
||||
./test/vds_swmr_gen.c
|
||||
./test/vds_swmr_reader.c
|
||||
./test/vds_swmr_writer.c
|
||||
./test/version_bounds_1_10.c
|
||||
./test/vfd.c
|
||||
|
||||
./test/testfiles/err_compat_1
|
||||
@@ -2855,6 +2855,15 @@
|
||||
./tools/testfiles/h5mkgrp_single_p.ls
|
||||
./tools/testfiles/h5mkgrp_single_l.ls
|
||||
|
||||
./tools/src/h5perf/Makefile.am
|
||||
./tools/src/h5perf/perf.c
|
||||
./tools/src/h5perf/pio_engine.c
|
||||
./tools/src/h5perf/pio_perf.c
|
||||
./tools/src/h5perf/pio_perf.h
|
||||
./tools/src/h5perf/sio_engine.c
|
||||
./tools/src/h5perf/sio_perf.c
|
||||
./tools/src/h5perf/sio_perf.h
|
||||
|
||||
./tools/test/perform/Makefile.am
|
||||
./tools/test/perform/build_h5perf_alone.sh
|
||||
./tools/test/perform/build_h5perf_serial_alone.sh
|
||||
@@ -2864,16 +2873,9 @@
|
||||
./tools/test/perform/gen_report.pl
|
||||
./tools/test/perform/iopipe.c
|
||||
./tools/test/perform/overhead.c
|
||||
./tools/test/perform/perf.c
|
||||
./tools/test/perform/perf_meta.c
|
||||
./tools/test/perform/pio_engine.c
|
||||
./tools/test/perform/pio_perf.c
|
||||
./tools/test/perform/pio_perf.h
|
||||
./tools/test/perform/pio_standalone.c
|
||||
./tools/test/perform/pio_standalone.h
|
||||
./tools/test/perform/sio_engine.c
|
||||
./tools/test/perform/sio_perf.c
|
||||
./tools/test/perform/sio_perf.h
|
||||
./tools/test/perform/sio_standalone.c
|
||||
./tools/test/perform/sio_standalone.h
|
||||
./tools/test/perform/zip_perf.c
|
||||
@@ -3608,6 +3610,7 @@
|
||||
./tools/test/h5stat/CMakeLists.txt
|
||||
./tools/test/h5stat/CMakeTests.cmake
|
||||
./tools/src/misc/CMakeLists.txt
|
||||
./tools/src/h5perf/CMakeLists.txt
|
||||
./tools/test/misc/CMakeLists.txt
|
||||
./tools/test/misc/CMakeTestsClear.cmake
|
||||
./tools/test/misc/CMakeTestsMkgrp.cmake
|
||||
|
||||
@@ -4087,6 +4087,7 @@ AC_CONFIG_FILES([src/libhdf5.settings
|
||||
tools/test/misc/vds/Makefile
|
||||
tools/test/h5stat/Makefile
|
||||
tools/test/h5stat/testh5stat.sh
|
||||
tools/src/h5perf/Makefile
|
||||
tools/test/perform/Makefile
|
||||
examples/Makefile
|
||||
examples/run-c-ex.sh
|
||||
|
||||
@@ -295,7 +295,7 @@ New Features
|
||||
|
||||
The Doxygen documentation has been updated and passing values larger
|
||||
than UINT32_MAX for size_hint will now produce a normal HDF5 error.
|
||||
|
||||
|
||||
(DER - 2021/04/29, HDFFV-11241)
|
||||
|
||||
|
||||
@@ -408,6 +408,17 @@ New Features
|
||||
|
||||
Tools:
|
||||
------
|
||||
- Refactored the perform tools and removed depends on test library.
|
||||
|
||||
Moved the perf and h5perf tools from tools/test/perform to
|
||||
tools/src/h5perf so that they can be installed. This required
|
||||
that the test library dependency be removed by copying the
|
||||
needed functions from h5test.c.
|
||||
The standalone scripts and other perform tools remain in the
|
||||
tools/test/perform folder.
|
||||
|
||||
(ADB - 2021/08/10)
|
||||
|
||||
- h5repack added help text for user-defined filters.
|
||||
|
||||
Added help text line that states the valid values of the filter flag
|
||||
|
||||
@@ -104,9 +104,9 @@ static hbool_t not_comparable;
|
||||
per = -1; \
|
||||
not_comparable = FALSE; \
|
||||
both_zero = FALSE; \
|
||||
if (H5_DBL_ABS_EQUAL(0, (double)A) && H5_DBL_ABS_EQUAL(0, (double)B)) \
|
||||
if (H5_DBL_ABS_EQUAL(0, (double)(A)) && H5_DBL_ABS_EQUAL(0, (double)(B))) \
|
||||
both_zero = TRUE; \
|
||||
if (!H5_DBL_ABS_EQUAL(0, (double)A)) \
|
||||
if (!H5_DBL_ABS_EQUAL(0, (double)(A))) \
|
||||
per = (double)ABS((double)((B) - (A)) / (double)(A)); \
|
||||
else \
|
||||
not_comparable = TRUE; \
|
||||
@@ -117,9 +117,9 @@ static hbool_t not_comparable;
|
||||
per = -1; \
|
||||
not_comparable = FALSE; \
|
||||
both_zero = FALSE; \
|
||||
if (H5_DBL_ABS_EQUAL(0, (double)A) && H5_DBL_ABS_EQUAL(0, (double)B)) \
|
||||
if (H5_DBL_ABS_EQUAL(0, (double)(A)) && H5_DBL_ABS_EQUAL(0, (double)(B))) \
|
||||
both_zero = TRUE; \
|
||||
if (!H5_DBL_ABS_EQUAL(0, (double)A)) \
|
||||
if (!H5_DBL_ABS_EQUAL(0, (double)(A))) \
|
||||
per = ABS((double)((TYPE)((B) - (A))) / (double)(A)); \
|
||||
else \
|
||||
not_comparable = TRUE; \
|
||||
|
||||
@@ -25,9 +25,9 @@
|
||||
#include <time.h>
|
||||
#endif
|
||||
|
||||
#ifdef H5_HAVE_WIN32_API
|
||||
#ifdef H5_HAVE_WINSOCK2_H
|
||||
#include <winsock2.h>
|
||||
#endif /* H5_HAVE_WINSOCK2_H */
|
||||
#endif
|
||||
|
||||
/* The different types of timers we can have */
|
||||
typedef enum timer_type_ {
|
||||
|
||||
@@ -13,7 +13,7 @@ add_subdirectory (misc)
|
||||
#-- Add the h5import and test executables
|
||||
add_subdirectory (h5import)
|
||||
|
||||
#-- h5Repack executables
|
||||
#-- h5repack executables
|
||||
add_subdirectory (h5repack)
|
||||
|
||||
#-- Add the h5dump and test executables
|
||||
@@ -30,3 +30,6 @@ add_subdirectory (h5dump)
|
||||
|
||||
#-- Add the h5format_convert and test executables
|
||||
add_subdirectory (h5format_convert)
|
||||
|
||||
#-- h5perf executables
|
||||
add_subdirectory (h5perf)
|
||||
|
||||
@@ -23,6 +23,6 @@ CONFIG=ordered
|
||||
|
||||
# All subdirectories
|
||||
SUBDIRS=h5diff h5ls h5dump misc h5import h5repack h5jam h5copy \
|
||||
h5format_convert h5stat
|
||||
h5format_convert h5stat h5perf
|
||||
|
||||
include $(top_srcdir)/config/conclude.am
|
||||
|
||||
@@ -79,124 +79,46 @@ struct handler_t {
|
||||
/* "xxx" "yyy" into "xxxyyy". */
|
||||
static const char * s_opts = "a:b*c:d:ef:g:hik:l:m:n*o*pq:rs:t:uvw:xyz:A*BCD:E*F:G:HM:N:O*RS:VX:";
|
||||
static struct h5_long_options l_opts[] = {{"attribute", require_arg, 'a'},
|
||||
{"attribut", require_arg, 'a'},
|
||||
{"attribu", require_arg, 'a'},
|
||||
{"attrib", require_arg, 'a'},
|
||||
{"attri", require_arg, 'a'},
|
||||
{"attr", require_arg, 'a'},
|
||||
{"att", require_arg, 'a'},
|
||||
{"at", require_arg, 'a'},
|
||||
{"binary", optional_arg, 'b'},
|
||||
{"count", require_arg, 'c'},
|
||||
{"coun", require_arg, 'c'},
|
||||
{"cou", require_arg, 'c'},
|
||||
{"co", require_arg, 'c'},
|
||||
{"dataset", require_arg, 'd'},
|
||||
{"datase", require_arg, 'd'},
|
||||
{"datas", require_arg, 'd'},
|
||||
{"escape", no_arg, 'e'},
|
||||
{"filedriver", require_arg, 'f'},
|
||||
{"filedrive", require_arg, 'f'},
|
||||
{"filedriv", require_arg, 'f'},
|
||||
{"filedri", require_arg, 'f'},
|
||||
{"filedr", require_arg, 'f'},
|
||||
{"filed", require_arg, 'f'},
|
||||
{"file", require_arg, 'f'},
|
||||
{"fil", require_arg, 'f'},
|
||||
{"fi", require_arg, 'f'},
|
||||
{"group", require_arg, 'g'},
|
||||
{"grou", require_arg, 'g'},
|
||||
{"gro", require_arg, 'g'},
|
||||
{"gr", require_arg, 'g'},
|
||||
{"help", no_arg, 'h'},
|
||||
{"hel", no_arg, 'h'},
|
||||
{"object-ids", no_arg, 'i'},
|
||||
{"object-id", no_arg, 'i'},
|
||||
{"object-i", no_arg, 'i'},
|
||||
{"object", no_arg, 'i'},
|
||||
{"objec", no_arg, 'i'},
|
||||
{"obje", no_arg, 'i'},
|
||||
{"obj", no_arg, 'i'},
|
||||
{"ob", no_arg, 'i'},
|
||||
{"block", require_arg, 'k'},
|
||||
{"bloc", require_arg, 'k'},
|
||||
{"blo", require_arg, 'k'},
|
||||
{"bl", require_arg, 'k'},
|
||||
{"soft-link", require_arg, 'l'},
|
||||
{"soft-lin", require_arg, 'l'},
|
||||
{"soft-li", require_arg, 'l'},
|
||||
{"soft-l", require_arg, 'l'},
|
||||
{"soft", require_arg, 'l'},
|
||||
{"sof", require_arg, 'l'},
|
||||
{"format", require_arg, 'm'},
|
||||
{"contents", optional_arg, 'n'},
|
||||
{"output", optional_arg, 'o'},
|
||||
{"outpu", optional_arg, 'o'},
|
||||
{"outp", optional_arg, 'o'},
|
||||
{"out", optional_arg, 'o'},
|
||||
{"ou", optional_arg, 'o'},
|
||||
{"properties", no_arg, 'p'},
|
||||
{"sort_by", require_arg, 'q'},
|
||||
{"string", no_arg, 'r'},
|
||||
{"strin", no_arg, 'r'},
|
||||
{"start", require_arg, 's'},
|
||||
{"star", require_arg, 's'},
|
||||
{"sta", require_arg, 's'},
|
||||
{"datatype", require_arg, 't'},
|
||||
{"datatyp", require_arg, 't'},
|
||||
{"dataty", require_arg, 't'},
|
||||
{"datat", require_arg, 't'},
|
||||
{"use-dtd", no_arg, 'u'},
|
||||
{"use-dt", no_arg, 'u'},
|
||||
{"use-d", no_arg, 'u'},
|
||||
{"use-", no_arg, 'u'},
|
||||
{"use", no_arg, 'u'},
|
||||
{"us", no_arg, 'u'},
|
||||
{"u", no_arg, 'u'},
|
||||
{"vds-view-first-missing", no_arg, 'v'},
|
||||
{"width", require_arg, 'w'},
|
||||
{"widt", require_arg, 'w'},
|
||||
{"wid", require_arg, 'w'},
|
||||
{"wi", require_arg, 'w'},
|
||||
{"xml", no_arg, 'x'},
|
||||
{"xm", no_arg, 'x'},
|
||||
{"noindex", no_arg, 'y'},
|
||||
{"sort_order", require_arg, 'z'},
|
||||
{"onlyattr", optional_arg, 'A'},
|
||||
{"superblock", no_arg, 'B'},
|
||||
{"boot-block", no_arg, 'B'},
|
||||
{"boot-bloc", no_arg, 'B'},
|
||||
{"boot-blo", no_arg, 'B'},
|
||||
{"boot-bl", no_arg, 'B'},
|
||||
{"boot-b", no_arg, 'B'},
|
||||
{"boot", no_arg, 'B'},
|
||||
{"boo", no_arg, 'B'},
|
||||
{"bo", no_arg, 'B'},
|
||||
{"no-compact-subset", no_arg, 'C'},
|
||||
{"xml-dtd", require_arg, 'D'},
|
||||
{"xml-dt", require_arg, 'D'},
|
||||
{"xml-d", require_arg, 'D'},
|
||||
{"enable-error-stack", optional_arg, 'E'},
|
||||
{"form", require_arg, 'F'},
|
||||
{"vds-gap-size", require_arg, 'G'},
|
||||
{"header", no_arg, 'H'},
|
||||
{"heade", no_arg, 'H'},
|
||||
{"head", no_arg, 'H'},
|
||||
{"hea", no_arg, 'H'},
|
||||
{"packed-bits", require_arg, 'M'},
|
||||
{"any_path", require_arg, 'N'},
|
||||
{"ddl", optional_arg, 'O'},
|
||||
{"region", no_arg, 'R'},
|
||||
{"stride", require_arg, 'S'},
|
||||
{"strid", require_arg, 'S'},
|
||||
{"version", no_arg, 'V'},
|
||||
{"versio", no_arg, 'V'},
|
||||
{"versi", no_arg, 'V'},
|
||||
{"vers", no_arg, 'V'},
|
||||
{"ver", no_arg, 'V'},
|
||||
{"ve", no_arg, 'V'},
|
||||
{"xml-ns", require_arg, 'X'},
|
||||
{"xml-n", require_arg, 'X'},
|
||||
{"s3-cred", require_arg, '$'},
|
||||
{"hdfs-attrs", require_arg, '#'},
|
||||
{NULL, 0, '\0'}};
|
||||
|
||||
@@ -39,26 +39,9 @@ static int verbose_g = 0;
|
||||
* parameters.
|
||||
*/
|
||||
static const char * s_opts = "hVvd:n";
|
||||
static struct h5_long_options l_opts[] = {{"help", no_arg, 'h'},
|
||||
{"hel", no_arg, 'h'},
|
||||
{"he", no_arg, 'h'},
|
||||
{"version", no_arg, 'V'},
|
||||
{"version", no_arg, 'V'},
|
||||
{"versio", no_arg, 'V'},
|
||||
{"versi", no_arg, 'V'},
|
||||
{"vers", no_arg, 'V'},
|
||||
{"verbose", no_arg, 'v'},
|
||||
{"verbos", no_arg, 'v'},
|
||||
{"verbo", no_arg, 'v'},
|
||||
{"verb", no_arg, 'v'},
|
||||
{"dname", require_arg, 'd'},
|
||||
{"dnam", require_arg, 'd'},
|
||||
{"dna", require_arg, 'd'},
|
||||
{"dn", require_arg, 'd'},
|
||||
{"noop", no_arg, 'n'},
|
||||
{"noo", no_arg, 'n'},
|
||||
{"no", no_arg, 'n'},
|
||||
{"enable-error-stack", no_arg, 'E'},
|
||||
static struct h5_long_options l_opts[] = {{"help", no_arg, 'h'}, {"version", no_arg, 'V'},
|
||||
{"verbose", no_arg, 'v'}, {"dname", require_arg, 'd'},
|
||||
{"noop", no_arg, 'n'}, {"enable-error-stack", no_arg, 'E'},
|
||||
{NULL, 0, '\0'}};
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
|
||||
@@ -489,7 +489,7 @@ readIntegerData(FILE *strm, struct Input *in)
|
||||
case 0: /* TEXTIN */
|
||||
in08 = (H5DT_INT8 *)in->data;
|
||||
for (i = 0; i < len; i++, in08++) {
|
||||
if (fscanf(strm, "%hd", &temp16) != 1) {
|
||||
if (HDfscanf(strm, "%hd", &temp16) != 1) {
|
||||
(void)HDfprintf(stderr, "%s", err1);
|
||||
return (-1);
|
||||
}
|
||||
@@ -521,7 +521,7 @@ readIntegerData(FILE *strm, struct Input *in)
|
||||
switch (in->inputClass) {
|
||||
case 0: /* TEXTIN */
|
||||
for (i = 0; i < len; i++, in16++) {
|
||||
if (fscanf(strm, "%hd", in16) != 1) {
|
||||
if (HDfscanf(strm, "%hd", in16) != 1) {
|
||||
(void)HDfprintf(stderr, "%s", err1);
|
||||
return (-1);
|
||||
}
|
||||
@@ -558,7 +558,7 @@ readIntegerData(FILE *strm, struct Input *in)
|
||||
switch (in->inputClass) {
|
||||
case 0: /* TEXTIN */
|
||||
for (i = 0; i < len; i++, in32++) {
|
||||
if (fscanf(strm, "%d", in32) != 1) {
|
||||
if (HDfscanf(strm, "%d", in32) != 1) {
|
||||
(void)HDfprintf(stderr, "%s", err1);
|
||||
return (-1);
|
||||
}
|
||||
@@ -595,7 +595,7 @@ readIntegerData(FILE *strm, struct Input *in)
|
||||
switch (in->inputClass) {
|
||||
case 0: /* TEXTIN */
|
||||
for (i = 0; i < len; i++, in64++) {
|
||||
if (fscanf(strm, "%s", buffer) < 1) {
|
||||
if (HDfscanf(strm, "%s", buffer) < 1) {
|
||||
(void)HDfprintf(stderr, "%s", err1);
|
||||
return (-1);
|
||||
}
|
||||
@@ -664,7 +664,7 @@ readUIntegerData(FILE *strm, struct Input *in)
|
||||
case 6: /* TEXTUIN */
|
||||
in08 = (H5DT_UINT8 *)in->data;
|
||||
for (i = 0; i < len; i++, in08++) {
|
||||
if (fscanf(strm, "%hu", &temp16) != 1) {
|
||||
if (HDfscanf(strm, "%hu", &temp16) != 1) {
|
||||
(void)HDfprintf(stderr, "%s", err1);
|
||||
return (-1);
|
||||
}
|
||||
@@ -693,7 +693,7 @@ readUIntegerData(FILE *strm, struct Input *in)
|
||||
switch (in->inputClass) {
|
||||
case 6: /* TEXTUIN */
|
||||
for (i = 0; i < len; i++, in16++) {
|
||||
if (fscanf(strm, "%hu", in16) != 1) {
|
||||
if (HDfscanf(strm, "%hu", in16) != 1) {
|
||||
(void)HDfprintf(stderr, "%s", err1);
|
||||
return (-1);
|
||||
}
|
||||
@@ -729,7 +729,7 @@ readUIntegerData(FILE *strm, struct Input *in)
|
||||
switch (in->inputClass) {
|
||||
case 6: /* TEXTUIN */
|
||||
for (i = 0; i < len; i++, in32++) {
|
||||
if (fscanf(strm, "%u", in32) != 1) {
|
||||
if (HDfscanf(strm, "%u", in32) != 1) {
|
||||
(void)HDfprintf(stderr, "%s", err1);
|
||||
return (-1);
|
||||
}
|
||||
@@ -766,7 +766,7 @@ readUIntegerData(FILE *strm, struct Input *in)
|
||||
switch (in->inputClass) {
|
||||
case 6: /* TEXTUIN */
|
||||
for (i = 0; i < len; i++, in64++) {
|
||||
if (fscanf(strm, "%s", buffer) < 1) {
|
||||
if (HDfscanf(strm, "%s", buffer) < 1) {
|
||||
(void)HDfprintf(stderr, "%s", err1);
|
||||
return (-1);
|
||||
}
|
||||
@@ -832,7 +832,7 @@ readFloatData(FILE *strm, struct Input *in)
|
||||
switch (in->inputClass) {
|
||||
case 1: /* TEXTFP */
|
||||
for (i = 0; i < len; i++, fp32++) {
|
||||
if (fscanf(strm, "%f", fp32) != 1) {
|
||||
if (HDfscanf(strm, "%f", fp32) != 1) {
|
||||
(void)HDfprintf(stderr, "%s", err1);
|
||||
return (-1);
|
||||
}
|
||||
@@ -845,7 +845,7 @@ readFloatData(FILE *strm, struct Input *in)
|
||||
case 2: /*TEXTFPE */
|
||||
|
||||
for (i = 0; i < len; i++, fp32++) {
|
||||
if (fscanf(strm, "%f", fp32) != 1) {
|
||||
if (HDfscanf(strm, "%f", fp32) != 1) {
|
||||
(void)HDfprintf(stderr, "%s", err1);
|
||||
return (-1);
|
||||
}
|
||||
@@ -884,7 +884,7 @@ readFloatData(FILE *strm, struct Input *in)
|
||||
switch (in->inputClass) {
|
||||
case 1: /* TEXTFP */
|
||||
for (i = 0; i < len; i++, fp64++) {
|
||||
if (fscanf(strm, "%lf", fp64) != 1) {
|
||||
if (HDfscanf(strm, "%lf", fp64) != 1) {
|
||||
(void)HDfprintf(stderr, "%s", err1);
|
||||
return (-1);
|
||||
}
|
||||
@@ -897,7 +897,7 @@ readFloatData(FILE *strm, struct Input *in)
|
||||
case 2: /*TEXTFPE */
|
||||
|
||||
for (i = 0; i < len; i++, fp64++) {
|
||||
if (fscanf(strm, "%lf", fp64) != 1) {
|
||||
if (HDfscanf(strm, "%lf", fp64) != 1) {
|
||||
(void)HDfprintf(stderr, "%s", err1);
|
||||
return (-1);
|
||||
}
|
||||
@@ -1469,16 +1469,16 @@ processConfigurationFile(char *infile, struct Input *in)
|
||||
goto error;
|
||||
}
|
||||
|
||||
scanret = fscanf(strm, "%254s", key);
|
||||
scanret = HDfscanf(strm, "%254s", key);
|
||||
if ((scanret == 1) && !HDstrcmp("HDF5", key)) {
|
||||
#ifdef H5DEBUGIMPORT
|
||||
int pndx;
|
||||
HDprintf("\nh5dump file\n");
|
||||
#endif
|
||||
in->h5dumpInput = 1;
|
||||
scanret = fscanf(strm, "%254s", temp); /* filename */
|
||||
scanret = fscanf(strm, "%254s", temp); /* start bracket */
|
||||
scanret = fscanf(strm, "%254s", key); /* DATASET */
|
||||
scanret = HDfscanf(strm, "%254s", temp); /* filename */
|
||||
scanret = HDfscanf(strm, "%254s", temp); /* start bracket */
|
||||
scanret = HDfscanf(strm, "%254s", key); /* DATASET */
|
||||
while (scanret == 1) {
|
||||
if (!HDstrcmp("DATASET", key)) { /* PATH */
|
||||
#ifdef H5DEBUGIMPORT
|
||||
@@ -1488,7 +1488,7 @@ processConfigurationFile(char *infile, struct Input *in)
|
||||
(void)HDfprintf(stderr, err3a, infile);
|
||||
goto error;
|
||||
}
|
||||
if (fscanf(strm, "%254s", temp) != 1) {
|
||||
if (HDfscanf(strm, "%254s", temp) != 1) {
|
||||
(void)HDfprintf(stderr, "%s", err18);
|
||||
goto error;
|
||||
}
|
||||
@@ -1500,7 +1500,7 @@ processConfigurationFile(char *infile, struct Input *in)
|
||||
goto error;
|
||||
}
|
||||
in->configOptionVector[PATH] = 1;
|
||||
scanret = fscanf(strm, "%254s", temp); /* start bracket */
|
||||
scanret = HDfscanf(strm, "%254s", temp); /* start bracket */
|
||||
#ifdef H5DEBUGIMPORT
|
||||
HDprintf("h5dump DATASET %s found\n", temp);
|
||||
#endif
|
||||
@@ -1514,7 +1514,7 @@ processConfigurationFile(char *infile, struct Input *in)
|
||||
goto error;
|
||||
}
|
||||
|
||||
if (fscanf(strm, "%254s", temp) != 1) {
|
||||
if (HDfscanf(strm, "%254s", temp) != 1) {
|
||||
(void)HDfprintf(stderr, "%s", err18);
|
||||
goto error;
|
||||
}
|
||||
@@ -1550,20 +1550,20 @@ processConfigurationFile(char *infile, struct Input *in)
|
||||
#ifdef H5DEBUGIMPORT
|
||||
HDprintf("h5dump DATATYPE STRING found\n");
|
||||
#endif
|
||||
if (fscanf(strm, "%254s", temp) != 1) { /* start bracket */
|
||||
if (HDfscanf(strm, "%254s", temp) != 1) { /* start bracket */
|
||||
(void)HDfprintf(stderr, "%s", err18);
|
||||
goto error;
|
||||
}
|
||||
#ifdef H5DEBUGIMPORT
|
||||
HDprintf("h5dump DATATYPE STRING %s found\n", temp);
|
||||
#endif
|
||||
if (fscanf(strm, "%254s", temp) != 1) { /* string properties */
|
||||
if (HDfscanf(strm, "%254s", temp) != 1) { /* string properties */
|
||||
(void)HDfprintf(stderr, "%s", err18);
|
||||
goto error;
|
||||
}
|
||||
while (get_next_prop) {
|
||||
if (!HDstrcmp("STRSIZE", temp)) { /* STRSIZE */
|
||||
if (fscanf(strm, "%254s", temp) != 1) {
|
||||
if (HDfscanf(strm, "%254s", temp) != 1) {
|
||||
(void)HDfprintf(stderr, "%s", err19);
|
||||
goto error;
|
||||
}
|
||||
@@ -1582,8 +1582,8 @@ processConfigurationFile(char *infile, struct Input *in)
|
||||
#endif
|
||||
}
|
||||
}
|
||||
else if (!HDstrcmp("STRPAD", temp)) { /* STRPAD */
|
||||
if (fscanf(strm, "%254s", temp) != 1) { /* STRPAD type */
|
||||
else if (!HDstrcmp("STRPAD", temp)) { /* STRPAD */
|
||||
if (HDfscanf(strm, "%254s", temp) != 1) { /* STRPAD type */
|
||||
(void)HDfprintf(stderr, "%s", err18);
|
||||
goto error;
|
||||
}
|
||||
@@ -1591,8 +1591,8 @@ processConfigurationFile(char *infile, struct Input *in)
|
||||
HDprintf("h5dump DATATYPE STRING STRPAD %s found\n", temp);
|
||||
#endif
|
||||
}
|
||||
else if (!HDstrcmp("CSET", key)) { /* CSET */
|
||||
if (fscanf(strm, "%254s", temp) != 1) { /* CSET type */
|
||||
else if (!HDstrcmp("CSET", key)) { /* CSET */
|
||||
if (HDfscanf(strm, "%254s", temp) != 1) { /* CSET type */
|
||||
(void)HDfprintf(stderr, "%s", err18);
|
||||
goto error;
|
||||
}
|
||||
@@ -1600,8 +1600,8 @@ processConfigurationFile(char *infile, struct Input *in)
|
||||
HDprintf("h5dump DATATYPE STRING CSET %s found\n", temp);
|
||||
#endif
|
||||
}
|
||||
else if (!HDstrcmp("CTYPE", temp)) { /* CTYPE */
|
||||
if (fscanf(strm, "%254s", temp) != 1) { /* CTYPE type */
|
||||
else if (!HDstrcmp("CTYPE", temp)) { /* CTYPE */
|
||||
if (HDfscanf(strm, "%254s", temp) != 1) { /* CTYPE type */
|
||||
(void)HDfprintf(stderr, "%s", err18);
|
||||
goto error;
|
||||
}
|
||||
@@ -1609,7 +1609,7 @@ processConfigurationFile(char *infile, struct Input *in)
|
||||
HDprintf("h5dump DATATYPE STRING CTYPE %s found\n", temp);
|
||||
#endif
|
||||
} /* if(!HDstrcmp("CSET", key)) */
|
||||
if (fscanf(strm, "%254s", temp) != 1) {
|
||||
if (HDfscanf(strm, "%254s", temp) != 1) {
|
||||
(void)HDfprintf(stderr, "%s", err18);
|
||||
goto error;
|
||||
}
|
||||
@@ -1628,7 +1628,7 @@ processConfigurationFile(char *infile, struct Input *in)
|
||||
#ifdef H5DEBUGIMPORT
|
||||
HDprintf("h5dump DATASPACE key\n");
|
||||
#endif
|
||||
if (fscanf(strm, "%254s", temp) != 1) {
|
||||
if (HDfscanf(strm, "%254s", temp) != 1) {
|
||||
(void)HDfprintf(stderr, "%s", err18);
|
||||
goto error;
|
||||
}
|
||||
@@ -1644,14 +1644,14 @@ processConfigurationFile(char *infile, struct Input *in)
|
||||
#ifdef H5DEBUGIMPORT
|
||||
HDprintf("h5dump DATASPACE SIMPLE found\n");
|
||||
#endif
|
||||
if (fscanf(strm, "%254s", temp) != 1) { /* start bracket */
|
||||
if (HDfscanf(strm, "%254s", temp) != 1) { /* start bracket */
|
||||
(void)HDfprintf(stderr, err6b, infile);
|
||||
goto error;
|
||||
}
|
||||
#ifdef H5DEBUGIMPORT
|
||||
HDprintf("h5dump DATASPACE SIMPLE %s found\n", temp);
|
||||
#endif
|
||||
if (fscanf(strm, "%254s", temp) != 1) { /* start paren */
|
||||
if (HDfscanf(strm, "%254s", temp) != 1) { /* start paren */
|
||||
(void)HDfprintf(stderr, err6b, infile);
|
||||
goto error;
|
||||
}
|
||||
@@ -1662,7 +1662,7 @@ processConfigurationFile(char *infile, struct Input *in)
|
||||
int get_next_dim = 1;
|
||||
int i = 0;
|
||||
|
||||
if (fscanf(strm, "%254s", temp) != 1) { /* Dimension with optional comma */
|
||||
if (HDfscanf(strm, "%254s", temp) != 1) { /* Dimension with optional comma */
|
||||
(void)HDfprintf(stderr, err16c, infile);
|
||||
goto error;
|
||||
}
|
||||
@@ -1672,7 +1672,7 @@ processConfigurationFile(char *infile, struct Input *in)
|
||||
while (get_next_dim) {
|
||||
char *more = temp;
|
||||
temp_dims[icount] = HDstrtoull(more, &more, 10);
|
||||
if (fscanf(strm, "%254s", temp) != 1) { /* Dimension or end paren */
|
||||
if (HDfscanf(strm, "%254s", temp) != 1) { /* Dimension or end paren */
|
||||
(void)HDfprintf(stderr, err6b, infile);
|
||||
goto error;
|
||||
}
|
||||
@@ -1716,7 +1716,7 @@ processConfigurationFile(char *infile, struct Input *in)
|
||||
(void)HDfprintf(stderr, err5b, infile);
|
||||
goto error;
|
||||
}
|
||||
if (fscanf(strm, "%254s", temp) != 1) {
|
||||
if (HDfscanf(strm, "%254s", temp) != 1) {
|
||||
(void)HDfprintf(stderr, "%s", err18);
|
||||
goto error;
|
||||
}
|
||||
@@ -1728,7 +1728,7 @@ processConfigurationFile(char *infile, struct Input *in)
|
||||
(hsize_t *)HDmalloc((size_t)in->rank * sizeof(hsize_t))) == NULL) {
|
||||
goto error;
|
||||
}
|
||||
if (fscanf(strm, "%254s", temp) != 1) { /* start paren */
|
||||
if (HDfscanf(strm, "%254s", temp) != 1) { /* start paren */
|
||||
(void)HDfprintf(stderr, err6b, infile);
|
||||
goto error;
|
||||
}
|
||||
@@ -1742,7 +1742,7 @@ processConfigurationFile(char *infile, struct Input *in)
|
||||
#ifdef H5DEBUGIMPORT
|
||||
HDprintf("h5dump DATASPACE SIMPLE process max dim values\n");
|
||||
#endif
|
||||
if (fscanf(strm, "%254s", temp) != 1) { /* max dim with optional comma */
|
||||
if (HDfscanf(strm, "%254s", temp) != 1) { /* max dim with optional comma */
|
||||
(void)HDfprintf(stderr, err16c, infile);
|
||||
goto error;
|
||||
}
|
||||
@@ -1762,7 +1762,7 @@ processConfigurationFile(char *infile, struct Input *in)
|
||||
char *more = temp;
|
||||
in->maxsizeOfDimension[i] = HDstrtoull(more, &more, 10);
|
||||
}
|
||||
if (fscanf(strm, "%254s", temp) != 1) { /* max dim or end paren */
|
||||
if (HDfscanf(strm, "%254s", temp) != 1) { /* max dim or end paren */
|
||||
(void)HDfprintf(stderr, err16c, infile);
|
||||
goto error;
|
||||
}
|
||||
@@ -1793,7 +1793,7 @@ processConfigurationFile(char *infile, struct Input *in)
|
||||
(void)HDfprintf(stderr, err16c, infile);
|
||||
goto error;
|
||||
}
|
||||
scanret = fscanf(strm, "%254s", temp); /* end bracket */
|
||||
scanret = HDfscanf(strm, "%254s", temp); /* end bracket */
|
||||
#ifdef H5DEBUGIMPORT
|
||||
HDprintf("h5dump DATASPACE SIMPLE %s found\n", temp);
|
||||
#endif
|
||||
@@ -1808,14 +1808,14 @@ processConfigurationFile(char *infile, struct Input *in)
|
||||
#ifdef H5DEBUGIMPORT
|
||||
HDprintf("h5dump STORAGE_LAYOUT key\n");
|
||||
#endif
|
||||
if (fscanf(strm, "%254s", temp) != 1) { /* start bracket */
|
||||
if (HDfscanf(strm, "%254s", temp) != 1) { /* start bracket */
|
||||
(void)HDfprintf(stderr, err6b, infile);
|
||||
goto error;
|
||||
}
|
||||
#ifdef H5DEBUGIMPORT
|
||||
HDprintf("h5dump STORAGE_LAYOUT %s found\n", temp);
|
||||
#endif
|
||||
if (fscanf(strm, "%254s", temp) != 1) { /* CHUNKED */
|
||||
if (HDfscanf(strm, "%254s", temp) != 1) { /* CHUNKED */
|
||||
(void)HDfprintf(stderr, err6b, infile);
|
||||
goto error;
|
||||
}
|
||||
@@ -1827,7 +1827,7 @@ processConfigurationFile(char *infile, struct Input *in)
|
||||
(void)HDfprintf(stderr, "Unable to allocate dynamic memory.\n");
|
||||
goto error;
|
||||
}
|
||||
if (fscanf(strm, "%254s", temp) != 1) { /* start paren */
|
||||
if (HDfscanf(strm, "%254s", temp) != 1) { /* start paren */
|
||||
(void)HDfprintf(stderr, err6b, infile);
|
||||
goto error;
|
||||
}
|
||||
@@ -1838,7 +1838,7 @@ processConfigurationFile(char *infile, struct Input *in)
|
||||
int get_next_dim = 1;
|
||||
int icount = 0;
|
||||
|
||||
if (fscanf(strm, "%254s", temp) != 1) { /* Dimension with optional comma */
|
||||
if (HDfscanf(strm, "%254s", temp) != 1) { /* Dimension with optional comma */
|
||||
(void)HDfprintf(stderr, err16c, infile);
|
||||
goto error;
|
||||
}
|
||||
@@ -1848,7 +1848,7 @@ processConfigurationFile(char *infile, struct Input *in)
|
||||
while (get_next_dim) {
|
||||
char *more = temp;
|
||||
in->sizeOfChunk[icount] = HDstrtoull(more, &more, 10);
|
||||
if (fscanf(strm, "%254s", temp) != 1) { /* Dimension or end paren */
|
||||
if (HDfscanf(strm, "%254s", temp) != 1) { /* Dimension or end paren */
|
||||
(void)HDfprintf(stderr, err6b, infile);
|
||||
goto error;
|
||||
}
|
||||
@@ -1880,7 +1880,7 @@ processConfigurationFile(char *infile, struct Input *in)
|
||||
(void)HDfprintf(stderr, err5b, infile);
|
||||
goto error;
|
||||
}
|
||||
if (fscanf(strm, "%254s", temp) != 1) { /* SIZE */
|
||||
if (HDfscanf(strm, "%254s", temp) != 1) { /* SIZE */
|
||||
(void)HDfprintf(stderr, err6b, infile);
|
||||
goto error;
|
||||
}
|
||||
@@ -1888,7 +1888,7 @@ processConfigurationFile(char *infile, struct Input *in)
|
||||
HDprintf("h5dump STORAGE_LAYOUT CHUNKED %s found\n", temp);
|
||||
#endif
|
||||
if (!HDstrcmp("SIZE", temp)) { /* SIZE */
|
||||
if (fscanf(strm, "%d", (&ival)) != 1) {
|
||||
if (HDfscanf(strm, "%d", (&ival)) != 1) {
|
||||
(void)HDfprintf(stderr, "%s", err19);
|
||||
goto error;
|
||||
}
|
||||
@@ -1897,7 +1897,7 @@ processConfigurationFile(char *infile, struct Input *in)
|
||||
#endif
|
||||
}
|
||||
while (HDstrcmp("}", temp) != 0) {
|
||||
if (fscanf(strm, "%254s", temp) != 1) { /* end bracket */
|
||||
if (HDfscanf(strm, "%254s", temp) != 1) { /* end bracket */
|
||||
(void)HDfprintf(stderr, "%s", err18);
|
||||
goto error;
|
||||
}
|
||||
@@ -1912,14 +1912,14 @@ processConfigurationFile(char *infile, struct Input *in)
|
||||
#ifdef H5DEBUGIMPORT
|
||||
HDprintf("h5dump FILTERS key\n");
|
||||
#endif
|
||||
if (fscanf(strm, "%254s", temp) != 1) { /* start bracket */
|
||||
if (HDfscanf(strm, "%254s", temp) != 1) { /* start bracket */
|
||||
(void)HDfprintf(stderr, err6b, infile);
|
||||
goto error;
|
||||
}
|
||||
#ifdef H5DEBUGIMPORT
|
||||
HDprintf("h5dump FILTERS %s found\n", temp);
|
||||
#endif
|
||||
if (fscanf(strm, "%254s", temp) != 1) {
|
||||
if (HDfscanf(strm, "%254s", temp) != 1) {
|
||||
(void)HDfprintf(stderr, err6b, infile);
|
||||
goto error;
|
||||
}
|
||||
@@ -1930,28 +1930,28 @@ processConfigurationFile(char *infile, struct Input *in)
|
||||
#ifdef H5DEBUGIMPORT
|
||||
HDprintf("h5dump FILTERS COMPRESSION found\n");
|
||||
#endif
|
||||
if (fscanf(strm, "%254s", temp) != 1) { /* DEFLATE */
|
||||
if (HDfscanf(strm, "%254s", temp) != 1) { /* DEFLATE */
|
||||
(void)HDfprintf(stderr, "%s", err18);
|
||||
goto error;
|
||||
}
|
||||
#ifdef H5DEBUGIMPORT
|
||||
HDprintf("h5dump FILTERS COMPRESSION %s found\n", temp);
|
||||
#endif
|
||||
if (fscanf(strm, "%254s", temp) != 1) { /* bgin bracket */
|
||||
if (HDfscanf(strm, "%254s", temp) != 1) { /* bgin bracket */
|
||||
(void)HDfprintf(stderr, "%s", err18);
|
||||
goto error;
|
||||
}
|
||||
#ifdef H5DEBUGIMPORT
|
||||
HDprintf("h5dump FILTERS COMPRESSION %s found\n", temp);
|
||||
#endif
|
||||
if (fscanf(strm, "%254s", temp) != 1) { /* LEVEL */
|
||||
if (HDfscanf(strm, "%254s", temp) != 1) { /* LEVEL */
|
||||
(void)HDfprintf(stderr, "%s", err18);
|
||||
goto error;
|
||||
}
|
||||
#ifdef H5DEBUGIMPORT
|
||||
HDprintf("h5dump FILTERS COMPRESSION %s found\n", temp);
|
||||
#endif
|
||||
if (fscanf(strm, "%d", (&ival)) != 1) {
|
||||
if (HDfscanf(strm, "%d", (&ival)) != 1) {
|
||||
(void)HDfprintf(stderr, "%s", err19);
|
||||
goto error;
|
||||
}
|
||||
@@ -1959,7 +1959,7 @@ processConfigurationFile(char *infile, struct Input *in)
|
||||
HDprintf("h5dump FILTERS COMPRESSION LEVEL %d found\n", ival);
|
||||
#endif
|
||||
in->compressionParam = ival;
|
||||
if (fscanf(strm, "%254s", temp) != 1) { /* end bracket */
|
||||
if (HDfscanf(strm, "%254s", temp) != 1) { /* end bracket */
|
||||
(void)HDfprintf(stderr, "%s", err18);
|
||||
goto error;
|
||||
}
|
||||
@@ -1981,7 +1981,7 @@ processConfigurationFile(char *infile, struct Input *in)
|
||||
#endif
|
||||
in->configOptionVector[COMPRESS] = 0;
|
||||
}
|
||||
if (fscanf(strm, "%254s", temp) != 1) { /* end bracket */
|
||||
if (HDfscanf(strm, "%254s", temp) != 1) { /* end bracket */
|
||||
(void)HDfprintf(stderr, "%s", err18);
|
||||
goto error;
|
||||
}
|
||||
@@ -1995,14 +1995,14 @@ processConfigurationFile(char *infile, struct Input *in)
|
||||
#ifdef H5DEBUGIMPORT
|
||||
HDprintf("h5dump SUBSET key\n");
|
||||
#endif
|
||||
if (fscanf(strm, "%254s", temp) != 1) { /* start bracket */
|
||||
if (HDfscanf(strm, "%254s", temp) != 1) { /* start bracket */
|
||||
(void)HDfprintf(stderr, err20, infile);
|
||||
goto error;
|
||||
}
|
||||
#ifdef H5DEBUGIMPORT
|
||||
HDprintf("h5dump SUBSET %s found\n", temp);
|
||||
#endif
|
||||
if (fscanf(strm, "%254s", temp) != 1) { /* SUBSET keyword */
|
||||
if (HDfscanf(strm, "%254s", temp) != 1) { /* SUBSET keyword */
|
||||
(void)HDfprintf(stderr, "%s", err18);
|
||||
goto error;
|
||||
}
|
||||
@@ -2012,7 +2012,7 @@ processConfigurationFile(char *infile, struct Input *in)
|
||||
while (get_next_prop) {
|
||||
if (!HDstrcmp("COUNT", temp)) { /* COUNT */
|
||||
int icount = 0;
|
||||
if (fscanf(strm, "%254s", temp) != 1) { /* start paren */
|
||||
if (HDfscanf(strm, "%254s", temp) != 1) { /* start paren */
|
||||
(void)HDfprintf(stderr, err6b, infile);
|
||||
goto error;
|
||||
}
|
||||
@@ -2023,7 +2023,7 @@ processConfigurationFile(char *infile, struct Input *in)
|
||||
int get_next_dim = 1;
|
||||
int i = 0;
|
||||
|
||||
if (fscanf(strm, "%254s", temp) != 1) { /* Dimension with optional comma */
|
||||
if (HDfscanf(strm, "%254s", temp) != 1) { /* Dimension with optional comma */
|
||||
(void)HDfprintf(stderr, err16c, infile);
|
||||
goto error;
|
||||
}
|
||||
@@ -2033,7 +2033,7 @@ processConfigurationFile(char *infile, struct Input *in)
|
||||
while (get_next_dim) {
|
||||
char *more = temp;
|
||||
temp_dims[icount] = HDstrtoull(more, &more, 10);
|
||||
if (fscanf(strm, "%254s", temp) != 1) { /* Dimension or end paren */
|
||||
if (HDfscanf(strm, "%254s", temp) != 1) { /* Dimension or end paren */
|
||||
(void)HDfprintf(stderr, err6b, infile);
|
||||
goto error;
|
||||
}
|
||||
@@ -2068,7 +2068,7 @@ processConfigurationFile(char *infile, struct Input *in)
|
||||
} /* if(!HDstrcmp("COUNT", temp)) COUNT */
|
||||
if (!HDstrcmp("BLOCK", temp)) { /* BLOCK */
|
||||
int icount = 0;
|
||||
if (fscanf(strm, "%254s", temp) != 1) { /* start paren */
|
||||
if (HDfscanf(strm, "%254s", temp) != 1) { /* start paren */
|
||||
(void)HDfprintf(stderr, err6b, infile);
|
||||
goto error;
|
||||
}
|
||||
@@ -2079,7 +2079,7 @@ processConfigurationFile(char *infile, struct Input *in)
|
||||
int get_next_dim = 1;
|
||||
int i = 0;
|
||||
|
||||
if (fscanf(strm, "%254s", temp) != 1) { /* Dimension with optional comma */
|
||||
if (HDfscanf(strm, "%254s", temp) != 1) { /* Dimension with optional comma */
|
||||
(void)HDfprintf(stderr, err16c, infile);
|
||||
goto error;
|
||||
}
|
||||
@@ -2089,7 +2089,7 @@ processConfigurationFile(char *infile, struct Input *in)
|
||||
while (get_next_dim) {
|
||||
char *more = temp;
|
||||
temp_dims[icount] = HDstrtoull(more, &more, 10);
|
||||
if (fscanf(strm, "%254s", temp) != 1) { /* Dimension or end paren */
|
||||
if (HDfscanf(strm, "%254s", temp) != 1) { /* Dimension or end paren */
|
||||
(void)HDfprintf(stderr, err6b, infile);
|
||||
goto error;
|
||||
}
|
||||
@@ -2122,7 +2122,7 @@ processConfigurationFile(char *infile, struct Input *in)
|
||||
in->configOptionVector[DIM] = 1;
|
||||
} /* if(!HDstrcmp("(", key)) start paren */
|
||||
} /* if(!HDstrcmp("BLOCK", temp)) BLOCK */
|
||||
if (fscanf(strm, "%254s", temp) != 1) {
|
||||
if (HDfscanf(strm, "%254s", temp) != 1) {
|
||||
(void)HDfprintf(stderr, "%s", err18);
|
||||
goto error;
|
||||
}
|
||||
@@ -2141,7 +2141,7 @@ processConfigurationFile(char *infile, struct Input *in)
|
||||
scanret = 0;
|
||||
break;
|
||||
}
|
||||
scanret = fscanf(strm, "%254s", key);
|
||||
scanret = HDfscanf(strm, "%254s", key);
|
||||
}
|
||||
#ifdef H5DEBUGIMPORT
|
||||
HDprintf("h5dump path");
|
||||
@@ -2182,7 +2182,7 @@ processConfigurationFile(char *infile, struct Input *in)
|
||||
(void)HDfprintf(stderr, err3a, infile);
|
||||
goto error;
|
||||
}
|
||||
if (fscanf(strm, "%254s", temp) != 1) {
|
||||
if (HDfscanf(strm, "%254s", temp) != 1) {
|
||||
(void)HDfprintf(stderr, "%s", err18);
|
||||
goto error;
|
||||
}
|
||||
@@ -2199,7 +2199,7 @@ processConfigurationFile(char *infile, struct Input *in)
|
||||
goto error;
|
||||
}
|
||||
|
||||
if (fscanf(strm, "%254s", temp) != 1) {
|
||||
if (HDfscanf(strm, "%254s", temp) != 1) {
|
||||
(void)HDfprintf(stderr, "%s", err18);
|
||||
goto error;
|
||||
}
|
||||
@@ -2226,7 +2226,7 @@ processConfigurationFile(char *infile, struct Input *in)
|
||||
(void)HDfprintf(stderr, err5a, infile);
|
||||
goto error;
|
||||
}
|
||||
if (fscanf(strm, "%254d", (&ival)) != 1) {
|
||||
if (HDfscanf(strm, "%254d", (&ival)) != 1) {
|
||||
(void)HDfprintf(stderr, "%s", err19);
|
||||
goto error;
|
||||
}
|
||||
@@ -2423,7 +2423,7 @@ processConfigurationFile(char *infile, struct Input *in)
|
||||
default:
|
||||
break;
|
||||
}
|
||||
scanret = fscanf(strm, "%254s", key);
|
||||
scanret = HDfscanf(strm, "%254s", key);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -2602,7 +2602,7 @@ getOutputClass(struct Input *in, FILE *strm)
|
||||
const char *err1 = "Unable to get 'string' value.\n";
|
||||
const char *err2 = "Invalid value for output class.\n";
|
||||
|
||||
if (fscanf(strm, "%254s", temp) != 1) {
|
||||
if (HDfscanf(strm, "%254s", temp) != 1) {
|
||||
(void)HDfprintf(stderr, "%s", err1);
|
||||
return (-1);
|
||||
}
|
||||
@@ -2637,7 +2637,7 @@ getOutputSize(struct Input *in, FILE *strm)
|
||||
const char *err1 = "Unable to get integer value.\n";
|
||||
const char *err2 = "Invalid value for output size.\n";
|
||||
|
||||
if (fscanf(strm, "%d", (&ival)) != 1) {
|
||||
if (HDfscanf(strm, "%d", (&ival)) != 1) {
|
||||
(void)HDfprintf(stderr, "%s", err1);
|
||||
return (-1);
|
||||
}
|
||||
@@ -3502,7 +3502,7 @@ getInputByteOrder(struct Input *in, FILE *strm)
|
||||
const char *err1 = "Unable to get 'string' value.\n";
|
||||
const char *err2 = "Invalid value for input byte-order.\n";
|
||||
|
||||
if (fscanf(strm, "%254s", temp) != 1) {
|
||||
if (HDfscanf(strm, "%254s", temp) != 1) {
|
||||
(void)HDfprintf(stderr, "%s", err1);
|
||||
return (-1);
|
||||
}
|
||||
@@ -3524,7 +3524,7 @@ getRank(struct Input *in, FILE *strm)
|
||||
const char *err1 = "Unable to get integer value.\n";
|
||||
const char *err2 = "Invalid value for rank.\n";
|
||||
|
||||
if (fscanf(strm, "%d", (&ival)) != 1) {
|
||||
if (HDfscanf(strm, "%d", (&ival)) != 1) {
|
||||
(void)HDfprintf(stderr, "%s", err1);
|
||||
return (-1);
|
||||
}
|
||||
@@ -3553,7 +3553,7 @@ getDimensionSizes(struct Input *in, FILE *strm)
|
||||
return (-1);
|
||||
}
|
||||
|
||||
while (fscanf(strm, "%llu", (&ullval)) == 1)
|
||||
while (HDfscanf(strm, "%llu", (&ullval)) == 1)
|
||||
in->sizeOfDimension[i++] = ullval;
|
||||
|
||||
if (in->rank != i) {
|
||||
@@ -3579,7 +3579,7 @@ getChunkedDimensionSizes(struct Input *in, FILE *strm)
|
||||
return (-1);
|
||||
}
|
||||
|
||||
while (fscanf(strm, "%llu", (&ullval)) == 1)
|
||||
while (HDfscanf(strm, "%llu", (&ullval)) == 1)
|
||||
in->sizeOfChunk[i++] = ullval;
|
||||
|
||||
if (in->rank != i) {
|
||||
@@ -3612,7 +3612,7 @@ getMaximumDimensionSizes(struct Input *in, FILE *strm)
|
||||
return (-1);
|
||||
}
|
||||
|
||||
while (fscanf(strm, "%lld", (&llval)) == 1) {
|
||||
while (HDfscanf(strm, "%lld", (&llval)) == 1) {
|
||||
if (llval == -1)
|
||||
in->maxsizeOfDimension[i++] = H5S_UNLIMITED;
|
||||
else
|
||||
@@ -3642,7 +3642,7 @@ getOutputArchitecture(struct Input *in, FILE *strm)
|
||||
const char *err1 = "Unable to get 'string' value.\n";
|
||||
const char *err2 = "Invalid value for output architecture.\n";
|
||||
|
||||
if (fscanf(strm, "%254s", temp) != 1) {
|
||||
if (HDfscanf(strm, "%254s", temp) != 1) {
|
||||
(void)HDfprintf(stderr, "%s", err1);
|
||||
return (-1);
|
||||
}
|
||||
@@ -3675,7 +3675,7 @@ getOutputByteOrder(struct Input *in, FILE *strm)
|
||||
const char *err1 = "Unable to get 'string' value.\n";
|
||||
const char *err2 = "Invalid value for output byte-order.\n";
|
||||
|
||||
if (fscanf(strm, "%254s", temp) != 1) {
|
||||
if (HDfscanf(strm, "%254s", temp) != 1) {
|
||||
(void)HDfprintf(stderr, "%s", err1);
|
||||
return (-1);
|
||||
}
|
||||
@@ -3708,7 +3708,7 @@ getCompressionType(struct Input *in, FILE *strm)
|
||||
const char *err1 = "Unable to get 'string' value.\n";
|
||||
const char *err2 = "Invalid value for compression.\n";
|
||||
|
||||
if (fscanf(strm, "%254s", temp) != 1) {
|
||||
if (HDfscanf(strm, "%254s", temp) != 1) {
|
||||
(void)HDfprintf(stderr, "%s", err1);
|
||||
return (-1);
|
||||
}
|
||||
@@ -3750,7 +3750,7 @@ getCompressionParameter(struct Input *in, FILE *strm)
|
||||
|
||||
switch (in->compressionType) {
|
||||
case 0: /* GZIP */
|
||||
if (fscanf(strm, "%d", (&ival)) != 1) {
|
||||
if (HDfscanf(strm, "%d", (&ival)) != 1) {
|
||||
(void)HDfprintf(stderr, "%s", err1);
|
||||
return (-1);
|
||||
}
|
||||
@@ -3774,7 +3774,7 @@ getExternalFilename(struct Input *in, FILE *strm)
|
||||
char temp[255];
|
||||
const char *err1 = "Unable to get 'string' value.\n";
|
||||
|
||||
if (fscanf(strm, "%254s", temp) != 1) {
|
||||
if (HDfscanf(strm, "%254s", temp) != 1) {
|
||||
(void)HDfprintf(stderr, "%s", err1);
|
||||
return (-1);
|
||||
}
|
||||
|
||||
@@ -34,14 +34,10 @@ char *ub_file = NULL;
|
||||
* parameters. The long-named ones can be partially spelled. When
|
||||
* adding more, make sure that they don't clash with each other.
|
||||
*/
|
||||
static const char * s_opts = "hi:u:o:c:V"; /* add more later ? */
|
||||
static struct h5_long_options l_opts[] = {
|
||||
{"help", no_arg, 'h'}, {"hel", no_arg, 'h'}, {"i", require_arg, 'i'}, /* input file */
|
||||
{"u", require_arg, 'u'}, /* user block file */
|
||||
{"o", require_arg, 'o'}, /* output file */
|
||||
{"clobber", no_arg, 'c'}, /* clobber existing UB */
|
||||
{"clobbe", no_arg, 'c'}, {"clobb", no_arg, 'c'}, {"clob", no_arg, 'c'},
|
||||
{"clo", no_arg, 'c'}, {"cl", no_arg, 'c'}, {NULL, 0, '\0'}};
|
||||
static const char * s_opts = "hi:u:o:c:V";
|
||||
static struct h5_long_options l_opts[] = {{"help", no_arg, 'h'}, {"i", require_arg, 'i'},
|
||||
{"u", require_arg, 'u'}, {"o", require_arg, 'o'},
|
||||
{"clobber", no_arg, 'c'}, {NULL, 0, '\0'}};
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: usage
|
||||
|
||||
@@ -36,13 +36,9 @@ char *ub_file = NULL;
|
||||
* adding more, make sure that they don't clash with each other.
|
||||
*/
|
||||
static const char * s_opts = "hu:i:o:d:V";
|
||||
static struct h5_long_options l_opts[] = {
|
||||
{"help", no_arg, 'h'}, {"hel", no_arg, 'h'}, {"i", require_arg, 'i'}, /* input file */
|
||||
{"u", require_arg, 'u'}, /* user block file */
|
||||
{"o", require_arg, 'o'}, /* output file */
|
||||
{"delete", no_arg, 'd'}, /* delete ub */
|
||||
{"delet", no_arg, 'd'}, {"dele", no_arg, 'd'}, {"del", no_arg, 'd'},
|
||||
{"de", no_arg, 'd'}, {NULL, 0, '\0'}};
|
||||
static struct h5_long_options l_opts[] = {{"help", no_arg, 'h'}, {"i", require_arg, 'i'},
|
||||
{"u", require_arg, 'u'}, {"o", require_arg, 'o'},
|
||||
{"delete", no_arg, 'd'}, {NULL, 0, '\0'}};
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: usage
|
||||
|
||||
103
tools/src/h5perf/CMakeLists.txt
Normal file
103
tools/src/h5perf/CMakeLists.txt
Normal file
@@ -0,0 +1,103 @@
|
||||
cmake_minimum_required (VERSION 3.12)
|
||||
project (HDF5_TOOLS_SRC_H5PERF C)
|
||||
|
||||
# --------------------------------------------------------------------
|
||||
# Add the executables
|
||||
# --------------------------------------------------------------------
|
||||
#-- Adding test for h5perf_serial
|
||||
set (h5perf_serial_SOURCES
|
||||
${HDF5_TOOLS_SRC_H5PERF_SOURCE_DIR}/sio_perf.c
|
||||
${HDF5_TOOLS_SRC_H5PERF_SOURCE_DIR}/sio_engine.c
|
||||
)
|
||||
add_executable (h5perf_serial ${h5perf_serial_SOURCES})
|
||||
target_include_directories (h5perf_serial PRIVATE "${HDF5_TEST_SRC_DIR};${HDF5_SRC_DIR};${HDF5_SRC_BINARY_DIR};$<$<BOOL:${HDF5_ENABLE_PARALLEL}>:${MPI_C_INCLUDE_DIRS}>")
|
||||
if (NOT ONLY_SHARED_LIBS)
|
||||
TARGET_C_PROPERTIES (h5perf_serial STATIC)
|
||||
target_link_libraries (h5perf_serial PRIVATE ${HDF5_TOOLS_LIB_TARGET} ${HDF5_LIB_TARGET})
|
||||
else ()
|
||||
TARGET_C_PROPERTIES (h5perf_serial SHARED)
|
||||
target_link_libraries (h5perf_serial PRIVATE ${HDF5_TOOLS_LIBSH_TARGET} ${HDF5_LIBSH_TARGET})
|
||||
endif ()
|
||||
set_target_properties (h5perf_serial PROPERTIES FOLDER perform)
|
||||
set_global_variable (HDF5_UTILS_TO_EXPORT "${HDF5_UTILS_TO_EXPORT};h5perf_serial")
|
||||
|
||||
set (H5_DEP_EXECUTABLES h5perf_serial)
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Add Target to clang-format
|
||||
#-----------------------------------------------------------------------------
|
||||
if (HDF5_ENABLE_FORMATTERS)
|
||||
clang_format (HDF5_TOOLS_SRC_H5PERF_h5perf_serial_FORMAT h5perf_serial)
|
||||
endif ()
|
||||
|
||||
if (H5_HAVE_PARALLEL)
|
||||
if (UNIX)
|
||||
#-- Adding test for perf - only on unix systems
|
||||
set (perf_SOURCES
|
||||
${HDF5_TOOLS_SRC_H5PERF_SOURCE_DIR}/perf.c
|
||||
)
|
||||
add_executable (perf ${perf_SOURCES})
|
||||
target_include_directories (perf PRIVATE "${HDF5_TEST_SRC_DIR};${HDF5_SRC_DIR};${HDF5_SRC_BINARY_DIR};$<$<BOOL:${HDF5_ENABLE_PARALLEL}>:${MPI_C_INCLUDE_DIRS}>")
|
||||
if (NOT ONLY_SHARED_LIBS)
|
||||
TARGET_C_PROPERTIES (perf STATIC)
|
||||
target_link_libraries (perf PRIVATE ${HDF5_TOOLS_LIB_TARGET} ${HDF5_LIB_TARGET} "$<$<BOOL:${HDF5_ENABLE_PARALLEL}>:${MPI_C_LIBRARIES}>")
|
||||
else ()
|
||||
TARGET_C_PROPERTIES (perf SHARED)
|
||||
target_link_libraries (perf PRIVATE ${HDF5_TOOLS_LIBSH_TARGET} ${HDF5_LIBSH_TARGET} "$<$<BOOL:${HDF5_ENABLE_PARALLEL}>:${MPI_C_LIBRARIES}>")
|
||||
endif ()
|
||||
set_target_properties (perf PROPERTIES FOLDER perform)
|
||||
set_global_variable (HDF5_UTILS_TO_EXPORT "${HDF5_UTILS_TO_EXPORT};perf")
|
||||
|
||||
set (H5_DEP_EXECUTABLES perf)
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Add Target to clang-format
|
||||
#-----------------------------------------------------------------------------
|
||||
if (HDF5_ENABLE_FORMATTERS)
|
||||
clang_format (HDF5_TOOLS_SRC_H5PERF_perf_FORMAT perf)
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
#-- Adding test for h5perf
|
||||
set (h5perf_SOURCES
|
||||
${HDF5_TOOLS_SRC_H5PERF_SOURCE_DIR}/pio_perf.c
|
||||
${HDF5_TOOLS_SRC_H5PERF_SOURCE_DIR}/pio_engine.c
|
||||
)
|
||||
add_executable (h5perf ${h5perf_SOURCES})
|
||||
target_include_directories (h5perf PRIVATE "${HDF5_SRC_DIR};${HDF5_SRC_BINARY_DIR};$<$<BOOL:${HDF5_ENABLE_PARALLEL}>:${MPI_C_INCLUDE_DIRS}>")
|
||||
if (NOT ONLY_SHARED_LIBS)
|
||||
TARGET_C_PROPERTIES (h5perf STATIC)
|
||||
target_link_libraries (h5perf PRIVATE ${LINK_LIBS} ${HDF5_TOOLS_LIB_TARGET} ${HDF5_LIB_TARGET} "$<$<BOOL:${HDF5_ENABLE_PARALLEL}>:${MPI_C_LIBRARIES}>")
|
||||
else ()
|
||||
TARGET_C_PROPERTIES (h5perf SHARED)
|
||||
target_link_libraries (h5perf PRIVATE ${LINK_LIBS} ${HDF5_TOOLS_LIBSH_TARGET} ${HDF5_LIBSH_TARGET} "$<$<BOOL:${HDF5_ENABLE_PARALLEL}>:${MPI_C_LIBRARIES}>")
|
||||
endif ()
|
||||
set_target_properties (h5perf PROPERTIES FOLDER perform)
|
||||
set_global_variable (HDF5_UTILS_TO_EXPORT "${HDF5_UTILS_TO_EXPORT};h5perf")
|
||||
|
||||
set (H5_DEP_EXECUTABLES h5perf)
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Add Target to clang-format
|
||||
#-----------------------------------------------------------------------------
|
||||
if (HDF5_ENABLE_FORMATTERS)
|
||||
clang_format (HDF5_TOOLS_SRC_H5PERF_h5perf_FORMAT h5perf)
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Rules for Installation of tools using make Install target
|
||||
#-----------------------------------------------------------------------------
|
||||
if (HDF5_EXPORTED_TARGETS)
|
||||
foreach (exec ${H5_DEP_EXECUTABLES})
|
||||
INSTALL_PROGRAM_PDB (${exec} ${HDF5_INSTALL_BIN_DIR} toolsapplications)
|
||||
endforeach ()
|
||||
|
||||
install (
|
||||
TARGETS
|
||||
${H5_DEP_EXECUTABLES}
|
||||
EXPORT
|
||||
${HDF5_EXPORTED_TARGETS}
|
||||
RUNTIME DESTINATION ${HDF5_INSTALL_BIN_DIR} COMPONENT toolsapplications
|
||||
)
|
||||
endif ()
|
||||
63
tools/src/h5perf/Makefile.am
Normal file
63
tools/src/h5perf/Makefile.am
Normal file
@@ -0,0 +1,63 @@
|
||||
#
|
||||
# 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 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.
|
||||
##
|
||||
## Makefile.am
|
||||
## Run automake to generate a Makefile.in from this file.
|
||||
##
|
||||
#
|
||||
# HDF5 Library Performance Makefile(.in)
|
||||
#
|
||||
|
||||
include $(top_srcdir)/config/commence.am
|
||||
|
||||
AM_CPPFLAGS+=-I$(top_srcdir)/src -I$(top_srcdir)/test -I$(top_srcdir)/tools/lib
|
||||
|
||||
# bin_PROGRAMS will be installed.
|
||||
if BUILD_PARALLEL_CONDITIONAL
|
||||
bin_PROGRAMS=h5perf_serial perf h5perf
|
||||
else
|
||||
bin_PROGRAMS=h5perf_serial
|
||||
endif
|
||||
|
||||
# Add h5perf and h5perf_serial specific linker flags here
|
||||
h5perf_LDFLAGS = $(LT_STATIC_EXEC) $(AM_LDFLAGS)
|
||||
h5perf_serial_LDFLAGS = $(LT_STATIC_EXEC) $(AM_LDFLAGS)
|
||||
|
||||
# Some programs are not built or run by default, but can be built by hand or by
|
||||
# specifying --enable-build-all at configure time.
|
||||
# Also, some of these programs should only be built in parallel.
|
||||
# Currently there is no such program.
|
||||
if BUILD_PARALLEL_CONDITIONAL
|
||||
PARA_BUILD_ALL=
|
||||
endif
|
||||
if BUILD_ALL_CONDITIONAL
|
||||
BUILD_ALL_PROGS=$(PARA_BUILD_ALL)
|
||||
endif
|
||||
|
||||
# Define programs that will be run in 'make check'
|
||||
# List them in the order they should be run.
|
||||
# Parallel test programs.
|
||||
if BUILD_PARALLEL_CONDITIONAL
|
||||
TEST_PROG_PARA=h5perf perf
|
||||
endif
|
||||
|
||||
h5perf_SOURCES=pio_perf.c pio_engine.c
|
||||
h5perf_serial_SOURCES=sio_perf.c sio_engine.c
|
||||
|
||||
# All of the programs depend on the main hdf5 library, and some of them
|
||||
# depend on test or tools library.
|
||||
LDADD=$(LIBHDF5)
|
||||
h5perf_LDADD=$(LIBH5TOOLS) $(LIBHDF5)
|
||||
h5perf_serial_LDADD=$(LIBH5TOOLS) $(LIBHDF5)
|
||||
perf_LDADD=$(LIBHDF5)
|
||||
|
||||
include $(top_srcdir)/config/conclude.am
|
||||
@@ -22,19 +22,16 @@
|
||||
|
||||
#include "hdf5.h"
|
||||
#include "H5private.h"
|
||||
#include "h5test.h"
|
||||
|
||||
#ifdef H5_HAVE_PARALLEL
|
||||
|
||||
#ifdef H5_STDC_HEADERS
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#ifdef H5_HAVE_UNISTD_H
|
||||
#include <sys/types.h>
|
||||
#include <unistd.h>
|
||||
#include <time.h>
|
||||
#endif
|
||||
|
||||
#ifdef H5_HAVE_SYS_STAT_H
|
||||
@@ -50,6 +47,14 @@
|
||||
#include <time.h>
|
||||
#endif
|
||||
|
||||
#ifdef H5_HAVE_SYS_TYPES_H
|
||||
#include <sys/types.h>
|
||||
#endif
|
||||
|
||||
#ifdef H5_HAVE_UNISTD_H
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
|
||||
#include <mpi.h>
|
||||
#ifndef MPI_FILE_NULL /*MPIO may be defined in mpi.h already */
|
||||
#include <mpio.h>
|
||||
@@ -109,6 +114,15 @@ static int parse_args(int argc, char **argv);
|
||||
extern char *optarg;
|
||||
#endif
|
||||
|
||||
#ifndef HDF5_PARAPREFIX
|
||||
#define HDF5_PARAPREFIX ""
|
||||
#endif
|
||||
char * paraprefix = NULL; /* for command line option para-prefix */
|
||||
MPI_Info h5_io_info_g = MPI_INFO_NULL; /* MPI INFO object for IO */
|
||||
|
||||
static char *h5_fixname_real(const char *base_name, hid_t fapl, const char *_suffix, char *fullname,
|
||||
size_t size, hbool_t nest_printf, hbool_t subst_for_superblock);
|
||||
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
@@ -136,12 +150,11 @@ main(int argc, char **argv)
|
||||
if (mynod == 0)
|
||||
printf("# Using hdf5-io calls.\n");
|
||||
|
||||
/* kindof a weird hack- if the location of the pvfstab file was
|
||||
* specified on the command line, then spit out this location into
|
||||
* the appropriate environment variable: */
|
||||
|
||||
#if H5_HAVE_SETENV
|
||||
/* no setenv or unsetenv */
|
||||
#ifdef H5_HAVE_UNISTD_H
|
||||
/* Kind of a weird hack- if the location of the pvfstab file was
|
||||
* specified on the command line, then spit out this location into
|
||||
* the appropriate environment variable.
|
||||
*/
|
||||
if (opt_pvfstab_set) {
|
||||
if ((setenv("PVFSTAB_FILE", opt_pvfstab, 1)) < 0) {
|
||||
perror("setenv");
|
||||
@@ -208,7 +221,7 @@ main(int argc, char **argv)
|
||||
}
|
||||
}
|
||||
|
||||
h5_fixname_no_suffix(FILENAME[0], acc_tpl, filename, sizeof filename);
|
||||
h5_fixname_real(FILENAME[0], acc_tpl, NULL, filename, sizeof filename, FALSE, FALSE);
|
||||
|
||||
/* create the parallel file */
|
||||
fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, acc_tpl);
|
||||
@@ -372,9 +385,8 @@ main(int argc, char **argv)
|
||||
|
||||
die_jar_jar_die:
|
||||
|
||||
#if H5_HAVE_SETENV
|
||||
/* no setenv or unsetenv */
|
||||
/* clear the environment variable if it was set earlier */
|
||||
#ifdef H5_HAVE_UNISTD
|
||||
/* Clear the environment variable if it was set earlier */
|
||||
if (opt_pvfstab_set) {
|
||||
unsetenv("PVFSTAB_FILE");
|
||||
}
|
||||
@@ -454,6 +466,323 @@ parse_args(int argc, char **argv)
|
||||
|
||||
return (0);
|
||||
}
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: getenv_all
|
||||
*
|
||||
* Purpose: Used to get the environment that the root MPI task has.
|
||||
* name specifies which environment variable to look for
|
||||
* val is the string to which the value of that environment
|
||||
* variable will be copied.
|
||||
*
|
||||
* NOTE: The pointer returned by this function is only
|
||||
* valid until the next call to getenv_all and the data
|
||||
* stored there must be copied somewhere else before any
|
||||
* further calls to getenv_all take place.
|
||||
*
|
||||
* Return: pointer to a string containing the value of the environment variable
|
||||
* NULL if the varialbe doesn't exist in task 'root's environment.
|
||||
*
|
||||
* Programmer: Leon Arber
|
||||
* 4/4/05
|
||||
*
|
||||
* Modifications:
|
||||
* Use original getenv if MPI is not initialized. This happens
|
||||
* one uses the PHDF5 library to build a serial nature code.
|
||||
* Albert 2006/04/07
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
char *
|
||||
getenv_all(MPI_Comm comm, int root, const char *name)
|
||||
{
|
||||
int mpi_size, mpi_rank, mpi_initialized, mpi_finalized;
|
||||
int len;
|
||||
static char *env = NULL;
|
||||
|
||||
HDassert(name);
|
||||
|
||||
MPI_Initialized(&mpi_initialized);
|
||||
MPI_Finalized(&mpi_finalized);
|
||||
|
||||
if (mpi_initialized && !mpi_finalized) {
|
||||
MPI_Comm_rank(comm, &mpi_rank);
|
||||
MPI_Comm_size(comm, &mpi_size);
|
||||
HDassert(root < mpi_size);
|
||||
|
||||
/* The root task does the getenv call
|
||||
* and sends the result to the other tasks */
|
||||
if (mpi_rank == root) {
|
||||
env = HDgetenv(name);
|
||||
if (env) {
|
||||
len = (int)HDstrlen(env);
|
||||
MPI_Bcast(&len, 1, MPI_INT, root, comm);
|
||||
MPI_Bcast(env, len, MPI_CHAR, root, comm);
|
||||
}
|
||||
else {
|
||||
/* len -1 indicates that the variable was not in the environment */
|
||||
len = -1;
|
||||
MPI_Bcast(&len, 1, MPI_INT, root, comm);
|
||||
}
|
||||
}
|
||||
else {
|
||||
MPI_Bcast(&len, 1, MPI_INT, root, comm);
|
||||
if (len >= 0) {
|
||||
if (env == NULL)
|
||||
env = (char *)HDmalloc((size_t)len + 1);
|
||||
else if (HDstrlen(env) < (size_t)len)
|
||||
env = (char *)HDrealloc(env, (size_t)len + 1);
|
||||
|
||||
MPI_Bcast(env, len, MPI_CHAR, root, comm);
|
||||
env[len] = '\0';
|
||||
}
|
||||
else {
|
||||
if (env)
|
||||
HDfree(env);
|
||||
env = NULL;
|
||||
}
|
||||
}
|
||||
#ifndef NDEBUG
|
||||
MPI_Barrier(comm);
|
||||
#endif
|
||||
}
|
||||
else {
|
||||
/* use original getenv */
|
||||
if (env)
|
||||
HDfree(env);
|
||||
env = HDgetenv(name);
|
||||
} /* end if */
|
||||
|
||||
return env;
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: h5_fixname_real
|
||||
*
|
||||
* Purpose: Create a file name from a file base name like `test' and
|
||||
* return it through the FULLNAME (at most SIZE characters
|
||||
* counting the null terminator). The full name is created by
|
||||
* prepending the contents of HDF5_PREFIX (separated from the
|
||||
* base name by a slash) and appending a file extension based on
|
||||
* the driver supplied, resulting in something like
|
||||
* `ufs:/u/matzke/test.h5'.
|
||||
*
|
||||
* Return: Success: The FULLNAME pointer.
|
||||
*
|
||||
* Failure: NULL if BASENAME or FULLNAME is the null
|
||||
* pointer or if FULLNAME isn't large enough for
|
||||
* the result.
|
||||
*
|
||||
* Programmer: Robb Matzke
|
||||
* Thursday, November 19, 1998
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static char *
|
||||
h5_fixname_real(const char *base_name, hid_t fapl, const char *_suffix, char *fullname, size_t size,
|
||||
hbool_t nest_printf, hbool_t subst_for_superblock)
|
||||
{
|
||||
const char *prefix = NULL;
|
||||
const char *env = NULL; /* HDF5_DRIVER environment variable */
|
||||
char * ptr, last = '\0';
|
||||
const char *suffix = _suffix;
|
||||
size_t i, j;
|
||||
hid_t driver = -1;
|
||||
int isppdriver = 0; /* if the driver is MPI parallel */
|
||||
|
||||
if (!base_name || !fullname || size < 1)
|
||||
return NULL;
|
||||
|
||||
HDmemset(fullname, 0, size);
|
||||
|
||||
/* figure out the suffix */
|
||||
if (H5P_DEFAULT != fapl) {
|
||||
if ((driver = H5Pget_driver(fapl)) < 0)
|
||||
return NULL;
|
||||
|
||||
if (suffix) {
|
||||
if (H5FD_FAMILY == driver) {
|
||||
if (subst_for_superblock)
|
||||
suffix = "00000.h5";
|
||||
else
|
||||
suffix = nest_printf ? "%%05d.h5" : "%05d.h5";
|
||||
}
|
||||
else if (H5FD_MULTI == driver) {
|
||||
|
||||
/* Get the environment variable, if it exists, in case
|
||||
* we are using the split driver since both of those
|
||||
* use the multi VFD under the hood.
|
||||
*/
|
||||
env = HDgetenv("HDF5_DRIVER");
|
||||
#ifdef HDF5_DRIVER
|
||||
/* Use the environment variable, then the compile-time constant */
|
||||
if (!env)
|
||||
env = HDF5_DRIVER;
|
||||
#endif
|
||||
if (env && !HDstrcmp(env, "split")) {
|
||||
/* split VFD */
|
||||
if (subst_for_superblock)
|
||||
suffix = "-m.h5";
|
||||
else
|
||||
suffix = NULL;
|
||||
}
|
||||
else {
|
||||
/* multi VFD */
|
||||
if (subst_for_superblock)
|
||||
suffix = "-s.h5";
|
||||
else
|
||||
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);
|
||||
|
||||
/* Check what prefix to use for test files. Process HDF5_PARAPREFIX and
|
||||
* HDF5_PREFIX.
|
||||
* Use different ones depending on parallel or serial driver used.
|
||||
* (The #ifdef is needed to prevent compile failure in case MPI is not
|
||||
* configured.)
|
||||
*/
|
||||
if (isppdriver) {
|
||||
/*
|
||||
* For parallel:
|
||||
* First use command line option, then the environment
|
||||
* variable, then try the constant
|
||||
*/
|
||||
static int explained = 0;
|
||||
|
||||
prefix = (paraprefix ? paraprefix : getenv_all(MPI_COMM_WORLD, 0, "HDF5_PARAPREFIX"));
|
||||
|
||||
if (!prefix && !explained) {
|
||||
/* print hint by process 0 once. */
|
||||
int mpi_rank;
|
||||
|
||||
MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);
|
||||
|
||||
if (mpi_rank == 0)
|
||||
HDprintf("*** 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;
|
||||
#ifdef HDF5_PARAPREFIX
|
||||
prefix = HDF5_PARAPREFIX;
|
||||
#endif /* HDF5_PARAPREFIX */
|
||||
}
|
||||
}
|
||||
else {
|
||||
/*
|
||||
* For serial:
|
||||
* First use the environment variable, then try the constant
|
||||
*/
|
||||
prefix = HDgetenv("HDF5_PREFIX");
|
||||
|
||||
#ifdef HDF5_PREFIX
|
||||
if (!prefix)
|
||||
prefix = HDF5_PREFIX;
|
||||
#endif /* HDF5_PREFIX */
|
||||
}
|
||||
|
||||
/* Prepend the prefix value to the base name */
|
||||
if (prefix && *prefix) {
|
||||
if (isppdriver) {
|
||||
/* This is a parallel system */
|
||||
char *subdir;
|
||||
|
||||
if (!HDstrcmp(prefix, HDF5_PARAPREFIX)) {
|
||||
/*
|
||||
* If the prefix specifies the HDF5_PARAPREFIX directory, then
|
||||
* default to using the "/tmp/$USER" or "/tmp/$LOGIN"
|
||||
* directory instead.
|
||||
*/
|
||||
char *user, *login;
|
||||
|
||||
user = HDgetenv("USER");
|
||||
login = HDgetenv("LOGIN");
|
||||
subdir = (user ? user : login);
|
||||
|
||||
if (subdir) {
|
||||
for (i = 0; i < size && prefix[i]; i++)
|
||||
fullname[i] = prefix[i];
|
||||
|
||||
fullname[i++] = '/';
|
||||
|
||||
for (j = 0; i < size && subdir[j]; ++i, ++j)
|
||||
fullname[i] = subdir[j];
|
||||
}
|
||||
}
|
||||
|
||||
if (!fullname[0]) {
|
||||
/* We didn't append the prefix yet */
|
||||
HDstrncpy(fullname, prefix, size);
|
||||
fullname[size - 1] = '\0';
|
||||
}
|
||||
|
||||
if (HDstrlen(fullname) + HDstrlen(base_name) + 1 < size) {
|
||||
/*
|
||||
* Append the base_name with a slash first. Multiple
|
||||
* slashes are handled below.
|
||||
*/
|
||||
h5_stat_t buf;
|
||||
|
||||
if (HDstat(fullname, &buf) < 0)
|
||||
/* The directory doesn't exist just yet */
|
||||
if (HDmkdir(fullname, (mode_t)0755) < 0 && errno != EEXIST)
|
||||
/*
|
||||
* We couldn't make the "/tmp/${USER,LOGIN}"
|
||||
* subdirectory. Default to PREFIX's original
|
||||
* prefix value.
|
||||
*/
|
||||
HDstrcpy(fullname, prefix);
|
||||
|
||||
HDstrcat(fullname, "/");
|
||||
HDstrcat(fullname, base_name);
|
||||
}
|
||||
else {
|
||||
/* Buffer is too small */
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (HDsnprintf(fullname, size, "%s/%s", prefix, base_name) == (int)size)
|
||||
/* Buffer is too small */
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
else if (HDstrlen(base_name) >= size) {
|
||||
/* Buffer is too small */
|
||||
return NULL;
|
||||
}
|
||||
else {
|
||||
HDstrcpy(fullname, base_name);
|
||||
}
|
||||
|
||||
/* Append a suffix */
|
||||
if (suffix) {
|
||||
if (HDstrlen(fullname) + HDstrlen(suffix) >= size)
|
||||
return NULL;
|
||||
|
||||
HDstrcat(fullname, suffix);
|
||||
}
|
||||
|
||||
/* Remove any double slashes in the filename */
|
||||
for (ptr = fullname, i = j = 0; ptr && i < size; i++, ptr++) {
|
||||
if (*ptr != '/' || last != '/')
|
||||
fullname[j++] = *ptr;
|
||||
|
||||
last = *ptr;
|
||||
}
|
||||
|
||||
return fullname;
|
||||
}
|
||||
|
||||
/*
|
||||
* Local variables:
|
||||
@@ -16,10 +16,12 @@
|
||||
|
||||
#include "hdf5.h"
|
||||
|
||||
#ifdef H5_STDC_HEADERS
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#endif
|
||||
|
||||
#ifdef H5_HAVE_UNISTD_H
|
||||
#include <sys/types.h>
|
||||
@@ -113,6 +113,12 @@ int pio_debug_level = 0; /* The debug level:
|
||||
/* local variables */
|
||||
static const char *progname = "h5perf";
|
||||
|
||||
#ifndef HDF5_PARAPREFIX
|
||||
#define HDF5_PARAPREFIX ""
|
||||
#endif
|
||||
char * paraprefix = NULL; /* for command line option para-prefix */
|
||||
MPI_Info h5_io_info_g = MPI_INFO_NULL; /* MPI INFO object for IO */
|
||||
|
||||
/*
|
||||
* Command-line options: The user can specify short or long-named
|
||||
* parameters. The long-named ones can be partially spelled. When
|
||||
@@ -124,145 +130,29 @@ static const char *s_opts = "a:A:B:cCd:D:e:F:ghi:Imno:p:P:stT:wx:X:";
|
||||
static const char *s_opts = "a:A:bB:cCd:D:e:F:ghi:Imno:p:P:stT:wx:X:";
|
||||
#endif /* 1 */
|
||||
static struct h5_long_options l_opts[] = {{"align", require_arg, 'a'},
|
||||
{"alig", require_arg, 'a'},
|
||||
{"ali", require_arg, 'a'},
|
||||
{"al", require_arg, 'a'},
|
||||
{"api", require_arg, 'A'},
|
||||
{"ap", require_arg, 'A'},
|
||||
#if 0
|
||||
/* a sighting of the elusive binary option */
|
||||
{ "binary", no_arg, 'b' },
|
||||
{ "binar", no_arg, 'b' },
|
||||
{ "bina", no_arg, 'b' },
|
||||
{ "bin", no_arg, 'b' },
|
||||
{ "bi", no_arg, 'b' },
|
||||
#endif /* 0 */
|
||||
{"block-size", require_arg, 'B'},
|
||||
{"block-siz", require_arg, 'B'},
|
||||
{"block-si", require_arg, 'B'},
|
||||
{"block-s", require_arg, 'B'},
|
||||
{"block-", require_arg, 'B'},
|
||||
{"block", require_arg, 'B'},
|
||||
{"bloc", require_arg, 'B'},
|
||||
{"blo", require_arg, 'B'},
|
||||
{"bl", require_arg, 'B'},
|
||||
{"chunk", no_arg, 'c'},
|
||||
{"chun", no_arg, 'c'},
|
||||
{"chu", no_arg, 'c'},
|
||||
{"ch", no_arg, 'c'},
|
||||
{"collective", no_arg, 'C'},
|
||||
{"collectiv", no_arg, 'C'},
|
||||
{"collecti", no_arg, 'C'},
|
||||
{"collect", no_arg, 'C'},
|
||||
{"collec", no_arg, 'C'},
|
||||
{"colle", no_arg, 'C'},
|
||||
{"coll", no_arg, 'C'},
|
||||
{"col", no_arg, 'C'},
|
||||
{"co", no_arg, 'C'},
|
||||
{"debug", require_arg, 'D'},
|
||||
{"debu", require_arg, 'D'},
|
||||
{"deb", require_arg, 'D'},
|
||||
{"de", require_arg, 'D'},
|
||||
{"geometry", no_arg, 'g'},
|
||||
{"geometr", no_arg, 'g'},
|
||||
{"geomet", no_arg, 'g'},
|
||||
{"geome", no_arg, 'g'},
|
||||
{"geom", no_arg, 'g'},
|
||||
{"geo", no_arg, 'g'},
|
||||
{"ge", no_arg, 'g'},
|
||||
{"help", no_arg, 'h'},
|
||||
{"hel", no_arg, 'h'},
|
||||
{"he", no_arg, 'h'},
|
||||
{"interleaved", require_arg, 'I'},
|
||||
{"interleave", require_arg, 'I'},
|
||||
{"interleav", require_arg, 'I'},
|
||||
{"interlea", require_arg, 'I'},
|
||||
{"interle", require_arg, 'I'},
|
||||
{"interl", require_arg, 'I'},
|
||||
{"inter", require_arg, 'I'},
|
||||
{"inte", require_arg, 'I'},
|
||||
{"int", require_arg, 'I'},
|
||||
{"in", require_arg, 'I'},
|
||||
{"max-num-processes", require_arg, 'P'},
|
||||
{"max-num-processe", require_arg, 'P'},
|
||||
{"max-num-process", require_arg, 'P'},
|
||||
{"max-num-proces", require_arg, 'P'},
|
||||
{"max-num-proce", require_arg, 'P'},
|
||||
{"max-num-proc", require_arg, 'P'},
|
||||
{"max-num-pro", require_arg, 'P'},
|
||||
{"max-num-pr", require_arg, 'P'},
|
||||
{"max-num-p", require_arg, 'P'},
|
||||
{"min-num-processes", require_arg, 'p'},
|
||||
{"min-num-processe", require_arg, 'p'},
|
||||
{"min-num-process", require_arg, 'p'},
|
||||
{"min-num-proces", require_arg, 'p'},
|
||||
{"min-num-proce", require_arg, 'p'},
|
||||
{"min-num-proc", require_arg, 'p'},
|
||||
{"min-num-pro", require_arg, 'p'},
|
||||
{"min-num-pr", require_arg, 'p'},
|
||||
{"min-num-p", require_arg, 'p'},
|
||||
{"max-xfer-size", require_arg, 'X'},
|
||||
{"max-xfer-siz", require_arg, 'X'},
|
||||
{"max-xfer-si", require_arg, 'X'},
|
||||
{"max-xfer-s", require_arg, 'X'},
|
||||
{"max-xfer", require_arg, 'X'},
|
||||
{"max-xfe", require_arg, 'X'},
|
||||
{"max-xf", require_arg, 'X'},
|
||||
{"max-x", require_arg, 'X'},
|
||||
{"min-xfer-size", require_arg, 'x'},
|
||||
{"min-xfer-siz", require_arg, 'x'},
|
||||
{"min-xfer-si", require_arg, 'x'},
|
||||
{"min-xfer-s", require_arg, 'x'},
|
||||
{"min-xfer", require_arg, 'x'},
|
||||
{"min-xfe", require_arg, 'x'},
|
||||
{"min-xf", require_arg, 'x'},
|
||||
{"min-x", require_arg, 'x'},
|
||||
{"num-bytes", require_arg, 'e'},
|
||||
{"num-byte", require_arg, 'e'},
|
||||
{"num-byt", require_arg, 'e'},
|
||||
{"num-by", require_arg, 'e'},
|
||||
{"num-b", require_arg, 'e'},
|
||||
{"num-dsets", require_arg, 'd'},
|
||||
{"num-dset", require_arg, 'd'},
|
||||
{"num-dse", require_arg, 'd'},
|
||||
{"num-ds", require_arg, 'd'},
|
||||
{"num-d", require_arg, 'd'},
|
||||
{"num-files", require_arg, 'F'},
|
||||
{"num-file", require_arg, 'F'},
|
||||
{"num-fil", require_arg, 'F'},
|
||||
{"num-fi", require_arg, 'F'},
|
||||
{"num-f", require_arg, 'F'},
|
||||
{"num-iterations", require_arg, 'i'},
|
||||
{"num-iteration", require_arg, 'i'},
|
||||
{"num-iteratio", require_arg, 'i'},
|
||||
{"num-iterati", require_arg, 'i'},
|
||||
{"num-iterat", require_arg, 'i'},
|
||||
{"num-itera", require_arg, 'i'},
|
||||
{"num-iter", require_arg, 'i'},
|
||||
{"num-ite", require_arg, 'i'},
|
||||
{"num-it", require_arg, 'i'},
|
||||
{"num-i", require_arg, 'i'},
|
||||
{"output", require_arg, 'o'},
|
||||
{"outpu", require_arg, 'o'},
|
||||
{"outp", require_arg, 'o'},
|
||||
{"out", require_arg, 'o'},
|
||||
{"ou", require_arg, 'o'},
|
||||
{"threshold", require_arg, 'T'},
|
||||
{"threshol", require_arg, 'T'},
|
||||
{"thresho", require_arg, 'T'},
|
||||
{"thresh", require_arg, 'T'},
|
||||
{"thres", require_arg, 'T'},
|
||||
{"thre", require_arg, 'T'},
|
||||
{"thr", require_arg, 'T'},
|
||||
{"th", require_arg, 'T'},
|
||||
{"write-only", require_arg, 'w'},
|
||||
{"write-onl", require_arg, 'w'},
|
||||
{"write-on", require_arg, 'w'},
|
||||
{"write-o", require_arg, 'w'},
|
||||
{"write", require_arg, 'w'},
|
||||
{"writ", require_arg, 'w'},
|
||||
{"wri", require_arg, 'w'},
|
||||
{"wr", require_arg, 'w'},
|
||||
{NULL, 0, '\0'}};
|
||||
|
||||
struct options {
|
||||
@@ -849,6 +739,135 @@ output_all_info(minmax *mm, int count, int indent_level)
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Function: h5_set_info_object
|
||||
* Purpose: Process environment variables setting to set up MPI Info
|
||||
* object.
|
||||
* Return: 0 if all is fine; otherwise non-zero.
|
||||
* Programmer: Albert Cheng, 2002/05/21.
|
||||
* Modifications:
|
||||
* Bill Wendling, 2002/05/31
|
||||
* Modified so that the HDF5_MPI_INFO environment variable can
|
||||
* be a semicolon separated list of "key=value" pairings. Most
|
||||
* of the code is to remove any whitespaces which might be
|
||||
* surrounding the "key=value" pairs.
|
||||
*/
|
||||
int
|
||||
h5_set_info_object(void)
|
||||
{
|
||||
char *envp; /* environment pointer */
|
||||
int ret_value = 0;
|
||||
|
||||
/* handle any MPI INFO hints via $HDF5_MPI_INFO */
|
||||
if ((envp = HDgetenv("HDF5_MPI_INFO")) != NULL) {
|
||||
char *next, *valp;
|
||||
|
||||
valp = envp = next = HDstrdup(envp);
|
||||
|
||||
if (!valp)
|
||||
return 0;
|
||||
|
||||
/* create an INFO object if not created yet */
|
||||
if (h5_io_info_g == MPI_INFO_NULL)
|
||||
MPI_Info_create(&h5_io_info_g);
|
||||
|
||||
do {
|
||||
size_t len;
|
||||
char * key_val, *endp, *namep;
|
||||
|
||||
if (*valp == ';')
|
||||
valp++;
|
||||
|
||||
/* copy key/value pair into temporary buffer */
|
||||
len = strcspn(valp, ";");
|
||||
next = &valp[len];
|
||||
key_val = (char *)HDcalloc(1, len + 1);
|
||||
|
||||
/* increment the next pointer past the terminating semicolon */
|
||||
if (*next == ';')
|
||||
++next;
|
||||
|
||||
namep = HDstrncpy(key_val, valp, len);
|
||||
|
||||
/* pass up any beginning whitespaces */
|
||||
while (*namep && (*namep == ' ' || *namep == '\t'))
|
||||
namep++;
|
||||
|
||||
if (!*namep)
|
||||
continue; /* was all white space, so move to next k/v pair */
|
||||
|
||||
/* eat up any ending white spaces */
|
||||
endp = &namep[HDstrlen(namep) - 1];
|
||||
|
||||
while (endp && (*endp == ' ' || *endp == '\t'))
|
||||
*endp-- = '\0';
|
||||
|
||||
/* find the '=' */
|
||||
valp = HDstrchr(namep, '=');
|
||||
|
||||
if (valp != NULL) { /* it's a valid key/value pairing */
|
||||
char *tmp_val = valp + 1;
|
||||
|
||||
/* change '=' to \0, move valp down one */
|
||||
*valp-- = '\0';
|
||||
|
||||
/* eat up ending whitespace on the "key" part */
|
||||
while (*valp == ' ' || *valp == '\t')
|
||||
*valp-- = '\0';
|
||||
|
||||
valp = tmp_val;
|
||||
|
||||
/* eat up beginning whitespace on the "value" part */
|
||||
while (*valp == ' ' || *valp == '\t')
|
||||
*valp++ = '\0';
|
||||
|
||||
/* actually set the darned thing */
|
||||
if (MPI_SUCCESS != MPI_Info_set(h5_io_info_g, namep, valp)) {
|
||||
HDprintf("MPI_Info_set failed\n");
|
||||
ret_value = -1;
|
||||
}
|
||||
}
|
||||
|
||||
valp = next;
|
||||
HDfree(key_val);
|
||||
} while (next && *next);
|
||||
|
||||
HDfree(envp);
|
||||
}
|
||||
|
||||
return ret_value;
|
||||
}
|
||||
|
||||
/*
|
||||
* Function: h5_dump_info_object
|
||||
* Purpose: Display content of an MPI Info object
|
||||
* Return: void
|
||||
* Programmer: Albert Cheng 2002/05/21
|
||||
* Modifications:
|
||||
*/
|
||||
void
|
||||
h5_dump_info_object(MPI_Info info)
|
||||
{
|
||||
char key[MPI_MAX_INFO_KEY + 1];
|
||||
char value[MPI_MAX_INFO_VAL + 1];
|
||||
int flag;
|
||||
int i, nkeys;
|
||||
|
||||
HDprintf("Dumping MPI Info Object (up to %d bytes per item):\n", MPI_MAX_INFO_VAL);
|
||||
if (info == MPI_INFO_NULL) {
|
||||
HDprintf("object is MPI_INFO_NULL\n");
|
||||
}
|
||||
else {
|
||||
MPI_Info_get_nkeys(info, &nkeys);
|
||||
HDprintf("object has %d items\n", nkeys);
|
||||
for (i = 0; i < nkeys; i++) {
|
||||
MPI_Info_get_nthkey(info, i, key);
|
||||
MPI_Info_get(info, key, MPI_MAX_INFO_VAL, value, &flag);
|
||||
HDprintf("%s=%s\n", key, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Function: get_minmax
|
||||
* Purpose: Gather all the min, max and total of val.
|
||||
@@ -15,7 +15,7 @@
|
||||
|
||||
#ifndef STANDALONE
|
||||
#include "io_timer.h"
|
||||
#include "h5test.h"
|
||||
#include "H5private.h"
|
||||
#include "h5tools.h"
|
||||
#include "h5tools_utils.h"
|
||||
#else
|
||||
@@ -23,6 +23,15 @@
|
||||
#include "pio_standalone.h"
|
||||
#endif
|
||||
|
||||
#ifdef H5_HAVE_PARALLEL
|
||||
extern MPI_Info h5_io_info_g; /* MPI INFO object for IO */
|
||||
#endif
|
||||
|
||||
#ifdef H5_HAVE_PARALLEL
|
||||
int h5_set_info_object(void);
|
||||
void h5_dump_info_object(MPI_Info info);
|
||||
#endif
|
||||
|
||||
/* setup the dataset no fill option if this is v1.5 or more */
|
||||
#if H5_VERS_MAJOR > 1 || H5_VERS_MINOR > 4
|
||||
#define H5_HAVE_NOFILL 1
|
||||
@@ -16,10 +16,12 @@
|
||||
|
||||
#include "hdf5.h"
|
||||
|
||||
#ifdef H5_STDC_HEADERS
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#endif
|
||||
|
||||
#ifdef H5_HAVE_UNISTD_H
|
||||
#include <sys/types.h>
|
||||
@@ -65,7 +65,7 @@
|
||||
#define SIO_HDF5 0x4
|
||||
|
||||
/* report 0.0 in case t is zero too */
|
||||
#define MB_PER_SEC(bytes, t) (H5_DBL_ABS_EQUAL(t, 0.0) ? 0.0 : ((((double)bytes) / (double)ONE_MB) / (t)))
|
||||
#define MB_PER_SEC(bytes, t) (H5_DBL_ABS_EQUAL(t, 0.0) ? 0.0 : ((((double)(bytes)) / (double)ONE_MB) / (t)))
|
||||
|
||||
#ifndef TRUE
|
||||
#define TRUE 1
|
||||
@@ -99,168 +99,32 @@ static const char *progname = "h5perf_serial";
|
||||
*/
|
||||
static const char * s_opts = "a:A:B:c:Cd:D:e:F:ghi:Imno:p:P:r:stT:v:wx:X:";
|
||||
static struct h5_long_options l_opts[] = {{"align", require_arg, 'a'},
|
||||
{"alig", require_arg, 'a'},
|
||||
{"ali", require_arg, 'a'},
|
||||
{"al", require_arg, 'a'},
|
||||
{"api", require_arg, 'A'},
|
||||
{"ap", require_arg, 'A'},
|
||||
#if 0
|
||||
/* a sighting of the elusive binary option */
|
||||
{ "binary", no_arg, 'b' },
|
||||
{ "binar", no_arg, 'b' },
|
||||
{ "bina", no_arg, 'b' },
|
||||
{ "bin", no_arg, 'b' },
|
||||
{ "bi", no_arg, 'b' },
|
||||
#endif /* 0 */
|
||||
{"block-size", require_arg, 'B'},
|
||||
{"block-siz", require_arg, 'B'},
|
||||
{"block-si", require_arg, 'B'},
|
||||
{"block-s", require_arg, 'B'},
|
||||
{"block-", require_arg, 'B'},
|
||||
{"block", require_arg, 'B'},
|
||||
{"bloc", require_arg, 'B'},
|
||||
{"blo", require_arg, 'B'},
|
||||
{"bl", require_arg, 'B'},
|
||||
{"chunk", no_arg, 'c'},
|
||||
{"chun", no_arg, 'c'},
|
||||
{"chu", no_arg, 'c'},
|
||||
{"ch", no_arg, 'c'},
|
||||
{"collective", no_arg, 'C'},
|
||||
{"collectiv", no_arg, 'C'},
|
||||
{"collecti", no_arg, 'C'},
|
||||
{"collect", no_arg, 'C'},
|
||||
{"collec", no_arg, 'C'},
|
||||
{"colle", no_arg, 'C'},
|
||||
{"coll", no_arg, 'C'},
|
||||
{"col", no_arg, 'C'},
|
||||
{"co", no_arg, 'C'},
|
||||
{"debug", require_arg, 'D'},
|
||||
{"debu", require_arg, 'D'},
|
||||
{"deb", require_arg, 'D'},
|
||||
{"de", require_arg, 'D'},
|
||||
{"file-driver", require_arg, 'v'},
|
||||
{"file-drive", require_arg, 'v'},
|
||||
{"file-driv", require_arg, 'v'},
|
||||
{"file-dri", require_arg, 'v'},
|
||||
{"file-dr", require_arg, 'v'},
|
||||
{"file-d", require_arg, 'v'},
|
||||
{"file-", require_arg, 'v'},
|
||||
{"file", require_arg, 'v'},
|
||||
{"fil", require_arg, 'v'},
|
||||
{"fi", require_arg, 'v'},
|
||||
{"geometry", no_arg, 'g'},
|
||||
{"geometr", no_arg, 'g'},
|
||||
{"geomet", no_arg, 'g'},
|
||||
{"geome", no_arg, 'g'},
|
||||
{"geom", no_arg, 'g'},
|
||||
{"geo", no_arg, 'g'},
|
||||
{"ge", no_arg, 'g'},
|
||||
{"help", no_arg, 'h'},
|
||||
{"hel", no_arg, 'h'},
|
||||
{"he", no_arg, 'h'},
|
||||
{"interleaved", require_arg, 'I'},
|
||||
{"interleave", require_arg, 'I'},
|
||||
{"interleav", require_arg, 'I'},
|
||||
{"interlea", require_arg, 'I'},
|
||||
{"interle", require_arg, 'I'},
|
||||
{"interl", require_arg, 'I'},
|
||||
{"inter", require_arg, 'I'},
|
||||
{"inte", require_arg, 'I'},
|
||||
{"int", require_arg, 'I'},
|
||||
{"in", require_arg, 'I'},
|
||||
{"max-num-processes", require_arg, 'P'},
|
||||
{"max-num-processe", require_arg, 'P'},
|
||||
{"max-num-process", require_arg, 'P'},
|
||||
{"max-num-proces", require_arg, 'P'},
|
||||
{"max-num-proce", require_arg, 'P'},
|
||||
{"max-num-proc", require_arg, 'P'},
|
||||
{"max-num-pro", require_arg, 'P'},
|
||||
{"max-num-pr", require_arg, 'P'},
|
||||
{"max-num-p", require_arg, 'P'},
|
||||
{"min-num-processes", require_arg, 'p'},
|
||||
{"min-num-processe", require_arg, 'p'},
|
||||
{"min-num-process", require_arg, 'p'},
|
||||
{"min-num-proces", require_arg, 'p'},
|
||||
{"min-num-proce", require_arg, 'p'},
|
||||
{"min-num-proc", require_arg, 'p'},
|
||||
{"min-num-pro", require_arg, 'p'},
|
||||
{"min-num-pr", require_arg, 'p'},
|
||||
{"min-num-p", require_arg, 'p'},
|
||||
{"max-xfer-size", require_arg, 'X'},
|
||||
{"max-xfer-siz", require_arg, 'X'},
|
||||
{"max-xfer-si", require_arg, 'X'},
|
||||
{"max-xfer-s", require_arg, 'X'},
|
||||
{"max-xfer", require_arg, 'X'},
|
||||
{"max-xfe", require_arg, 'X'},
|
||||
{"max-xf", require_arg, 'X'},
|
||||
{"max-x", require_arg, 'X'},
|
||||
{"min-xfer-size", require_arg, 'x'},
|
||||
{"min-xfer-siz", require_arg, 'x'},
|
||||
{"min-xfer-si", require_arg, 'x'},
|
||||
{"min-xfer-s", require_arg, 'x'},
|
||||
{"min-xfer", require_arg, 'x'},
|
||||
{"min-xfe", require_arg, 'x'},
|
||||
{"min-xf", require_arg, 'x'},
|
||||
{"min-x", require_arg, 'x'},
|
||||
{"num-bytes", require_arg, 'e'},
|
||||
{"num-byte", require_arg, 'e'},
|
||||
{"num-byt", require_arg, 'e'},
|
||||
{"num-by", require_arg, 'e'},
|
||||
{"num-b", require_arg, 'e'},
|
||||
{"num-dsets", require_arg, 'd'},
|
||||
{"num-dset", require_arg, 'd'},
|
||||
{"num-dse", require_arg, 'd'},
|
||||
{"num-ds", require_arg, 'd'},
|
||||
{"num-d", require_arg, 'd'},
|
||||
{"num-files", require_arg, 'F'},
|
||||
{"num-file", require_arg, 'F'},
|
||||
{"num-fil", require_arg, 'F'},
|
||||
{"num-fi", require_arg, 'F'},
|
||||
{"num-f", require_arg, 'F'},
|
||||
{"num-iterations", require_arg, 'i'},
|
||||
{"num-iteration", require_arg, 'i'},
|
||||
{"num-iteratio", require_arg, 'i'},
|
||||
{"num-iterati", require_arg, 'i'},
|
||||
{"num-iterat", require_arg, 'i'},
|
||||
{"num-itera", require_arg, 'i'},
|
||||
{"num-iter", require_arg, 'i'},
|
||||
{"num-ite", require_arg, 'i'},
|
||||
{"num-it", require_arg, 'i'},
|
||||
{"num-i", require_arg, 'i'},
|
||||
{"order", require_arg, 'r'},
|
||||
{"orde", require_arg, 'r'},
|
||||
{"ord", require_arg, 'r'},
|
||||
{"or", require_arg, 'r'},
|
||||
{"output", require_arg, 'o'},
|
||||
{"outpu", require_arg, 'o'},
|
||||
{"outp", require_arg, 'o'},
|
||||
{"out", require_arg, 'o'},
|
||||
{"ou", require_arg, 'o'},
|
||||
{"extendable", no_arg, 't'},
|
||||
{"extendabl", no_arg, 't'},
|
||||
{"extendab", no_arg, 't'},
|
||||
{"extenda", no_arg, 't'},
|
||||
{"extend", no_arg, 't'},
|
||||
{"exten", no_arg, 't'},
|
||||
{"exte", no_arg, 't'},
|
||||
{"ext", no_arg, 't'},
|
||||
{"ex", no_arg, 't'},
|
||||
{"threshold", require_arg, 'T'},
|
||||
{"threshol", require_arg, 'T'},
|
||||
{"thresho", require_arg, 'T'},
|
||||
{"thresh", require_arg, 'T'},
|
||||
{"thres", require_arg, 'T'},
|
||||
{"thre", require_arg, 'T'},
|
||||
{"thr", require_arg, 'T'},
|
||||
{"th", require_arg, 'T'},
|
||||
{"write-only", require_arg, 'w'},
|
||||
{"write-onl", require_arg, 'w'},
|
||||
{"write-on", require_arg, 'w'},
|
||||
{"write-o", require_arg, 'w'},
|
||||
{"write", require_arg, 'w'},
|
||||
{"writ", require_arg, 'w'},
|
||||
{"wri", require_arg, 'w'},
|
||||
{"wr", require_arg, 'w'},
|
||||
{NULL, 0, '\0'}};
|
||||
|
||||
struct options {
|
||||
@@ -15,7 +15,7 @@
|
||||
|
||||
#ifndef STANDALONE
|
||||
#include "io_timer.h"
|
||||
#include "h5test.h"
|
||||
#include "H5private.h"
|
||||
#include "h5tools.h"
|
||||
#include "h5tools_utils.h"
|
||||
#else
|
||||
@@ -337,7 +337,7 @@ read_info(const char *filename, pack_opt_t *options)
|
||||
|
||||
/* cycle until end of file reached */
|
||||
while (1) {
|
||||
if (EOF == fscanf(fp, "%9s", stype))
|
||||
if (EOF == HDfscanf(fp, "%9s", stype))
|
||||
break;
|
||||
|
||||
/* Info indicator must be for layout or filter */
|
||||
@@ -352,7 +352,7 @@ read_info(const char *filename, pack_opt_t *options)
|
||||
i = 0;
|
||||
c = '0';
|
||||
while (c != ' ') {
|
||||
if (fscanf(fp, "%c", &c) < 0 && HDferror(fp)) {
|
||||
if (HDfscanf(fp, "%c", &c) < 0 && HDferror(fp)) {
|
||||
error_msg("fscanf error\n");
|
||||
h5tools_setstatus(EXIT_FAILURE);
|
||||
ret_value = EXIT_FAILURE;
|
||||
@@ -364,7 +364,7 @@ read_info(const char *filename, pack_opt_t *options)
|
||||
c = '0';
|
||||
/* go until end */
|
||||
while (c != ' ') {
|
||||
if (fscanf(fp, "%c", &c) < 0 && HDferror(fp)) {
|
||||
if (HDfscanf(fp, "%c", &c) < 0 && HDferror(fp)) {
|
||||
error_msg("fscanf error\n");
|
||||
h5tools_setstatus(EXIT_FAILURE);
|
||||
ret_value = EXIT_FAILURE;
|
||||
|
||||
@@ -172,102 +172,19 @@ struct handler_t {
|
||||
static const char *s_opts = "Aa:Ddm:EFfhGgl:sSTO:Vw:H:";
|
||||
/* e.g. "filemetadata" has to precede "file"; "groupmetadata" has to precede "group" etc. */
|
||||
static struct h5_long_options l_opts[] = {{"help", no_arg, 'h'},
|
||||
{"hel", no_arg, 'h'},
|
||||
{"he", no_arg, 'h'},
|
||||
{"filemetadata", no_arg, 'F'},
|
||||
{"filemetadat", no_arg, 'F'},
|
||||
{"filemetada", no_arg, 'F'},
|
||||
{"filemetad", no_arg, 'F'},
|
||||
{"filemeta", no_arg, 'F'},
|
||||
{"filemet", no_arg, 'F'},
|
||||
{"fileme", no_arg, 'F'},
|
||||
{"filem", no_arg, 'F'},
|
||||
{"file", no_arg, 'f'},
|
||||
{"fil", no_arg, 'f'},
|
||||
{"fi", no_arg, 'f'},
|
||||
{"groupmetadata", no_arg, 'G'},
|
||||
{"groupmetadat", no_arg, 'G'},
|
||||
{"groupmetada", no_arg, 'G'},
|
||||
{"groupmetad", no_arg, 'G'},
|
||||
{"groupmeta", no_arg, 'G'},
|
||||
{"groupmet", no_arg, 'G'},
|
||||
{"groupme", no_arg, 'G'},
|
||||
{"groupm", no_arg, 'G'},
|
||||
{"group", no_arg, 'g'},
|
||||
{"grou", no_arg, 'g'},
|
||||
{"gro", no_arg, 'g'},
|
||||
{"gr", no_arg, 'g'},
|
||||
{"links", require_arg, 'l'},
|
||||
{"link", require_arg, 'l'},
|
||||
{"lin", require_arg, 'l'},
|
||||
{"li", require_arg, 'l'},
|
||||
{"dsetmetadata", no_arg, 'D'},
|
||||
{"dsetmetadat", no_arg, 'D'},
|
||||
{"dsetmetada", no_arg, 'D'},
|
||||
{"dsetmetad", no_arg, 'D'},
|
||||
{"dsetmeta", no_arg, 'D'},
|
||||
{"dsetmet", no_arg, 'D'},
|
||||
{"dsetme", no_arg, 'D'},
|
||||
{"dsetm", no_arg, 'D'},
|
||||
{"dset", no_arg, 'd'},
|
||||
{"dse", no_arg, 'd'},
|
||||
{"ds", no_arg, 'd'},
|
||||
{"dims", require_arg, 'm'},
|
||||
{"dim", require_arg, 'm'},
|
||||
{"di", require_arg, 'm'},
|
||||
{"dtypemetadata", no_arg, 'T'},
|
||||
{"dtypemetadat", no_arg, 'T'},
|
||||
{"dtypemetada", no_arg, 'T'},
|
||||
{"dtypemetad", no_arg, 'T'},
|
||||
{"dtypemeta", no_arg, 'T'},
|
||||
{"dtypemet", no_arg, 'T'},
|
||||
{"dtypeme", no_arg, 'T'},
|
||||
{"dtypem", no_arg, 'T'},
|
||||
{"dtype", no_arg, 'T'},
|
||||
{"dtyp", no_arg, 'T'},
|
||||
{"dty", no_arg, 'T'},
|
||||
{"dt", no_arg, 'T'},
|
||||
{"object", require_arg, 'O'},
|
||||
{"objec", require_arg, 'O'},
|
||||
{"obje", require_arg, 'O'},
|
||||
{"obj", require_arg, 'O'},
|
||||
{"ob", require_arg, 'O'},
|
||||
{"version", no_arg, 'V'},
|
||||
{"versio", no_arg, 'V'},
|
||||
{"versi", no_arg, 'V'},
|
||||
{"vers", no_arg, 'V'},
|
||||
{"ver", no_arg, 'V'},
|
||||
{"ve", no_arg, 'V'},
|
||||
{"attribute", no_arg, 'A'},
|
||||
{"attribut", no_arg, 'A'},
|
||||
{"attribu", no_arg, 'A'},
|
||||
{"attrib", no_arg, 'A'},
|
||||
{"attri", no_arg, 'A'},
|
||||
{"attr", no_arg, 'A'},
|
||||
{"att", no_arg, 'A'},
|
||||
{"at", no_arg, 'A'},
|
||||
{"enable-error-stack", no_arg, 'E'},
|
||||
{"numattrs", require_arg, 'a'},
|
||||
{"numattr", require_arg, 'a'},
|
||||
{"numatt", require_arg, 'a'},
|
||||
{"numat", require_arg, 'a'},
|
||||
{"numa", require_arg, 'a'},
|
||||
{"num", require_arg, 'a'},
|
||||
{"nu", require_arg, 'a'},
|
||||
{"freespace", no_arg, 's'},
|
||||
{"freespac", no_arg, 's'},
|
||||
{"freespa", no_arg, 's'},
|
||||
{"freesp", no_arg, 's'},
|
||||
{"frees", no_arg, 's'},
|
||||
{"free", no_arg, 's'},
|
||||
{"fre", no_arg, 's'},
|
||||
{"fr", no_arg, 's'},
|
||||
{"summary", no_arg, 'S'},
|
||||
{"summar", no_arg, 'S'},
|
||||
{"summa", no_arg, 'S'},
|
||||
{"summ", no_arg, 'S'},
|
||||
{"sum", no_arg, 'S'},
|
||||
{"su", no_arg, 'S'},
|
||||
{"s3-cred", require_arg, 'w'},
|
||||
{"hdfs-attrs", require_arg, 'H'},
|
||||
{NULL, 0, '\0'}};
|
||||
|
||||
@@ -42,7 +42,7 @@ if (NOT ONLY_SHARED_LIBS)
|
||||
h5debug
|
||||
h5repart
|
||||
h5mkgrp
|
||||
h5clear
|
||||
h5clear
|
||||
)
|
||||
endif ()
|
||||
if (BUILD_SHARED_LIBS)
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
#define H5F_ACS_SKIP_EOF_CHECK_NAME "skip_eof_check"
|
||||
|
||||
/* Default increment is 1 megabytes for the --increment option */
|
||||
#define DEFAULT_INCREMENT 1024 * 1024
|
||||
#define DEFAULT_INCREMENT (1024 * 1024)
|
||||
|
||||
static char * fname_g = NULL;
|
||||
static hbool_t clear_status_flags = FALSE;
|
||||
@@ -45,39 +45,10 @@ static hsize_t increment = DEFAULT_INCREMENT;
|
||||
* Command-line options: only publicize long options
|
||||
*/
|
||||
static const char * s_opts = "hVsmzi*";
|
||||
static struct h5_long_options l_opts[] = {{"help", no_arg, 'h'},
|
||||
{"hel", no_arg, 'h'},
|
||||
{"he", no_arg, 'h'},
|
||||
{"version", no_arg, 'V'},
|
||||
{"version", no_arg, 'V'},
|
||||
{"versio", no_arg, 'V'},
|
||||
{"versi", no_arg, 'V'},
|
||||
{"vers", no_arg, 'V'},
|
||||
{"status", no_arg, 's'},
|
||||
{"statu", no_arg, 's'},
|
||||
{"stat", no_arg, 's'},
|
||||
{"sta", no_arg, 's'},
|
||||
{"st", no_arg, 's'},
|
||||
{"image", no_arg, 'm'},
|
||||
{"imag", no_arg, 'm'},
|
||||
{"ima", no_arg, 'm'},
|
||||
{"im", no_arg, 'm'},
|
||||
{"filesize", no_arg, 'z'},
|
||||
{"filesiz", no_arg, 'z'},
|
||||
{"filesi", no_arg, 'z'},
|
||||
{"files", no_arg, 'z'},
|
||||
{"file", no_arg, 'z'},
|
||||
{"fil", no_arg, 'z'},
|
||||
{"fi", no_arg, 'z'},
|
||||
{"increment", optional_arg, 'i'},
|
||||
{"incremen", optional_arg, 'i'},
|
||||
{"increme", optional_arg, 'i'},
|
||||
{"increm", optional_arg, 'i'},
|
||||
{"incre", optional_arg, 'i'},
|
||||
{"incr", optional_arg, 'i'},
|
||||
{"inc", optional_arg, 'i'},
|
||||
{"in", optional_arg, 'i'},
|
||||
{NULL, 0, '\0'}};
|
||||
static struct h5_long_options l_opts[] = {
|
||||
{"help", no_arg, 'h'}, {"version", no_arg, 'V'}, {"status", no_arg, 's'},
|
||||
{"image", no_arg, 'm'}, {"filesize", no_arg, 'z'}, {"increment", optional_arg, 'i'},
|
||||
{NULL, 0, '\0'}};
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: usage
|
||||
|
||||
@@ -198,8 +198,8 @@ const H5L_class_t UD_link_class[1] = {{
|
||||
|
||||
#define DIM1 20
|
||||
#define DIM2 10
|
||||
#define CDIM1 DIM1 / 2
|
||||
#define CDIM2 DIM2 / 2
|
||||
#define CDIM1 (DIM1 / 2)
|
||||
#define CDIM2 (DIM2 / 2)
|
||||
#define RANK 2
|
||||
|
||||
/* Dataspace of 0 dimension size */
|
||||
|
||||
@@ -109,7 +109,7 @@ main(int argc, const char *argv[])
|
||||
filename = HDstrdup(argv[H5_optind]);
|
||||
|
||||
size = 0;
|
||||
if (EOF == (res = sscanf(nbytes, "%u", &size))) {
|
||||
if (EOF == (res = HDsscanf(nbytes, "%u", &size))) {
|
||||
/* fail */
|
||||
error_msg("missing file name\n");
|
||||
usage(h5tools_getprogname());
|
||||
|
||||
@@ -55,7 +55,7 @@ UD_traverse(const char H5_ATTR_UNUSED *link_name, hid_t H5_ATTR_UNUSED cur_group
|
||||
const void H5_ATTR_UNUSED *udata, size_t H5_ATTR_UNUSED udata_size, hid_t H5_ATTR_UNUSED lapl_id,
|
||||
hid_t H5_ATTR_UNUSED dxpl_id)
|
||||
{
|
||||
return -1;
|
||||
return H5I_INVALID_HID;
|
||||
}
|
||||
|
||||
#define MY_LINKCLASS 187
|
||||
@@ -87,196 +87,311 @@ g1.2.1 : slink
|
||||
g2 : dset2.1 dset2.2 udlink
|
||||
|
||||
*/
|
||||
static void
|
||||
static herr_t
|
||||
gent_ub(const char *filename, size_t ub_size, size_t ub_fill)
|
||||
{
|
||||
hid_t fid, group, attr, dataset, space;
|
||||
hid_t create_plist;
|
||||
hid_t fid = H5I_INVALID_HID;
|
||||
hid_t group = H5I_INVALID_HID;
|
||||
hid_t attr = H5I_INVALID_HID;
|
||||
hid_t dataset = H5I_INVALID_HID;
|
||||
hid_t space = H5I_INVALID_HID;
|
||||
hid_t create_plist = H5I_INVALID_HID;
|
||||
hsize_t dims[2];
|
||||
int data[2][2], dset1[10][10], dset2[20];
|
||||
char buf[BUF_SIZE];
|
||||
int i, j;
|
||||
size_t u;
|
||||
float dset2_1[10], dset2_2[3][5];
|
||||
int fd;
|
||||
char * bp;
|
||||
int fd = -1;
|
||||
|
||||
if (ub_size > 0) {
|
||||
create_plist = H5Pcreate(H5P_FILE_CREATE);
|
||||
H5Pset_userblock(create_plist, (hsize_t)ub_size);
|
||||
fid = H5Fcreate(filename, H5F_ACC_TRUNC, create_plist, H5P_DEFAULT);
|
||||
if ((create_plist = H5Pcreate(H5P_FILE_CREATE)) < 0)
|
||||
goto error;
|
||||
if (H5Pset_userblock(create_plist, (hsize_t)ub_size) < 0)
|
||||
goto error;
|
||||
if ((fid = H5Fcreate(filename, H5F_ACC_TRUNC, create_plist, H5P_DEFAULT)) < 0)
|
||||
goto error;
|
||||
}
|
||||
else {
|
||||
fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
|
||||
if ((fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT)) < 0)
|
||||
goto error;
|
||||
}
|
||||
|
||||
/* create groups */
|
||||
group = H5Gcreate2(fid, "/g1", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
|
||||
H5Gclose(group);
|
||||
/* Create groups */
|
||||
if ((group = H5Gcreate2(fid, "/g1", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0)
|
||||
goto error;
|
||||
if (H5Gclose(group) < 0)
|
||||
goto error;
|
||||
|
||||
group = H5Gcreate2(fid, "/g2", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
|
||||
H5Gclose(group);
|
||||
if ((group = H5Gcreate2(fid, "/g2", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0)
|
||||
goto error;
|
||||
if (H5Gclose(group) < 0)
|
||||
goto error;
|
||||
|
||||
group = H5Gcreate2(fid, "/g1/g1.1", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
|
||||
H5Gclose(group);
|
||||
if ((group = H5Gcreate2(fid, "/g1/g1.1", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0)
|
||||
goto error;
|
||||
if (H5Gclose(group) < 0)
|
||||
goto error;
|
||||
|
||||
group = H5Gcreate2(fid, "/g1/g1.2", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
|
||||
H5Gclose(group);
|
||||
if ((group = H5Gcreate2(fid, "/g1/g1.2", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0)
|
||||
goto error;
|
||||
if (H5Gclose(group) < 0)
|
||||
goto error;
|
||||
|
||||
group = H5Gcreate2(fid, "/g1/g1.2/g1.2.1", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
|
||||
H5Gclose(group);
|
||||
if ((group = H5Gcreate2(fid, "/g1/g1.2/g1.2.1", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0)
|
||||
goto error;
|
||||
if (H5Gclose(group) < 0)
|
||||
goto error;
|
||||
|
||||
/* root attributes */
|
||||
group = H5Gopen2(fid, "/", H5P_DEFAULT);
|
||||
/* Root attributes */
|
||||
if ((group = H5Gopen2(fid, "/", H5P_DEFAULT)) < 0)
|
||||
goto error;
|
||||
|
||||
dims[0] = 10;
|
||||
space = H5Screate_simple(1, dims, NULL);
|
||||
attr = H5Acreate2(group, "attr1", H5T_STD_I8BE, space, H5P_DEFAULT, H5P_DEFAULT);
|
||||
HDsprintf(buf, "abcdefghi");
|
||||
H5Awrite(attr, H5T_NATIVE_SCHAR, buf);
|
||||
H5Sclose(space);
|
||||
H5Aclose(attr);
|
||||
if ((space = H5Screate_simple(1, dims, NULL)) < 0)
|
||||
goto error;
|
||||
if ((attr = H5Acreate2(group, "attr1", H5T_STD_I8BE, space, H5P_DEFAULT, H5P_DEFAULT)) < 0)
|
||||
goto error;
|
||||
if (HDsprintf(buf, "abcdefghi") < 0)
|
||||
goto error;
|
||||
if (H5Awrite(attr, H5T_NATIVE_SCHAR, buf) < 0)
|
||||
goto error;
|
||||
if (H5Sclose(space) < 0)
|
||||
goto error;
|
||||
if (H5Aclose(attr) < 0)
|
||||
goto error;
|
||||
|
||||
dims[0] = 2;
|
||||
dims[1] = 2;
|
||||
space = H5Screate_simple(2, dims, NULL);
|
||||
attr = H5Acreate2(group, "attr2", H5T_STD_I32BE, space, H5P_DEFAULT, H5P_DEFAULT);
|
||||
dims[0] = 2;
|
||||
dims[1] = 2;
|
||||
if ((space = H5Screate_simple(2, dims, NULL)) < 0)
|
||||
goto error;
|
||||
if ((attr = H5Acreate2(group, "attr2", H5T_STD_I32BE, space, H5P_DEFAULT, H5P_DEFAULT)) < 0)
|
||||
goto error;
|
||||
data[0][0] = 0;
|
||||
data[0][1] = 1;
|
||||
data[1][0] = 2;
|
||||
data[1][1] = 3;
|
||||
H5Awrite(attr, H5T_NATIVE_INT, data);
|
||||
H5Sclose(space);
|
||||
H5Aclose(attr);
|
||||
if (H5Awrite(attr, H5T_NATIVE_INT, data) < 0)
|
||||
goto error;
|
||||
if (H5Sclose(space) < 0)
|
||||
goto error;
|
||||
if (H5Aclose(attr) < 0)
|
||||
goto error;
|
||||
|
||||
H5Gclose(group);
|
||||
if (H5Gclose(group) < 0)
|
||||
goto error;
|
||||
|
||||
group = H5Gopen2(fid, "/g1/g1.1", H5P_DEFAULT);
|
||||
if ((group = H5Gopen2(fid, "/g1/g1.1", H5P_DEFAULT)) < 0)
|
||||
goto error;
|
||||
|
||||
/* dset1.1.1 */
|
||||
/* Dataset 1.1.1 */
|
||||
dims[0] = 10;
|
||||
dims[1] = 10;
|
||||
space = H5Screate_simple(2, dims, NULL);
|
||||
dataset = H5Dcreate2(group, "dset1.1.1", H5T_STD_I32BE, space, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
|
||||
if ((space = H5Screate_simple(2, dims, NULL)) < 0)
|
||||
goto error;
|
||||
if ((dataset =
|
||||
H5Dcreate2(group, "dset1.1.1", H5T_STD_I32BE, space, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0)
|
||||
goto error;
|
||||
for (i = 0; i < 10; i++)
|
||||
for (j = 0; j < 10; j++)
|
||||
dset1[i][j] = j * i;
|
||||
H5Dwrite(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, dset1);
|
||||
H5Sclose(space);
|
||||
if (H5Dwrite(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, dset1) < 0)
|
||||
goto error;
|
||||
if (H5Sclose(space) < 0)
|
||||
goto error;
|
||||
|
||||
/* attributes of dset1.1.1 */
|
||||
/* Attributes of dset1.1.1 */
|
||||
dims[0] = 27;
|
||||
space = H5Screate_simple(1, dims, NULL);
|
||||
attr = H5Acreate2(dataset, "attr1", H5T_STD_I8BE, space, H5P_DEFAULT, H5P_DEFAULT);
|
||||
HDsprintf(buf, "1st attribute of dset1.1.1");
|
||||
H5Awrite(attr, H5T_NATIVE_SCHAR, buf);
|
||||
H5Sclose(space);
|
||||
H5Aclose(attr);
|
||||
if ((space = H5Screate_simple(1, dims, NULL)) < 0)
|
||||
goto error;
|
||||
if ((attr = H5Acreate2(dataset, "attr1", H5T_STD_I8BE, space, H5P_DEFAULT, H5P_DEFAULT)) < 0)
|
||||
goto error;
|
||||
if (HDsprintf(buf, "1st attribute of dset1.1.1") < 0)
|
||||
goto error;
|
||||
if (H5Awrite(attr, H5T_NATIVE_SCHAR, buf) < 0)
|
||||
goto error;
|
||||
if (H5Sclose(space) < 0)
|
||||
goto error;
|
||||
if (H5Aclose(attr) < 0)
|
||||
goto error;
|
||||
|
||||
dims[0] = 27;
|
||||
space = H5Screate_simple(1, dims, NULL);
|
||||
attr = H5Acreate2(dataset, "attr2", H5T_STD_I8BE, space, H5P_DEFAULT, H5P_DEFAULT);
|
||||
HDsprintf(buf, "2nd attribute of dset1.1.1");
|
||||
H5Awrite(attr, H5T_NATIVE_SCHAR, buf);
|
||||
H5Sclose(space);
|
||||
H5Aclose(attr);
|
||||
if ((space = H5Screate_simple(1, dims, NULL)) < 0)
|
||||
goto error;
|
||||
if ((attr = H5Acreate2(dataset, "attr2", H5T_STD_I8BE, space, H5P_DEFAULT, H5P_DEFAULT)) < 0)
|
||||
goto error;
|
||||
if (HDsprintf(buf, "2nd attribute of dset1.1.1") < 0)
|
||||
goto error;
|
||||
if (H5Awrite(attr, H5T_NATIVE_SCHAR, buf) < 0)
|
||||
goto error;
|
||||
if (H5Sclose(space) < 0)
|
||||
goto error;
|
||||
if (H5Aclose(attr) < 0)
|
||||
goto error;
|
||||
|
||||
H5Dclose(dataset);
|
||||
if (H5Dclose(dataset) < 0)
|
||||
goto error;
|
||||
|
||||
/* dset1.1.2 */
|
||||
/* Dataset 1.1.2 */
|
||||
dims[0] = 20;
|
||||
space = H5Screate_simple(1, dims, NULL);
|
||||
dataset = H5Dcreate2(group, "dset1.1.2", H5T_STD_I32BE, space, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
|
||||
if ((space = H5Screate_simple(1, dims, NULL)) < 0)
|
||||
goto error;
|
||||
if ((dataset =
|
||||
H5Dcreate2(group, "dset1.1.2", H5T_STD_I32BE, space, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0)
|
||||
goto error;
|
||||
for (i = 0; i < 20; i++)
|
||||
dset2[i] = i;
|
||||
H5Dwrite(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, dset2);
|
||||
H5Sclose(space);
|
||||
H5Dclose(dataset);
|
||||
if (H5Dwrite(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, dset2) < 0)
|
||||
goto error;
|
||||
if (H5Sclose(space) < 0)
|
||||
goto error;
|
||||
if (H5Dclose(dataset) < 0)
|
||||
goto error;
|
||||
|
||||
H5Gclose(group);
|
||||
if (H5Gclose(group) < 0)
|
||||
goto error;
|
||||
|
||||
/* external link */
|
||||
H5Lcreate_external("somefile", "somepath", fid, "/g1/g1.2/extlink", H5P_DEFAULT, H5P_DEFAULT);
|
||||
/* External link */
|
||||
if (H5Lcreate_external("somefile", "somepath", fid, "/g1/g1.2/extlink", H5P_DEFAULT, H5P_DEFAULT) < 0)
|
||||
goto error;
|
||||
|
||||
/* soft link */
|
||||
group = H5Gopen2(fid, "/g1/g1.2/g1.2.1", H5P_DEFAULT);
|
||||
H5Lcreate_soft("somevalue", group, "slink", H5P_DEFAULT, H5P_DEFAULT);
|
||||
H5Gclose(group);
|
||||
/* Soft link */
|
||||
if ((group = H5Gopen2(fid, "/g1/g1.2/g1.2.1", H5P_DEFAULT)) < 0)
|
||||
goto error;
|
||||
if (H5Lcreate_soft("somevalue", group, "slink", H5P_DEFAULT, H5P_DEFAULT) < 0)
|
||||
goto error;
|
||||
if (H5Gclose(group) < 0)
|
||||
goto error;
|
||||
|
||||
group = H5Gopen2(fid, "/g2", H5P_DEFAULT);
|
||||
if ((group = H5Gopen2(fid, "/g2", H5P_DEFAULT)) < 0)
|
||||
goto error;
|
||||
|
||||
/* dset2.1 */
|
||||
/* Dataset 2.1 */
|
||||
dims[0] = 10;
|
||||
space = H5Screate_simple(1, dims, NULL);
|
||||
dataset = H5Dcreate2(group, "dset2.1", H5T_IEEE_F32BE, space, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
|
||||
if ((space = H5Screate_simple(1, dims, NULL)) < 0)
|
||||
goto error;
|
||||
if ((dataset =
|
||||
H5Dcreate2(group, "dset2.1", H5T_IEEE_F32BE, space, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0)
|
||||
goto error;
|
||||
for (i = 0; i < 10; i++)
|
||||
dset2_1[i] = (float)((float)i * 0.1F + 1.0F);
|
||||
H5Dwrite(dataset, H5T_NATIVE_FLOAT, H5S_ALL, H5S_ALL, H5P_DEFAULT, dset2_1);
|
||||
H5Sclose(space);
|
||||
H5Dclose(dataset);
|
||||
if (H5Dwrite(dataset, H5T_NATIVE_FLOAT, H5S_ALL, H5S_ALL, H5P_DEFAULT, dset2_1) < 0)
|
||||
goto error;
|
||||
if (H5Sclose(space) < 0)
|
||||
goto error;
|
||||
if (H5Dclose(dataset) < 0)
|
||||
goto error;
|
||||
|
||||
/* dset2.2 */
|
||||
/* Dataset 2.2 */
|
||||
dims[0] = 3;
|
||||
dims[1] = 5;
|
||||
space = H5Screate_simple(2, dims, NULL);
|
||||
dataset = H5Dcreate2(group, "dset2.2", H5T_IEEE_F32BE, space, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
|
||||
if ((space = H5Screate_simple(2, dims, NULL)) < 0)
|
||||
goto error;
|
||||
if ((dataset =
|
||||
H5Dcreate2(group, "dset2.2", H5T_IEEE_F32BE, space, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0)
|
||||
goto error;
|
||||
for (i = 0; i < 3; i++)
|
||||
for (j = 0; j < 5; j++)
|
||||
dset2_2[i][j] = (float)(((float)i + 1.0F) * (float)j * 0.1F);
|
||||
H5Dwrite(dataset, H5T_NATIVE_FLOAT, H5S_ALL, H5S_ALL, H5P_DEFAULT, dset2_2);
|
||||
H5Sclose(space);
|
||||
H5Dclose(dataset);
|
||||
if (H5Dwrite(dataset, H5T_NATIVE_FLOAT, H5S_ALL, H5S_ALL, H5P_DEFAULT, dset2_2) < 0)
|
||||
goto error;
|
||||
if (H5Sclose(space) < 0)
|
||||
goto error;
|
||||
if (H5Dclose(dataset) < 0)
|
||||
goto error;
|
||||
|
||||
H5Gclose(group);
|
||||
if (H5Gclose(group) < 0)
|
||||
goto error;
|
||||
|
||||
/* user-defined link */
|
||||
H5Lregister(UD_link_class);
|
||||
H5Lcreate_ud(fid, "/g2/udlink", (H5L_type_t)MY_LINKCLASS, NULL, (size_t)0, H5P_DEFAULT, H5P_DEFAULT);
|
||||
/* User-defined link */
|
||||
if (H5Lregister(UD_link_class) < 0)
|
||||
goto error;
|
||||
if (H5Lcreate_ud(fid, "/g2/udlink", (H5L_type_t)MY_LINKCLASS, NULL, (size_t)0, H5P_DEFAULT, H5P_DEFAULT) <
|
||||
0)
|
||||
goto error;
|
||||
|
||||
H5Fclose(fid);
|
||||
/* MUST close the file ID before the user block code or you risk tripping
|
||||
* over file locking issues.
|
||||
*/
|
||||
if (H5Fclose(fid) < 0)
|
||||
goto error;
|
||||
|
||||
/* If a user block is being used, write to it here */
|
||||
if (ub_size > 0) {
|
||||
HDassert(ub_size <= BUF_SIZE);
|
||||
char *bp;
|
||||
|
||||
fd = HDopen(filename, O_RDWR);
|
||||
HDassert(fd >= 0);
|
||||
if (ub_size > BUF_SIZE)
|
||||
goto error;
|
||||
|
||||
/* fill buf with pattern */
|
||||
if ((fd = HDopen(filename, O_RDWR)) < 0)
|
||||
goto error;
|
||||
|
||||
/* Fill buf with pattern */
|
||||
HDmemset(buf, '\0', ub_size);
|
||||
bp = buf;
|
||||
for (u = 0; u < ub_fill; u++)
|
||||
*bp++ = pattern[u % 10];
|
||||
|
||||
(void)HDwrite(fd, buf, ub_size);
|
||||
if (HDwrite(fd, buf, ub_size) < 0)
|
||||
goto error;
|
||||
|
||||
HDclose(fd);
|
||||
if (HDclose(fd) < 0)
|
||||
goto error;
|
||||
}
|
||||
|
||||
return SUCCEED;
|
||||
|
||||
error:
|
||||
if (fd >= 0)
|
||||
HDclose(fd);
|
||||
|
||||
H5E_BEGIN_TRY
|
||||
{
|
||||
H5Fclose(fid);
|
||||
H5Gclose(group);
|
||||
H5Aclose(attr);
|
||||
H5Dclose(dataset);
|
||||
H5Sclose(space);
|
||||
H5Pclose(create_plist);
|
||||
}
|
||||
H5E_END_TRY;
|
||||
|
||||
return FAIL;
|
||||
}
|
||||
|
||||
static void
|
||||
/* Creates a simple (i.e., not HDF5) text file and fills it with a pattern */
|
||||
static herr_t
|
||||
create_textfile(const char *name, size_t size)
|
||||
{
|
||||
char * buf;
|
||||
int fd;
|
||||
char * buf = NULL;
|
||||
int fd = -1;
|
||||
size_t i;
|
||||
char * bp;
|
||||
char * bp = NULL;
|
||||
|
||||
fd = HDcreat(name, 0777);
|
||||
HDassert(fd >= 0);
|
||||
buf = (char *)HDcalloc(size, (size_t)1);
|
||||
HDassert(buf);
|
||||
if ((fd = HDcreat(name, 0777)) < 0)
|
||||
goto error;
|
||||
if (NULL == (buf = (char *)HDcalloc(size, 1)))
|
||||
goto error;
|
||||
|
||||
/* fill buf with pattern */
|
||||
/* Fill buf with pattern */
|
||||
bp = buf;
|
||||
for (i = 0; i < size; i++)
|
||||
*bp++ = pattern[i % 10];
|
||||
|
||||
(void)HDwrite(fd, buf, size);
|
||||
if (HDwrite(fd, buf, size) < 0)
|
||||
goto error;
|
||||
|
||||
HDfree(buf);
|
||||
|
||||
HDclose(fd);
|
||||
|
||||
return SUCCEED;
|
||||
|
||||
error:
|
||||
HDfree(buf);
|
||||
if (fd >= 0)
|
||||
HDclose(fd);
|
||||
|
||||
return FAIL;
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
@@ -287,14 +402,25 @@ create_textfile(const char *name, size_t size)
|
||||
int
|
||||
main(void)
|
||||
{
|
||||
create_textfile(UBTXT2, (size_t)10);
|
||||
create_textfile(UBTXT3, (size_t)511);
|
||||
create_textfile(UBTXT4, (size_t)512);
|
||||
create_textfile(UBTXT5, (size_t)513);
|
||||
if (create_textfile(UBTXT2, 10) < 0)
|
||||
goto error;
|
||||
if (create_textfile(UBTXT3, 511) < 0)
|
||||
goto error;
|
||||
if (create_textfile(UBTXT4, 512) < 0)
|
||||
goto error;
|
||||
if (create_textfile(UBTXT5, 513) < 0)
|
||||
goto error;
|
||||
|
||||
gent_ub(FILE7, (size_t)0, (size_t)0);
|
||||
gent_ub(FILE8, (size_t)512, HDstrlen(pattern));
|
||||
gent_ub(FILE9, (size_t)1024, (size_t)513);
|
||||
if (gent_ub(FILE7, 0, 0) < 0)
|
||||
goto error;
|
||||
if (gent_ub(FILE8, 512, HDstrlen(pattern)) < 0)
|
||||
goto error;
|
||||
if (gent_ub(FILE9, 1024, 513) < 0)
|
||||
goto error;
|
||||
|
||||
return 0;
|
||||
return EXIT_SUCCESS;
|
||||
|
||||
error:
|
||||
HDfprintf(stderr, "h5jam test generator FAILED\n");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
@@ -111,8 +111,8 @@ const char *H5REPACK_FILENAMES[] = {"h5repack_big_out", NULL};
|
||||
|
||||
#define DIM1 40
|
||||
#define DIM2 20
|
||||
#define CDIM1 DIM1 / 2
|
||||
#define CDIM2 DIM2 / 2
|
||||
#define CDIM1 (DIM1 / 2)
|
||||
#define CDIM2 (DIM2 / 2)
|
||||
#define RANK 2
|
||||
|
||||
/* Size of userblock (for userblock test) */
|
||||
|
||||
@@ -207,7 +207,7 @@
|
||||
# -d --di=15
|
||||
ADD_H5_ERR_TEST (h5stat_err1_dims 1 -d --dims=-1 h5stat_threshold.h5)
|
||||
ADD_H5_TEST (h5stat_dims1 0 -gd -m 5 h5stat_threshold.h5)
|
||||
ADD_H5_TEST (h5stat_dims2 0 -d --di=15 h5stat_threshold.h5)
|
||||
ADD_H5_TEST (h5stat_dims2 0 -d --dims=15 h5stat_threshold.h5)
|
||||
#
|
||||
# Tests for -a option on h5stat_threshold.h5
|
||||
# -a -2 (incorrect threshold value)
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
* Generate HDF5 file with latest format with
|
||||
* NUM_GRPS groups and NUM_ATTRS attributes for the dataset
|
||||
*/
|
||||
static void
|
||||
static herr_t
|
||||
gen_newgrat_file(const char *fname)
|
||||
{
|
||||
hid_t fcpl = H5I_INVALID_HID; /* File creation property */
|
||||
@@ -117,6 +117,21 @@ gen_newgrat_file(const char *fname)
|
||||
} /* end for */
|
||||
|
||||
/* Close dataset, dataspace, datatype, file */
|
||||
if (H5Pclose(fapl) < 0)
|
||||
goto error;
|
||||
if (H5Pclose(fcpl) < 0)
|
||||
goto error;
|
||||
if (H5Dclose(did) < 0)
|
||||
goto error;
|
||||
if (H5Tclose(tid) < 0)
|
||||
goto error;
|
||||
if (H5Sclose(sid) < 0)
|
||||
goto error;
|
||||
if (H5Fclose(fid) < 0)
|
||||
goto error;
|
||||
|
||||
return SUCCEED;
|
||||
|
||||
error:
|
||||
H5E_BEGIN_TRY
|
||||
{
|
||||
@@ -130,6 +145,8 @@ error:
|
||||
H5Fclose(fid);
|
||||
}
|
||||
H5E_END_TRY;
|
||||
|
||||
return FAIL;
|
||||
} /* gen_newgrat_file() */
|
||||
|
||||
/*
|
||||
@@ -139,7 +156,7 @@ error:
|
||||
* datasets. -a N (--numattrs=N): Set the threshold for the # of attributes when printing information for
|
||||
* small # of attributes.
|
||||
*/
|
||||
static void
|
||||
static herr_t
|
||||
gen_threshold_file(const char *fname)
|
||||
{
|
||||
hid_t fid = H5I_INVALID_HID; /* File ID */
|
||||
@@ -302,6 +319,23 @@ gen_threshold_file(const char *fname)
|
||||
goto error;
|
||||
}
|
||||
|
||||
if (H5Gclose(gid) < 0)
|
||||
goto error;
|
||||
if (H5Sclose(sid0) < 0)
|
||||
goto error;
|
||||
if (H5Sclose(sid1) < 0)
|
||||
goto error;
|
||||
if (H5Sclose(sid2) < 0)
|
||||
goto error;
|
||||
if (H5Sclose(sid3) < 0)
|
||||
goto error;
|
||||
if (H5Sclose(sid4) < 0)
|
||||
goto error;
|
||||
if (H5Fclose(fid) < 0)
|
||||
goto error;
|
||||
|
||||
return SUCCEED;
|
||||
|
||||
error:
|
||||
H5E_BEGIN_TRY
|
||||
{
|
||||
@@ -317,6 +351,8 @@ error:
|
||||
}
|
||||
H5E_END_TRY;
|
||||
|
||||
return FAIL;
|
||||
|
||||
} /* gen_threshold_file() */
|
||||
|
||||
/*
|
||||
@@ -327,18 +363,21 @@ error:
|
||||
* one dataset: fixed dimension, chunked layout, w/ filters
|
||||
*
|
||||
*/
|
||||
static void
|
||||
static herr_t
|
||||
gen_idx_file(const char *fname)
|
||||
{
|
||||
hid_t fapl = H5I_INVALID_HID; /* file access property id */
|
||||
hid_t fid = H5I_INVALID_HID; /* file id */
|
||||
hid_t sid = H5I_INVALID_HID; /* space id */
|
||||
hid_t dcpl = H5I_INVALID_HID; /* dataset creation property id */
|
||||
hid_t did = -1, did2 = H5I_INVALID_HID; /* dataset id */
|
||||
hsize_t dims[1] = {10}; /* dataset dimension */
|
||||
hsize_t c_dims[1] = {2}; /* chunk dimension */
|
||||
int i; /* local index variable */
|
||||
int buf[10]; /* data buffer */
|
||||
hid_t fapl = H5I_INVALID_HID; /* file access property id */
|
||||
hid_t fid = H5I_INVALID_HID; /* file id */
|
||||
hid_t sid = H5I_INVALID_HID; /* space id */
|
||||
hid_t dcpl = H5I_INVALID_HID; /* dataset creation property id */
|
||||
hid_t did = H5I_INVALID_HID; /* dataset id */
|
||||
#if defined(H5_HAVE_FILTER_DEFLATE)
|
||||
hid_t did2 = H5I_INVALID_HID; /* dataset id (compressed) */
|
||||
#endif
|
||||
hsize_t dims[1] = {10}; /* dataset dimension */
|
||||
hsize_t c_dims[1] = {2}; /* chunk dimension */
|
||||
int i; /* local index variable */
|
||||
int buf[10]; /* data buffer */
|
||||
|
||||
/* Get a copy of the file access property */
|
||||
if ((fapl = H5Pcreate(H5P_FILE_ACCESS)) < 0)
|
||||
@@ -390,6 +429,19 @@ gen_idx_file(const char *fname)
|
||||
#endif
|
||||
|
||||
/* closing: dataspace, dataset, file */
|
||||
if (H5Pclose(fapl) < 0)
|
||||
goto error;
|
||||
if (H5Pclose(dcpl) < 0)
|
||||
goto error;
|
||||
if (H5Sclose(sid) < 0)
|
||||
goto error;
|
||||
if (H5Dclose(did) < 0)
|
||||
goto error;
|
||||
if (H5Fclose(fid) < 0)
|
||||
goto error;
|
||||
|
||||
return SUCCEED;
|
||||
|
||||
error:
|
||||
H5E_BEGIN_TRY
|
||||
{
|
||||
@@ -404,6 +456,8 @@ error:
|
||||
}
|
||||
H5E_END_TRY;
|
||||
|
||||
return FAIL;
|
||||
|
||||
} /* gen_idx_file() */
|
||||
|
||||
/*
|
||||
@@ -419,20 +473,21 @@ error:
|
||||
* H5O_refcount_decode in the jira issue.
|
||||
*
|
||||
*/
|
||||
static void
|
||||
static herr_t
|
||||
gen_err_refcount(const char *fname)
|
||||
{
|
||||
hid_t fid = H5I_INVALID_HID; /* File identifier */
|
||||
hid_t sid = H5I_INVALID_HID; /* Dataspace message */
|
||||
hid_t did = H5I_INVALID_HID; /* Dataset identifier */
|
||||
hid_t gid = H5I_INVALID_HID; /* Group identifier */
|
||||
hid_t aid1 = -1, aid2 = H5I_INVALID_HID; /* Attribute identifier */
|
||||
hid_t tid = H5I_INVALID_HID; /* Datatype identifier */
|
||||
int i, n; /* Local index variables */
|
||||
int buf[10]; /* Data buffer */
|
||||
hsize_t dims[1]; /* Dimension size */
|
||||
int fd = -1; /* File descriptor */
|
||||
unsigned short val = 22; /* The refcount message ID */
|
||||
hid_t fid = H5I_INVALID_HID; /* File identifier */
|
||||
hid_t sid = H5I_INVALID_HID; /* Dataspace message */
|
||||
hid_t did = H5I_INVALID_HID; /* Dataset identifier */
|
||||
hid_t gid = H5I_INVALID_HID; /* Group identifier */
|
||||
hid_t aid1 = H5I_INVALID_HID; /* Attribute identifier */
|
||||
hid_t aid2 = H5I_INVALID_HID; /* Attribute identifier */
|
||||
hid_t tid = H5I_INVALID_HID; /* Datatype identifier */
|
||||
int i, n; /* Local index variables */
|
||||
int buf[10]; /* Data buffer */
|
||||
hsize_t dims[1]; /* Dimension size */
|
||||
int fd = -1; /* File descriptor */
|
||||
unsigned short val = 22; /* The refcount message ID */
|
||||
|
||||
/* Initialize data buffer */
|
||||
n = 0;
|
||||
@@ -485,6 +540,10 @@ gen_err_refcount(const char *fname)
|
||||
goto error;
|
||||
if (H5Tclose(tid) < 0)
|
||||
goto error;
|
||||
|
||||
/* Be sure to close this before opening the file again via open(), below,
|
||||
* or you'll possibly trip over the file locking.
|
||||
*/
|
||||
if (H5Fclose(fid) < 0)
|
||||
goto error;
|
||||
|
||||
@@ -495,11 +554,16 @@ gen_err_refcount(const char *fname)
|
||||
with the committed datatype */
|
||||
/* 24: the offset in the object header containing the version of the
|
||||
attribute message */
|
||||
if ((fd = HDopen(fname, O_RDWR, 0633)) >= 0) {
|
||||
HDlseek(fd, 4520 + 24, SEEK_SET);
|
||||
(void)HDwrite(fd, &val, 2);
|
||||
HDclose(fd);
|
||||
}
|
||||
if ((fd = HDopen(fname, O_RDWR, 0633)) < 0)
|
||||
goto error;
|
||||
if (HDlseek(fd, 4520 + 24, SEEK_SET) < 0)
|
||||
goto error;
|
||||
if (HDwrite(fd, &val, 2) < 0)
|
||||
goto error;
|
||||
if (HDclose(fd) < 0)
|
||||
goto error;
|
||||
|
||||
return SUCCEED;
|
||||
|
||||
error:
|
||||
H5E_BEGIN_TRY
|
||||
@@ -513,6 +577,11 @@ error:
|
||||
H5Fclose(fid);
|
||||
}
|
||||
H5E_END_TRY;
|
||||
|
||||
if (fd >= 0)
|
||||
HDclose(fd);
|
||||
|
||||
return FAIL;
|
||||
} /* gen_err_refcount() */
|
||||
|
||||
/*
|
||||
@@ -542,14 +611,22 @@ error:
|
||||
int
|
||||
main(void)
|
||||
{
|
||||
gen_newgrat_file(NEWGRAT_FILE);
|
||||
gen_threshold_file(THRESHOLD_FILE);
|
||||
if (gen_newgrat_file(NEWGRAT_FILE) < 0)
|
||||
goto error;
|
||||
if (gen_threshold_file(THRESHOLD_FILE) < 0)
|
||||
goto error;
|
||||
|
||||
/* Generate an HDF file to test for datasets with Fixed Array indexing */
|
||||
gen_idx_file(IDX_FILE);
|
||||
if (gen_idx_file(IDX_FILE) < 0)
|
||||
goto error;
|
||||
|
||||
/* Generate a file with a refcount message ID */
|
||||
gen_err_refcount(ERR_REFCOUNT_FILE);
|
||||
if (gen_err_refcount(ERR_REFCOUNT_FILE) < 0)
|
||||
goto error;
|
||||
|
||||
return 0;
|
||||
return EXIT_SUCCESS;
|
||||
|
||||
error:
|
||||
HDfprintf(stderr, "h5stat test generator FAILED\n");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
@@ -304,7 +304,7 @@ TOOLTEST h5stat_links5.ddl -g -l 40000 h5stat_newgrat.h5
|
||||
# -d --di=15
|
||||
TOOLTEST h5stat_err1_dims.ddl -d --dims=-1 h5stat_threshold.h5
|
||||
TOOLTEST h5stat_dims1.ddl -gd -m 5 h5stat_threshold.h5
|
||||
TOOLTEST h5stat_dims2.ddl -d --di=15 h5stat_threshold.h5
|
||||
TOOLTEST h5stat_dims2.ddl -d --dims=15 h5stat_threshold.h5
|
||||
#
|
||||
# Tests for -a option on h5stat_threshold.h5
|
||||
# -a -2 (incorrect threshold value)
|
||||
|
||||
@@ -397,7 +397,7 @@
|
||||
#
|
||||
# The following are tests to verify the expected exit code from h5clear:
|
||||
# "h5clear -m h5clear_mdc_image.h5" (valid option, existing file, succeed exit code)
|
||||
# "h5clear --vers" (valid option, version #, succeed exit code)
|
||||
# "h5clear --version" (valid option, version #, succeed exit code)
|
||||
# "h5clear -k" (invalid 1 option, no file, fail exit code)
|
||||
# "h5clear -k junk.h5" (invalid 1 option, nonexisting file, fail exit code)
|
||||
# "h5clear -l h5clear_sec2_v2.h5" (invalid 1 option, existing file, fail exit code)
|
||||
@@ -408,7 +408,7 @@
|
||||
# "h5clear -m -l h5clear_sec2_v0.h5" (valid/invalid 2 options, existing file, fail exit code)
|
||||
# "h5clear -l -m h5clear_sec2_v0.h5" (invalid/valid 2 options, existing file, fail exit code)
|
||||
ADD_H5_RETTEST (h5clr_mdc_image "false" "-m" h5clear_mdc_image.h5)
|
||||
ADD_H5_RETTEST (h5clr_vers "false" "--vers")
|
||||
ADD_H5_RETTEST (h5clr_vers "false" "--version")
|
||||
ADD_H5_RETTEST (h5clr_k "true" "-k")
|
||||
ADD_H5_RETTEST (h5clr_k_junk "true" "-k" junk.h5)
|
||||
ADD_H5_RETTEST (h5clr_l_sec2 "true" "-l" h5clear_sec2_v2.h5)
|
||||
|
||||
@@ -315,7 +315,7 @@ TOOLTEST_ERR orig_h5clear_sec2_v0.h5 -s -m "" h5clear_no_mdc_image.err
|
||||
#
|
||||
# The following are tests to verify the expected exit code from h5clear:
|
||||
# "h5clear -m h5clear_mdc_image.h5" (valid option, existing file, succeed exit code)
|
||||
# "h5clear --vers" (valid option, version #, succeed exit code)
|
||||
# "h5clear --version" (valid option, version #, succeed exit code)
|
||||
# "h5clear -k" (invalid 1 option, no file, fail exit code)
|
||||
# "h5clear -k junk.h5" (invalid 1 option, nonexisting file, fail exit code)
|
||||
# "h5clear -l h5clear_sec2_v2.h5" (invalid 1 option, existing file, fail exit code)
|
||||
@@ -326,7 +326,7 @@ TOOLTEST_ERR orig_h5clear_sec2_v0.h5 -s -m "" h5clear_no_mdc_image.err
|
||||
# "h5clear -m -l h5clear_sec2_v0.h5" (valid/invalid 2 options, existing file, fail exit code)
|
||||
# "h5clear -l -m h5clear_sec2_v0.h5" (invalid/valid 2 options, existing file, fail exit code)
|
||||
TOOLTEST h5clear_mdc_image.h5 -m "" $SUCCEED
|
||||
TOOLTEST "" --vers "" $SUCCEED
|
||||
TOOLTEST "" --version "" $SUCCEED
|
||||
TOOLTEST "" -k "" $FAIL
|
||||
TOOLTEST junk.h5 -k "" $FAIL
|
||||
TOOLTEST h5clear_sec2_v2.h5 -l "" $FAIL
|
||||
|
||||
@@ -4,39 +4,17 @@ project (HDF5_TOOLS_TEST_PERFORM C)
|
||||
# --------------------------------------------------------------------
|
||||
# Add the executables
|
||||
# --------------------------------------------------------------------
|
||||
#-- Adding test for h5perf_serial
|
||||
set (h5perf_serial_SOURCES
|
||||
${HDF5_TOOLS_TEST_PERFORM_SOURCE_DIR}/sio_perf.c
|
||||
${HDF5_TOOLS_TEST_PERFORM_SOURCE_DIR}/sio_engine.c
|
||||
)
|
||||
add_executable (h5perf_serial ${h5perf_serial_SOURCES})
|
||||
target_include_directories (h5perf_serial PRIVATE "${HDF5_TEST_SRC_DIR};${HDF5_SRC_DIR};${HDF5_SRC_BINARY_DIR};$<$<BOOL:${HDF5_ENABLE_PARALLEL}>:${MPI_C_INCLUDE_DIRS}>")
|
||||
if (NOT BUILD_SHARED_LIBS)
|
||||
TARGET_C_PROPERTIES (h5perf_serial STATIC)
|
||||
target_link_libraries (h5perf_serial PRIVATE ${HDF5_TOOLS_LIB_TARGET} ${HDF5_LIB_TARGET})
|
||||
else ()
|
||||
TARGET_C_PROPERTIES (h5perf_serial SHARED)
|
||||
target_link_libraries (h5perf_serial PRIVATE ${HDF5_TOOLS_LIBSH_TARGET} ${HDF5_LIBSH_TARGET})
|
||||
endif ()
|
||||
set_target_properties (h5perf_serial PROPERTIES FOLDER perform)
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Add Target to clang-format
|
||||
#-----------------------------------------------------------------------------
|
||||
if (HDF5_ENABLE_FORMATTERS)
|
||||
clang_format (HDF5_TOOLS_TEST_PERFORM_h5perf_serial_FORMAT h5perf_serial)
|
||||
endif ()
|
||||
|
||||
if (HDF5_BUILD_PERFORM_STANDALONE)
|
||||
#-- Adding test for h5perf_serial_alone - io_timer.c includes
|
||||
set (h5perf_serial_alone_SOURCES
|
||||
${HDF5_TOOLS_DIR}/lib/io_timer.c
|
||||
${HDF5_TOOLS_TEST_PERFORM_SOURCE_DIR}/sio_perf.c
|
||||
${HDF5_TOOLS_TEST_PERFORM_SOURCE_DIR}/sio_engine.c
|
||||
${HDF5_TOOLS_SRC_H5PERF_SOURCE_DIR}/sio_perf.c
|
||||
${HDF5_TOOLS_SRC_H5PERF_SOURCE_DIR}/sio_engine.c
|
||||
${HDF5_TOOLS_TEST_PERFORM_SOURCE_DIR}/sio_standalone.c
|
||||
)
|
||||
add_executable (h5perf_serial_alone ${h5perf_serial_alone_SOURCES})
|
||||
target_include_directories (h5perf_serial_alone PRIVATE "${HDF5_SRC_DIR};${HDF5_SRC_BINARY_DIR};${HDF5_TOOLS_DIR}/lib;$<$<BOOL:${HDF5_ENABLE_PARALLEL}>:${MPI_C_INCLUDE_DIRS}>")
|
||||
target_include_directories (h5perf_serial_alone PRIVATE "${HDF5_SRC_DIR};${HDF5_SRC_BINARY_DIR};${HDF5_TOOLS_DIR}/lib;${HDF5_TOOLS_SRC_H5PERF_SOURCE_DIR};${HDF5_TOOLS_TEST_PERFORM_SOURCE_DIR};$<$<BOOL:${HDF5_ENABLE_PARALLEL}>:${MPI_C_INCLUDE_DIRS}>")
|
||||
if (NOT BUILD_SHARED_LIBS)
|
||||
TARGET_C_PROPERTIES (h5perf_serial_alone STATIC)
|
||||
target_link_libraries (h5perf_serial_alone PRIVATE ${HDF5_LIB_TARGET} "$<$<BOOL:${HDF5_ENABLE_PARALLEL}>:${MPI_C_LIBRARIES}>")
|
||||
@@ -188,63 +166,16 @@ if (HDF5_ENABLE_FORMATTERS)
|
||||
endif ()
|
||||
|
||||
if (H5_HAVE_PARALLEL AND HDF5_TEST_PARALLEL)
|
||||
if (UNIX)
|
||||
#-- Adding test for perf - only on unix systems
|
||||
set (perf_SOURCES
|
||||
${HDF5_TOOLS_TEST_PERFORM_SOURCE_DIR}/perf.c
|
||||
)
|
||||
add_executable (perf ${perf_SOURCES})
|
||||
target_include_directories (perf PRIVATE "${HDF5_TEST_SRC_DIR};${HDF5_SRC_DIR};${HDF5_SRC_BINARY_DIR};$<$<BOOL:${HDF5_ENABLE_PARALLEL}>:${MPI_C_INCLUDE_DIRS}>")
|
||||
if (NOT BUILD_SHARED_LIBS)
|
||||
TARGET_C_PROPERTIES (perf STATIC)
|
||||
target_link_libraries (perf PRIVATE ${HDF5_TOOLS_LIB_TARGET} ${HDF5_TEST_LIB_TARGET} ${HDF5_LIB_TARGET})
|
||||
else ()
|
||||
TARGET_C_PROPERTIES (perf SHARED)
|
||||
target_link_libraries (perf PRIVATE ${HDF5_TOOLS_LIBSH_TARGET} ${HDF5_TEST_LIBSH_TARGET} ${HDF5_LIBSH_TARGET})
|
||||
endif ()
|
||||
set_target_properties (perf PROPERTIES FOLDER perform)
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Add Target to clang-format
|
||||
#-----------------------------------------------------------------------------
|
||||
if (HDF5_ENABLE_FORMATTERS)
|
||||
clang_format (HDF5_TOOLS_TEST_PERFORM_perf_FORMAT perf)
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
#-- Adding test for h5perf
|
||||
set (h5perf_SOURCES
|
||||
${HDF5_TOOLS_TEST_PERFORM_SOURCE_DIR}/pio_perf.c
|
||||
${HDF5_TOOLS_TEST_PERFORM_SOURCE_DIR}/pio_engine.c
|
||||
)
|
||||
add_executable (h5perf ${h5perf_SOURCES})
|
||||
target_include_directories (h5perf PRIVATE "${HDF5_SRC_DIR};${HDF5_SRC_BINARY_DIR};$<$<BOOL:${HDF5_ENABLE_PARALLEL}>:${MPI_C_INCLUDE_DIRS}>")
|
||||
if (NOT BUILD_SHARED_LIBS)
|
||||
TARGET_C_PROPERTIES (h5perf STATIC)
|
||||
target_link_libraries (h5perf PRIVATE ${HDF5_TOOLS_LIB_TARGET} ${HDF5_TEST_LIB_TARGET} ${HDF5_LIB_TARGET})
|
||||
else ()
|
||||
TARGET_C_PROPERTIES (h5perf SHARED)
|
||||
target_link_libraries (h5perf PRIVATE ${HDF5_TOOLS_LIBSH_TARGET} ${HDF5_TEST_LIBSH_TARGET} ${HDF5_LIBSH_TARGET})
|
||||
endif ()
|
||||
set_target_properties (h5perf PROPERTIES FOLDER perform)
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Add Target to clang-format
|
||||
#-----------------------------------------------------------------------------
|
||||
if (HDF5_ENABLE_FORMATTERS)
|
||||
clang_format (HDF5_TOOLS_TEST_PERFORM_h5perf_FORMAT h5perf)
|
||||
endif ()
|
||||
|
||||
if (HDF5_BUILD_PERFORM_STANDALONE)
|
||||
#-- Adding test for h5perf
|
||||
set (h5perf_alone_SOURCES
|
||||
${HDF5_TOOLS_DIR}/lib/io_timer.c
|
||||
${HDF5_TOOLS_TEST_PERFORM_SOURCE_DIR}/pio_perf.c
|
||||
${HDF5_TOOLS_TEST_PERFORM_SOURCE_DIR}/pio_engine.c
|
||||
${HDF5_TOOLS_SRC_H5PERF_SOURCE_DIR}/pio_perf.c
|
||||
${HDF5_TOOLS_SRC_H5PERF_SOURCE_DIR}/pio_engine.c
|
||||
${HDF5_TOOLS_TEST_PERFORM_SOURCE_DIR}/pio_standalone.c
|
||||
)
|
||||
add_executable (h5perf_alone ${h5perf_alone_SOURCES})
|
||||
target_include_directories (h5perf_alone PRIVATE "${HDF5_SRC_DIR};${HDF5_SRC_BINARY_DIR};${HDF5_TOOLS_DIR}/lib;$<$<BOOL:${HDF5_ENABLE_PARALLEL}>:${MPI_C_INCLUDE_DIRS}>")
|
||||
target_include_directories (h5perf_alone PRIVATE "${HDF5_SRC_DIR};${HDF5_SRC_BINARY_DIR};${HDF5_TOOLS_DIR}/lib;${HDF5_TOOLS_SRC_H5PERF_SOURCE_DIR};${HDF5_TOOLS_TEST_PERFORM_SOURCE_DIR};$<$<BOOL:${HDF5_ENABLE_PARALLEL}>:${MPI_C_INCLUDE_DIRS}>")
|
||||
if (NOT BUILD_SHARED_LIBS)
|
||||
TARGET_C_PROPERTIES (h5perf_alone STATIC)
|
||||
target_link_libraries (h5perf_alone PRIVATE ${HDF5_LIB_TARGET} ${LINK_LIBS} "$<$<BOOL:${HDF5_ENABLE_PARALLEL}>:${MPI_C_LIBRARIES}>")
|
||||
|
||||
@@ -21,17 +21,6 @@ include $(top_srcdir)/config/commence.am
|
||||
|
||||
AM_CPPFLAGS+=-I$(top_srcdir)/src -I$(top_srcdir)/test -I$(top_srcdir)/tools/lib
|
||||
|
||||
# bin_PROGRAMS will be installed.
|
||||
if BUILD_PARALLEL_CONDITIONAL
|
||||
bin_PROGRAMS=h5perf_serial h5perf
|
||||
else
|
||||
bin_PROGRAMS=h5perf_serial
|
||||
endif
|
||||
|
||||
# Add h5perf and h5perf_serial specific linker flags here
|
||||
h5perf_LDFLAGS = $(LT_STATIC_EXEC) $(AM_LDFLAGS)
|
||||
h5perf_serial_LDFLAGS = $(LT_STATIC_EXEC) $(AM_LDFLAGS)
|
||||
|
||||
# Some programs are not built or run by default, but can be built by hand or by
|
||||
# specifying --enable-build-all at configure time.
|
||||
# Also, some of these programs should only be built in parallel.
|
||||
@@ -47,18 +36,15 @@ endif
|
||||
# List them in the order they should be run.
|
||||
# Parallel test programs.
|
||||
if BUILD_PARALLEL_CONDITIONAL
|
||||
TEST_PROG_PARA=h5perf perf
|
||||
TEST_PROG_PARA=
|
||||
endif
|
||||
# Serial test programs.
|
||||
TEST_PROG = iopipe chunk chunk_cache overhead zip_perf perf_meta h5perf_serial $(BUILD_ALL_PROGS)
|
||||
TEST_PROG = iopipe chunk chunk_cache overhead zip_perf perf_meta $(BUILD_ALL_PROGS)
|
||||
|
||||
# check_PROGRAMS will be built but not installed. Do not any executable
|
||||
# that is in bin_PROGRAMS already. Otherwise, it will be removed twice in
|
||||
# "make clean" and some systems, e.g., AIX, do not like it.
|
||||
check_PROGRAMS= iopipe chunk chunk_cache overhead zip_perf perf_meta $(BUILD_ALL_PROGS) perf
|
||||
|
||||
h5perf_SOURCES=pio_perf.c pio_engine.c
|
||||
h5perf_serial_SOURCES=sio_perf.c sio_engine.c
|
||||
check_PROGRAMS= $(TEST_PROG) $(BUILD_ALL_PROGS)
|
||||
|
||||
# These are the files that `make clean' (and derivatives) will remove from
|
||||
# this directory.
|
||||
@@ -67,9 +53,6 @@ CLEANFILES=*.h5 *.raw *.dat x-gnuplot perftest.out
|
||||
# All of the programs depend on the main hdf5 library, and some of them
|
||||
# depend on test or tools library.
|
||||
LDADD=$(LIBHDF5)
|
||||
h5perf_LDADD=$(LIBH5TOOLS) $(LIBH5TEST) $(LIBHDF5)
|
||||
h5perf_serial_LDADD=$(LIBH5TOOLS) $(LIBH5TEST) $(LIBHDF5)
|
||||
perf_LDADD=$(LIBH5TEST) $(LIBHDF5)
|
||||
iopipe_LDADD=$(LIBH5TEST) $(LIBHDF5)
|
||||
zip_perf_LDADD=$(LIBH5TOOLS) $(LIBH5TEST) $(LIBHDF5)
|
||||
perf_meta_LDADD=$(LIBH5TEST) $(LIBHDF5)
|
||||
|
||||
@@ -24,10 +24,12 @@
|
||||
#undef NDEBUG
|
||||
#include "hdf5.h"
|
||||
|
||||
#ifdef H5_STDC_HEADERS
|
||||
#include <assert.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#endif
|
||||
|
||||
/* Solaris Studio defines attribute, but for the attributes we need */
|
||||
#if !defined(H5_HAVE_ATTRIBUTE) || defined __cplusplus || defined(__SUNPRO_C)
|
||||
|
||||
@@ -26,9 +26,9 @@
|
||||
#define RANK 2
|
||||
|
||||
#define DSET1_NAME "partial_chunks"
|
||||
#define DSET1_DIM1 9 * 1000
|
||||
#define DSET1_DIM1 (9 * 1000)
|
||||
#define DSET1_DIM2 9
|
||||
#define CHUNK1_DIM1 2 * 1000
|
||||
#define CHUNK1_DIM1 (2 * 1000)
|
||||
#define CHUNK1_DIM2 2
|
||||
|
||||
#define DSET2_NAME "hash_value"
|
||||
@@ -38,7 +38,7 @@
|
||||
#define CHUNK2_DIM2 100
|
||||
|
||||
#define RDCC_NSLOTS 5
|
||||
#define RDCC_NBYTES 1024 * 1024 * 10
|
||||
#define RDCC_NBYTES (1024 * 1024 * 10)
|
||||
#define RDCC_W0 0.75F
|
||||
|
||||
#define FILTER_COUNTER 306
|
||||
|
||||
@@ -23,11 +23,14 @@
|
||||
|
||||
#if !defined(WIN32) && !defined(__MINGW32__)
|
||||
|
||||
#include <math.h>
|
||||
|
||||
#ifdef H5_STDC_HEADERS
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <math.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#endif
|
||||
|
||||
#ifdef H5_HAVE_UNISTD_H
|
||||
#include <sys/types.h>
|
||||
|
||||
@@ -95,6 +95,7 @@ print_stats(const char *prefix,
|
||||
static void
|
||||
synchronize(void)
|
||||
{
|
||||
#ifdef H5_HAVE_SYSTEM
|
||||
#if defined(H5_HAVE_WIN32_API) && !defined(__CYGWIN__)
|
||||
_flushall();
|
||||
#else
|
||||
@@ -106,6 +107,7 @@ synchronize(void)
|
||||
status = HDsystem("df >/dev/null");
|
||||
HDassert(status >= 0);
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
|
||||
@@ -23,11 +23,17 @@
|
||||
#include "hdf5.h"
|
||||
#include "H5private.h"
|
||||
|
||||
#ifdef H5_STDC_HEADERS
|
||||
#include <ctype.h>
|
||||
#include <fcntl.h>
|
||||
#include <stdlib.h>
|
||||
#include <sys/stat.h>
|
||||
#include <string.h>
|
||||
#endif
|
||||
|
||||
#ifdef H5_HAVE_IO_H
|
||||
#include <io.h>
|
||||
#endif
|
||||
|
||||
#ifdef H5_HAVE_UNISTD_H
|
||||
#include <sys/types.h>
|
||||
|
||||
@@ -17,10 +17,6 @@
|
||||
|
||||
#include "pio_perf.h"
|
||||
|
||||
#ifdef STANDALONE
|
||||
MPI_Info h5_io_info_g = MPI_INFO_NULL; /* MPI INFO object for IO */
|
||||
#endif
|
||||
|
||||
/** From h5tools_utils.c **/
|
||||
|
||||
/* global variables */
|
||||
@@ -156,134 +152,3 @@ print_version(const char *progname)
|
||||
printf("%s: Version %u.%u.%u%s%s\n", progname, H5_VERS_MAJOR, H5_VERS_MINOR, H5_VERS_RELEASE,
|
||||
H5_VERS_SUBRELEASE[0] ? "-" : "", H5_VERS_SUBRELEASE);
|
||||
}
|
||||
|
||||
#ifdef STANDALONE
|
||||
/*
|
||||
* Function: h5_set_info_object
|
||||
* Purpose: Process environment variables setting to set up MPI Info
|
||||
* object.
|
||||
* Return: 0 if all is fine; otherwise non-zero.
|
||||
* Programmer: Albert Cheng, 2002/05/21.
|
||||
* Modifications:
|
||||
* Bill Wendling, 2002/05/31
|
||||
* Modified so that the HDF5_MPI_INFO environment variable can
|
||||
* be a semicolon separated list of "key=value" pairings. Most
|
||||
* of the code is to remove any whitespaces which might be
|
||||
* surrounding the "key=value" pairs.
|
||||
*/
|
||||
int
|
||||
h5_set_info_object(void)
|
||||
{
|
||||
char *envp; /* environment pointer */
|
||||
int ret_value = 0;
|
||||
|
||||
/* handle any MPI INFO hints via $HDF5_MPI_INFO */
|
||||
if ((envp = HDgetenv("HDF5_MPI_INFO")) != NULL) {
|
||||
char *next, *valp;
|
||||
|
||||
valp = envp = next = HDstrdup(envp);
|
||||
|
||||
if (!valp)
|
||||
return 0;
|
||||
|
||||
/* create an INFO object if not created yet */
|
||||
if (h5_io_info_g == MPI_INFO_NULL)
|
||||
MPI_Info_create(&h5_io_info_g);
|
||||
|
||||
do {
|
||||
size_t len;
|
||||
char * key_val, *endp, *namep;
|
||||
|
||||
if (*valp == ';')
|
||||
valp++;
|
||||
|
||||
/* copy key/value pair into temporary buffer */
|
||||
len = strcspn(valp, ";");
|
||||
next = &valp[len];
|
||||
key_val = (char *)HDcalloc(1, len + 1);
|
||||
|
||||
/* increment the next pointer past the terminating semicolon */
|
||||
if (*next == ';')
|
||||
++next;
|
||||
|
||||
namep = HDstrncpy(key_val, valp, len);
|
||||
|
||||
/* pass up any beginning whitespaces */
|
||||
while (*namep && (*namep == ' ' || *namep == '\t'))
|
||||
namep++;
|
||||
|
||||
if (!*namep)
|
||||
continue; /* was all white space, so move to next k/v pair */
|
||||
|
||||
/* eat up any ending white spaces */
|
||||
endp = &namep[HDstrlen(namep) - 1];
|
||||
|
||||
while (endp && (*endp == ' ' || *endp == '\t'))
|
||||
*endp-- = '\0';
|
||||
|
||||
/* find the '=' */
|
||||
valp = HDstrchr(namep, '=');
|
||||
|
||||
if (valp != NULL) { /* it's a valid key/value pairing */
|
||||
char *tmp_val = valp + 1;
|
||||
|
||||
/* change '=' to \0, move valp down one */
|
||||
*valp-- = '\0';
|
||||
|
||||
/* eat up ending whitespace on the "key" part */
|
||||
while (*valp == ' ' || *valp == '\t')
|
||||
*valp-- = '\0';
|
||||
|
||||
valp = tmp_val;
|
||||
|
||||
/* eat up beginning whitespace on the "value" part */
|
||||
while (*valp == ' ' || *valp == '\t')
|
||||
*valp++ = '\0';
|
||||
|
||||
/* actually set the darned thing */
|
||||
if (MPI_SUCCESS != MPI_Info_set(h5_io_info_g, namep, valp)) {
|
||||
HDprintf("MPI_Info_set failed\n");
|
||||
ret_value = -1;
|
||||
}
|
||||
}
|
||||
|
||||
valp = next;
|
||||
HDfree(key_val);
|
||||
} while (next && *next);
|
||||
|
||||
HDfree(envp);
|
||||
}
|
||||
|
||||
return ret_value;
|
||||
}
|
||||
|
||||
/*
|
||||
* Function: h5_dump_info_object
|
||||
* Purpose: Display content of an MPI Info object
|
||||
* Return: void
|
||||
* Programmer: Albert Cheng 2002/05/21
|
||||
* Modifications:
|
||||
*/
|
||||
void
|
||||
h5_dump_info_object(MPI_Info info)
|
||||
{
|
||||
char key[MPI_MAX_INFO_KEY + 1];
|
||||
char value[MPI_MAX_INFO_VAL + 1];
|
||||
int flag;
|
||||
int i, nkeys;
|
||||
|
||||
HDprintf("Dumping MPI Info Object (up to %d bytes per item):\n", MPI_MAX_INFO_VAL);
|
||||
if (info == MPI_INFO_NULL) {
|
||||
HDprintf("object is MPI_INFO_NULL\n");
|
||||
}
|
||||
else {
|
||||
MPI_Info_get_nkeys(info, &nkeys);
|
||||
HDprintf("object has %d items\n", nkeys);
|
||||
for (i = 0; i < nkeys; i++) {
|
||||
MPI_Info_get_nthkey(info, i, key);
|
||||
MPI_Info_get(info, key, MPI_MAX_INFO_VAL, value, &flag);
|
||||
HDprintf("%s=%s\n", key, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif /* STANDALONE */
|
||||
|
||||
@@ -21,6 +21,10 @@
|
||||
|
||||
#include "H5public.h" /* Include Public Definitions */
|
||||
|
||||
/*
|
||||
* Include ANSI-C header files.
|
||||
*/
|
||||
#ifdef H5_STDC_HEADERS
|
||||
#include <assert.h>
|
||||
#include <ctype.h>
|
||||
#include <errno.h>
|
||||
@@ -33,6 +37,7 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Redefine all the POSIX functions. We should never see a POSIX
|
||||
@@ -458,17 +463,6 @@ extern char * strdup(const char *s);
|
||||
#define TRUE true
|
||||
#endif
|
||||
|
||||
/** From h5test.h **/
|
||||
|
||||
#ifdef H5_HAVE_PARALLEL
|
||||
extern MPI_Info h5_io_info_g; /* MPI INFO object for IO */
|
||||
#endif
|
||||
|
||||
#ifdef H5_HAVE_PARALLEL
|
||||
int h5_set_info_object(void);
|
||||
void h5_dump_info_object(MPI_Info info);
|
||||
#endif
|
||||
|
||||
/** From h5tools_utils.h **/
|
||||
|
||||
H5_DLLVAR int H5_opterr; /* getoption prints errors if this is on */
|
||||
|
||||
@@ -21,6 +21,10 @@
|
||||
|
||||
#include "H5public.h" /* Include Public Definitions */
|
||||
|
||||
/*
|
||||
* Include ANSI-C header files.
|
||||
*/
|
||||
#ifdef H5_STDC_HEADERS
|
||||
#include <assert.h>
|
||||
#include <ctype.h>
|
||||
#include <errno.h>
|
||||
@@ -33,6 +37,7 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#endif
|
||||
|
||||
/* maximum of two, three, or four values */
|
||||
#undef MAX
|
||||
@@ -473,17 +478,6 @@ extern char * strdup(const char *s);
|
||||
#define TRUE true
|
||||
#endif
|
||||
|
||||
/** From h5test.h **/
|
||||
|
||||
#ifdef H5_HAVE_PARALLEL
|
||||
extern MPI_Info h5_io_info_g; /* MPI INFO object for IO */
|
||||
#endif
|
||||
|
||||
#ifdef H5_HAVE_PARALLEL
|
||||
int h5_set_info_object(void);
|
||||
void h5_dump_info_object(MPI_Info info);
|
||||
#endif
|
||||
|
||||
/** From h5tools_utils.h **/
|
||||
|
||||
H5_DLLVAR int H5_opterr; /* getoption prints errors if this is on */
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
#define MICROSECOND 1000000.0
|
||||
|
||||
/* report 0.0 in case t is zero too */
|
||||
#define MB_PER_SEC(bytes, t) ((fabs(t) < 0.0000000001) ? 0.0 : ((((double)bytes) / (double)ONE_MB) / (t)))
|
||||
#define MB_PER_SEC(bytes, t) ((fabs(t) < 0.0000000001) ? 0.0 : ((((double)(bytes)) / (double)ONE_MB) / (t)))
|
||||
|
||||
#ifndef TRUE
|
||||
#define TRUE 1
|
||||
@@ -67,62 +67,11 @@ static void compress_buffer(Bytef *dest, uLongf *destLen, const Bytef *source, u
|
||||
static const char * s_opts = "hB:b:c:p:rs:0123456789";
|
||||
static struct h5_long_options l_opts[] = {{"help", no_arg, 'h'},
|
||||
{"compressability", require_arg, 'c'},
|
||||
{"compressabilit", require_arg, 'c'},
|
||||
{"compressabili", require_arg, 'c'},
|
||||
{"compressabil", require_arg, 'c'},
|
||||
{"compressabi", require_arg, 'c'},
|
||||
{"compressab", require_arg, 'c'},
|
||||
{"compressa", require_arg, 'c'},
|
||||
{"compress", require_arg, 'c'},
|
||||
{"compres", require_arg, 'c'},
|
||||
{"compre", require_arg, 'c'},
|
||||
{"compr", require_arg, 'c'},
|
||||
{"comp", require_arg, 'c'},
|
||||
{"com", require_arg, 'c'},
|
||||
{"co", require_arg, 'c'},
|
||||
{"file-size", require_arg, 's'},
|
||||
{"file-siz", require_arg, 's'},
|
||||
{"file-si", require_arg, 's'},
|
||||
{"file-s", require_arg, 's'},
|
||||
{"file", require_arg, 's'},
|
||||
{"fil", require_arg, 's'},
|
||||
{"fi", require_arg, 's'},
|
||||
{"max-buffer-size", require_arg, 'B'},
|
||||
{"max-buffer-siz", require_arg, 'B'},
|
||||
{"max-buffer-si", require_arg, 'B'},
|
||||
{"max-buffer-s", require_arg, 'B'},
|
||||
{"max-buffer", require_arg, 'B'},
|
||||
{"max-buffe", require_arg, 'B'},
|
||||
{"max-buff", require_arg, 'B'},
|
||||
{"max-buf", require_arg, 'B'},
|
||||
{"max-bu", require_arg, 'B'},
|
||||
{"max-b", require_arg, 'B'},
|
||||
{"max", require_arg, 'B'},
|
||||
{"min-buffer-size", require_arg, 'b'},
|
||||
{"min-buffer-siz", require_arg, 'b'},
|
||||
{"min-buffer-si", require_arg, 'b'},
|
||||
{"min-buffer-s", require_arg, 'b'},
|
||||
{"min-buffer", require_arg, 'b'},
|
||||
{"min-buffe", require_arg, 'b'},
|
||||
{"min-buff", require_arg, 'b'},
|
||||
{"min-buf", require_arg, 'b'},
|
||||
{"min-bu", require_arg, 'b'},
|
||||
{"min-b", require_arg, 'b'},
|
||||
{"min", require_arg, 'b'},
|
||||
{"prefix", require_arg, 'p'},
|
||||
{"prefi", require_arg, 'p'},
|
||||
{"pref", require_arg, 'p'},
|
||||
{"pre", require_arg, 'p'},
|
||||
{"pr", require_arg, 'p'},
|
||||
{"random-test", no_arg, 'r'},
|
||||
{"random-tes", no_arg, 'r'},
|
||||
{"random-te", no_arg, 'r'},
|
||||
{"random-t", no_arg, 'r'},
|
||||
{"random", no_arg, 'r'},
|
||||
{"rando", no_arg, 'r'},
|
||||
{"rand", no_arg, 'r'},
|
||||
{"ran", no_arg, 'r'},
|
||||
{"ra", no_arg, 'r'},
|
||||
{NULL, 0, '\0'}};
|
||||
|
||||
/*
|
||||
|
||||
Reference in New Issue
Block a user