mirror of
https://github.com/HDFGroup/hdf5.git
synced 2025-01-18 15:15:56 +08:00
Removes the ability to build h5perf and h5perf_serial in standalone mode (#1897)
This feature has been broken for some time and lacks a clear use case.
This commit is contained in:
parent
4461678fb5
commit
363e3ecef8
@ -132,6 +132,21 @@ New Features
|
||||
|
||||
Tools:
|
||||
------
|
||||
- Building h5perf/h5perf_serial in "standalone mode" has been removed
|
||||
|
||||
Building h5perf separately from the library was added circa 2008
|
||||
in HDF5 1.6.8. It's unclear what purpose this serves and the current
|
||||
implementation is currently broken. The existing files require
|
||||
H5private.h and the symbols we use to determine how the copied
|
||||
platform-independence scheme should be used come from H5pubconf.h,
|
||||
which may not match the compiler being used to build standalone h5perf.
|
||||
|
||||
Due to the maintenance overhead and lack of a clear use case, support
|
||||
for building h5perf and h5perf_serial separately from the HDF5 library
|
||||
has been removed.
|
||||
|
||||
(DER - 2022/07/15)
|
||||
|
||||
- The perf tool has been removed
|
||||
|
||||
The small `perf` tool didn't really do anything special and the name
|
||||
|
@ -14,17 +14,7 @@
|
||||
#ifndef IO_TIMER
|
||||
#define IO_TIMER
|
||||
|
||||
#include "hdf5.h"
|
||||
|
||||
#include <time.h>
|
||||
|
||||
#ifdef H5_HAVE_SYS_TIME_H
|
||||
#include <sys/time.h>
|
||||
#endif
|
||||
|
||||
#ifdef H5_HAVE_WIN32_API
|
||||
#include <winsock2.h>
|
||||
#endif
|
||||
#include "H5private.h"
|
||||
|
||||
/* The different types of timers we can have */
|
||||
typedef enum timer_type_ {
|
||||
@ -64,25 +54,17 @@ typedef struct io_time_t {
|
||||
struct timeval sys_timer[NUM_TIMERS];
|
||||
} io_time_t;
|
||||
|
||||
/* External function declarations */
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
#endif
|
||||
|
||||
#ifdef STANDALONE
|
||||
io_time_t *io_time_new(clock_type t);
|
||||
void io_time_destroy(io_time_t *pt);
|
||||
io_time_t *io_time_set(io_time_t *pt, timer_type t, int start_stop);
|
||||
double io_time_get(io_time_t *pt, timer_type t);
|
||||
#else
|
||||
H5TOOLS_DLL io_time_t *io_time_new(clock_type t);
|
||||
H5TOOLS_DLL void io_time_destroy(io_time_t *pt);
|
||||
H5TOOLS_DLL io_time_t *io_time_set(io_time_t *pt, timer_type t, int start_stop);
|
||||
H5TOOLS_DLL double io_time_get(io_time_t *pt, timer_type t);
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
#endif
|
||||
|
||||
#endif /* IO_TIMER */
|
||||
|
@ -80,11 +80,6 @@
|
||||
#define PIO_MPI 0x2
|
||||
#define PIO_HDF5 0x4
|
||||
|
||||
#ifdef STANDALONE
|
||||
#define DBL_EPSILON 2.2204460492503131e-16
|
||||
#define H5_DBL_ABS_EQUAL(X, Y) (fabs((X) - (Y)) < DBL_EPSILON)
|
||||
#endif
|
||||
|
||||
/* 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) / ONE_MB) / (t)))
|
||||
|
||||
@ -220,10 +215,8 @@ main(int argc, char *argv[])
|
||||
int exit_value = EXIT_SUCCESS;
|
||||
struct options *opts = NULL;
|
||||
|
||||
#ifndef STANDALONE
|
||||
/* Initialize h5tools lib */
|
||||
h5tools_init();
|
||||
#endif
|
||||
|
||||
output = stdout;
|
||||
|
||||
|
@ -13,15 +13,10 @@
|
||||
#ifndef PIO_PERF_H
|
||||
#define PIO_PERF_H
|
||||
|
||||
#ifndef STANDALONE
|
||||
#include "io_timer.h"
|
||||
#include "H5private.h"
|
||||
#include "h5tools.h"
|
||||
#include "h5tools_utils.h"
|
||||
#else
|
||||
#include "io_timer.h"
|
||||
#include "pio_standalone.h"
|
||||
#endif
|
||||
|
||||
#ifdef H5_HAVE_PARALLEL
|
||||
extern MPI_Info h5_io_info_g; /* MPI INFO object for IO */
|
||||
|
@ -190,10 +190,8 @@ main(int argc, char *argv[])
|
||||
int exit_value = EXIT_SUCCESS;
|
||||
struct options *opts = NULL;
|
||||
|
||||
#ifndef STANDALONE
|
||||
/* Initialize h5tools lib */
|
||||
h5tools_init();
|
||||
#endif
|
||||
|
||||
output = stdout;
|
||||
|
||||
|
@ -13,15 +13,10 @@
|
||||
#ifndef SIO_PERF_H
|
||||
#define SIO_PERF_H
|
||||
|
||||
#ifndef STANDALONE
|
||||
#include "io_timer.h"
|
||||
#include "H5private.h"
|
||||
#include "h5tools.h"
|
||||
#include "h5tools_utils.h"
|
||||
#else
|
||||
#include "io_timer.h"
|
||||
#include "sio_standalone.h"
|
||||
#endif
|
||||
|
||||
/* setup the dataset no fill option if this is v1.5 or more */
|
||||
#if H5_VERS_MAJOR > 1 || H5_VERS_MINOR > 4
|
||||
|
@ -1,39 +1,9 @@
|
||||
cmake_minimum_required (VERSION 3.12)
|
||||
project (HDF5_TOOLS_TEST_PERFORM C)
|
||||
|
||||
# --------------------------------------------------------------------
|
||||
# Add the executables
|
||||
# --------------------------------------------------------------------
|
||||
|
||||
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_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;${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}>")
|
||||
else ()
|
||||
TARGET_C_PROPERTIES (h5perf_serial_alone SHARED)
|
||||
target_link_libraries (h5perf_serial_alone PRIVATE ${HDF5_LIBSH_TARGET} "$<$<BOOL:${HDF5_ENABLE_PARALLEL}>:${MPI_C_LIBRARIES}>")
|
||||
endif ()
|
||||
set_target_properties (h5perf_serial_alone PROPERTIES FOLDER perform)
|
||||
set_property (TARGET h5perf_serial_alone APPEND PROPERTY COMPILE_DEFINITIONS STANDALONE)
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Add Target to clang-format
|
||||
#-----------------------------------------------------------------------------
|
||||
if (HDF5_ENABLE_FORMATTERS)
|
||||
clang_format (HDF5_TOOLS_TEST_PERFORM_h5perf_serial_alone_FORMAT h5perf_serial_alone)
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
#-- Adding test for chunk
|
||||
#-----------------------------------------------------------------------------
|
||||
# chunk
|
||||
#-----------------------------------------------------------------------------
|
||||
set (chunk_SOURCES
|
||||
${HDF5_TOOLS_TEST_PERFORM_SOURCE_DIR}/chunk.c
|
||||
)
|
||||
@ -48,14 +18,13 @@ else ()
|
||||
endif ()
|
||||
set_target_properties (chunk PROPERTIES FOLDER perform)
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Add Target to clang-format
|
||||
#-----------------------------------------------------------------------------
|
||||
if (HDF5_ENABLE_FORMATTERS)
|
||||
clang_format (HDF5_TOOLS_TEST_PERFORM_chunk_FORMAT chunk)
|
||||
endif ()
|
||||
|
||||
#-- Adding test for iopipe
|
||||
#-----------------------------------------------------------------------------
|
||||
# iopipe
|
||||
#-----------------------------------------------------------------------------
|
||||
set (iopipe_SOURCES
|
||||
${HDF5_TOOLS_TEST_PERFORM_SOURCE_DIR}/iopipe.c
|
||||
)
|
||||
@ -70,14 +39,13 @@ else ()
|
||||
endif ()
|
||||
set_target_properties (iopipe PROPERTIES FOLDER perform)
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Add Target to clang-format
|
||||
#-----------------------------------------------------------------------------
|
||||
if (HDF5_ENABLE_FORMATTERS)
|
||||
clang_format (HDF5_TOOLS_TEST_PERFORM_iopipe_FORMAT iopipe)
|
||||
endif ()
|
||||
|
||||
#-- Adding test for chunk_cache
|
||||
#-----------------------------------------------------------------------------
|
||||
# chunk_cache
|
||||
#-----------------------------------------------------------------------------
|
||||
set (chunk_cache_SOURCES
|
||||
${HDF5_TOOLS_TEST_PERFORM_SOURCE_DIR}/chunk_cache.c
|
||||
)
|
||||
@ -92,14 +60,13 @@ else ()
|
||||
endif ()
|
||||
set_target_properties (chunk_cache PROPERTIES FOLDER perform)
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Add Target to clang-format
|
||||
#-----------------------------------------------------------------------------
|
||||
if (HDF5_ENABLE_FORMATTERS)
|
||||
clang_format (HDF5_TOOLS_TEST_PERFORM_chunk_cache_FORMAT chunk_cache)
|
||||
endif ()
|
||||
|
||||
#-- Adding test for overhead
|
||||
#-----------------------------------------------------------------------------
|
||||
# overhead
|
||||
#-----------------------------------------------------------------------------
|
||||
set (overhead_SOURCES
|
||||
${HDF5_TOOLS_TEST_PERFORM_SOURCE_DIR}/overhead.c
|
||||
)
|
||||
@ -114,14 +81,13 @@ else ()
|
||||
endif ()
|
||||
set_target_properties (overhead PROPERTIES FOLDER perform)
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Add Target to clang-format
|
||||
#-----------------------------------------------------------------------------
|
||||
if (HDF5_ENABLE_FORMATTERS)
|
||||
clang_format (HDF5_TOOLS_TEST_PERFORM_overhead_FORMAT overhead)
|
||||
endif ()
|
||||
|
||||
#-- Adding test for perf_meta
|
||||
#-----------------------------------------------------------------------------
|
||||
# perf_meta
|
||||
#-----------------------------------------------------------------------------
|
||||
set (perf_meta_SOURCES
|
||||
${HDF5_TOOLS_TEST_PERFORM_SOURCE_DIR}/perf_meta.c
|
||||
)
|
||||
@ -136,14 +102,13 @@ else ()
|
||||
endif ()
|
||||
set_target_properties (perf_meta PROPERTIES FOLDER perform)
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Add Target to clang-format
|
||||
#-----------------------------------------------------------------------------
|
||||
if (HDF5_ENABLE_FORMATTERS)
|
||||
clang_format (HDF5_TOOLS_TEST_PERFORM_perf_meta_FORMAT perf_meta)
|
||||
endif ()
|
||||
|
||||
#-- Adding test for zip_perf
|
||||
#-----------------------------------------------------------------------------
|
||||
# zip_perf
|
||||
#-----------------------------------------------------------------------------
|
||||
set (zip_perf_SOURCES
|
||||
${HDF5_TOOLS_TEST_PERFORM_SOURCE_DIR}/zip_perf.c
|
||||
)
|
||||
@ -158,45 +123,10 @@ else ()
|
||||
endif ()
|
||||
set_target_properties (zip_perf PROPERTIES FOLDER perform)
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Add Target to clang-format
|
||||
#-----------------------------------------------------------------------------
|
||||
if (HDF5_ENABLE_FORMATTERS)
|
||||
clang_format (HDF5_TOOLS_TEST_PERFORM_zip_perf_FORMAT zip_perf)
|
||||
endif ()
|
||||
|
||||
if (H5_HAVE_PARALLEL AND HDF5_TEST_PARALLEL)
|
||||
if (HDF5_BUILD_PERFORM_STANDALONE)
|
||||
#-- Adding test for h5perf
|
||||
set (h5perf_alone_SOURCES
|
||||
${HDF5_TOOLS_DIR}/lib/io_timer.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;${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}>")
|
||||
else ()
|
||||
TARGET_C_PROPERTIES (h5perf_alone SHARED)
|
||||
target_link_libraries (h5perf_alone PRIVATE ${HDF5_LIBSH_TARGET} ${LINK_LIBS} "$<$<BOOL:${HDF5_ENABLE_PARALLEL}>:${MPI_C_LIBRARIES}>")
|
||||
endif ()
|
||||
set_target_properties (h5perf_alone PROPERTIES FOLDER perform)
|
||||
set_property (TARGET h5perf_alone
|
||||
APPEND PROPERTY COMPILE_DEFINITIONS STANDALONE
|
||||
)
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Add Target to clang-format
|
||||
#-----------------------------------------------------------------------------
|
||||
if (HDF5_ENABLE_FORMATTERS)
|
||||
clang_format (HDF5_TOOLS_TEST_PERFORM_h5perf_alone_FORMAT h5perf_alone)
|
||||
endif ()
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
if (HDF5_TEST_TOOLS)
|
||||
include (CMakeTests.cmake)
|
||||
endif ()
|
||||
|
@ -72,10 +72,6 @@ if (HDF5_TEST_SERIAL)
|
||||
DEPENDS "PERFORM_h5perform-clearall-objects"
|
||||
)
|
||||
|
||||
if (HDF5_BUILD_PERFORM_STANDALONE)
|
||||
add_test (NAME PERFORM_h5perf_serial_alone COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:h5perf_serial_alone>)
|
||||
endif ()
|
||||
|
||||
if (HDF5_ENABLE_USING_MEMCHECKER)
|
||||
add_test (NAME PERFORM_chunk COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:chunk>)
|
||||
else ()
|
||||
@ -194,7 +190,4 @@ endif ()
|
||||
if (H5_HAVE_PARALLEL AND HDF5_TEST_PARALLEL)
|
||||
add_test (NAME MPI_TEST_PERFORM_h5perf COMMAND ${MPIEXEC_EXECUTABLE} ${MPIEXEC_NUMPROC_FLAG} ${MPIEXEC_MAX_NUMPROCS} ${MPIEXEC_PREFLAGS} $<TARGET_FILE:h5perf> ${MPIEXEC_POSTFLAGS})
|
||||
|
||||
if (HDF5_BUILD_PERFORM_STANDALONE)
|
||||
add_test (NAME MPI_TEST_PERFORM_h5perf_alone COMMAND ${MPIEXEC_EXECUTABLE} ${MPIEXEC_NUMPROC_FLAG} ${MPIEXEC_MAX_NUMPROCS} ${MPIEXEC_PREFLAGS} $<TARGET_FILE:h5perf_alone> ${MPIEXEC_POSTFLAGS})
|
||||
endif ()
|
||||
endif ()
|
||||
|
@ -1,26 +0,0 @@
|
||||
#! /bin/sh -x
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
# Name: build_h5perf_alone.sh
|
||||
#
|
||||
# Puporse: Build the h5perf tool by standalone mode.
|
||||
#
|
||||
# Created: Albert Cheng, 2005/09/18
|
||||
#
|
||||
# Modification:
|
||||
#
|
||||
|
||||
# Default to use h5pcc to build h5perf unless $H5CC is defined.
|
||||
#
|
||||
h5pcc=${H5CC:-h5pcc}
|
||||
$h5pcc -DSTANDALONE pio_perf.c pio_engine.c pio_timer.c -o h5perf
|
@ -1,26 +0,0 @@
|
||||
#! /bin/sh -x
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
# Name: build_h5perf_serial_alone.sh
|
||||
#
|
||||
# Puporse: Build the h5perf_serial tool by standalone mode.
|
||||
#
|
||||
# Created: Christian Chilan, 2008/09/02
|
||||
#
|
||||
# Modification:
|
||||
#
|
||||
|
||||
# Default to use h5cc to build h5perf_serial unless $H5CC is defined.
|
||||
#
|
||||
h5cc=${H5CC:-h5cc}
|
||||
$h5cc -DSTANDALONE sio_perf.c sio_engine.c sio_timer.c -o h5perf_serial
|
@ -1,154 +0,0 @@
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
* Copyright by The HDF Group. *
|
||||
* 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. *
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
/* This file contains the definition of functions required to build h5perf in
|
||||
* STANDALONE mode.
|
||||
* Created: Christian Chilan, 2005/5/18.
|
||||
*/
|
||||
|
||||
#include "pio_perf.h"
|
||||
|
||||
/** From h5tools_utils.c **/
|
||||
|
||||
/* global variables */
|
||||
int nCols = 80;
|
||||
|
||||
int
|
||||
get_option(int argc, const char **argv, const char *opts, const struct h5_long_options *l_opts)
|
||||
{
|
||||
static int sp = 1; /* character index in current token */
|
||||
int opt_opt = '?'; /* option character passed back to user */
|
||||
|
||||
if (sp == 1) {
|
||||
/* check for more flag-like tokens */
|
||||
if (H5_optind >= argc || argv[H5_optind][0] != '-' || argv[H5_optind][1] == '\0') {
|
||||
return EOF;
|
||||
}
|
||||
else if (HDstrcmp(argv[H5_optind], "--") == 0) {
|
||||
H5_optind++;
|
||||
return EOF;
|
||||
}
|
||||
}
|
||||
|
||||
if (sp == 1 && argv[H5_optind][0] == '-' && argv[H5_optind][1] == '-') {
|
||||
/* long command line option */
|
||||
const char *arg = &argv[H5_optind][2];
|
||||
int i;
|
||||
|
||||
for (i = 0; l_opts && l_opts[i].name; i++) {
|
||||
size_t len = HDstrlen(l_opts[i].name);
|
||||
|
||||
if (HDstrncmp(arg, l_opts[i].name, len) == 0) {
|
||||
/* we've found a matching long command line flag */
|
||||
opt_opt = l_opts[i].shortval;
|
||||
|
||||
if (l_opts[i].has_arg != no_arg) {
|
||||
if (arg[len] == '=') {
|
||||
H5_optarg = &arg[len + 1];
|
||||
}
|
||||
else if (H5_optind < (argc - 1) && argv[H5_optind + 1][0] != '-') {
|
||||
H5_optarg = argv[++H5_optind];
|
||||
}
|
||||
else if (l_opts[i].has_arg == require_arg) {
|
||||
if (H5_opterr)
|
||||
HDfprintf(stderr, "%s: option required for \"--%s\" flag\n", argv[0], arg);
|
||||
|
||||
opt_opt = '?';
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (arg[len] == '=') {
|
||||
if (H5_opterr)
|
||||
HDfprintf(stderr, "%s: no option required for \"%s\" flag\n", argv[0], arg);
|
||||
|
||||
opt_opt = '?';
|
||||
}
|
||||
|
||||
H5_optarg = NULL;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (l_opts[i].name == NULL) {
|
||||
/* exhausted all of the l_opts we have and still didn't match */
|
||||
if (H5_opterr)
|
||||
HDfprintf(stderr, "%s: unknown option \"%s\"\n", argv[0], arg);
|
||||
|
||||
opt_opt = '?';
|
||||
}
|
||||
|
||||
H5_optind++;
|
||||
sp = 1;
|
||||
}
|
||||
else {
|
||||
char *cp; /* pointer into current token */
|
||||
|
||||
/* short command line option */
|
||||
opt_opt = argv[H5_optind][sp];
|
||||
|
||||
if (opt_opt == ':' || (cp = strchr(opts, opt_opt)) == 0) {
|
||||
|
||||
if (H5_opterr)
|
||||
HDfprintf(stderr, "%s: unknown option \"%c\"\n", argv[0], opt_opt);
|
||||
|
||||
/* if no chars left in this token, move to next token */
|
||||
if (argv[H5_optind][++sp] == '\0') {
|
||||
H5_optind++;
|
||||
sp = 1;
|
||||
}
|
||||
|
||||
return '?';
|
||||
}
|
||||
|
||||
if (*++cp == ':') {
|
||||
/* if a value is expected, get it */
|
||||
if (argv[H5_optind][sp + 1] != '\0') {
|
||||
/* flag value is rest of current token */
|
||||
H5_optarg = &argv[H5_optind++][sp + 1];
|
||||
}
|
||||
else if (++H5_optind >= argc) {
|
||||
if (H5_opterr)
|
||||
HDfprintf(stderr, "%s: value expected for option \"%c\"\n", argv[0], opt_opt);
|
||||
|
||||
opt_opt = '?';
|
||||
}
|
||||
else {
|
||||
/* flag value is next token */
|
||||
H5_optarg = argv[H5_optind++];
|
||||
}
|
||||
|
||||
sp = 1;
|
||||
}
|
||||
else {
|
||||
/* set up to look at next char in token, next time */
|
||||
if (argv[H5_optind][++sp] == '\0') {
|
||||
/* no more in current token, so setup next token */
|
||||
H5_optind++;
|
||||
sp = 1;
|
||||
}
|
||||
|
||||
H5_optarg = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
/* return the current flag character found */
|
||||
return opt_opt;
|
||||
}
|
||||
|
||||
void
|
||||
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);
|
||||
}
|
@ -1,472 +0,0 @@
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
* Copyright by The HDF Group. *
|
||||
* 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. *
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
#ifndef PIO_STANDALONE_H
|
||||
#define PIO_STANDALONE_H
|
||||
|
||||
/* Header file for building h5perf by standalone mode.
|
||||
* Created: Christian Chilan, 2005/5/18.
|
||||
*/
|
||||
|
||||
/** From H5private.h **/
|
||||
|
||||
#include "H5public.h" /* Include Public Definitions */
|
||||
|
||||
#include <assert.h>
|
||||
#include <ctype.h>
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <float.h>
|
||||
#include <limits.h>
|
||||
#include <math.h>
|
||||
#include <signal.h>
|
||||
#include <stdarg.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
/*
|
||||
* Redefine all the POSIX functions. We should never see a POSIX
|
||||
* function (or any other non-HDF5 function) in the source!
|
||||
*/
|
||||
#define HDabort() abort()
|
||||
#define HDabs(X) abs(X)
|
||||
#ifdef H5_HAVE_WIN32_API
|
||||
#define HDaccess(F, M) _access(F, M)
|
||||
#define R_OK 4 /* Test for read permission. */
|
||||
#define W_OK 2 /* Test for write permission. */
|
||||
#define X_OK 1 /* Test for execute permission. */
|
||||
#define F_OK 0 /* Test for existence. */
|
||||
#else /* H5_HAVE_WIN32_API */
|
||||
#define HDaccess(F, M) access(F, M)
|
||||
#ifndef F_OK
|
||||
#define F_OK 00
|
||||
#define W_OK 02
|
||||
#define R_OK 04
|
||||
#endif
|
||||
#endif /* H5_HAVE_WIN32_API */
|
||||
#define HDacos(X) acos(X)
|
||||
#ifdef H5_HAVE_ALARM
|
||||
#define HDalarm(N) alarm(N)
|
||||
#else /* H5_HAVE_ALARM */
|
||||
#define HDalarm(N) (0)
|
||||
#endif /* H5_HAVE_ALARM */
|
||||
#define HDasctime(T) asctime(T)
|
||||
#define HDasin(X) asin(X)
|
||||
#define HDasprintf asprintf /*varargs*/
|
||||
#define HDassert(X) assert(X)
|
||||
#define HDatan(X) atan(X)
|
||||
#define HDatan2(X, Y) atan2(X, Y)
|
||||
#define HDatexit(F) atexit(F)
|
||||
#define HDatof(S) atof(S)
|
||||
#define HDatoi(S) atoi(S)
|
||||
#define HDatol(S) atol(S)
|
||||
#define HDbsearch(K, B, N, Z, F) bsearch(K, B, N, Z, F)
|
||||
#define HDcalloc(N, Z) calloc(N, Z)
|
||||
#define HDceil(X) ceil(X)
|
||||
#define HDcfgetispeed(T) cfgetispeed(T)
|
||||
#define HDcfgetospeed(T) cfgetospeed(T)
|
||||
#define HDcfsetispeed(T, S) cfsetispeed(T, S)
|
||||
#define HDcfsetospeed(T, S) cfsetospeed(T, S)
|
||||
#define HDchdir(S) chdir(S)
|
||||
#define HDchmod(S, M) chmod(S, M)
|
||||
#define HDchown(S, O, G) chown(S, O, G)
|
||||
#define HDclearerr(F) clearerr(F)
|
||||
#define HDclock() clock()
|
||||
#define HDclose(F) close(F)
|
||||
#define HDclosedir(D) closedir(D)
|
||||
#define HDcos(X) cos(X)
|
||||
#define HDcosh(X) cosh(X)
|
||||
#define HDcreat(S, M) creat(S, M)
|
||||
#define HDctermid(S) ctermid(S)
|
||||
#define HDctime(T) ctime(T)
|
||||
#define HDcuserid(S) cuserid(S)
|
||||
#define HDdifftime(X, Y) difftime(X, Y)
|
||||
#define HDdiv(X, Y) div(X, Y)
|
||||
#define HDdup(F) dup(F)
|
||||
#define HDdup2(F, I) dup2(F, I)
|
||||
#define HDexecv(S, AV) execv(S, AV)
|
||||
#define HDexecve(S, AV, E) execve(S, AV, E)
|
||||
#define HDexecvp(S, AV) execvp(S, AV)
|
||||
#define HDexit(N) exit(N)
|
||||
#define HD_exit(N) _exit(N)
|
||||
#define HDexp(X) exp(X)
|
||||
#define HDfabs(X) fabs(X)
|
||||
#define HDfabsf(X) fabsf(X)
|
||||
#define HDfabsl(X) fabsl(X)
|
||||
#define HDfclose(F) fclose(F)
|
||||
/* fcntl() variable arguments */
|
||||
#define HDfdopen(N, S) fdopen(N, S)
|
||||
#define HDfeof(F) feof(F)
|
||||
#define HDferror(F) ferror(F)
|
||||
#define HDfflush(F) fflush(F)
|
||||
#define HDfgetc(F) fgetc(F)
|
||||
#define HDfgetpos(F, P) fgetpos(F, P)
|
||||
#define HDfgets(S, N, F) fgets(S, N, F)
|
||||
#ifdef H5_HAVE_WIN32_API
|
||||
#define HDfileno(F) _fileno(F)
|
||||
#else /* H5_HAVE_WIN32_API */
|
||||
#define HDfileno(F) fileno(F)
|
||||
#endif /* H5_HAVE_WIN32_API */
|
||||
#define HDfloor(X) floor(X)
|
||||
#define HDfmod(X, Y) fmod(X, Y)
|
||||
#define HDfopen(S, M) fopen(S, M)
|
||||
#define HDfork() fork()
|
||||
#define HDfpathconf(F, N) fpathconf(F, N)
|
||||
#define HDfprintf fprintf
|
||||
#define HDfputc(C, F) fputc(C, F)
|
||||
#define HDfputs(S, F) fputs(S, F)
|
||||
#define HDfread(M, Z, N, F) fread(M, Z, N, F)
|
||||
#define HDfree(M) free(M)
|
||||
#define HDfreopen(S, M, F) freopen(S, M, F)
|
||||
#define HDfrexp(X, N) frexp(X, N)
|
||||
#define HDfrexpf(X, N) frexpf(X, N)
|
||||
#define HDfrexpl(X, N) frexpl(X, N)
|
||||
/* fscanf() variable arguments */
|
||||
#ifdef H5_HAVE_FSEEKO
|
||||
#define HDfseek(F, O, W) fseeko(F, O, W)
|
||||
#else
|
||||
#define HDfseek(F, O, W) fseek(F, O, W)
|
||||
#endif
|
||||
#define HDfsetpos(F, P) fsetpos(F, P)
|
||||
/* definitions related to the file stat utilities.
|
||||
* Windows have its own function names.
|
||||
* For Unix, if off_t is not 64bit big, try use the pseudo-standard
|
||||
* xxx64 versions if available.
|
||||
*/
|
||||
#ifdef H5_HAVE_WIN32_API
|
||||
#define HDfstat(F, B) _fstati64(F, B)
|
||||
#define HDlstat(S, B) _lstati64(S, B)
|
||||
#define HDstat(S, B) _stati64(S, B)
|
||||
typedef struct _stati64 h5_stat_t;
|
||||
typedef __int64 h5_stat_size_t;
|
||||
#define HDoff_t __int64
|
||||
#elif H5_SIZEOF_OFF_T != 8 && H5_SIZEOF_OFF64_T == 8 && defined(H5_HAVE_STAT64)
|
||||
#define HDfstat(F, B) fstat64(F, B)
|
||||
#define HDlstat(S, B) lstat64(S, B)
|
||||
#define HDstat(S, B) stat64(S, B)
|
||||
typedef struct stat64 h5_stat_t;
|
||||
typedef off64_t h5_stat_size_t;
|
||||
#define HDoff_t off64_t
|
||||
#else
|
||||
#define HDfstat(F, B) fstat(F, B)
|
||||
#define HDlstat(S, B) lstat(S, B)
|
||||
#define HDstat(S, B) stat(S, B)
|
||||
typedef struct stat h5_stat_t;
|
||||
typedef off_t h5_stat_size_t;
|
||||
#define HDoff_t off_t
|
||||
#endif
|
||||
|
||||
#define HDftell(F) ftell(F)
|
||||
#define HDftruncate(F, L) ftruncate(F, L)
|
||||
#define HDfwrite(M, Z, N, F) fwrite(M, Z, N, F)
|
||||
#define HDgetc(F) getc(F)
|
||||
#define HDgetchar() getchar()
|
||||
#define HDgetcwd(S, Z) getcwd(S, Z)
|
||||
#define HDgetegid() getegid()
|
||||
#define HDgetenv(S) getenv(S)
|
||||
#define HDgeteuid() geteuid()
|
||||
#define HDgetgid() getgid()
|
||||
#define HDgetgrgid(G) getgrgid(G)
|
||||
#define HDgetgrnam(S) getgrnam(S)
|
||||
#define HDgetgroups(Z, G) getgroups(Z, G)
|
||||
#ifdef H5_HAVE_WIN32_API
|
||||
#define HDgetlogin() Wgetlogin()
|
||||
#else /* H5_HAVE_WIN32_API */
|
||||
#define HDgetlogin() getlogin()
|
||||
#endif /* H5_HAVE_WIN32_API */
|
||||
#define HDgetpgrp() getpgrp()
|
||||
#define HDgetpid() getpid()
|
||||
#define HDgetppid() getppid()
|
||||
#define HDgetpwnam(S) getpwnam(S)
|
||||
#define HDgetpwuid(U) getpwuid(U)
|
||||
#define HDgetrusage(X, S) getrusage(X, S)
|
||||
/* Don't define a macro for gets() - it was removed in C11 */
|
||||
#ifdef H5_HAVE_WIN32_API
|
||||
H5_DLL int Wgettimeofday(struct timeval *tv, struct timezone *tz);
|
||||
#define HDgettimeofday(V, Z) Wgettimeofday(V, Z)
|
||||
#else /* H5_HAVE_WIN32_API */
|
||||
#define HDgettimeofday(S, P) gettimeofday(S, P)
|
||||
#endif /* H5_HAVE_WIN32_API */
|
||||
#define HDgetuid() getuid()
|
||||
#define HDgmtime(T) gmtime(T)
|
||||
#define HDisalnum(C) isalnum((int)(C)) /*cast for solaris warning*/
|
||||
#define HDisalpha(C) isalpha((int)(C)) /*cast for solaris warning*/
|
||||
#define HDisatty(F) isatty(F)
|
||||
#define HDiscntrl(C) iscntrl((int)(C)) /*cast for solaris warning*/
|
||||
#define HDisdigit(C) isdigit((int)(C)) /*cast for solaris warning*/
|
||||
#define HDisgraph(C) isgraph((int)(C)) /*cast for solaris warning*/
|
||||
#define HDislower(C) islower((int)(C)) /*cast for solaris warning*/
|
||||
#define HDisprint(C) isprint((int)(C)) /*cast for solaris warning*/
|
||||
#define HDispunct(C) ispunct((int)(C)) /*cast for solaris warning*/
|
||||
#define HDisspace(C) isspace((int)(C)) /*cast for solaris warning*/
|
||||
#define HDisupper(C) isupper((int)(C)) /*cast for solaris warning*/
|
||||
#define HDisxdigit(C) isxdigit((int)(C)) /*cast for solaris warning*/
|
||||
#define HDkill(P, S) kill(P, S)
|
||||
#define HDlabs(X) labs(X)
|
||||
#define HDldexp(X, N) ldexp(X, N)
|
||||
#define HDldiv(X, Y) ldiv(X, Y)
|
||||
#define HDlink(OLD, NEW) link(OLD, NEW)
|
||||
#define HDlocaleconv() localeconv()
|
||||
#define HDlocaltime(T) localtime(T)
|
||||
#define HDlog(X) log(X)
|
||||
#define HDlog10(X) log10(X)
|
||||
#define HDlongjmp(J, N) longjmp(J, N)
|
||||
#ifdef H5_HAVE_WIN32_API
|
||||
#define HDlseek(F, O, W) _lseeki64(F, O, W)
|
||||
#else
|
||||
#ifdef H5_HAVE_LSEEK64
|
||||
#define HDlseek(F, O, W) lseek64(F, O, W)
|
||||
#else
|
||||
#define HDlseek(F, O, W) lseek(F, O, W)
|
||||
#endif
|
||||
#endif
|
||||
#define HDmalloc(Z) malloc(Z)
|
||||
#define HDposix_memalign(P, A, Z) posix_memalign(P, A, Z)
|
||||
#define HDmblen(S, N) mblen(S, N)
|
||||
#define HDmbstowcs(P, S, Z) mbstowcs(P, S, Z)
|
||||
#define HDmbtowc(P, S, Z) mbtowc(P, S, Z)
|
||||
#define HDmemchr(S, C, Z) memchr(S, C, Z)
|
||||
#define HDmemcmp(X, Y, Z) memcmp(X, Y, Z)
|
||||
/*
|
||||
* The (char*) casts are required for the DEC when optimizations are turned
|
||||
* on and the source and/or destination are not aligned.
|
||||
*/
|
||||
#define HDmemcpy(X, Y, Z) memcpy((char *)(X), (const char *)(Y), Z)
|
||||
#define HDmemmove(X, Y, Z) memmove((char *)(X), (const char *)(Y), Z)
|
||||
/*
|
||||
* The (void*) cast just avoids a compiler warning in H5_HAVE_VISUAL_STUDIO
|
||||
*/
|
||||
#ifdef H5_HAVE_VISUAL_STUDIO
|
||||
#define HDmemset(X, C, Z) memset((void *)(X), C, Z)
|
||||
#else /* H5_HAVE_VISUAL_STUDIO */
|
||||
#define HDmemset(X, C, Z) memset(X, C, Z)
|
||||
#endif /* H5_HAVE_VISUAL_STUDIO */
|
||||
#ifdef H5_HAVE_WIN32_API
|
||||
#define HDmkdir(S, M) _mkdir(S)
|
||||
#else /* H5_HAVE_WIN32_API */
|
||||
#define HDmkdir(S, M) mkdir(S, M)
|
||||
#endif /* H5_HAVE_WIN32_API */
|
||||
#define HDmkfifo(S, M) mkfifo(S, M)
|
||||
#define HDmktime(T) mktime(T)
|
||||
#define HDmodf(X, Y) modf(X, Y)
|
||||
#ifdef _O_BINARY
|
||||
#define HDopen(S, F, M) open(S, F | _O_BINARY, M)
|
||||
#else
|
||||
#define HDopen(S, F, M) open(S, F, M)
|
||||
#endif
|
||||
#define HDopendir(S) opendir(S)
|
||||
#define HDpathconf(S, N) pathconf(S, N)
|
||||
#define HDpause() pause()
|
||||
#define HDperror(S) perror(S)
|
||||
#define HDpipe(F) pipe(F)
|
||||
#define HDpow(X, Y) pow(X, Y)
|
||||
/* printf() variable arguments */
|
||||
#define HDprintf(...) HDfprintf(stdout, __VA_ARGS__)
|
||||
#define HDputc(C, F) putc(C, F)
|
||||
#define HDputchar(C) putchar(C)
|
||||
#define HDputs(S) puts(S)
|
||||
#define HDqsort(M, N, Z, F) qsort(M, N, Z, F)
|
||||
#define HDraise(N) raise(N)
|
||||
|
||||
#ifdef H5_HAVE_RAND_R
|
||||
#define HDrandom() HDrand()
|
||||
H5_DLL int HDrand(void);
|
||||
#elif H5_HAVE_RANDOM
|
||||
#define HDrand() random()
|
||||
#define HDrandom() random()
|
||||
#else
|
||||
#define HDrand() rand()
|
||||
#define HDrandom() rand()
|
||||
#endif
|
||||
|
||||
#define HDread(F, M, Z) read(F, M, Z)
|
||||
#define HDreaddir(D) readdir(D)
|
||||
#define HDrealloc(M, Z) realloc(M, Z)
|
||||
#define HDremove(S) remove(S)
|
||||
#define HDrename(OLD, NEW) rename(OLD, NEW)
|
||||
#define HDrewind(F) rewind(F)
|
||||
#define HDrewinddir(D) rewinddir(D)
|
||||
#define HDrmdir(S) rmdir(S)
|
||||
/* scanf() variable arguments */
|
||||
#define HDsetbuf(F, S) setbuf(F, S)
|
||||
#define HDsetgid(G) setgid(G)
|
||||
#define HDsetjmp(J) setjmp(J)
|
||||
#define HDsetlocale(N, S) setlocale(N, S)
|
||||
#define HDsetpgid(P, PG) setpgid(P, PG)
|
||||
#define HDsetsid() setsid()
|
||||
#define HDsetuid(U) setuid(U)
|
||||
/* Windows does not permit setting the buffer size to values
|
||||
less than 2. */
|
||||
#ifndef H5_HAVE_WIN32_API
|
||||
#define HDsetvbuf(F, S, M, Z) setvbuf(F, S, M, Z)
|
||||
#else
|
||||
#define HDsetvbuf(F, S, M, Z) setvbuf(F, S, M, (Z > 1 ? Z : 2))
|
||||
#endif
|
||||
#define HDsigaddset(S, N) sigaddset(S, N)
|
||||
#define HDsigdelset(S, N) sigdelset(S, N)
|
||||
#define HDsigemptyset(S) sigemptyset(S)
|
||||
#define HDsigfillset(S) sigfillset(S)
|
||||
#define HDsigismember(S, N) sigismember(S, N)
|
||||
#define HDsiglongjmp(J, N) siglongjmp(J, N)
|
||||
#define HDsignal(N, F) signal(N, F)
|
||||
#define HDsigpending(S) sigpending(S)
|
||||
#define HDsigprocmask(H, S, O) sigprocmask(H, S, O)
|
||||
#define HDsigsetjmp(J, N) sigsetjmp(J, N)
|
||||
#define HDsigsuspend(S) sigsuspend(S)
|
||||
#define HDsin(X) sin(X)
|
||||
#define HDsinh(X) sinh(X)
|
||||
#define HDsleep(N) sleep(N)
|
||||
#define HDsnprintf snprintf /*varargs*/
|
||||
#define HDsprintf sprintf /*varargs*/
|
||||
#define HDsqrt(X) sqrt(X)
|
||||
#ifdef H5_HAVE_RAND_R
|
||||
H5_DLL void HDsrand(unsigned int seed);
|
||||
#define HDsrandom(S) HDsrand(S)
|
||||
#elif H5_HAVE_RANDOM
|
||||
#define HDsrand(S) srandom(S)
|
||||
#define HDsrandom(S) srandom(S)
|
||||
#else
|
||||
#define HDsrand(S) srand(S)
|
||||
#define HDsrandom(S) srand(S)
|
||||
#endif
|
||||
|
||||
#ifdef H5_HAVE_WIN32_API
|
||||
#define HDstrcasecmp(A, B) _stricmp(A, B)
|
||||
#else
|
||||
#define HDstrcasecmp(X, Y) strcasecmp(X, Y)
|
||||
#endif
|
||||
#define HDstrcat(X, Y) strcat(X, Y)
|
||||
#define HDstrchr(S, C) strchr(S, C)
|
||||
#define HDstrcmp(X, Y) strcmp(X, Y)
|
||||
#define HDstrcoll(X, Y) strcoll(X, Y)
|
||||
#define HDstrcpy(X, Y) strcpy(X, Y)
|
||||
#define HDstrcspn(X, Y) strcspn(X, Y)
|
||||
#define HDstrerror(N) strerror(N)
|
||||
#define HDstrftime(S, Z, F, T) strftime(S, Z, F, T)
|
||||
#define HDstrlen(S) strlen(S)
|
||||
#define HDstrncat(X, Y, Z) strncat(X, Y, Z)
|
||||
#define HDstrncmp(X, Y, Z) strncmp(X, Y, Z)
|
||||
#define HDstrncpy(X, Y, Z) strncpy(X, Y, Z)
|
||||
#define HDstrpbrk(X, Y) strpbrk(X, Y)
|
||||
#define HDstrrchr(S, C) strrchr(S, C)
|
||||
#define HDstrspn(X, Y) strspn(X, Y)
|
||||
#define HDstrstr(X, Y) strstr(X, Y)
|
||||
#define HDstrtod(S, R) strtod(S, R)
|
||||
#define HDstrtok(X, Y) strtok(X, Y)
|
||||
#define HDstrtol(S, R, N) strtol(S, R, N)
|
||||
H5_DLL int64_t HDstrtoll(const char *s, const char **rest, int base);
|
||||
#define HDstrtoul(S, R, N) strtoul(S, R, N)
|
||||
#ifdef H5_HAVE_WIN32_API
|
||||
#define HDstrtoull(S, R, N) _strtoui64(S, R, N)
|
||||
#else
|
||||
#define HDstrtoull(S, R, N) strtoull(S, R, N)
|
||||
#endif
|
||||
#define HDstrxfrm(X, Y, Z) strxfrm(X, Y, Z)
|
||||
#define HDsysconf(N) sysconf(N)
|
||||
#define HDsystem(S) system(S)
|
||||
#define HDtan(X) tan(X)
|
||||
#define HDtanh(X) tanh(X)
|
||||
#define HDtcdrain(F) tcdrain(F)
|
||||
#define HDtcflow(F, A) tcflow(F, A)
|
||||
#define HDtcflush(F, N) tcflush(F, N)
|
||||
#define HDtcgetattr(F, T) tcgetattr(F, T)
|
||||
#define HDtcgetpgrp(F) tcgetpgrp(F)
|
||||
#define HDtcsendbreak(F, N) tcsendbreak(F, N)
|
||||
#define HDtcsetattr(F, O, T) tcsetattr(F, O, T)
|
||||
#define HDtcsetpgrp(F, N) tcsetpgrp(F, N)
|
||||
#define HDtime(T) time(T)
|
||||
#define HDtimes(T) times(T)
|
||||
#define HDtmpfile() tmpfile()
|
||||
#define HDtmpnam(S) tmpnam(S)
|
||||
#define HDtolower(C) tolower(C)
|
||||
#define HDtoupper(C) toupper(C)
|
||||
#define HDttyname(F) ttyname(F)
|
||||
#define HDtzset() tzset()
|
||||
#define HDumask(N) umask(N)
|
||||
#define HDuname(S) uname(S)
|
||||
#define HDungetc(C, F) ungetc(C, F)
|
||||
#ifdef H5_HAVE_WIN32_API
|
||||
#define HDunlink(S) _unlink(S)
|
||||
#else
|
||||
#define HDunlink(S) unlink(S)
|
||||
#endif
|
||||
#define HDutime(S, T) utime(S, T)
|
||||
#define HDva_arg(A, T) va_arg(A, T)
|
||||
#define HDva_end(A) va_end(A)
|
||||
#define HDva_start(A, P) va_start(A, P)
|
||||
#define HDvasprintf(RET, FMT, A) vasprintf(RET, FMT, A)
|
||||
#define HDvfprintf(F, FMT, A) vfprintf(F, FMT, A)
|
||||
#define HDvprintf(FMT, A) vprintf(FMT, A)
|
||||
#define HDvsprintf(S, FMT, A) vsprintf(S, FMT, A)
|
||||
#define HDvsnprintf(S, N, FMT, A) vsnprintf(S, N, FMT, A)
|
||||
#define HDwait(W) wait(W)
|
||||
#define HDwaitpid(P, W, O) waitpid(P, W, O)
|
||||
#define HDwcstombs(S, P, Z) wcstombs(S, P, Z)
|
||||
#define HDwctomb(S, C) wctomb(S, C)
|
||||
#define HDwrite(F, M, Z) write(F, M, Z)
|
||||
|
||||
/*
|
||||
* And now for a couple non-Posix functions... Watch out for systems that
|
||||
* define these in terms of macros.
|
||||
*/
|
||||
#ifdef H5_HAVE_WIN32_API
|
||||
#define HDstrdup(S) _strdup(S)
|
||||
#else /* H5_HAVE_WIN32_API */
|
||||
|
||||
#if !defined strdup && !defined H5_HAVE_STRDUP
|
||||
extern char * strdup(const char *s);
|
||||
#endif
|
||||
|
||||
#define HDstrdup(S) strdup(S)
|
||||
|
||||
#endif /* H5_HAVE_WIN32_API */
|
||||
|
||||
/*
|
||||
* HDF Boolean type.
|
||||
*/
|
||||
#ifndef FALSE
|
||||
#define FALSE false
|
||||
#endif
|
||||
#ifndef TRUE
|
||||
#define TRUE true
|
||||
#endif
|
||||
|
||||
/** From h5tools_utils.h **/
|
||||
|
||||
H5_DLLVAR int H5_opterr; /* getoption prints errors if this is on */
|
||||
H5_DLLVAR int H5_optind; /* token pointer */
|
||||
H5_DLLVAR const char *H5_optarg; /* flag argument (or value) */
|
||||
|
||||
enum h5_arg_level {
|
||||
no_arg = 0, /* doesn't take an argument */
|
||||
require_arg, /* requires an argument */
|
||||
optional_arg /* argument is optional */
|
||||
};
|
||||
|
||||
struct h5_long_options {
|
||||
const char * name; /* Name of the long option */
|
||||
enum h5_arg_level has_arg; /* Whether we should look for an arg */
|
||||
char shortval; /* The shortname equivalent of long arg
|
||||
* this gets returned from get_option
|
||||
*/
|
||||
};
|
||||
|
||||
extern int H5_get_option(int argc, const char *const *argv, const char *opt,
|
||||
const struct h5_long_options *l_opt);
|
||||
|
||||
extern int nCols; /*max number of columns for outputting */
|
||||
|
||||
/* Definitions of useful routines */
|
||||
extern void print_version(const char *progname);
|
||||
|
||||
#endif
|
@ -1,154 +0,0 @@
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
* Copyright by The HDF Group. *
|
||||
* 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. *
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
/* This file contains the definition of functions required to build h5perf in
|
||||
* STANDALONE mode.
|
||||
* Created: Christian Chilan, 2005/5/18.
|
||||
*/
|
||||
|
||||
#include "sio_perf.h"
|
||||
|
||||
/** From h5tools_utils.c **/
|
||||
|
||||
/* global variables */
|
||||
int nCols = 80;
|
||||
|
||||
int
|
||||
get_option(int argc, const char **argv, const char *opts, const struct h5_long_options *l_opts)
|
||||
{
|
||||
static int sp = 1; /* character index in current token */
|
||||
int opt_opt = '?'; /* option character passed back to user */
|
||||
|
||||
if (sp == 1) {
|
||||
/* check for more flag-like tokens */
|
||||
if (H5_optind >= argc || argv[H5_optind][0] != '-' || argv[H5_optind][1] == '\0') {
|
||||
return EOF;
|
||||
}
|
||||
else if (HDstrcmp(argv[H5_optind], "--") == 0) {
|
||||
H5_optind++;
|
||||
return EOF;
|
||||
}
|
||||
}
|
||||
|
||||
if (sp == 1 && argv[H5_optind][0] == '-' && argv[H5_optind][1] == '-') {
|
||||
/* long command line option */
|
||||
const char *arg = &argv[H5_optind][2];
|
||||
int i;
|
||||
|
||||
for (i = 0; l_opts && l_opts[i].name; i++) {
|
||||
size_t len = HDstrlen(l_opts[i].name);
|
||||
|
||||
if (HDstrncmp(arg, l_opts[i].name, len) == 0) {
|
||||
/* we've found a matching long command line flag */
|
||||
opt_opt = l_opts[i].shortval;
|
||||
|
||||
if (l_opts[i].has_arg != no_arg) {
|
||||
if (arg[len] == '=') {
|
||||
H5_optarg = &arg[len + 1];
|
||||
}
|
||||
else if (H5_optind < (argc - 1) && argv[H5_optind + 1][0] != '-') {
|
||||
H5_optarg = argv[++H5_optind];
|
||||
}
|
||||
else if (l_opts[i].has_arg == require_arg) {
|
||||
if (H5_opterr)
|
||||
HDfprintf(stderr, "%s: option required for \"--%s\" flag\n", argv[0], arg);
|
||||
|
||||
opt_opt = '?';
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (arg[len] == '=') {
|
||||
if (H5_opterr)
|
||||
HDfprintf(stderr, "%s: no option required for \"%s\" flag\n", argv[0], arg);
|
||||
|
||||
opt_opt = '?';
|
||||
}
|
||||
|
||||
H5_optarg = NULL;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (l_opts[i].name == NULL) {
|
||||
/* exhausted all of the l_opts we have and still didn't match */
|
||||
if (H5_opterr)
|
||||
HDfprintf(stderr, "%s: unknown option \"%s\"\n", argv[0], arg);
|
||||
|
||||
opt_opt = '?';
|
||||
}
|
||||
|
||||
H5_optind++;
|
||||
sp = 1;
|
||||
}
|
||||
else {
|
||||
char *cp; /* pointer into current token */
|
||||
|
||||
/* short command line option */
|
||||
opt_opt = argv[H5_optind][sp];
|
||||
|
||||
if (opt_opt == ':' || (cp = strchr(opts, opt_opt)) == 0) {
|
||||
|
||||
if (H5_opterr)
|
||||
HDfprintf(stderr, "%s: unknown option \"%c\"\n", argv[0], opt_opt);
|
||||
|
||||
/* if no chars left in this token, move to next token */
|
||||
if (argv[H5_optind][++sp] == '\0') {
|
||||
H5_optind++;
|
||||
sp = 1;
|
||||
}
|
||||
|
||||
return '?';
|
||||
}
|
||||
|
||||
if (*++cp == ':') {
|
||||
/* if a value is expected, get it */
|
||||
if (argv[H5_optind][sp + 1] != '\0') {
|
||||
/* flag value is rest of current token */
|
||||
H5_optarg = &argv[H5_optind++][sp + 1];
|
||||
}
|
||||
else if (++H5_optind >= argc) {
|
||||
if (H5_opterr)
|
||||
HDfprintf(stderr, "%s: value expected for option \"%c\"\n", argv[0], opt_opt);
|
||||
|
||||
opt_opt = '?';
|
||||
}
|
||||
else {
|
||||
/* flag value is next token */
|
||||
H5_optarg = argv[H5_optind++];
|
||||
}
|
||||
|
||||
sp = 1;
|
||||
}
|
||||
else {
|
||||
/* set up to look at next char in token, next time */
|
||||
if (argv[H5_optind][++sp] == '\0') {
|
||||
/* no more in current token, so setup next token */
|
||||
H5_optind++;
|
||||
sp = 1;
|
||||
}
|
||||
|
||||
H5_optarg = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
/* return the current flag character found */
|
||||
return opt_opt;
|
||||
}
|
||||
|
||||
void
|
||||
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);
|
||||
}
|
@ -1,487 +0,0 @@
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
* Copyright by The HDF Group. *
|
||||
* 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. *
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
#ifndef SIO_STANDALONE_H
|
||||
#define SIO_STANDALONE_H
|
||||
|
||||
/* Header file for building h5perf by standalone mode.
|
||||
* Created: Christian Chilan, 2005/5/18.
|
||||
*/
|
||||
|
||||
/** From H5private.h **/
|
||||
|
||||
#include "H5public.h" /* Include Public Definitions */
|
||||
|
||||
#include <assert.h>
|
||||
#include <ctype.h>
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <float.h>
|
||||
#include <limits.h>
|
||||
#include <math.h>
|
||||
#include <signal.h>
|
||||
#include <stdarg.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
/* maximum of two, three, or four values */
|
||||
#undef MAX
|
||||
#define MAX(a, b) (((a) > (b)) ? (a) : (b))
|
||||
#define MAX2(a, b) MAX(a, b)
|
||||
#define MAX3(a, b, c) MAX(a, MAX(b, c))
|
||||
#define MAX4(a, b, c, d) MAX(MAX(a, b), MAX(c, d))
|
||||
|
||||
#define H5_FLT_ABS_EQUAL(X, Y) (HDfabsf((X) - (Y)) < FLT_EPSILON)
|
||||
#define H5_DBL_ABS_EQUAL(X, Y) (HDfabs((X) - (Y)) < DBL_EPSILON)
|
||||
#define H5_LDBL_ABS_EQUAL(X, Y) (HDfabsl((X) - (Y)) < LDBL_EPSILON)
|
||||
|
||||
#define H5_FLT_REL_EQUAL(X, Y, M) (HDfabsf(((Y) - (X)) / (X)) < (M))
|
||||
#define H5_DBL_REL_EQUAL(X, Y, M) (HDfabs(((Y) - (X)) / (X)) < (M))
|
||||
#define H5_LDBL_REL_EQUAL(X, Y, M) (HDfabsl(((Y) - (X)) / (X)) < (M))
|
||||
|
||||
/*
|
||||
* Redefine all the POSIX functions. We should never see a POSIX
|
||||
* function (or any other non-HDF5 function) in the source!
|
||||
*/
|
||||
#define HDabort() abort()
|
||||
#define HDabs(X) abs(X)
|
||||
#ifdef H5_HAVE_WIN32_API
|
||||
#define HDaccess(F, M) _access(F, M)
|
||||
#define R_OK 4 /* Test for read permission. */
|
||||
#define W_OK 2 /* Test for write permission. */
|
||||
#define X_OK 1 /* Test for execute permission. */
|
||||
#define F_OK 0 /* Test for existence. */
|
||||
#else /* H5_HAVE_WIN32_API */
|
||||
#define HDaccess(F, M) access(F, M)
|
||||
#ifndef F_OK
|
||||
#define F_OK 00
|
||||
#define W_OK 02
|
||||
#define R_OK 04
|
||||
#endif
|
||||
#endif /* H5_HAVE_WIN32_API */
|
||||
#define HDacos(X) acos(X)
|
||||
#ifdef H5_HAVE_ALARM
|
||||
#define HDalarm(N) alarm(N)
|
||||
#else /* H5_HAVE_ALARM */
|
||||
#define HDalarm(N) (0)
|
||||
#endif /* H5_HAVE_ALARM */
|
||||
#define HDasctime(T) asctime(T)
|
||||
#define HDasin(X) asin(X)
|
||||
#define HDasprintf asprintf /*varargs*/
|
||||
#define HDassert(X) assert(X)
|
||||
#define HDatan(X) atan(X)
|
||||
#define HDatan2(X, Y) atan2(X, Y)
|
||||
#define HDatexit(F) atexit(F)
|
||||
#define HDatof(S) atof(S)
|
||||
#define HDatoi(S) atoi(S)
|
||||
#define HDatol(S) atol(S)
|
||||
#define HDbsearch(K, B, N, Z, F) bsearch(K, B, N, Z, F)
|
||||
#define HDcalloc(N, Z) calloc(N, Z)
|
||||
#define HDceil(X) ceil(X)
|
||||
#define HDcfgetispeed(T) cfgetispeed(T)
|
||||
#define HDcfgetospeed(T) cfgetospeed(T)
|
||||
#define HDcfsetispeed(T, S) cfsetispeed(T, S)
|
||||
#define HDcfsetospeed(T, S) cfsetospeed(T, S)
|
||||
#define HDchdir(S) chdir(S)
|
||||
#define HDchmod(S, M) chmod(S, M)
|
||||
#define HDchown(S, O, G) chown(S, O, G)
|
||||
#define HDclearerr(F) clearerr(F)
|
||||
#define HDclock() clock()
|
||||
#define HDclose(F) close(F)
|
||||
#define HDclosedir(D) closedir(D)
|
||||
#define HDcos(X) cos(X)
|
||||
#define HDcosh(X) cosh(X)
|
||||
#define HDcreat(S, M) creat(S, M)
|
||||
#define HDctermid(S) ctermid(S)
|
||||
#define HDctime(T) ctime(T)
|
||||
#define HDcuserid(S) cuserid(S)
|
||||
#define HDdifftime(X, Y) difftime(X, Y)
|
||||
#define HDdiv(X, Y) div(X, Y)
|
||||
#define HDdup(F) dup(F)
|
||||
#define HDdup2(F, I) dup2(F, I)
|
||||
#define HDexecv(S, AV) execv(S, AV)
|
||||
#define HDexecve(S, AV, E) execve(S, AV, E)
|
||||
#define HDexecvp(S, AV) execvp(S, AV)
|
||||
#define HDexit(N) exit(N)
|
||||
#define HD_exit(N) _exit(N)
|
||||
#define HDexp(X) exp(X)
|
||||
#define HDfabs(X) fabs(X)
|
||||
#define HDfabsf(X) fabsf(X)
|
||||
#define HDfabsl(X) fabsl(X)
|
||||
#define HDfclose(F) fclose(F)
|
||||
/* fcntl() variable arguments */
|
||||
#define HDfdopen(N, S) fdopen(N, S)
|
||||
#define HDfeof(F) feof(F)
|
||||
#define HDferror(F) ferror(F)
|
||||
#define HDfflush(F) fflush(F)
|
||||
#define HDfgetc(F) fgetc(F)
|
||||
#define HDfgetpos(F, P) fgetpos(F, P)
|
||||
#define HDfgets(S, N, F) fgets(S, N, F)
|
||||
#ifdef H5_HAVE_WIN32_API
|
||||
#define HDfileno(F) _fileno(F)
|
||||
#else /* H5_HAVE_WIN32_API */
|
||||
#define HDfileno(F) fileno(F)
|
||||
#endif /* H5_HAVE_WIN32_API */
|
||||
#define HDfloor(X) floor(X)
|
||||
#define HDfmod(X, Y) fmod(X, Y)
|
||||
#define HDfopen(S, M) fopen(S, M)
|
||||
#define HDfork() fork()
|
||||
#define HDfpathconf(F, N) fpathconf(F, N)
|
||||
#define HDfprintf fprintf
|
||||
#define HDfputc(C, F) fputc(C, F)
|
||||
#define HDfputs(S, F) fputs(S, F)
|
||||
#define HDfread(M, Z, N, F) fread(M, Z, N, F)
|
||||
#define HDfree(M) free(M)
|
||||
#define HDfreopen(S, M, F) freopen(S, M, F)
|
||||
#define HDfrexp(X, N) frexp(X, N)
|
||||
#define HDfrexpf(X, N) frexpf(X, N)
|
||||
#define HDfrexpl(X, N) frexpl(X, N)
|
||||
/* fscanf() variable arguments */
|
||||
#ifdef H5_HAVE_FSEEKO
|
||||
#define HDfseek(F, O, W) fseeko(F, O, W)
|
||||
#else
|
||||
#define HDfseek(F, O, W) fseek(F, O, W)
|
||||
#endif
|
||||
#define HDfsetpos(F, P) fsetpos(F, P)
|
||||
/* definitions related to the file stat utilities.
|
||||
* Windows have its own function names.
|
||||
* For Unix, if off_t is not 64bit big, try use the pseudo-standard
|
||||
* xxx64 versions if available.
|
||||
*/
|
||||
#ifdef H5_HAVE_WIN32_API
|
||||
#define HDfstat(F, B) _fstati64(F, B)
|
||||
#define HDlstat(S, B) _lstati64(S, B)
|
||||
#define HDstat(S, B) _stati64(S, B)
|
||||
typedef struct _stati64 h5_stat_t;
|
||||
typedef __int64 h5_stat_size_t;
|
||||
#define HDoff_t __int64
|
||||
#elif H5_SIZEOF_OFF_T != 8 && H5_SIZEOF_OFF64_T == 8 && defined(H5_HAVE_STAT64)
|
||||
#define HDfstat(F, B) fstat64(F, B)
|
||||
#define HDlstat(S, B) lstat64(S, B)
|
||||
#define HDstat(S, B) stat64(S, B)
|
||||
typedef struct stat64 h5_stat_t;
|
||||
typedef off64_t h5_stat_size_t;
|
||||
#define HDoff_t off64_t
|
||||
#else
|
||||
#define HDfstat(F, B) fstat(F, B)
|
||||
#define HDlstat(S, B) lstat(S, B)
|
||||
#define HDstat(S, B) stat(S, B)
|
||||
typedef struct stat h5_stat_t;
|
||||
typedef off_t h5_stat_size_t;
|
||||
#define HDoff_t off_t
|
||||
#endif
|
||||
|
||||
#define HDftell(F) ftell(F)
|
||||
#define HDftruncate(F, L) ftruncate(F, L)
|
||||
#define HDfwrite(M, Z, N, F) fwrite(M, Z, N, F)
|
||||
#define HDgetc(F) getc(F)
|
||||
#define HDgetchar() getchar()
|
||||
#define HDgetcwd(S, Z) getcwd(S, Z)
|
||||
#define HDgetegid() getegid()
|
||||
#define HDgetenv(S) getenv(S)
|
||||
#define HDgeteuid() geteuid()
|
||||
#define HDgetgid() getgid()
|
||||
#define HDgetgrgid(G) getgrgid(G)
|
||||
#define HDgetgrnam(S) getgrnam(S)
|
||||
#define HDgetgroups(Z, G) getgroups(Z, G)
|
||||
#ifdef H5_HAVE_WIN32_API
|
||||
#define HDgetlogin() Wgetlogin()
|
||||
#else /* H5_HAVE_WIN32_API */
|
||||
#define HDgetlogin() getlogin()
|
||||
#endif /* H5_HAVE_WIN32_API */
|
||||
#define HDgetpgrp() getpgrp()
|
||||
#define HDgetpid() getpid()
|
||||
#define HDgetppid() getppid()
|
||||
#define HDgetpwnam(S) getpwnam(S)
|
||||
#define HDgetpwuid(U) getpwuid(U)
|
||||
#define HDgetrusage(X, S) getrusage(X, S)
|
||||
/* Don't define a macro for gets() - it was removed in C11 */
|
||||
#ifdef H5_HAVE_WIN32_API
|
||||
H5_DLL int Wgettimeofday(struct timeval *tv, struct timezone *tz);
|
||||
#define HDgettimeofday(V, Z) Wgettimeofday(V, Z)
|
||||
#else /* H5_HAVE_WIN32_API */
|
||||
#define HDgettimeofday(S, P) gettimeofday(S, P)
|
||||
#endif /* H5_HAVE_WIN32_API */
|
||||
#define HDgetuid() getuid()
|
||||
#define HDgmtime(T) gmtime(T)
|
||||
#define HDisalnum(C) isalnum((int)(C)) /*cast for solaris warning*/
|
||||
#define HDisalpha(C) isalpha((int)(C)) /*cast for solaris warning*/
|
||||
#define HDisatty(F) isatty(F)
|
||||
#define HDiscntrl(C) iscntrl((int)(C)) /*cast for solaris warning*/
|
||||
#define HDisdigit(C) isdigit((int)(C)) /*cast for solaris warning*/
|
||||
#define HDisgraph(C) isgraph((int)(C)) /*cast for solaris warning*/
|
||||
#define HDislower(C) islower((int)(C)) /*cast for solaris warning*/
|
||||
#define HDisprint(C) isprint((int)(C)) /*cast for solaris warning*/
|
||||
#define HDispunct(C) ispunct((int)(C)) /*cast for solaris warning*/
|
||||
#define HDisspace(C) isspace((int)(C)) /*cast for solaris warning*/
|
||||
#define HDisupper(C) isupper((int)(C)) /*cast for solaris warning*/
|
||||
#define HDisxdigit(C) isxdigit((int)(C)) /*cast for solaris warning*/
|
||||
#define HDkill(P, S) kill(P, S)
|
||||
#define HDlabs(X) labs(X)
|
||||
#define HDldexp(X, N) ldexp(X, N)
|
||||
#define HDldiv(X, Y) ldiv(X, Y)
|
||||
#define HDlink(OLD, NEW) link(OLD, NEW)
|
||||
#define HDlocaleconv() localeconv()
|
||||
#define HDlocaltime(T) localtime(T)
|
||||
#define HDlog(X) log(X)
|
||||
#define HDlog10(X) log10(X)
|
||||
#define HDlongjmp(J, N) longjmp(J, N)
|
||||
#ifdef H5_HAVE_WIN32_API
|
||||
#define HDlseek(F, O, W) _lseeki64(F, O, W)
|
||||
#else
|
||||
#ifdef H5_HAVE_LSEEK64
|
||||
#define HDlseek(F, O, W) lseek64(F, O, W)
|
||||
#else
|
||||
#define HDlseek(F, O, W) lseek(F, O, W)
|
||||
#endif
|
||||
#endif
|
||||
#define HDmalloc(Z) malloc(Z)
|
||||
#define HDposix_memalign(P, A, Z) posix_memalign(P, A, Z)
|
||||
#define HDmblen(S, N) mblen(S, N)
|
||||
#define HDmbstowcs(P, S, Z) mbstowcs(P, S, Z)
|
||||
#define HDmbtowc(P, S, Z) mbtowc(P, S, Z)
|
||||
#define HDmemchr(S, C, Z) memchr(S, C, Z)
|
||||
#define HDmemcmp(X, Y, Z) memcmp(X, Y, Z)
|
||||
/*
|
||||
* The (char*) casts are required for the DEC when optimizations are turned
|
||||
* on and the source and/or destination are not aligned.
|
||||
*/
|
||||
#define HDmemcpy(X, Y, Z) memcpy((char *)(X), (const char *)(Y), Z)
|
||||
#define HDmemmove(X, Y, Z) memmove((char *)(X), (const char *)(Y), Z)
|
||||
/*
|
||||
* The (void*) cast just avoids a compiler warning in H5_HAVE_VISUAL_STUDIO
|
||||
*/
|
||||
#ifdef H5_HAVE_VISUAL_STUDIO
|
||||
#define HDmemset(X, C, Z) memset((void *)(X), C, Z)
|
||||
#else /* H5_HAVE_VISUAL_STUDIO */
|
||||
#define HDmemset(X, C, Z) memset(X, C, Z)
|
||||
#endif /* H5_HAVE_VISUAL_STUDIO */
|
||||
#ifdef H5_HAVE_WIN32_API
|
||||
#define HDmkdir(S, M) _mkdir(S)
|
||||
#else /* H5_HAVE_WIN32_API */
|
||||
#define HDmkdir(S, M) mkdir(S, M)
|
||||
#endif /* H5_HAVE_WIN32_API */
|
||||
#define HDmkfifo(S, M) mkfifo(S, M)
|
||||
#define HDmktime(T) mktime(T)
|
||||
#define HDmodf(X, Y) modf(X, Y)
|
||||
#ifdef _O_BINARY
|
||||
#define HDopen(S, F, M) open(S, F | _O_BINARY, M)
|
||||
#else
|
||||
#define HDopen(S, F, M) open(S, F, M)
|
||||
#endif
|
||||
#define HDopendir(S) opendir(S)
|
||||
#define HDpathconf(S, N) pathconf(S, N)
|
||||
#define HDpause() pause()
|
||||
#define HDperror(S) perror(S)
|
||||
#define HDpipe(F) pipe(F)
|
||||
#define HDpow(X, Y) pow(X, Y)
|
||||
/* printf() variable arguments */
|
||||
#define HDprintf(...) HDfprintf(stdout, __VA_ARGS__)
|
||||
#define HDputc(C, F) putc(C, F)
|
||||
#define HDputchar(C) putchar(C)
|
||||
#define HDputs(S) puts(S)
|
||||
#define HDqsort(M, N, Z, F) qsort(M, N, Z, F)
|
||||
#define HDraise(N) raise(N)
|
||||
|
||||
#ifdef H5_HAVE_RAND_R
|
||||
#define HDrandom() HDrand()
|
||||
H5_DLL int HDrand(void);
|
||||
#elif H5_HAVE_RANDOM
|
||||
#define HDrand() random()
|
||||
#define HDrandom() random()
|
||||
#else
|
||||
#define HDrand() rand()
|
||||
#define HDrandom() rand()
|
||||
#endif
|
||||
|
||||
#define HDread(F, M, Z) read(F, M, Z)
|
||||
#define HDreaddir(D) readdir(D)
|
||||
#define HDrealloc(M, Z) realloc(M, Z)
|
||||
#define HDremove(S) remove(S)
|
||||
#define HDrename(OLD, NEW) rename(OLD, NEW)
|
||||
#define HDrewind(F) rewind(F)
|
||||
#define HDrewinddir(D) rewinddir(D)
|
||||
#define HDrmdir(S) rmdir(S)
|
||||
/* scanf() variable arguments */
|
||||
#define HDsetbuf(F, S) setbuf(F, S)
|
||||
#define HDsetgid(G) setgid(G)
|
||||
#define HDsetjmp(J) setjmp(J)
|
||||
#define HDsetlocale(N, S) setlocale(N, S)
|
||||
#define HDsetpgid(P, PG) setpgid(P, PG)
|
||||
#define HDsetsid() setsid()
|
||||
#define HDsetuid(U) setuid(U)
|
||||
/* Windows does not permit setting the buffer size to values
|
||||
less than 2. */
|
||||
#ifndef H5_HAVE_WIN32_API
|
||||
#define HDsetvbuf(F, S, M, Z) setvbuf(F, S, M, Z)
|
||||
#else
|
||||
#define HDsetvbuf(F, S, M, Z) setvbuf(F, S, M, (Z > 1 ? Z : 2))
|
||||
#endif
|
||||
#define HDsigaddset(S, N) sigaddset(S, N)
|
||||
#define HDsigdelset(S, N) sigdelset(S, N)
|
||||
#define HDsigemptyset(S) sigemptyset(S)
|
||||
#define HDsigfillset(S) sigfillset(S)
|
||||
#define HDsigismember(S, N) sigismember(S, N)
|
||||
#define HDsiglongjmp(J, N) siglongjmp(J, N)
|
||||
#define HDsignal(N, F) signal(N, F)
|
||||
#define HDsigpending(S) sigpending(S)
|
||||
#define HDsigprocmask(H, S, O) sigprocmask(H, S, O)
|
||||
#define HDsigsetjmp(J, N) sigsetjmp(J, N)
|
||||
#define HDsigsuspend(S) sigsuspend(S)
|
||||
#define HDsin(X) sin(X)
|
||||
#define HDsinh(X) sinh(X)
|
||||
#define HDsleep(N) sleep(N)
|
||||
#define HDsnprintf snprintf /*varargs*/
|
||||
#define HDsprintf sprintf /*varargs*/
|
||||
#define HDsqrt(X) sqrt(X)
|
||||
#ifdef H5_HAVE_RAND_R
|
||||
H5_DLL void HDsrand(unsigned int seed);
|
||||
#define HDsrandom(S) HDsrand(S)
|
||||
#elif H5_HAVE_RANDOM
|
||||
#define HDsrand(S) srandom(S)
|
||||
#define HDsrandom(S) srandom(S)
|
||||
#else
|
||||
#define HDsrand(S) srand(S)
|
||||
#define HDsrandom(S) srand(S)
|
||||
#endif
|
||||
|
||||
#ifdef H5_HAVE_WIN32_API
|
||||
#define HDstrcasecmp(A, B) _stricmp(A, B)
|
||||
#else
|
||||
#define HDstrcasecmp(X, Y) strcasecmp(X, Y)
|
||||
#endif
|
||||
#define HDstrcat(X, Y) strcat(X, Y)
|
||||
#define HDstrchr(S, C) strchr(S, C)
|
||||
#define HDstrcmp(X, Y) strcmp(X, Y)
|
||||
#define HDstrcoll(X, Y) strcoll(X, Y)
|
||||
#define HDstrcpy(X, Y) strcpy(X, Y)
|
||||
#define HDstrcspn(X, Y) strcspn(X, Y)
|
||||
#define HDstrerror(N) strerror(N)
|
||||
#define HDstrftime(S, Z, F, T) strftime(S, Z, F, T)
|
||||
#define HDstrlen(S) strlen(S)
|
||||
#define HDstrncat(X, Y, Z) strncat(X, Y, Z)
|
||||
#define HDstrncmp(X, Y, Z) strncmp(X, Y, Z)
|
||||
#define HDstrncpy(X, Y, Z) strncpy(X, Y, Z)
|
||||
#define HDstrpbrk(X, Y) strpbrk(X, Y)
|
||||
#define HDstrrchr(S, C) strrchr(S, C)
|
||||
#define HDstrspn(X, Y) strspn(X, Y)
|
||||
#define HDstrstr(X, Y) strstr(X, Y)
|
||||
#define HDstrtod(S, R) strtod(S, R)
|
||||
#define HDstrtok(X, Y) strtok(X, Y)
|
||||
#define HDstrtol(S, R, N) strtol(S, R, N)
|
||||
H5_DLL int64_t HDstrtoll(const char *s, const char **rest, int base);
|
||||
#define HDstrtoul(S, R, N) strtoul(S, R, N)
|
||||
#ifdef H5_HAVE_WIN32_API
|
||||
#define HDstrtoull(S, R, N) _strtoui64(S, R, N)
|
||||
#else
|
||||
#define HDstrtoull(S, R, N) strtoull(S, R, N)
|
||||
#endif
|
||||
#define HDstrxfrm(X, Y, Z) strxfrm(X, Y, Z)
|
||||
#define HDsysconf(N) sysconf(N)
|
||||
#define HDsystem(S) system(S)
|
||||
#define HDtan(X) tan(X)
|
||||
#define HDtanh(X) tanh(X)
|
||||
#define HDtcdrain(F) tcdrain(F)
|
||||
#define HDtcflow(F, A) tcflow(F, A)
|
||||
#define HDtcflush(F, N) tcflush(F, N)
|
||||
#define HDtcgetattr(F, T) tcgetattr(F, T)
|
||||
#define HDtcgetpgrp(F) tcgetpgrp(F)
|
||||
#define HDtcsendbreak(F, N) tcsendbreak(F, N)
|
||||
#define HDtcsetattr(F, O, T) tcsetattr(F, O, T)
|
||||
#define HDtcsetpgrp(F, N) tcsetpgrp(F, N)
|
||||
#define HDtime(T) time(T)
|
||||
#define HDtimes(T) times(T)
|
||||
#define HDtmpfile() tmpfile()
|
||||
#define HDtmpnam(S) tmpnam(S)
|
||||
#define HDtolower(C) tolower(C)
|
||||
#define HDtoupper(C) toupper(C)
|
||||
#define HDttyname(F) ttyname(F)
|
||||
#define HDtzset() tzset()
|
||||
#define HDumask(N) umask(N)
|
||||
#define HDuname(S) uname(S)
|
||||
#define HDungetc(C, F) ungetc(C, F)
|
||||
#ifdef H5_HAVE_WIN32_API
|
||||
#define HDunlink(S) _unlink(S)
|
||||
#else
|
||||
#define HDunlink(S) unlink(S)
|
||||
#endif
|
||||
#define HDutime(S, T) utime(S, T)
|
||||
#define HDva_arg(A, T) va_arg(A, T)
|
||||
#define HDva_end(A) va_end(A)
|
||||
#define HDva_start(A, P) va_start(A, P)
|
||||
#define HDvasprintf(RET, FMT, A) vasprintf(RET, FMT, A)
|
||||
#define HDvfprintf(F, FMT, A) vfprintf(F, FMT, A)
|
||||
#define HDvprintf(FMT, A) vprintf(FMT, A)
|
||||
#define HDvsprintf(S, FMT, A) vsprintf(S, FMT, A)
|
||||
#define HDvsnprintf(S, N, FMT, A) vsnprintf(S, N, FMT, A)
|
||||
#define HDwait(W) wait(W)
|
||||
#define HDwaitpid(P, W, O) waitpid(P, W, O)
|
||||
#define HDwcstombs(S, P, Z) wcstombs(S, P, Z)
|
||||
#define HDwctomb(S, C) wctomb(S, C)
|
||||
#define HDwrite(F, M, Z) write(F, M, Z)
|
||||
|
||||
/*
|
||||
* And now for a couple non-Posix functions... Watch out for systems that
|
||||
* define these in terms of macros.
|
||||
*/
|
||||
#ifdef H5_HAVE_WIN32_API
|
||||
#define HDstrdup(S) _strdup(S)
|
||||
#else /* H5_HAVE_WIN32_API */
|
||||
|
||||
#if !defined strdup && !defined H5_HAVE_STRDUP
|
||||
extern char * strdup(const char *s);
|
||||
#endif
|
||||
|
||||
#define HDstrdup(S) strdup(S)
|
||||
|
||||
#endif /* H5_HAVE_WIN32_API */
|
||||
|
||||
/*
|
||||
* HDF Boolean type.
|
||||
*/
|
||||
#ifndef FALSE
|
||||
#define FALSE false
|
||||
#endif
|
||||
#ifndef TRUE
|
||||
#define TRUE true
|
||||
#endif
|
||||
|
||||
/** From h5tools_utils.h **/
|
||||
|
||||
H5_DLLVAR int H5_opterr; /* getoption prints errors if this is on */
|
||||
H5_DLLVAR int H5_optind; /* token pointer */
|
||||
H5_DLLVAR const char *H5_optarg; /* flag argument (or value) */
|
||||
|
||||
enum h5_arg_level {
|
||||
no_arg = 0, /* doesn't take an argument */
|
||||
require_arg, /* requires an argument */
|
||||
optional_arg /* argument is optional */
|
||||
};
|
||||
|
||||
struct h5_long_options {
|
||||
const char * name; /* Name of the long option */
|
||||
enum h5_arg_level has_arg; /* Whether we should look for an arg */
|
||||
char shortval; /* The shortname equivalent of long arg
|
||||
* this gets returned from get_option
|
||||
*/
|
||||
};
|
||||
|
||||
extern int H5_get_option(int argc, const char *const *argv, const char *opt,
|
||||
const struct h5_long_options *l_opt);
|
||||
|
||||
extern int nCols; /*max number of columns for outputting */
|
||||
|
||||
/* Definitions of useful routines */
|
||||
extern void print_version(const char *progname);
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue
Block a user