#ifndef _H5private_H
#define _H5private_H
#include "H5public.h"
#ifdef H5_HAVE_THREADSAFE
#ifdef H5_HAVE_WIN32_API
#ifndef H5_HAVE_WIN_THREADS
#ifdef H5_HAVE_PTHREAD_H
#include <pthread.h>
#endif
#endif
#else
#ifdef H5_HAVE_PTHREAD_H
#include <pthread.h>
#endif
#endif
#endif
#ifdef H5_STDC_HEADERS
# 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 <stdio.h>
# include <stdlib.h>
# include <string.h>
#endif
#ifdef H5_HAVE_UNISTD_H
# include <sys/types.h>
# include <unistd.h>
#endif
#ifdef _POSIX_VERSION
# include <sys/wait.h>
# include <pwd.h>
#endif
#ifndef __cplusplus
#ifdef H5_HAVE_STDINT_H
# include <stdint.h>
#endif
#endif
#ifdef H5_HAVE_SYS_STAT_H
# include <sys/stat.h>
#endif
#if defined(H5_TIME_WITH_SYS_TIME)
# include <sys/time.h>
# include <time.h>
#elif defined(H5_HAVE_SYS_TIME_H)
# include <sys/time.h>
#else
# include <time.h>
#endif
#ifdef H5_HAVE_SETJMP_H
# include <setjmp.h>
#endif
#if defined(H5_HAVE_FLOCK) && defined(H5_HAVE_SYS_FILE_H)
# include <sys/file.h>
#endif
#ifdef H5_HAVE_SYS_RESOURCE_H
# include <sys/resource.h>
#endif
#ifdef H5_HAVE_SYS_IOCTL_H
# include <sys/ioctl.h>
#endif
#ifdef H5_HAVE_SYS_SYSINFO_H
# include <sys/sysinfo.h>
#endif
#ifdef H5_HAVE_SYS_PROC_H
# include <sys/proc.h>
#endif
#ifdef H5_HAVE_IO_H
# include <io.h>
#endif
#ifdef H5_HAVE_DLFCN_H
#include <dlfcn.h>
#endif
#ifdef H5_HAVE_DIRENT_H
#include <dirent.h>
#endif
#define H5_DEFAULT_VFD H5FD_SEC2
#ifdef H5_HAVE_WIN32_API
#define WIN32_LEAN_AND_MEAN
#define NOGDI
#ifdef H5_HAVE_WINSOCK2_H
#include <winsock2.h>
#endif
#ifdef H5_HAVE_THREADSAFE
#include <process.h>
#endif
#include <windows.h>
#include <direct.h>
#endif
#if defined(H5_HAVE___INLINE__)
#define H5_INLINE __inline__
#elif defined(H5_HAVE___INLINE)
#define H5_INLINE __inline
#elif defined(H5_HAVE_INLINE)
#define H5_INLINE inline
#else
#define H5_INLINE
#endif
#ifndef F_OK
# define F_OK 00
# define W_OK 02
# define R_OK 04
#endif
#ifdef H5_HAVE_MPE
#include "mpe.h"
#define eventa(func_name) h5_mpe_eventa
#define eventb(func_name) h5_mpe_eventb
#define MPE_LOG_VARS \
static int eventa(FUNC) = -1; \
static int eventb(FUNC) = -1; \
char p_event_start[128];
#define BEGIN_MPE_LOG \
if (H5_MPEinit_g){ \
sprintf(p_event_start, "start %s", FUNC); \
if (eventa(FUNC) == -1 && eventb(FUNC) == -1) { \
const char* p_color = "red"; \
eventa(FUNC)=MPE_Log_get_event_number(); \
eventb(FUNC)=MPE_Log_get_event_number(); \
MPE_Describe_state(eventa(FUNC), eventb(FUNC), FUNC, p_color); \
} \
MPE_Log_event(eventa(FUNC), 0, p_event_start); \
}
#define FINISH_MPE_LOG \
if (H5_MPEinit_g) { \
MPE_Log_event(eventb(FUNC), 0, FUNC); \
}
#else
#define MPE_LOG_VARS
#define BEGIN_MPE_LOG
#define FINISH_MPE_LOG
#endif
#ifdef H5_HAVE_DMALLOC_H
#include "dmalloc.h"
#endif
#ifndef SIGBUS
# define SIGBUS SIGILL
#endif
#ifdef __cplusplus
# define H5_ATTR_FORMAT(X,Y,Z)
# define H5_ATTR_UNUSED
# define H5_ATTR_DEPRECATED_USED
# define H5_ATTR_NDEBUG_UNUSED
# define H5_ATTR_DEBUG_API_USED
# define H5_ATTR_PARALLEL_UNUSED
# define H5_ATTR_PARALLEL_USED
# define H5_ATTR_NORETURN
# define H5_ATTR_CONST
# define H5_ATTR_PURE
# define H5_ATTR_FALLTHROUGH
#else
#if defined(H5_HAVE_ATTRIBUTE) && !defined(__SUNPRO_C)
# define H5_ATTR_FORMAT(X,Y,Z) __attribute__((format(X, Y, Z)))
# define H5_ATTR_UNUSED __attribute__((unused))
#ifdef H5_HAVE_PARALLEL
# define H5_ATTR_PARALLEL_UNUSED __attribute__((unused))
# define H5_ATTR_PARALLEL_USED
#else
# define H5_ATTR_PARALLEL_UNUSED
# define H5_ATTR_PARALLEL_USED __attribute__((unused))
#endif
#ifdef H5_NO_DEPRECATED_SYMBOLS
#define H5_ATTR_DEPRECATED_USED H5_ATTR_UNUSED
#else
#define H5_ATTR_DEPRECATED_USED
#endif
#ifdef H5_DEBUG_API
#define H5_ATTR_DEBUG_API_USED
#else
#define H5_ATTR_DEBUG_API_USED H5_ATTR_UNUSED
#endif
#ifndef NDEBUG
#define H5_ATTR_NDEBUG_UNUSED
#else
#define H5_ATTR_NDEBUG_UNUSED H5_ATTR_UNUSED
#endif
# define H5_ATTR_NORETURN __attribute__((noreturn))
# define H5_ATTR_CONST __attribute__((const))
# define H5_ATTR_PURE __attribute__((pure))
#if defined(__GNUC__) && __GNUC__ >= 7 && !defined(__INTEL_COMPILER)
# define H5_ATTR_FALLTHROUGH __attribute__((fallthrough));
#else
# define H5_ATTR_FALLTHROUGH
#endif
#else
# define H5_ATTR_FORMAT(X,Y,Z)
# define H5_ATTR_UNUSED
# define H5_ATTR_NDEBUG_UNUSED
# define H5_ATTR_DEBUG_API_USED
# define H5_ATTR_DEPRECATED_USED
# define H5_ATTR_PARALLEL_UNUSED
# define H5_ATTR_PARALLEL_USED
# define H5_ATTR_NORETURN
# define H5_ATTR_CONST
# define H5_ATTR_PURE
# define H5_ATTR_FALLTHROUGH
#endif
#endif
#ifdef H5_HAVE_ARPA_INET_H
# include <arpa/inet.h>
#endif
#ifdef H5_HAVE_NETDB_H
# include <netdb.h>
#endif
#ifdef H5_HAVE_NETINET_IN_H
# include <netinet/in.h>
#endif
#ifdef H5_HAVE_SYS_SOCKET_H
# include <sys/socket.h>
#endif
#define SUCCEED 0
#define FAIL (-1)
#define UFAIL (unsigned)(-1)
#ifdef ERR
#undef ERR
#endif
#ifndef NELMTS
# define NELMTS(X) (sizeof(X)/sizeof(X[0]))
#endif
#undef MIN
#define MIN(a,b) (((a)<(b)) ? (a) : (b))
#define MIN2(a,b) MIN(a,b)
#define MIN3(a,b,c) MIN(a,MIN(b,c))
#define MIN4(a,b,c,d) MIN(MIN(a,b),MIN(c,d))
#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 RANGE(LO,X,HI) MAX(LO,MIN(X,HI))
#ifndef ABS
# define ABS(a) (((a)>=0) ? (a) : -(a))
#endif
#ifndef SIGN
# define SIGN(a) ((a)>0 ? 1 : (a)<0 ? -1 : 0)
#endif
# define POWER_OF_TWO(n) (!(n & (n - 1)) && n)
# define H5_EXP2(n) (1 << (n))
#ifndef FALSE
#define FALSE false
#endif
#ifndef TRUE
#define TRUE true
#endif
#if H5_SIZEOF_INT8_T==0
typedef signed char int8_t;
# undef H5_SIZEOF_INT8_T
# define H5_SIZEOF_INT8_T H5_SIZEOF_CHAR
#elif H5_SIZEOF_INT8_T==1
#else
# error "the int8_t type must be 1 byte wide"
#endif
#if H5_SIZEOF_UINT8_T==0
typedef unsigned char uint8_t;
# undef H5_SIZEOF_UINT8_T
# define H5_SIZEOF_UINT8_T H5_SIZEOF_CHAR
#elif H5_SIZEOF_UINT8_T==1
#else
# error "the uint8_t type must be 1 byte wide"
#endif
#if H5_SIZEOF_INT16_T>=2
#elif H5_SIZEOF_SHORT>=2
typedef short int16_t;
# undef H5_SIZEOF_INT16_T
# define H5_SIZEOF_INT16_T H5_SIZEOF_SHORT
#elif H5_SIZEOF_INT>=2
typedef int int16_t;
# undef H5_SIZEOF_INT16_T
# define H5_SIZEOF_INT16_T H5_SIZEOF_INT
#else
# error "nothing appropriate for int16_t"
#endif
#if H5_SIZEOF_UINT16_T>=2
#elif H5_SIZEOF_SHORT>=2
typedef unsigned short uint16_t;
# undef H5_SIZEOF_UINT16_T
# define H5_SIZEOF_UINT16_T H5_SIZEOF_SHORT
#elif H5_SIZEOF_INT>=2
typedef unsigned uint16_t;
# undef H5_SIZEOF_UINT16_T
# define H5_SIZEOF_UINT16_T H5_SIZEOF_INT
#else
# error "nothing appropriate for uint16_t"
#endif
#if H5_SIZEOF_INT32_T>=4
#elif H5_SIZEOF_SHORT>=4
typedef short int32_t;
# undef H5_SIZEOF_INT32_T
# define H5_SIZEOF_INT32_T H5_SIZEOF_SHORT
#elif H5_SIZEOF_INT>=4
typedef int int32_t;
# undef H5_SIZEOF_INT32_T
# define H5_SIZEOF_INT32_T H5_SIZEOF_INT
#elif H5_SIZEOF_LONG>=4
typedef long int32_t;
# undef H5_SIZEOF_INT32_T
# define H5_SIZEOF_INT32_T H5_SIZEOF_LONG
#else
# error "nothing appropriate for int32_t"
#endif
#ifndef LLONG_MAX
# define LLONG_MAX ((long long)(((unsigned long long)1 \
<<(8*sizeof(long long)-1))-1))
# define LLONG_MIN ((long long)(-LLONG_MAX)-1)
#endif
#ifndef ULLONG_MAX
# define ULLONG_MAX ((unsigned long long)((long long)(-1)))
#endif
#ifndef SIZET_MAX
# define SIZET_MAX ((size_t)(ssize_t)(-1))
# define SSIZET_MAX ((ssize_t)(((size_t)1<<(8*sizeof(ssize_t)-1))-1))
#endif
#define HSIZET_MAX ((hsize_t)ULLONG_MAX)
#define HSSIZET_MAX ((hssize_t)LLONG_MAX)
#define HSSIZET_MIN (~(HSSIZET_MAX))
#if defined(H5_HAVE_WIN32_API)
# define h5_posix_io_t unsigned int
# define h5_posix_io_ret_t int
# define H5_POSIX_MAX_IO_BYTES INT_MAX
#elif defined(H5_HAVE_DARWIN)
# define h5_posix_io_t size_t
# define h5_posix_io_ret_t ssize_t
# define H5_POSIX_MAX_IO_BYTES INT_MAX
#else
# define h5_posix_io_t size_t
# define h5_posix_io_ret_t ssize_t
# define H5_POSIX_MAX_IO_BYTES SSIZET_MAX
#endif
#if defined(H5_HAVE_WIN32_API)
# define H5_POSIX_CREATE_MODE_RW (_S_IREAD | _S_IWRITE)
#else
# define H5_POSIX_CREATE_MODE_RW 0666
#endif
#define H5_REQUEST_NULL NULL
#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))
#define H5_KB (1024.0F)
#define H5_MB (1024.0F * 1024.0F)
#define H5_GB (1024.0F * 1024.0F * 1024.0F)
#define H5_TB (1024.0F * 1024.0F * 1024.0F * 1024.0F)
#define H5_PB (1024.0F * 1024.0F * 1024.0F * 1024.0F * 1024.0F)
#define H5_EB (1024.0F * 1024.0F * 1024.0F * 1024.0F * 1024.0F * 1024.0F)
#ifndef H5_HAVE_FLOCK
#define LOCK_SH 0x01
#define LOCK_EX 0x02
#define LOCK_NB 0x04
#define LOCK_UN 0x08
#endif
typedef struct {
double user;
double system;
double elapsed;
} H5_timevals_t;
typedef struct {
H5_timevals_t initial;
H5_timevals_t final_interval;
H5_timevals_t total;
hbool_t is_running;
} H5_timer_t;
H5_DLL void H5_bandwidth(char *buf, double nbytes, double nseconds);
H5_DLL time_t H5_now(void);
H5_DLL uint64_t H5_now_usec(void);
H5_DLL herr_t H5_timer_init(H5_timer_t *timer );
H5_DLL herr_t H5_timer_start(H5_timer_t *timer );
H5_DLL herr_t H5_timer_stop(H5_timer_t *timer );
H5_DLL herr_t H5_timer_get_times(H5_timer_t timer, H5_timevals_t *times );
H5_DLL herr_t H5_timer_get_total_times(H5_timer_t timer, H5_timevals_t *times );
H5_DLL char *H5_timer_get_time_string(double seconds);
typedef enum {
H5_COPY_SHALLOW,
H5_COPY_DEEP
} H5_copy_depth_t;
typedef struct H5O_copy_file_ud_common_t {
struct H5O_pline_t *src_pline;
} H5O_copy_file_ud_common_t;
typedef struct {
unsigned long fileno;
haddr_t addr;
} H5_obj_t;
#include "H5win32defs.h"
#ifndef HDabort
#define HDabort() abort()
#endif
#ifndef HDabs
#define HDabs(X) abs(X)
#endif
#ifndef HDaccept
#define HDaccept(A,B,C) accept((A),(B),(C))
#endif
#ifndef HDaccess
#define HDaccess(F,M) access(F, M)
#endif
#ifndef HDacos
#define HDacos(X) acos(X)
#endif
#ifndef HDalarm
#ifdef H5_HAVE_ALARM
#define HDalarm(N) alarm(N)
#else
#define HDalarm(N) (0)
#endif
#endif
#ifndef HDasctime
#define HDasctime(T) asctime(T)
#endif
#ifndef HDasin
#define HDasin(X) asin(X)
#endif
#ifndef HDasprintf
#define HDasprintf asprintf
#endif
#ifndef HDassert
#define HDassert(X) assert(X)
#endif
#ifndef HDatan
#define HDatan(X) atan(X)
#endif
#ifndef HDatan2
#define HDatan2(X,Y) atan2(X,Y)
#endif
#ifndef HDatexit
#define HDatexit(F) atexit(F)
#endif
#ifndef HDatof
#define HDatof(S) atof(S)
#endif
#ifndef HDatoi
#define HDatoi(S) atoi(S)
#endif
#ifndef HDatol
#define HDatol(S) atol(S)
#endif
#ifndef HDatoll
#define HDatoll(S) atoll(S)
#endif
#ifndef HDbind
#define HDbind(A,B,C) bind((A),(B),(C))
#endif
#ifndef HDbsearch
#define HDbsearch(K,B,N,Z,F) bsearch(K,B,N,Z,F)
#endif
#ifndef HDcalloc
#define HDcalloc(N,Z) calloc(N,Z)
#endif
#ifndef HDceil
#define HDceil(X) ceil(X)
#endif
#ifndef HDcfgetispeed
#define HDcfgetispeed(T) cfgetispeed(T)
#endif
#ifndef HDcfgetospeed
#define HDcfgetospeed(T) cfgetospeed(T)
#endif
#ifndef HDcfsetispeed
#define HDcfsetispeed(T,S) cfsetispeed(T,S)
#endif
#ifndef HDcfsetospeed
#define HDcfsetospeed(T,S) cfsetospeed(T,S)
#endif
#ifndef HDchdir
#define HDchdir(S) chdir(S)
#endif
#ifndef HDchmod
#define HDchmod(S,M) chmod(S,M)
#endif
#ifndef HDchown
#define HDchown(S,O,G) chown(S,O,G)
#endif
#ifndef HDclearerr
#define HDclearerr(F) clearerr(F)
#endif
#ifndef HDclock
#define HDclock() clock()
#endif
#ifndef HDclock_gettime
#define HDclock_gettime(CID, TS) clock_gettime(CID, TS)
#endif
#ifndef HDclose
#define HDclose(F) close(F)
#endif
#ifndef HDclosedir
#define HDclosedir(D) closedir(D)
#endif
#ifndef HDconnect
#define HDconnect(A,B,C) connect((A),(B),(C))
#endif
#ifndef HDcos
#define HDcos(X) cos(X)
#endif
#ifndef HDcosh
#define HDcosh(X) cosh(X)
#endif
#ifndef HDcreat
#define HDcreat(S,M) creat(S,M)
#endif
#ifndef HDctermid
#define HDctermid(S) ctermid(S)
#endif
#ifndef HDctime
#define HDctime(T) ctime(T)
#endif
#ifndef HDcuserid
#define HDcuserid(S) cuserid(S)
#endif
#ifndef HDdifftime
#ifdef H5_HAVE_DIFFTIME
#define HDdifftime(X,Y) difftime(X,Y)
#else
#define HDdifftime(X,Y) ((double)(X)-(double)(Y))
#endif
#endif
#ifndef HDdiv
#define HDdiv(X,Y) div(X,Y)
#endif
#ifndef HDdup
#define HDdup(F) dup(F)
#endif
#ifndef HDdup2
#define HDdup2(F,I) dup2(F,I)
#endif
#ifndef HDexecv
#define HDexecv(S,AV) execv(S,AV)
#endif
#ifndef HDexecve
#define HDexecve(S,AV,E) execve(S,AV,E)
#endif
#ifndef HDexecvp
#define HDexecvp(S,AV) execvp(S,AV)
#endif
#ifndef HDexit
#define HDexit(N) exit(N)
#endif
#ifndef HD_exit
#define HD_exit(N) _exit(N)
#endif
#ifndef HDexp
#define HDexp(X) exp(X)
#endif
#ifndef HDexp2
#define HDexp2(X) exp2(X)
#endif
#ifndef HDfabs
#define HDfabs(X) fabs(X)
#endif
#ifndef HDfabsf
#define HDfabsf(X) ABS(X)
#endif
#ifndef HDfabsl
#define HDfabsl(X) ABS(X)
#endif
#ifndef HDfclose
#define HDfclose(F) fclose(F)
#endif
#ifdef H5_HAVE_FCNTL
#ifndef HDfcntl
#define HDfcntl(F,C,...) fcntl(F,C,__VA_ARGS__)
#endif
#endif
#ifndef HDfdopen
#define HDfdopen(N,S) fdopen(N,S)
#endif
#ifndef HDfeof
#define HDfeof(F) feof(F)
#endif
#ifndef HDferror
#define HDferror(F) ferror(F)
#endif
#ifndef HDfflush
#define HDfflush(F) fflush(F)
#endif
#ifndef HDfgetc
#define HDfgetc(F) fgetc(F)
#endif
#ifndef HDfgetpos
#define HDfgetpos(F,P) fgetpos(F,P)
#endif
#ifndef HDfgets
#define HDfgets(S,N,F) fgets(S,N,F)
#endif
#ifndef HDfileno
#define HDfileno(F) fileno(F)
#endif
#ifdef H5_HAVE_FCNTL
H5_DLL int Pflock(int fd, int operation);
#endif
H5_DLL H5_ATTR_CONST int Nflock(int fd, int operation);
#ifndef HDflock
#if defined(H5_HAVE_FLOCK)
#define HDflock(F,L) flock(F,L)
#elif defined(H5_HAVE_FCNTL)
#define HDflock(F,L) Pflock(F,L)
#else
#define HDflock(F,L) Nflock(F,L)
#endif
#endif
#ifndef HDfloor
#define HDfloor(X) floor(X)
#endif
#ifndef HDfmod
#define HDfmod(X,Y) fmod(X,Y)
#endif
#ifndef HDfopen
#define HDfopen(S,M) fopen(S,M)
#endif
#ifndef HDfork
#define HDfork() fork()
#endif
#ifndef HDfpathconf
#define HDfpathconf(F,N) fpathconf(F,N)
#endif
H5_DLL int HDfprintf (FILE *stream, const char *fmt, ...);
#ifndef HDfputc
#define HDfputc(C,F) fputc(C,F)
#endif
#ifndef HDfputs
#define HDfputs(S,F) fputs(S,F)
#endif
#ifndef HDfread
#define HDfread(M,Z,N,F) fread(M,Z,N,F)
#endif
#ifndef HDfree
#define HDfree(M) free(M)
#endif
#ifndef HDfreopen
#define HDfreopen(S,M,F) freopen(S,M,F)
#endif
#ifndef HDfrexp
#define HDfrexp(X,N) frexp(X,N)
#endif
#ifndef HDfrexpf
#ifdef H5_HAVE_FREXPF
#define HDfrexpf(X,N) frexpf(X,N)
#else
#define HDfrexpf(X,N) frexp(X,N)
#endif
#endif
#ifndef HDfrexpl
#ifdef H5_HAVE_FREXPL
#define HDfrexpl(X,N) frexpl(X,N)
#else
#define HDfrexpl(X,N) frexp(X,N)
#endif
#endif
#ifndef HDfseek
#define HDfseek(F,O,W) fseeko(F,O,W)
#endif
#ifndef HDfsetpos
#define HDfsetpos(F,P) fsetpos(F,P)
#endif
#ifndef HDfstat
#define HDfstat(F,B) fstat(F,B)
#endif
#ifndef HDlstat
#define HDlstat(S,B) lstat(S,B)
#endif
#ifndef HDstat
#define HDstat(S,B) stat(S,B)
#endif
#ifndef H5_HAVE_WIN32_API
typedef struct stat h5_stat_t;
typedef off_t h5_stat_size_t;
#define HDoff_t off_t
#endif
#define H5_SIZEOF_H5_STAT_SIZE_T H5_SIZEOF_OFF_T
#ifndef HDftell
#define HDftell(F) ftell(F)
#endif
#ifndef HDftruncate
#define HDftruncate(F,L) ftruncate(F,L)
#endif
#ifndef HDfwrite
#define HDfwrite(M,Z,N,F) fwrite(M,Z,N,F)
#endif
#ifndef HDgetc
#define HDgetc(F) getc(F)
#endif
#ifndef HDgetchar
#define HDgetchar() getchar()
#endif
#ifndef HDgetcwd
#define HDgetcwd(S,Z) getcwd(S,Z)
#endif
#ifndef HDgetdcwd
#define HDgetdcwd(D,S,Z) getcwd(S,Z)
#endif
#ifndef HDgetdrive
#define HDgetdrive() 0
#endif
#ifndef HDgetegid
#define HDgetegid() getegid()
#endif
#ifndef HDgetenv
#define HDgetenv(S) getenv(S)
#endif
#ifndef HDgeteuid
#define HDgeteuid() geteuid()
#endif
#ifndef HDgetgid
#define HDgetgid() getgid()
#endif
#ifndef HDgetgrgid
#define HDgetgrgid(G) getgrgid(G)
#endif
#ifndef HDgetgrnam
#define HDgetgrnam(S) getgrnam(S)
#endif
#ifndef HDgetgroups
#define HDgetgroups(Z,G) getgroups(Z,G)
#endif
#ifndef HDgethostbyaddr
#define HDgethostbyaddr(A,B,C) gethostbyaddr((A),(B),(C))
#endif
#ifndef HDgethostname
#define HDgethostname(N,L) gethostname(N,L)
#endif
#ifndef HDgetlogin
#define HDgetlogin() getlogin()
#endif
#ifndef HDgetpgrp
#define HDgetpgrp() getpgrp()
#endif
#ifndef HDgetpid
#define HDgetpid() getpid()
#endif
#ifndef HDgetppid
#define HDgetppid() getppid()
#endif
#ifndef HDgetpwnam
#define HDgetpwnam(S) getpwnam(S)
#endif
#ifndef HDgetpwuid
#define HDgetpwuid(U) getpwuid(U)
#endif
#ifndef HDgetrusage
#define HDgetrusage(X,S) getrusage(X,S)
#endif
#ifdef HDgets
#undef HDgets
#endif
#ifndef HDgettimeofday
#define HDgettimeofday(S,P) gettimeofday(S,P)
#endif
#ifndef HDgetuid
#define HDgetuid() getuid()
#endif
#ifndef HDgmtime
#define HDgmtime(T) gmtime(T)
#endif
#ifndef HDhtonl
#define HDhtonl(X) htonl((X))
#endif
#ifndef HDhtons
#define HDhtons(X) htons((X))
#endif
#ifndef HDinet_addr
#define HDinet_addr(C) inet_addr((C))
#endif
#ifndef HDinet_ntoa
#define HDinet_ntoa(C) inet_ntoa((C))
#endif
#ifndef HDisalnum
#define HDisalnum(C) isalnum((int)(C))
#endif
#ifndef HDisalpha
#define HDisalpha(C) isalpha((int)(C))
#endif
#ifndef HDisatty
#define HDisatty(F) isatty(F)
#endif
#ifndef HDiscntrl
#define HDiscntrl(C) iscntrl((int)(C))
#endif
#ifndef HDisdigit
#define HDisdigit(C) isdigit((int)(C))
#endif
#ifndef HDisgraph
#define HDisgraph(C) isgraph((int)(C))
#endif
#ifndef HDislower
#define HDislower(C) islower((int)(C))
#endif
#ifndef HDisnan
#define HDisnan(X) isnan(X)
#endif
#ifndef HDisprint
#define HDisprint(C) isprint((int)(C))
#endif
#ifndef HDispunct
#define HDispunct(C) ispunct((int)(C))
#endif
#ifndef HDisspace
#define HDisspace(C) isspace((int)(C))
#endif
#ifndef HDisupper
#define HDisupper(C) isupper((int)(C))
#endif
#ifndef HDisxdigit
#define HDisxdigit(C) isxdigit((int)(C))
#endif
#ifndef HDkill
#define HDkill(P,S) kill(P,S)
#endif
#ifndef HDlabs
#define HDlabs(X) labs(X)
#endif
#ifndef HDldexp
#define HDldexp(X,N) ldexp(X,N)
#endif
#ifndef HDldiv
#define HDldiv(X,Y) ldiv(X,Y)
#endif
#ifndef HDlink
#define HDlink(OLD,NEW) link(OLD,NEW)
#endif
#ifndef HDlisten
#define HDlisten(A,B) listen((A),(B))
#endif
#ifndef HDllround
#define HDllround(V) llround(V)
#endif
#ifndef HDllroundf
#define HDllroundf(V) llroundf(V)
#endif
#ifndef HDllroundl
#define HDllroundl(V) llroundl(V)
#endif
#ifndef HDlocaleconv
#define HDlocaleconv() localeconv()
#endif
#ifndef HDlocaltime
#define HDlocaltime(T) localtime(T)
#endif
#ifndef HDlog
#define HDlog(X) log(X)
#endif
#ifndef HDlog10
#define HDlog10(X) log10(X)
#endif
#ifndef HDlongjmp
#define HDlongjmp(J,N) longjmp(J,N)
#endif
#ifndef HDlround
#define HDlround(V) lround(V)
#endif
#ifndef HDlroundf
#define HDlroundf(V) lroundf(V)
#endif
#ifndef HDlroundl
#define HDlroundl(V) lroundl(V)
#endif
#ifndef HDlseek
#define HDlseek(F,O,W) lseek(F,O,W)
#endif
#ifndef HDmalloc
#define HDmalloc(Z) malloc(Z)
#endif
#ifndef HDposix_memalign
#define HDposix_memalign(P,A,Z) posix_memalign(P,A,Z)
#endif
#ifndef HDmblen
#define HDmblen(S,N) mblen(S,N)
#endif
#ifndef HDmbstowcs
#define HDmbstowcs(P,S,Z) mbstowcs(P,S,Z)
#endif
#ifndef HDmbtowc
#define HDmbtowc(P,S,Z) mbtowc(P,S,Z)
#endif
#ifndef HDmemchr
#define HDmemchr(S,C,Z) memchr(S,C,Z)
#endif
#ifndef HDmemcmp
#define HDmemcmp(X,Y,Z) memcmp(X,Y,Z)
#endif
#ifndef HDmemcpy
#define HDmemcpy(X,Y,Z) memcpy(X,Y,Z)
#endif
#ifndef HDmemmove
#define HDmemmove(X,Y,Z) memmove((char*)(X),(const char*)(Y),Z)
#endif
#ifndef HDmemset
#define HDmemset(X,C,Z) memset(X,C,Z)
#endif
#ifndef HDmkdir
#define HDmkdir(S,M) mkdir(S,M)
#endif
#ifndef HDmkfifo
#define HDmkfifo(S,M) mkfifo(S,M)
#endif
#ifndef HDmktime
#define HDmktime(T) mktime(T)
#endif
#ifndef HDmodf
#define HDmodf(X,Y) modf(X,Y)
#endif
#ifndef HDnanosleep
#define HDnanosleep(N, O) nanosleep(N, O)
#endif
#ifndef HDntohl
#define HDntohl(A) ntohl((A))
#endif
#ifndef HDntohs
#define HDntohs(A) ntohs((A))
#endif
#ifndef HDopen
#define HDopen(F,...) open(F,__VA_ARGS__)
#endif
#ifndef HDopendir
#define HDopendir(S) opendir(S)
#endif
#ifndef HDpathconf
#define HDpathconf(S,N) pathconf(S,N)
#endif
#ifndef HDpause
#define HDpause() pause()
#endif
#ifndef HDperror
#define HDperror(S) perror(S)
#endif
#ifndef HDpipe
#define HDpipe(F) pipe(F)
#endif
#ifndef HDpow
#define HDpow(X,Y) pow(X,Y)
#endif
#ifndef HDpowf
#define HDpowf(X,Y) powf(X,Y)
#endif
#ifndef HDpread
#define HDpread(F,B,C,O) pread(F,B,C,O)
#endif
#ifndef HDprintf
#define HDprintf(...) HDfprintf(stdout, __VA_ARGS__)
#endif
#ifndef HDputc
#define HDputc(C,F) putc(C,F)
#endif
#ifndef HDputchar
#define HDputchar(C) putchar(C)
#endif
#ifndef HDputs
#define HDputs(S) puts(S)
#endif
#ifndef HDpwrite
#define HDpwrite(F,B,C,O) pwrite(F,B,C,O)
#endif
#ifndef HDqsort
#define HDqsort(M,N,Z,F) qsort(M,N,Z,F)
#endif
#ifndef HDraise
#define HDraise(N) raise(N)
#endif
#ifdef H5_HAVE_RAND_R
#ifndef HDrandom
#define HDrandom() HDrand()
#endif
H5_DLL int HDrand(void);
#ifndef HDsrandom
#define HDsrandom(S) HDsrand(S)
#endif
H5_DLL void HDsrand(unsigned int seed);
#elif defined(H5_HAVE_RANDOM)
#ifndef HDrand
#define HDrand() random()
#endif
#ifndef HDrandom
#define HDrandom() random()
#endif
#ifndef HDsrand
#define HDsrand(S) srandom(S)
#endif
#ifndef HDsrandom
#define HDsrandom(S) srandom(S)
#endif
#else
#ifndef HDrand
#define HDrand() rand()
#endif
#ifndef HDrandom
#define HDrandom() rand()
#endif
#ifndef HDsrand
#define HDsrand(S) srand(S)
#endif
#ifndef HDsrandom
#define HDsrandom(S) srand(S)
#endif
#endif
#ifndef HDread
#define HDread(F,M,Z) read(F,M,Z)
#endif
#ifndef HDreaddir
#define HDreaddir(D) readdir(D)
#endif
#ifndef HDrealloc
#define HDrealloc(M,Z) realloc(M,Z)
#endif
#ifndef HDrealpath
#define HDrealpath(F1,F2) realpath(F1,F2)
#endif
#ifndef HDremove
#define HDremove(S) remove(S)
#endif
#ifndef HDrename
#define HDrename(OLD,NEW) rename(OLD,NEW)
#endif
#ifndef HDrewind
#define HDrewind(F) rewind(F)
#endif
#ifndef HDrewinddir
#define HDrewinddir(D) rewinddir(D)
#endif
#ifndef HDround
#define HDround(V) round(V)
#endif
#ifndef HDroundf
#define HDroundf(V) roundf(V)
#endif
#ifndef HDroundl
#define HDroundl(V) roundl(V)
#endif
#ifndef HDrmdir
#define HDrmdir(S) rmdir(S)
#endif
#ifndef HDselect
#define HDselect(N,RD,WR,ER,T) select(N,RD,WR,ER,T)
#endif
#ifndef HDsetbuf
#define HDsetbuf(F,S) setbuf(F,S)
#endif
#ifndef HDsetenv
#define HDsetenv(N,V,O) setenv(N,V,O)
#endif
#ifndef HDsetgid
#define HDsetgid(G) setgid(G)
#endif
#ifndef HDsetjmp
#define HDsetjmp(J) setjmp(J)
#endif
#ifndef HDsetlocale
#define HDsetlocale(N,S) setlocale(N,S)
#endif
#ifndef HDsetpgid
#define HDsetpgid(P,PG) setpgid(P,PG)
#endif
#ifndef HDsetsid
#define HDsetsid() setsid()
#endif
#ifndef HDsetsockopt
#define HDsetsockopt(A,B,C,D,E) setsockopt((A),(B),(C),(D),(E))
#endif
#ifndef HDsetuid
#define HDsetuid(U) setuid(U)
#endif
#ifndef HDsetvbuf
#define HDsetvbuf(F,S,M,Z) setvbuf(F,S,M,Z)
#endif
#ifndef HDshutdown
#define HDshutdown(A, B) shutdown((A),(B))
#endif
#ifndef HDsigaction
#define HDsigaction(S,A,O) sigaction((S),(A),(O))
#endif
#ifndef HDsigaddset
#define HDsigaddset(S,N) sigaddset(S,N)
#endif
#ifndef HDsigdelset
#define HDsigdelset(S,N) sigdelset(S,N)
#endif
#ifndef HDsigemptyset
#define HDsigemptyset(S) sigemptyset(S)
#endif
#ifndef HDsigfillset
#define HDsigfillset(S) sigfillset(S)
#endif
#ifndef HDsigismember
#define HDsigismember(S,N) sigismember(S,N)
#endif
#ifndef HDsiglongjmp
#define HDsiglongjmp(J,N) siglongjmp(J,N)
#endif
#ifndef HDsignal
#define HDsignal(N,F) signal(N,F)
#endif
#ifndef HDsigpending
#define HDsigpending(S) sigpending(S)
#endif
#ifndef HDsigprocmask
#define HDsigprocmask(H,S,O) sigprocmask(H,S,O)
#endif
#ifndef HDsigsetjmp
#define HDsigsetjmp(J,N) sigsetjmp(J,N)
#endif
#ifndef HDsigsuspend
#define HDsigsuspend(S) sigsuspend(S)
#endif
#ifndef HDsin
#define HDsin(X) sin(X)
#endif
#ifndef HDsinh
#define HDsinh(X) sinh(X)
#endif
#ifndef HDsleep
#define HDsleep(N) sleep(N)
#endif
#ifndef HDsnprintf
#define HDsnprintf snprintf
#endif
#ifndef HDsocket
#define HDsocket(A,B,C) socket((A),(B),(C))
#endif
#ifndef HDsprintf
#define HDsprintf sprintf
#endif
#ifndef HDsqrt
#define HDsqrt(X) sqrt(X)
#endif
#ifndef HDsscanf
#define HDsscanf(S,FMT,...) sscanf(S,FMT,__VA_ARGS__)
#endif
#ifndef HDstrcat
#define HDstrcat(X,Y) strcat(X,Y)
#endif
#ifndef HDstrchr
#define HDstrchr(S,C) strchr(S,C)
#endif
#ifndef HDstrcmp
#define HDstrcmp(X,Y) strcmp(X,Y)
#endif
#ifndef HDstrcasecmp
#define HDstrcasecmp(X,Y) strcasecmp(X,Y)
#endif
#ifndef HDstrcoll
#define HDstrcoll(X,Y) strcoll(X,Y)
#endif
#ifndef HDstrcpy
#define HDstrcpy(X,Y) strcpy(X,Y)
#endif
#ifndef HDstrcspn
#define HDstrcspn(X,Y) strcspn(X,Y)
#endif
#ifndef HDstrerror
#define HDstrerror(N) strerror(N)
#endif
#ifndef HDstrftime
#define HDstrftime(S,Z,F,T) strftime(S,Z,F,T)
#endif
#ifndef HDstrlen
#define HDstrlen(S) strlen(S)
#endif
#ifndef HDstrncat
#define HDstrncat(X,Y,Z) strncat(X,Y,Z)
#endif
#ifndef HDstrncmp
#define HDstrncmp(X,Y,Z) strncmp(X,Y,Z)
#endif
#ifndef HDstrncpy
#define HDstrncpy(X,Y,Z) strncpy(X,Y,Z)
#endif
#ifndef HDstrpbrk
#define HDstrpbrk(X,Y) strpbrk(X,Y)
#endif
#ifndef HDstrrchr
#define HDstrrchr(S,C) strrchr(S,C)
#endif
#ifndef HDstrspn
#define HDstrspn(X,Y) strspn(X,Y)
#endif
#ifndef HDstrstr
#define HDstrstr(X,Y) strstr(X,Y)
#endif
#ifndef HDstrtod
#define HDstrtod(S,R) strtod(S,R)
#endif
#ifndef HDstrtok
#define HDstrtok(X,Y) strtok(X,Y)
#endif
#ifndef HDstrtok_r
#define HDstrtok_r(X,Y,Z) strtok_r(X,Y,Z)
#endif
#ifndef HDstrtol
#define HDstrtol(S,R,N) strtol(S,R,N)
#endif
#ifndef HDstrtoll
#ifdef H5_HAVE_STRTOLL
#define HDstrtoll(S,R,N) strtoll(S,R,N)
#else
H5_DLL int64_t HDstrtoll (const char *s, const char **rest, int base);
#endif
#endif
#ifndef HDstrtoul
#define HDstrtoul(S,R,N) strtoul(S,R,N)
#endif
#ifndef HDstrtoull
#define HDstrtoull(S,R,N) strtoull(S,R,N)
#endif
#ifndef HDstrtoumax
#define HDstrtoumax(S,R,N) strtoumax(S,R,N)
#endif
#ifndef HDstrxfrm
#define HDstrxfrm(X,Y,Z) strxfrm(X,Y,Z)
#endif
#ifdef H5_HAVE_SYMLINK
#ifndef HDsymlink
#define HDsymlink(F1,F2) symlink(F1,F2)
#endif
#endif
#ifndef HDsysconf
#define HDsysconf(N) sysconf(N)
#endif
#ifndef HDsystem
#define HDsystem(S) system(S)
#endif
#ifndef HDtan
#define HDtan(X) tan(X)
#endif
#ifndef HDtanh
#define HDtanh(X) tanh(X)
#endif
#ifndef HDtcdrain
#define HDtcdrain(F) tcdrain(F)
#endif
#ifndef HDtcflow
#define HDtcflow(F,A) tcflow(F,A)
#endif
#ifndef HDtcflush
#define HDtcflush(F,N) tcflush(F,N)
#endif
#ifndef HDtcgetattr
#define HDtcgetattr(F,T) tcgetattr(F,T)
#endif
#ifndef HDtcgetpgrp
#define HDtcgetpgrp(F) tcgetpgrp(F)
#endif
#ifndef HDtcsendbreak
#define HDtcsendbreak(F,N) tcsendbreak(F,N)
#endif
#ifndef HDtcsetattr
#define HDtcsetattr(F,O,T) tcsetattr(F,O,T)
#endif
#ifndef HDtcsetpgrp
#define HDtcsetpgrp(F,N) tcsetpgrp(F,N)
#endif
#ifndef HDtime
#define HDtime(T) time(T)
#endif
#ifndef HDtimes
#define HDtimes(T) times(T)
#endif
#ifndef HDtmpfile
#define HDtmpfile() tmpfile()
#endif
#ifndef HDtmpnam
#define HDtmpnam(S) tmpnam(S)
#endif
#ifndef HDtolower
#define HDtolower(C) tolower(C)
#endif
#ifndef HDtoupper
#define HDtoupper(C) toupper(C)
#endif
#ifndef HDttyname
#define HDttyname(F) ttyname(F)
#endif
#ifndef HDtzset
#define HDtzset() tzset()
#endif
#ifndef HDumask
#define HDumask(N) umask(N)
#endif
#ifndef HDuname
#define HDuname(S) uname(S)
#endif
#ifndef HDungetc
#define HDungetc(C,F) ungetc(C,F)
#endif
#ifndef HDunlink
#define HDunlink(S) unlink(S)
#endif
#ifndef HDutime
#define HDutime(S,T) utime(S,T)
#endif
#ifndef HDva_arg
#define HDva_arg(A,T) va_arg(A,T)
#endif
#ifndef HDva_copy
#define HDva_copy(D,S) va_copy(D,S)
#endif
#ifndef HDva_end
#define HDva_end(A) va_end(A)
#endif
#ifndef HDva_start
#define HDva_start(A,P) va_start(A,P)
#endif
#ifndef HDvasprintf
#define HDvasprintf(RET,FMT,A) vasprintf(RET,FMT,A)
#endif
#ifndef HDvfprintf
#define HDvfprintf(F,FMT,A) vfprintf(F,FMT,A)
#endif
#ifndef HDvprintf
#define HDvprintf(FMT,A) vprintf(FMT,A)
#endif
#ifndef HDvsprintf
#define HDvsprintf(S,FMT,A) vsprintf(S,FMT,A)
#endif
#ifndef HDvsnprintf
#define HDvsnprintf(S,N,FMT,A) vsnprintf(S,N,FMT,A)
#endif
#ifndef HDwait
#define HDwait(W) wait(W)
#endif
#ifndef HDwaitpid
#define HDwaitpid(P,W,O) waitpid(P,W,O)
#endif
#ifndef HDwcstombs
#define HDwcstombs(S,P,Z) wcstombs(S,P,Z)
#endif
#ifndef HDwctomb
#define HDwctomb(S,C) wctomb(S,C)
#endif
#ifndef HDwrite
#define HDwrite(F,M,Z) write(F,M,Z)
#endif
#if !defined strdup && !defined H5_HAVE_STRDUP
extern char *strdup(const char *s);
#endif
#ifndef HDstrdup
#define HDstrdup(S) strdup(S)
#endif
#define H5_STRINGIZE(x) #x
#define H5_TOSTRING(x) H5_STRINGIZE(x)
#define H5_GLUE(x,y) x##y
#define H5_GLUE3(x,y,z) x##y##z
#define H5_GLUE4(w,x,y,z) w##x##y##z
#ifndef NDEBUG
#define H5_CHECK_OVERFLOW(var, vartype, casttype) \
{ \
casttype _tmp_overflow = (casttype)(var); \
HDassert((var) == (vartype)_tmp_overflow); \
}
#else
#define H5_CHECK_OVERFLOW(var, vartype, casttype)
#endif
#ifndef NDEBUG
#define ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) \
{ \
srctype _tmp_src = (srctype)(src); \
dsttype _tmp_dst = (dsttype)(_tmp_src); \
HDassert(_tmp_src == (srctype)_tmp_dst); \
(dst) = _tmp_dst; \
}
#define ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) \
(dst) = (dsttype)(src);
#define ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) \
{ \
srctype _tmp_src = (srctype)(src); \
dsttype _tmp_dst = (dsttype)(_tmp_src); \
HDassert(_tmp_src >= 0); \
HDassert(_tmp_src == (srctype)_tmp_dst); \
(dst) = _tmp_dst; \
}
#define ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) \
(dst) = (dsttype)(src);
#define ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) \
{ \
srctype _tmp_src = (srctype)(src); \
dsttype _tmp_dst = (dsttype)(_tmp_src); \
HDassert(_tmp_dst >= 0); \
HDassert(_tmp_src == (srctype)_tmp_dst); \
(dst) = _tmp_dst; \
}
#define ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) \
{ \
srctype _tmp_src = (srctype)(src); \
dsttype _tmp_dst = (dsttype)(_tmp_src); \
HDassert(_tmp_src >= 0); \
HDassert(_tmp_src == (srctype)_tmp_dst); \
(dst) = _tmp_dst; \
}
#define ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) \
(dst) = (dsttype)(src);
#include "H5overflow.h"
#define H5_CHECKED_ASSIGN(dst, dsttype, src, srctype) \
ASSIGN_##srctype##_TO_##dsttype(dst,dsttype,src,srctype)\
#else
#define H5_CHECKED_ASSIGN(dst, dsttype, src, srctype) \
(dst) = (dsttype)(src);
#endif
#if defined(H5_HAVE_WINDOW_PATH)
#define H5_DIR_SLASH_SEPC '/'
#define H5_DIR_SEPC '\\'
#define H5_DIR_SEPS "\\"
#define H5_CHECK_DELIMITER(SS) ((SS == H5_DIR_SEPC) || (SS == H5_DIR_SLASH_SEPC))
#define H5_CHECK_ABSOLUTE(NAME) ((HDisalpha(NAME[0])) && (NAME[1] == ':') && (H5_CHECK_DELIMITER(NAME[2])))
#define H5_CHECK_ABS_DRIVE(NAME) ((HDisalpha(NAME[0])) && (NAME[1] == ':'))
#define H5_CHECK_ABS_PATH(NAME) (H5_CHECK_DELIMITER(NAME[0]))
#define H5_GET_LAST_DELIMITER(NAME, ptr) { \
char *slash, *backslash; \
\
slash = HDstrrchr(NAME, H5_DIR_SLASH_SEPC); \
backslash = HDstrrchr(NAME, H5_DIR_SEPC); \
if(backslash > slash) \
(ptr = backslash); \
else \
(ptr = slash); \
}
#else
#define H5_DIR_SEPC '/'
#define H5_DIR_SEPS "/"
#define H5_CHECK_DELIMITER(SS) (SS == H5_DIR_SEPC)
#define H5_CHECK_ABSOLUTE(NAME) (H5_CHECK_DELIMITER(*NAME))
#define H5_CHECK_ABS_DRIVE(NAME) (0)
#define H5_CHECK_ABS_PATH(NAME) (0)
#define H5_GET_LAST_DELIMITER(NAME, ptr) ptr = HDstrrchr(NAME, H5_DIR_SEPC);
#endif
#define H5_COLON_SEPC ':'
#ifdef H5_HAVE_C99_FUNC
#define FUNC __func__
#elif defined(H5_HAVE_FUNCTION)
#define FUNC __FUNCTION__
#else
#error "We need __func__ or __FUNCTION__ to test function names!"
#endif
typedef enum {
H5_PKG_A,
H5_PKG_AC,
H5_PKG_B,
H5_PKG_D,
H5_PKG_E,
H5_PKG_F,
H5_PKG_G,
H5_PKG_HG,
H5_PKG_HL,
H5_PKG_I,
H5_PKG_MF,
H5_PKG_MM,
H5_PKG_O,
H5_PKG_P,
H5_PKG_S,
H5_PKG_T,
H5_PKG_V,
H5_PKG_Z,
H5_NPKGS
} H5_pkg_t;
typedef struct H5_debug_open_stream_t {
FILE *stream;
struct H5_debug_open_stream_t *next;
} H5_debug_open_stream_t;
typedef struct H5_debug_t {
FILE *trace;
hbool_t ttop;
hbool_t ttimes;
struct {
const char *name;
FILE *stream;
} pkg[H5_NPKGS];
H5_debug_open_stream_t *open_stream;
} H5_debug_t;
#ifdef H5_HAVE_PARALLEL
extern hbool_t H5_coll_api_sanity_check_g;
#endif
extern H5_debug_t H5_debug_g;
#define H5DEBUG(X) (H5_debug_g.pkg[H5_PKG_##X].stream)
extern char H5libhdf5_settings[];
#ifdef H5_DEBUG_API
#define H5TRACE_DECL \
const char *RTYPE = NULL; \
double CALLTIME;
#define H5TRACE0(R,T) \
RTYPE=R; \
CALLTIME=H5_trace(NULL,FUNC,T)
#define H5TRACE1(R,T,A0) \
RTYPE=R; \
CALLTIME=H5_trace(NULL,FUNC,T,#A0,A0)
#define H5TRACE2(R,T,A0,A1) \
RTYPE=R; \
CALLTIME=H5_trace(NULL,FUNC,T,#A0,A0,#A1,A1)
#define H5TRACE3(R,T,A0,A1,A2) \
RTYPE=R; \
CALLTIME=H5_trace(NULL,FUNC,T,#A0,A0,#A1,A1,#A2,A2)
#define H5TRACE4(R,T,A0,A1,A2,A3) \
RTYPE=R; \
CALLTIME=H5_trace(NULL,FUNC,T,#A0,A0,#A1,A1,#A2,A2,#A3,A3)
#define H5TRACE5(R,T,A0,A1,A2,A3,A4) \
RTYPE=R; \
CALLTIME=H5_trace(NULL,FUNC,T,#A0,A0,#A1,A1,#A2,A2,#A3,A3,#A4,A4)
#define H5TRACE6(R,T,A0,A1,A2,A3,A4,A5) \
RTYPE=R; \
CALLTIME=H5_trace(NULL,FUNC,T,#A0,A0,#A1,A1,#A2,A2,#A3,A3,#A4,A4,#A5,A5)
#define H5TRACE7(R,T,A0,A1,A2,A3,A4,A5,A6) \
RTYPE=R; \
CALLTIME=H5_trace(NULL,FUNC,T,#A0,A0,#A1,A1,#A2,A2,#A3,A3,#A4,A4,#A5,A5,#A6,A6)
#define H5TRACE8(R,T,A0,A1,A2,A3,A4,A5,A6,A7) \
RTYPE=R; \
CALLTIME=H5_trace(NULL,FUNC,T,#A0,A0,#A1,A1,#A2,A2,#A3,A3,#A4,A4,#A5,A5,#A6,A6,#A7,A7)
#define H5TRACE9(R,T,A0,A1,A2,A3,A4,A5,A6,A7,A8) \
RTYPE=R; \
CALLTIME=H5_trace(NULL,FUNC,T,#A0,A0,#A1,A1,#A2,A2,#A3,A3,#A4,A4,#A5,A5,#A6,A6,#A7,A7, \
#A8,A8)
#define H5TRACE10(R,T,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9) \
RTYPE=R; \
CALLTIME=H5_trace(NULL,FUNC,T,#A0,A0,#A1,A1,#A2,A2,#A3,A3,#A4,A4,#A5,A5,#A6,A6,#A7,A7, \
#A8,A8,#A9,A9)
#define H5TRACE11(R,T,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) \
RTYPE=R; \
CALLTIME=H5_trace(NULL,FUNC,T,#A0,A0,#A1,A1,#A2,A2,#A3,A3,#A4,A4,#A5,A5,#A6,A6,#A7,A7, \
#A8,A8,#A9,A9,#A10,A10)
#define H5TRACE12(R,T,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) \
RTYPE=R; \
CALLTIME=H5_trace(NULL,FUNC,T,#A0,A0,#A1,A1,#A2,A2,#A3,A3,#A4,A4,#A5,A5,#A6,A6,#A7,A7, \
#A8,A8,#A9,A9,#A10,A10,#A11,A11)
#define H5TRACE_RETURN(V) \
if (RTYPE) { \
H5_trace(&CALLTIME, FUNC, RTYPE, NULL, V); \
RTYPE = NULL; \
}
#else
#define H5TRACE_DECL
#define H5TRACE0(R,T)
#define H5TRACE1(R,T,A0)
#define H5TRACE2(R,T,A0,A1)
#define H5TRACE3(R,T,A0,A1,A2)
#define H5TRACE4(R,T,A0,A1,A2,A3)
#define H5TRACE5(R,T,A0,A1,A2,A3,A4)
#define H5TRACE6(R,T,A0,A1,A2,A3,A4,A5)
#define H5TRACE7(R,T,A0,A1,A2,A3,A4,A5,A6)
#define H5TRACE8(R,T,A0,A1,A2,A3,A4,A5,A6,A7)
#define H5TRACE9(R,T,A0,A1,A2,A3,A4,A5,A6,A7,A8)
#define H5TRACE10(R,T,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9)
#define H5TRACE11(R,T,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10)
#define H5TRACE12(R,T,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11)
#define H5TRACE_RETURN(V)
#endif
H5_DLL double H5_trace(const double *calltime, const char *func, const char *type, ...);
#define H5_IS_API(S) (\
'_'!=((const char *)S)[2] \
&& '_'!=((const char *)S)[3] \
&& !( \
((const char *)S)[4] \
&& (HDisupper(S[3]) || HDisdigit(S[3])) \
&& '_'==((const char *)S)[4] \
)\
)
#define H5_IS_PUB(S) (((HDisdigit(S[1]) || HDisupper(S[1])) && HDislower(S[2])) || \
((HDisdigit(S[2]) || HDisupper(S[2])) && HDislower(S[3])) || \
(!S[4] || ((HDisdigit(S[3]) || HDisupper(S[3])) && HDislower(S[4]))))
#define H5_IS_PRIV(S) (((HDisdigit(S[1]) || HDisupper(S[1])) && '_' == S[2] && HDislower(S[3])) || \
((HDisdigit(S[2]) || HDisupper(S[2])) && '_' == S[3] && HDislower(S[4])) || \
((HDisdigit(S[3]) || HDisupper(S[3])) && '_' == S[4] && HDislower(S[5])))
#define H5_IS_PKG(S) (((HDisdigit(S[1]) || HDisupper(S[1])) && '_' == S[2] && '_' == S[3] && HDislower(S[4])) || \
((HDisdigit(S[2]) || HDisupper(S[2])) && '_' == S[3] && '_' == S[4] && HDislower(S[5])) || \
((HDisdigit(S[3]) || HDisupper(S[3])) && '_' == S[4] && '_' == S[5] && HDislower(S[6])))
extern char H5_lib_vers_info_g[];
#include "H5TSprivate.h"
#ifdef H5_HAVE_THREADSAFE
typedef struct H5_api_struct {
H5TS_mutex_t init_lock;
hbool_t H5_libinit_g;
hbool_t H5_libterm_g;
} H5_api_t;
#define H5_INIT_GLOBAL (H5_g.H5_libinit_g)
#define H5_TERM_GLOBAL (H5_g.H5_libterm_g)
#ifdef H5_HAVE_WIN_THREADS
#define H5_FIRST_THREAD_INIT InitOnceExecuteOnce(&H5TS_first_init_g, H5TS_win32_process_enter, NULL, NULL);
#else
#define H5_FIRST_THREAD_INIT pthread_once(&H5TS_first_init_g, H5TS_pthread_first_thread_init);
#endif
#define H5_API_LOCK \
H5TS_mutex_lock(&H5_g.init_lock);
#define H5_API_UNLOCK \
H5TS_mutex_unlock(&H5_g.init_lock);
#define H5_API_UNSET_CANCEL \
H5TS_cancel_count_inc();
#define H5_API_SET_CANCEL \
H5TS_cancel_count_dec();
extern H5_api_t H5_g;
#else
#define H5_FIRST_THREAD_INIT
#define H5_API_LOCK
#define H5_API_UNLOCK
#define H5_API_UNSET_CANCEL
#define H5_API_SET_CANCEL
extern hbool_t H5_libinit_g;
extern hbool_t H5_libterm_g;
#define H5_INIT_GLOBAL (H5_libinit_g)
#define H5_TERM_GLOBAL (H5_libterm_g)
#endif
#ifdef H5_HAVE_CODESTACK
#include "H5CSprivate.h"
#define H5_PUSH_FUNC H5CS_push(FUNC);
#define H5_POP_FUNC H5CS_pop();
#else
#define H5_PUSH_FUNC
#define H5_POP_FUNC
#endif
#ifdef H5_HAVE_MPE
extern hbool_t H5_MPEinit_g;
#endif
#define H5_PACKAGE_INIT_VAR(x) H5_GLUE(x, _init_g)
#define H5_PACKAGE_INIT_FUNC(x) H5_GLUE(x, __init_package)
#ifdef H5_MY_PKG
#define H5_PKG_INIT_VAR H5_PACKAGE_INIT_VAR(H5_MY_PKG)
#define H5_PKG_INIT_FUNC H5_PACKAGE_INIT_FUNC(H5_MY_PKG)
#define H5_PACKAGE_YES_INIT(err) \
\
if(!H5_PKG_INIT_VAR && !H5_TERM_GLOBAL) { \
H5_PKG_INIT_VAR = TRUE; \
if(H5_PKG_INIT_FUNC() < 0) { \
H5_PKG_INIT_VAR = FALSE; \
HGOTO_ERROR(H5E_FUNC, H5E_CANTINIT, err, "interface initialization failed") \
} \
}
#define H5_PACKAGE_NO_INIT(err) \
\
if(!H5_PKG_INIT_VAR && !H5_TERM_GLOBAL) \
H5_PKG_INIT_VAR = TRUE;
#define H5_PACKAGE_INIT(pkg_init, err) H5_GLUE3(H5_PACKAGE_, pkg_init, _INIT)(err)
#else
#define H5_PKG_INIT_VAR (TRUE)
#define H5_PACKAGE_INIT(pkg_init, err)
#endif
H5_DLL herr_t H5CX_push(void);
H5_DLL herr_t H5CX_pop(void);
#ifndef NDEBUG
#define FUNC_ENTER_CHECK_NAME(asrt) \
{ \
static hbool_t func_check = FALSE; \
\
if(!func_check) { \
\
HDassert(asrt && "Function naming conventions are incorrect - check H5_IS_API|PUB|PRIV|PKG macros in H5private.h (this is usually due to an incorrect number of underscores)"); \
\
\
func_check = TRUE; \
} \
}
#else
#define FUNC_ENTER_CHECK_NAME(asrt)
#endif
#define FUNC_ENTER_COMMON(asrt) \
hbool_t err_occurred = FALSE; \
\
FUNC_ENTER_CHECK_NAME(asrt);
#define FUNC_ENTER_COMMON_NOERR(asrt) \
FUNC_ENTER_CHECK_NAME(asrt);
#define FUNC_ENTER_API_THREADSAFE \
\
H5_FIRST_THREAD_INIT \
\
\
H5_API_UNSET_CANCEL \
H5_API_LOCK
#define FUNC_ENTER_API_VARS \
MPE_LOG_VARS \
H5TRACE_DECL
#define FUNC_ENTER_API_COMMON \
FUNC_ENTER_API_VARS \
FUNC_ENTER_COMMON(H5_IS_API(FUNC)); \
FUNC_ENTER_API_THREADSAFE;
#define FUNC_ENTER_API_INIT(err) \
\
if(!H5_INIT_GLOBAL && !H5_TERM_GLOBAL) { \
H5_INIT_GLOBAL = TRUE; \
if(H5_init_library() < 0) \
HGOTO_ERROR(H5E_FUNC, H5E_CANTINIT, err, "library initialization failed") \
} \
\
\
H5_PACKAGE_INIT(H5_MY_PKG_INIT, err)
#define FUNC_ENTER_API_PUSH(err) \
\
H5_PUSH_FUNC \
\
\
if(H5CX_push() < 0) \
HGOTO_ERROR(H5E_FUNC, H5E_CANTSET, err, "can't set API context") \
\
BEGIN_MPE_LOG
#define FUNC_ENTER_API(err) {{ \
FUNC_ENTER_API_COMMON \
FUNC_ENTER_API_INIT(err); \
FUNC_ENTER_API_PUSH(err); \
\
H5E_clear_stack(NULL); \
{
#define FUNC_ENTER_API_NOCLEAR(err) {{ \
FUNC_ENTER_API_COMMON \
FUNC_ENTER_API_INIT(err); \
FUNC_ENTER_API_PUSH(err); \
{
#define FUNC_ENTER_API_NOINIT {{{ \
FUNC_ENTER_API_COMMON \
H5_PUSH_FUNC \
BEGIN_MPE_LOG \
{
#define FUNC_ENTER_API_NOINIT_NOERR_NOFS {{{{ \
FUNC_ENTER_API_VARS \
FUNC_ENTER_COMMON_NOERR(H5_IS_API(FUNC)); \
FUNC_ENTER_API_THREADSAFE; \
BEGIN_MPE_LOG \
{
#define FUNC_ENTER_API_NOPUSH(err) {{{{{ \
FUNC_ENTER_COMMON(H5_IS_API(FUNC)); \
FUNC_ENTER_API_THREADSAFE; \
FUNC_ENTER_API_INIT(err); \
{
#define FUNC_ENTER_NOAPI_INIT(err) \
\
H5_PACKAGE_INIT(H5_MY_PKG_INIT, err) \
\
\
H5_PUSH_FUNC
#define FUNC_ENTER_NOAPI(err) { \
FUNC_ENTER_COMMON(!H5_IS_API(FUNC)); \
FUNC_ENTER_NOAPI_INIT(err) \
if(H5_PKG_INIT_VAR || !H5_TERM_GLOBAL) {
#define FUNC_ENTER_NOAPI_NOERR { \
FUNC_ENTER_COMMON_NOERR(!H5_IS_API(FUNC)); \
FUNC_ENTER_NOAPI_INIT(-) \
if(H5_PKG_INIT_VAR || !H5_TERM_GLOBAL) {
#define FUNC_ENTER_NOAPI_NOINIT { \
FUNC_ENTER_COMMON(!H5_IS_API(FUNC)); \
H5_PUSH_FUNC \
if(H5_PKG_INIT_VAR || !H5_TERM_GLOBAL) {
#define FUNC_ENTER_NOAPI_NOINIT_NOERR { \
FUNC_ENTER_COMMON_NOERR(!H5_IS_API(FUNC)); \
H5_PUSH_FUNC \
if(H5_PKG_INIT_VAR || !H5_TERM_GLOBAL) {
#define FUNC_ENTER_NOAPI_NOFS { \
FUNC_ENTER_COMMON(!H5_IS_API(FUNC)); \
\
\
H5_PACKAGE_INIT(H5_MY_PKG_INIT, err) \
if(H5_PKG_INIT_VAR || !H5_TERM_GLOBAL) {
#define FUNC_ENTER_NOAPI_NOERR_NOFS { \
FUNC_ENTER_COMMON_NOERR(!H5_IS_API(FUNC)); \
if(H5_PKG_INIT_VAR || !H5_TERM_GLOBAL) {
#define FUNC_ENTER_NOAPI_TAG(tag, err) { \
haddr_t prev_tag = HADDR_UNDEF; \
\
FUNC_ENTER_COMMON(!H5_IS_API(FUNC)); \
H5AC_tag(tag, &prev_tag); \
FUNC_ENTER_NOAPI_INIT(err) \
if(H5_PKG_INIT_VAR || !H5_TERM_GLOBAL) {
#define FUNC_ENTER_NOAPI_NOINIT_TAG(tag) { \
haddr_t prev_tag = HADDR_UNDEF; \
\
FUNC_ENTER_COMMON(!H5_IS_API(FUNC)); \
H5AC_tag(tag, &prev_tag); \
H5_PUSH_FUNC \
if(H5_PKG_INIT_VAR || !H5_TERM_GLOBAL) {
#define FUNC_ENTER_PACKAGE { \
FUNC_ENTER_COMMON(H5_IS_PKG(FUNC)); \
H5_PUSH_FUNC \
if(H5_PKG_INIT_VAR || !H5_TERM_GLOBAL) {
#define FUNC_ENTER_PACKAGE_NOERR { \
FUNC_ENTER_COMMON_NOERR(H5_IS_PKG(FUNC)); \
H5_PUSH_FUNC \
if(H5_PKG_INIT_VAR || !H5_TERM_GLOBAL) {
#define FUNC_ENTER_PACKAGE_TAG(tag) { \
haddr_t prev_tag = HADDR_UNDEF; \
\
FUNC_ENTER_COMMON(H5_IS_PKG(FUNC)); \
H5AC_tag(tag, &prev_tag); \
H5_PUSH_FUNC \
if(H5_PKG_INIT_VAR || !H5_TERM_GLOBAL) {
#define FUNC_ENTER_STATIC { \
FUNC_ENTER_COMMON(H5_IS_PKG(FUNC)); \
H5_PUSH_FUNC \
if(H5_PKG_INIT_VAR || !H5_TERM_GLOBAL) {
#define FUNC_ENTER_STATIC_NOERR { \
FUNC_ENTER_COMMON_NOERR(H5_IS_PKG(FUNC)); \
H5_PUSH_FUNC \
if(H5_PKG_INIT_VAR || !H5_TERM_GLOBAL) {
#define FUNC_ENTER_STATIC_NOERR_NOFS { \
FUNC_ENTER_COMMON_NOERR(H5_IS_PKG(FUNC)); \
if(H5_PKG_INIT_VAR || !H5_TERM_GLOBAL) {
#define FUNC_ENTER_STATIC_TAG(tag) { \
haddr_t prev_tag = HADDR_UNDEF; \
\
FUNC_ENTER_COMMON(H5_IS_PKG(FUNC)); \
H5AC_tag(tag, &prev_tag); \
H5_PUSH_FUNC \
if(H5_PKG_INIT_VAR || !H5_TERM_GLOBAL) {
#define FUNC_LEAVE_API_THREADSAFE \
H5_API_UNLOCK \
H5_API_SET_CANCEL
#define FUNC_LEAVE_API_COMMON(ret_value) \
; \
} \
FINISH_MPE_LOG \
H5TRACE_RETURN(ret_value);
#define FUNC_LEAVE_API(ret_value) \
FUNC_LEAVE_API_COMMON(ret_value); \
(void)H5CX_pop(); \
H5_POP_FUNC \
if(err_occurred) \
(void)H5E_dump_api_stack(TRUE); \
FUNC_LEAVE_API_THREADSAFE \
return(ret_value); \
}}
#define FUNC_LEAVE_API_NOINIT(ret_value) \
FUNC_LEAVE_API_COMMON(ret_value); \
H5_POP_FUNC \
if(err_occurred) \
(void)H5E_dump_api_stack(TRUE); \
FUNC_LEAVE_API_THREADSAFE \
return(ret_value); \
}}}
#define FUNC_LEAVE_API_NOFS(ret_value) \
FUNC_LEAVE_API_COMMON(ret_value); \
FUNC_LEAVE_API_THREADSAFE \
return(ret_value); \
}}}}
#define FUNC_LEAVE_API_NOPUSH(ret_value) \
; \
} \
if(err_occurred) \
(void)H5E_dump_api_stack(TRUE); \
FUNC_LEAVE_API_THREADSAFE \
return(ret_value); \
}}}}}
#define FUNC_LEAVE_NOAPI(ret_value) \
; \
} \
H5_POP_FUNC \
return(ret_value); \
}
#define FUNC_LEAVE_NOAPI_VOID \
; \
} \
H5_POP_FUNC \
return; \
}
#define FUNC_LEAVE_NOAPI_NOFS(ret_value) \
; \
} \
return(ret_value); \
}
#define FUNC_LEAVE_NOAPI_TAG(ret_value) \
; \
} \
H5AC_tag(prev_tag, NULL); \
H5_POP_FUNC \
return(ret_value); \
}
#define H5_CHECK_PACKAGE_INIT_REG_YES(asrt) HDassert(H5_PACKAGE_INIT_VAR(pkg));
#define H5_CHECK_PACKAGE_INIT_REG_NO(asrt)
#define H5_CHECK_PACKAGE_INIT_INIT_YES(asrt)
#define H5_CHECK_PACKAGE_INIT_INIT_NO(asrt)
#define H5_CHECK_PACKAGE_INIT(pkg, pkg_init, init) H5_GLUE4(H5_CHECK_PACKAGE_INIT_, init, _, pkg_init)(pkg)
#define H5_PKG_YES_INIT(pkg) \
if(!H5_PACKAGE_INIT_VAR(pkg) && !H5_TERM_GLOBAL) { \
H5_PACKAGE_INIT_VAR(pkg) = TRUE; \
if(H5_PACKAGE_INIT_FUNC(pkg)() < 0) { \
H5_PACKAGE_INIT_VAR(pkg) = FALSE; \
\
H5E_PRINTF(H5E_CANTINIT, "interface initialization failed"); \
ret_value = fail_value; \
goto func_init_failed; \
} \
}
#define H5_PKG_NO_INIT(pkg) \
if(!H5_PACKAGE_INIT_VAR(pkg) && !H5_TERM_GLOBAL) \
H5_PACKAGE_INIT_VAR(pkg) = TRUE;
#define H5_PKG_INIT(pkg_init, pkg) H5_GLUE3(H5_PKG_, pkg_init, _INIT)(pkg)
#ifdef H5_PKG_SINGLE_SOURCE
#define H5_PKG_DECLARE_YES_FUNC(pkg) static herr_t H5_PACKAGE_INIT_FUNC(pkg)(void);
#else
#define H5_PKG_DECLARE_YES_FUNC(pkg) extern herr_t H5_PACKAGE_INIT_FUNC(pkg)(void);
#endif
#define H5_PKG_DECLARE_NO_FUNC(pkg)
#ifdef H5_PKG_SINGLE_SOURCE
#define H5_PKG_DECLARE_VAR(pkg) static hbool_t H5_PACKAGE_INIT_VAR(pkg);
#else
#define H5_PKG_DECLARE_VAR(pkg) extern hbool_t H5_PACKAGE_INIT_VAR(pkg);
#endif
#define H5_PKG_DECLARE_FUNC(pkg_init, pkg) H5_GLUE3(H5_PKG_DECLARE_, pkg_init, _FUNC)(pkg)
#ifdef H5_MY_PKG
H5_PKG_DECLARE_VAR(H5_MY_PKG)
H5_PKG_DECLARE_FUNC(H5_MY_PKG_INIT, H5_MY_PKG)
#endif
extern hbool_t H5_api_entered_g;
#define H5_PACKAGE_ENTER(pkg, pkg_init, init) \
FUNC_ENTER_CHECK_NAME(H5_IS_PKG(FUNC)) \
\
\
HDassert(H5_INIT_GLOBAL); \
\
\
\
H5_CHECK_PACKAGE_INIT(pkg, pkg_init, init) \
\
\
H5_PUSH_FUNC \
\
\
{
#define H5_PRIVATE_ENTER(pkg, pkg_init) \
FUNC_ENTER_CHECK_NAME(H5_IS_PRIV(FUNC)) \
\
\
HDassert(H5_INIT_GLOBAL); \
\
\
H5_PKG_INIT(pkg_init, pkg) \
\
\
H5_PUSH_FUNC \
\
\
{{
#define H5_PUBLIC_ENTER(pkg, pkg_init) \
FUNC_ENTER_API_VARS \
FUNC_ENTER_API_THREADSAFE; \
FUNC_ENTER_CHECK_NAME(H5_IS_PUB(FUNC)) \
\
\
H5E_clear_stack(NULL); \
\
\
if(!H5_INIT_GLOBAL && !H5_TERM_GLOBAL) { \
H5_INIT_GLOBAL = TRUE; \
if(H5_init_library() < 0) { \
\
H5E_PRINTF(H5E_CANTINIT, "interface initialization failed"); \
ret_value = fail_value; \
goto func_init_failed; \
} \
} \
\
\
H5_PKG_INIT(pkg_init, pkg) \
\
\
HDassert(!H5_api_entered_g); \
H5_api_entered_g = TRUE; \
\
\
BEGIN_MPE_LOG \
\
\
H5_PUSH_FUNC \
\
\
{{{
#define FUNC_ENT_STATIC(pkg, pkg_init) H5_PACKAGE_ENTER(pkg, pkg_init, REG)
#define FUNC_ENT_PKGINIT(pkg, pkg_init) H5_PACKAGE_ENTER(pkg, pkg_init, INIT)
#define FUNC_ENT_PKG(pkg, pkg_init) H5_PACKAGE_ENTER(pkg, pkg_init, REG)
#define FUNC_ENT_PRIV(pkg, pkg_init) H5_PRIVATE_ENTER(pkg, pkg_init)
#define FUNC_ENT_PUB(pkg, pkg_init) H5_PUBLIC_ENTER(pkg, pkg_init)
#define FUNC_PREFIX_STATIC static
#define FUNC_PREFIX_PKGINIT
#define FUNC_PREFIX_PKG
#define FUNC_PREFIX_PRIV
#define FUNC_PREFIX_PUB
#define FUNC_ERR_VAR_ERR(ret_typ, err) \
hbool_t past_catch = FALSE; \
ret_typ fail_value = err;
#define FUNC_ERR_VAR_ERRCATCH(ret_typ, err) \
hbool_t past_catch = FALSE;
#define FUNC_ERR_VAR_NOERR(ret_typ, err)
#define BEGIN_FUNC(scope, use_err, ret_typ, ret_init, err, func) \
H5_GLUE(FUNC_PREFIX_, scope) \
ret_typ \
func \
\
{ \
ret_typ ret_value = ret_init; \
H5_GLUE(FUNC_ERR_VAR_, use_err)(ret_typ, err) \
H5_GLUE(FUNC_ENT_, scope)(H5_MY_PKG, H5_MY_PKG_INIT)
#define BEGIN_FUNC_VOID(scope, use_err, func) \
H5_GLUE(FUNC_PREFIX_, scope) \
void \
func \
\
{ \
H5_GLUE(FUNC_ERR_VAR_, use_err)(void, -, -) \
H5_GLUE(FUNC_ENT_, scope)
#define H5_PRIV_YES_FUNC_INIT_FAILED func_init_failed:
#define H5_PRIV_NO_FUNC_INIT_FAILED
#define H5_PRIV_FUNC_INIT_FAILED(pkg_init) H5_GLUE3(H5_PRIV_, pkg_init, _FUNC_INIT_FAILED)
#define FUNC_LEAVE_PKGINIT \
\
} \
\
\
H5_POP_FUNC
#define FUNC_LEAVE_STATIC \
\
} \
\
\
H5_POP_FUNC
#define FUNC_LEAVE_PKG \
\
} \
\
\
H5_POP_FUNC
#define FUNC_LEAVE_PRIV \
\
}} \
\
\
H5_PRIV_FUNC_INIT_FAILED(H5_MY_PKG_INIT) \
\
\
H5_POP_FUNC
#define FUNC_LEAVE_PUB \
\
}}} \
\
\
func_init_failed: \
\
\
if(ret_value == fail_value) \
(void)H5E_dump_api_stack(TRUE); \
\
\
H5TRACE_RETURN(ret_value); \
\
\
H5_POP_FUNC \
\
\
FINISH_MPE_LOG \
\
\
HDassert(H5_api_entered_g); \
H5_api_entered_g = FALSE; \
\
\
FUNC_LEAVE_API_THREADSAFE
#define END_FUNC(scope) \
\
H5_GLUE(FUNC_LEAVE_, scope) \
\
\
return(ret_value); \
\
\
}
#define END_FUNC_VOID(scope) \
\
H5_GLUE(FUNC_LEAVE_, scope) \
\
\
return; \
\
\
}
#define H5_BEGIN_TAG(tag) { \
haddr_t prv_tag = HADDR_UNDEF; \
H5AC_tag(tag, &prv_tag); \
#define H5_END_TAG \
H5AC_tag(prv_tag, NULL); \
}
#define HDcompile_assert(e) ((void)sizeof(char[ !!(e) ? 1 : -1]))
H5_DLL herr_t H5_init_library(void);
H5_DLL void H5_term_library(void);
H5_DLL int H5A_term_package(void);
H5_DLL int H5A_top_term_package(void);
H5_DLL int H5AC_term_package(void);
H5_DLL int H5CX_term_package(void);
H5_DLL int H5D_term_package(void);
H5_DLL int H5D_top_term_package(void);
H5_DLL int H5E_term_package(void);
H5_DLL int H5F_term_package(void);
H5_DLL int H5FD_term_package(void);
H5_DLL int H5FL_term_package(void);
H5_DLL int H5FS_term_package(void);
H5_DLL int H5G_term_package(void);
H5_DLL int H5G_top_term_package(void);
H5_DLL int H5I_term_package(void);
H5_DLL int H5L_term_package(void);
H5_DLL int H5P_term_package(void);
H5_DLL int H5PL_term_package(void);
H5_DLL int H5R_term_package(void);
H5_DLL int H5R_top_term_package(void);
H5_DLL int H5S_term_package(void);
H5_DLL int H5S_top_term_package(void);
H5_DLL int H5SL_term_package(void);
H5_DLL int H5T_term_package(void);
H5_DLL int H5T_top_term_package(void);
H5_DLL int H5Z_term_package(void);
H5_DLL uint32_t H5_checksum_fletcher32(const void *data, size_t len);
H5_DLL uint32_t H5_checksum_crc(const void *data, size_t len);
H5_DLL uint32_t H5_checksum_lookup3(const void *data, size_t len, uint32_t initval);
H5_DLL uint32_t H5_checksum_metadata(const void *data, size_t len, uint32_t initval);
H5_DLL uint32_t H5_hash_string(const char *str);
H5_DLL time_t H5_make_time(struct tm *tm);
H5_DLL void H5_nanosleep(uint64_t nanosec);
H5_DLL double H5_get_time(void);
H5_DLL herr_t H5_build_extpath(const char *name, char **extpath );
H5_DLL herr_t H5_combine_path(const char *path1, const char *path2, char **full_name );
#ifdef H5_HAVE_PARALLEL
H5_DLL hsize_t H5_mpi_set_bigio_count(hsize_t new_count);
H5_DLL hsize_t H5_mpi_get_bigio_count(void);
H5_DLL herr_t H5_mpi_comm_dup(MPI_Comm comm, MPI_Comm *comm_new);
H5_DLL herr_t H5_mpi_info_dup(MPI_Info info, MPI_Info *info_new);
H5_DLL herr_t H5_mpi_comm_free(MPI_Comm *comm);
H5_DLL herr_t H5_mpi_info_free(MPI_Info *info);
H5_DLL herr_t H5_mpi_comm_cmp(MPI_Comm comm1, MPI_Comm comm2, int *result);
H5_DLL herr_t H5_mpi_info_cmp(MPI_Info info1, MPI_Info info2, int *result);
H5_DLL herr_t H5_mpio_create_large_type(hsize_t num_elements, MPI_Aint stride_bytes,
MPI_Datatype old_type, MPI_Datatype *new_type);
#endif
H5_DLL herr_t H5_buffer_dump(FILE *stream, int indent, const uint8_t *buf,
const uint8_t *marker, size_t buf_offset, size_t buf_size);
#endif