 |
HDF5
1.12.0
|
Go to the documentation of this file.
30 #ifdef H5_HAVE_THREADSAFE
31 #ifdef H5_HAVE_WIN32_API
32 #ifndef H5_HAVE_WIN_THREADS
33 #ifdef H5_HAVE_PTHREAD_H
38 #ifdef H5_HAVE_PTHREAD_H
47 #ifdef H5_STDC_HEADERS
65 #ifdef H5_HAVE_UNISTD_H
66 # include <sys/types.h>
70 # include <sys/wait.h>
78 #ifdef H5_HAVE_STDINT_H
88 #ifdef H5_HAVE_SYS_STAT_H
89 # include <sys/stat.h>
102 #if defined(H5_TIME_WITH_SYS_TIME)
103 # include <sys/time.h>
105 #elif defined(H5_HAVE_SYS_TIME_H)
106 # include <sys/time.h>
114 #ifdef H5_HAVE_SETJMP_H
121 #if defined(H5_HAVE_FLOCK) && defined(H5_HAVE_SYS_FILE_H)
122 # include <sys/file.h>
129 #ifdef H5_HAVE_SYS_RESOURCE_H
130 # include <sys/resource.h>
137 #ifdef H5_HAVE_SYS_IOCTL_H
138 # include <sys/ioctl.h>
146 #ifdef H5_HAVE_SYS_SYSINFO_H
147 # include <sys/sysinfo.h>
149 #ifdef H5_HAVE_SYS_PROC_H
150 # include <sys/proc.h>
160 #ifdef H5_HAVE_DLFCN_H
163 #ifdef H5_HAVE_DIRENT_H
170 #define H5_DEFAULT_VFD H5FD_SEC2
173 #define H5_DEFAULT_VOL H5VL_NATIVE
175 #ifdef H5_HAVE_WIN32_API
177 #define WIN32_LEAN_AND_MEAN
180 #ifdef H5_HAVE_WINSOCK2_H
181 #include <winsock2.h>
184 #ifdef H5_HAVE_THREADSAFE
194 #if defined(H5_HAVE___INLINE__)
196 #define H5_INLINE __inline__
197 #elif defined(H5_HAVE___INLINE)
199 #define H5_INLINE __inline
200 #elif defined(H5_HAVE_INLINE)
205 #define H5_INLINE inline
233 #define eventa(func_name) h5_mpe_eventa
234 #define eventb(func_name) h5_mpe_eventb
235 #define MPE_LOG_VARS \
236 static int eventa(FUNC) = -1; \
237 static int eventb(FUNC) = -1; \
238 char p_event_start[128];
247 #define BEGIN_MPE_LOG \
249 sprintf(p_event_start, "start %s", FUNC); \
250 if (eventa(FUNC) == -1 && eventb(FUNC) == -1) { \
251 const char* p_color = "red"; \
252 eventa(FUNC)=MPE_Log_get_event_number(); \
253 eventb(FUNC)=MPE_Log_get_event_number(); \
254 MPE_Describe_state(eventa(FUNC), eventb(FUNC), FUNC, p_color); \
256 MPE_Log_event(eventa(FUNC), 0, p_event_start); \
266 #define FINISH_MPE_LOG \
267 if (H5_MPEinit_g) { \
268 MPE_Log_event(eventb(FUNC), 0, FUNC); \
273 #define BEGIN_MPE_LOG
274 #define FINISH_MPE_LOG
281 #ifdef H5_HAVE_DMALLOC_H
292 # define SIGBUS SIGILL
307 # define H5_ATTR_FORMAT(X,Y,Z)
308 # define H5_ATTR_UNUSED
309 # define H5_ATTR_NDEBUG_UNUSED
310 # define H5_ATTR_NORETURN
311 # define H5_ATTR_CONST
312 # define H5_ATTR_PURE
313 # define H5_ATTR_FALLTHROUGH
315 #if defined(H5_HAVE_ATTRIBUTE) && !defined(__SUNPRO_C)
316 # define H5_ATTR_FORMAT(X,Y,Z) __attribute__((format(X, Y, Z)))
317 # define H5_ATTR_UNUSED __attribute__((unused))
319 #define H5_ATTR_NDEBUG_UNUSED
321 #define H5_ATTR_NDEBUG_UNUSED H5_ATTR_UNUSED
323 # define H5_ATTR_NORETURN __attribute__((noreturn))
324 # define H5_ATTR_CONST __attribute__((const))
325 # define H5_ATTR_PURE __attribute__((pure))
326 #if defined(__GNUC__) && __GNUC__ >= 7 && !defined(__INTEL_COMPILER)
327 # define H5_ATTR_FALLTHROUGH __attribute__((fallthrough));
329 # define H5_ATTR_FALLTHROUGH
332 # define H5_ATTR_FORMAT(X,Y,Z)
333 # define H5_ATTR_UNUSED
334 # define H5_ATTR_NDEBUG_UNUSED
335 # define H5_ATTR_NORETURN
336 # define H5_ATTR_CONST
337 # define H5_ATTR_PURE
338 # define H5_ATTR_FALLTHROUGH
353 #define UFAIL (unsigned)(-1)
365 # define NELMTS(X) (sizeof(X)/sizeof(X[0]))
370 #define MIN(a,b) (((a)<(b)) ? (a) : (b))
371 #define MIN2(a,b) MIN(a,b)
372 #define MIN3(a,b,c) MIN(a,MIN(b,c))
373 #define MIN4(a,b,c,d) MIN(MIN(a,b),MIN(c,d))
377 #define MAX(a,b) (((a)>(b)) ? (a) : (b))
378 #define MAX2(a,b) MAX(a,b)
379 #define MAX3(a,b,c) MAX(a,MAX(b,c))
380 #define MAX4(a,b,c,d) MAX(MAX(a,b),MAX(c,d))
383 #define RANGE(LO,X,HI) MAX(LO,MIN(X,HI))
387 # define ABS(a) (((a)>=0) ? (a) : -(a))
392 # define SIGN(a) ((a)>0 ? 1 : (a)<0 ? -1 : 0)
397 # define POWER_OF_TWO(n) (!(n & (n - 1)) && n)
400 # define H5_EXP2(n) (1 << (n))
419 #if H5_SIZEOF_INT8_T==0
421 # undef H5_SIZEOF_INT8_T
422 # define H5_SIZEOF_INT8_T H5_SIZEOF_CHAR
423 #elif H5_SIZEOF_INT8_T==1
425 # error "the int8_t type must be 1 byte wide"
428 #if H5_SIZEOF_UINT8_T==0
430 # undef H5_SIZEOF_UINT8_T
431 # define H5_SIZEOF_UINT8_T H5_SIZEOF_CHAR
432 #elif H5_SIZEOF_UINT8_T==1
434 # error "the uint8_t type must be 1 byte wide"
437 #if H5_SIZEOF_INT16_T>=2
438 #elif H5_SIZEOF_SHORT>=2
439 typedef short int16_t;
440 # undef H5_SIZEOF_INT16_T
441 # define H5_SIZEOF_INT16_T H5_SIZEOF_SHORT
442 #elif H5_SIZEOF_INT>=2
444 # undef H5_SIZEOF_INT16_T
445 # define H5_SIZEOF_INT16_T H5_SIZEOF_INT
447 # error "nothing appropriate for int16_t"
450 #if H5_SIZEOF_UINT16_T>=2
451 #elif H5_SIZEOF_SHORT>=2
453 # undef H5_SIZEOF_UINT16_T
454 # define H5_SIZEOF_UINT16_T H5_SIZEOF_SHORT
455 #elif H5_SIZEOF_INT>=2
457 # undef H5_SIZEOF_UINT16_T
458 # define H5_SIZEOF_UINT16_T H5_SIZEOF_INT
460 # error "nothing appropriate for uint16_t"
463 #if H5_SIZEOF_INT32_T>=4
464 #elif H5_SIZEOF_SHORT>=4
465 typedef short int32_t;
466 # undef H5_SIZEOF_INT32_T
467 # define H5_SIZEOF_INT32_T H5_SIZEOF_SHORT
468 #elif H5_SIZEOF_INT>=4
470 # undef H5_SIZEOF_INT32_T
471 # define H5_SIZEOF_INT32_T H5_SIZEOF_INT
472 #elif H5_SIZEOF_LONG>=4
473 typedef long int32_t;
474 # undef H5_SIZEOF_INT32_T
475 # define H5_SIZEOF_INT32_T H5_SIZEOF_LONG
477 # error "nothing appropriate for int32_t"
485 # define LLONG_MAX ((long long)(((unsigned long long)1 \
486 <<(8*sizeof(long long)-1))-1))
487 # define LLONG_MIN ((long long)(-LLONG_MAX)-1)
490 # define ULLONG_MAX ((unsigned long long)((long long)(-1)))
493 # define SIZET_MAX ((size_t)(ssize_t)(-1))
494 # define SSIZET_MAX ((ssize_t)(((size_t)1<<(8*sizeof(ssize_t)-1))-1))
500 #define HSIZET_MAX ((hsize_t)ULLONG_MAX)
501 #define HSSIZET_MAX ((hssize_t)LLONG_MAX)
502 #define HSSIZET_MIN (~(HSSIZET_MAX))
508 #if defined(H5_HAVE_WIN32_API)
509 # define h5_posix_io_t unsigned int
510 # define h5_posix_io_ret_t int
511 # define H5_POSIX_MAX_IO_BYTES INT_MAX
512 #elif defined(H5_HAVE_DARWIN)
513 # define h5_posix_io_t size_t
514 # define h5_posix_io_ret_t ssize_t
515 # define H5_POSIX_MAX_IO_BYTES INT_MAX
517 # define h5_posix_io_t size_t
518 # define h5_posix_io_ret_t ssize_t
519 # define H5_POSIX_MAX_IO_BYTES SSIZET_MAX
525 #if defined(H5_HAVE_WIN32_API)
526 # define H5_POSIX_CREATE_MODE_RW (_S_IREAD | _S_IWRITE)
528 # define H5_POSIX_CREATE_MODE_RW 0666
534 #define H5_REQUEST_NULL NULL
540 # define H5_DEC_ENUM(TYPE,VAR) (VAR)=((TYPE)((VAR)-1))
556 #define H5_DOUBLE(S) ((double) S ## L)
570 #define H5_FLT_ABS_EQUAL(X,Y) (HDfabsf((X)-(Y)) < FLT_EPSILON)
571 #define H5_DBL_ABS_EQUAL(X,Y) (HDfabs ((X)-(Y)) < DBL_EPSILON)
572 #define H5_LDBL_ABS_EQUAL(X,Y) (HDfabsl((X)-(Y)) < LDBL_EPSILON)
574 #define H5_FLT_REL_EQUAL(X,Y,M) (HDfabsf(((Y)-(X)) / (X)) < (M))
575 #define H5_DBL_REL_EQUAL(X,Y,M) (HDfabs (((Y)-(X)) / (X)) < (M))
576 #define H5_LDBL_REL_EQUAL(X,Y,M) (HDfabsl(((Y)-(X)) / (X)) < (M))
579 #define H5_KB (1024.0F)
580 #define H5_MB (1024.0F * 1024.0F)
581 #define H5_GB (1024.0F * 1024.0F * 1024.0F)
582 #define H5_TB (1024.0F * 1024.0F * 1024.0F * 1024.0F)
583 #define H5_PB (1024.0F * 1024.0F * 1024.0F * 1024.0F * 1024.0F)
584 #define H5_EB (1024.0F * 1024.0F * 1024.0F * 1024.0F * 1024.0F * 1024.0F)
586 #ifndef H5_HAVE_FLOCK
641 #define HDabort() abort()
644 #define HDabs(X) abs(X)
647 #define HDaccess(F,M) access(F, M)
650 #define HDacos(X) acos(X)
654 #define HDalarm(N) alarm(N)
656 #define HDalarm(N) (0)
660 #define HDasctime(T) asctime(T)
663 #define HDasin(X) asin(X)
666 #define HDasprintf asprintf
669 #define HDassert(X) assert(X)
672 #define HDatan(X) atan(X)
675 #define HDatan2(X,Y) atan2(X,Y)
678 #define HDatexit(F) atexit(F)
681 #define HDatof(S) atof(S)
684 #define HDatoi(S) atoi(S)
687 #define HDatol(S) atol(S)
690 #define HDatoll(S) atoll(S)
693 #define HDbsearch(K,B,N,Z,F) bsearch(K,B,N,Z,F)
696 #define HDcalloc(N,Z) calloc(N,Z)
699 #define HDceil(X) ceil(X)
701 #ifndef HDcfgetispeed
702 #define HDcfgetispeed(T) cfgetispeed(T)
704 #ifndef HDcfgetospeed
705 #define HDcfgetospeed(T) cfgetospeed(T)
707 #ifndef HDcfsetispeed
708 #define HDcfsetispeed(T,S) cfsetispeed(T,S)
710 #ifndef HDcfsetospeed
711 #define HDcfsetospeed(T,S) cfsetospeed(T,S)
714 #define HDchdir(S) chdir(S)
717 #define HDchmod(S,M) chmod(S,M)
720 #define HDchown(S,O,G) chown(S,O,G)
723 #define HDclearerr(F) clearerr(F)
726 #define HDclock() clock()
729 #define HDclose(F) close(F)
732 #define HDclosedir(D) closedir(D)
735 #define HDcos(X) cos(X)
738 #define HDcosh(X) cosh(X)
741 #define HDcreat(S,M) creat(S,M)
744 #define HDctermid(S) ctermid(S)
747 #define HDctime(T) ctime(T)
750 #define HDcuserid(S) cuserid(S)
753 #ifdef H5_HAVE_DIFFTIME
754 #define HDdifftime(X,Y) difftime(X,Y)
756 #define HDdifftime(X,Y) ((double)(X)-(double)(Y))
760 #define HDdiv(X,Y) div(X,Y)
763 #define HDdup(F) dup(F)
766 #define HDdup2(F,I) dup2(F,I)
772 #define HDexecv(S,AV) execv(S,AV)
775 #define HDexecve(S,AV,E) execve(S,AV,E)
778 #define HDexecvp(S,AV) execvp(S,AV)
781 #define HDexit(N) exit(N)
784 #define HD_exit(N) _exit(N)
787 #define HDexp(X) exp(X)
790 #define HDexp2(X) exp2(X)
793 #define HDfabs(X) fabs(X)
797 #define HDfabsf(X) ABS(X)
800 #define HDfabsl(X) ABS(X)
803 #define HDfclose(F) fclose(F)
807 #define HDfcntl(F,C,...) fcntl(F,C,__VA_ARGS__)
811 #define HDfdopen(N,S) fdopen(N,S)
814 #define HDfeof(F) feof(F)
817 #define HDferror(F) ferror(F)
820 #define HDfflush(F) fflush(F)
823 #define HDfgetc(F) fgetc(F)
826 #define HDfgetpos(F,P) fgetpos(F,P)
829 #define HDfgets(S,N,F) fgets(S,N,F)
832 #define HDfileno(F) fileno(F)
838 H5_DLL int Pflock(
int fd,
int operation);
848 #if defined(H5_HAVE_FLOCK)
849 #define HDflock(F,L) flock(F,L)
850 #elif defined(H5_HAVE_FCNTL)
851 #define HDflock(F,L) Pflock(F,L)
853 #define HDflock(F,L) Nflock(F,L)
857 #define HDfloor(X) floor(X)
860 #define HDfmod(X,Y) fmod(X,Y)
863 #define HDfopen(S,M) fopen(S,M)
866 #define HDfork() fork()
869 #define HDfpathconf(F,N) fpathconf(F,N)
873 #define HDfputc(C,F) fputc(C,F)
876 #define HDfputs(S,F) fputs(S,F)
879 #define HDfread(M,Z,N,F) fread(M,Z,N,F)
882 #define HDfree(M) free(M)
885 #define HDfreopen(S,M,F) freopen(S,M,F)
888 #define HDfrexp(X,N) frexp(X,N)
892 #ifdef H5_HAVE_FREXPF
893 #define HDfrexpf(X,N) frexpf(X,N)
895 #define HDfrexpf(X,N) frexp(X,N)
899 #ifdef H5_HAVE_FREXPL
900 #define HDfrexpl(X,N) frexpl(X,N)
902 #define HDfrexpl(X,N) frexp(X,N)
907 #define HDfseek(F,O,W) fseeko(F,O,W)
910 #define HDfsetpos(F,P) fsetpos(F,P)
913 #define HDfstat(F,B) fstat(F,B)
916 #define HDlstat(S,B) lstat(S,B)
919 #define HDstat(S,B) stat(S,B)
922 #ifndef H5_HAVE_WIN32_API
928 #define HDoff_t off_t
931 #define H5_SIZEOF_H5_STAT_SIZE_T H5_SIZEOF_OFF_T
934 #define HDftell(F) ftello(F)
937 #define HDftruncate(F,L) ftruncate(F,L)
940 #define HDfwrite(M,Z,N,F) fwrite(M,Z,N,F)
943 #define HDgetc(F) getc(F)
946 #define HDgetchar() getchar()
949 #define HDgetcwd(S,Z) getcwd(S,Z)
952 #define HDgetdcwd(D,S,Z) getcwd(S,Z)
955 #define HDgetdrive() 0
958 #define HDgetegid() getegid()
961 #define HDgetenv(S) getenv(S)
964 #define HDgeteuid() geteuid()
967 #define HDgetgid() getgid()
970 #define HDgetgrgid(G) getgrgid(G)
973 #define HDgetgrnam(S) getgrnam(S)
976 #define HDgetgroups(Z,G) getgroups(Z,G)
978 #ifndef HDgethostname
979 #define HDgethostname(N,L) gethostname(N,L)
982 #define HDgetlogin() getlogin()
985 #define HDgetpgrp() getpgrp()
988 #define HDgetpid() getpid()
991 #define HDgetppid() getppid()
994 #define HDgetpwnam(S) getpwnam(S)
997 #define HDgetpwuid(U) getpwuid(U)
1000 #define HDgetrusage(X,S) getrusage(X,S)
1003 #define HDgets(S) gets(S)
1005 #ifndef HDgettimeofday
1006 #define HDgettimeofday(S,P) gettimeofday(S,P)
1009 #define HDgetuid() getuid()
1012 #define HDgmtime(T) gmtime(T)
1015 #define HDisalnum(C) isalnum((int)(C))
1018 #define HDisalpha(C) isalpha((int)(C))
1021 #define HDisatty(F) isatty(F)
1024 #define HDiscntrl(C) iscntrl((int)(C))
1027 #define HDisdigit(C) isdigit((int)(C))
1030 #define HDisgraph(C) isgraph((int)(C))
1033 #define HDislower(C) islower((int)(C))
1036 #define HDisnan(X) isnan(X)
1039 #define HDisprint(C) isprint((int)(C))
1042 #define HDispunct(C) ispunct((int)(C))
1045 #define HDisspace(C) isspace((int)(C))
1048 #define HDisupper(C) isupper((int)(C))
1051 #define HDisxdigit(C) isxdigit((int)(C))
1054 #define HDkill(P,S) kill(P,S)
1057 #define HDlabs(X) labs(X)
1060 #define HDldexp(X,N) ldexp(X,N)
1063 #define HDldiv(X,Y) ldiv(X,Y)
1066 #define HDlink(OLD,NEW) link(OLD,NEW)
1069 #define HDllround(V) llround(V)
1072 #define HDllroundf(V) llroundf(V)
1075 #define HDllroundl(V) llroundl(V)
1077 #ifndef HDlocaleconv
1078 #define HDlocaleconv() localeconv()
1081 #define HDlocaltime(T) localtime(T)
1084 #define HDlog(X) log(X)
1087 #define HDlog10(X) log10(X)
1090 #define HDlongjmp(J,N) longjmp(J,N)
1093 #define HDlround(V) lround(V)
1096 #define HDlroundf(V) lroundf(V)
1099 #define HDlroundl(V) lroundl(V)
1102 #define HDlseek(F,O,W) lseek(F,O,W)
1105 #define HDmalloc(Z) malloc(Z)
1107 #ifndef HDposix_memalign
1108 #define HDposix_memalign(P,A,Z) posix_memalign(P,A,Z)
1111 #define HDmblen(S,N) mblen(S,N)
1114 #define HDmbstowcs(P,S,Z) mbstowcs(P,S,Z)
1117 #define HDmbtowc(P,S,Z) mbtowc(P,S,Z)
1120 #define HDmemchr(S,C,Z) memchr(S,C,Z)
1123 #define HDmemcmp(X,Y,Z) memcmp(X,Y,Z)
1126 #define HDmemcpy(X,Y,Z) memcpy(X,Y,Z)
1129 #define HDmemmove(X,Y,Z) memmove((char*)(X),(const char*)(Y),Z)
1132 #define HDmemset(X,C,Z) memset(X,C,Z)
1135 #define HDmkdir(S,M) mkdir(S,M)
1138 #define HDmkfifo(S,M) mkfifo(S,M)
1141 #define HDmktime(T) mktime(T)
1144 #define HDmodf(X,Y) modf(X,Y)
1147 #define HDnanosleep(N, O) nanosleep(N, O)
1150 #define HDopen(F,...) open(F,__VA_ARGS__)
1153 #define HDopendir(S) opendir(S)
1156 #define HDpathconf(S,N) pathconf(S,N)
1159 #define HDpause() pause()
1162 #define HDperror(S) perror(S)
1165 #define HDpipe(F) pipe(F)
1168 #define HDpow(X,Y) pow(X,Y)
1171 #define HDpowf(X,Y) powf(X,Y)
1174 #define HDpread(F,B,C,O) pread(F,B,C,O)
1177 #define HDprintf(...) HDfprintf(stdout, __VA_ARGS__)
1180 #define HDputc(C,F) putc(C,F)
1183 #define HDputchar(C) putchar(C)
1186 #define HDputs(S) puts(S)
1189 #define HDpwrite(F,B,C,O) pwrite(F,B,C,O)
1192 #define HDqsort(M,N,Z,F) qsort(M,N,Z,F)
1195 #define HDraise(N) raise(N)
1198 #ifdef H5_HAVE_RAND_R
1200 #define HDrandom() HDrand()
1204 #define HDsrandom(S) HDsrand(S)
1207 #elif defined(H5_HAVE_RANDOM)
1209 #define HDrand() random()
1212 #define HDrandom() random()
1215 #define HDsrand(S) srandom(S)
1218 #define HDsrandom(S) srandom(S)
1222 #define HDrand() rand()
1225 #define HDrandom() rand()
1228 #define HDsrand(S) srand(S)
1231 #define HDsrandom(S) srand(S)
1236 #define HDread(F,M,Z) read(F,M,Z)
1239 #define HDreaddir(D) readdir(D)
1242 #define HDrealloc(M,Z) realloc(M,Z)
1245 #define HDrealpath(F1,F2) realpath(F1,F2)
1248 #define HDremove(S) remove(S)
1251 #define HDrename(OLD,NEW) rename(OLD,NEW)
1254 #define HDrewind(F) rewind(F)
1257 #define HDrewinddir(D) rewinddir(D)
1260 #define HDround(V) round(V)
1263 #define HDroundf(V) roundf(V)
1266 #define HDroundl(V) roundl(V)
1269 #define HDrmdir(S) rmdir(S)
1273 #define HDselect(N,RD,WR,ER,T) select(N,RD,WR,ER,T)
1276 #define HDsetbuf(F,S) setbuf(F,S)
1279 #define HDsetenv(N,V,O) setenv(N,V,O)
1282 #define HDsetgid(G) setgid(G)
1285 #define HDsetjmp(J) setjmp(J)
1288 #define HDsetlocale(N,S) setlocale(N,S)
1291 #define HDsetpgid(P,PG) setpgid(P,PG)
1294 #define HDsetsid() setsid()
1297 #define HDsetuid(U) setuid(U)
1300 #define HDsetvbuf(F,S,M,Z) setvbuf(F,S,M,Z)
1303 #define HDsigaddset(S,N) sigaddset(S,N)
1306 #define HDsigdelset(S,N) sigdelset(S,N)
1308 #ifndef HDsigemptyset
1309 #define HDsigemptyset(S) sigemptyset(S)
1311 #ifndef HDsigfillset
1312 #define HDsigfillset(S) sigfillset(S)
1314 #ifndef HDsigismember
1315 #define HDsigismember(S,N) sigismember(S,N)
1317 #ifndef HDsiglongjmp
1318 #define HDsiglongjmp(J,N) siglongjmp(J,N)
1321 #define HDsignal(N,F) signal(N,F)
1323 #ifndef HDsigpending
1324 #define HDsigpending(S) sigpending(S)
1326 #ifndef HDsigprocmask
1327 #define HDsigprocmask(H,S,O) sigprocmask(H,S,O)
1330 #define HDsigsetjmp(J,N) sigsetjmp(J,N)
1332 #ifndef HDsigsuspend
1333 #define HDsigsuspend(S) sigsuspend(S)
1336 #define HDsin(X) sin(X)
1339 #define HDsinh(X) sinh(X)
1342 #define HDsleep(N) sleep(N)
1345 #define HDsnprintf snprintf
1348 #define HDsprintf sprintf
1351 #define HDsqrt(X) sqrt(X)
1354 #define HDsscanf(S,FMT,...) sscanf(S,FMT,__VA_ARGS__)
1357 #define HDstrcat(X,Y) strcat(X,Y)
1360 #define HDstrchr(S,C) strchr(S,C)
1363 #define HDstrcmp(X,Y) strcmp(X,Y)
1365 #ifndef HDstrcasecmp
1366 #define HDstrcasecmp(X,Y) strcasecmp(X,Y)
1369 #define HDstrcoll(X,Y) strcoll(X,Y)
1372 #define HDstrcpy(X,Y) strcpy(X,Y)
1375 #define HDstrcspn(X,Y) strcspn(X,Y)
1378 #define HDstrerror(N) strerror(N)
1381 #define HDstrftime(S,Z,F,T) strftime(S,Z,F,T)
1384 #define HDstrlen(S) strlen(S)
1387 #define HDstrncat(X,Y,Z) strncat(X,Y,Z)
1390 #define HDstrncmp(X,Y,Z) strncmp(X,Y,Z)
1393 #define HDstrncpy(X,Y,Z) strncpy(X,Y,Z)
1396 #define HDstrpbrk(X,Y) strpbrk(X,Y)
1399 #define HDstrrchr(S,C) strrchr(S,C)
1402 #define HDstrspn(X,Y) strspn(X,Y)
1405 #define HDstrstr(X,Y) strstr(X,Y)
1408 #define HDstrtod(S,R) strtod(S,R)
1411 #define HDstrtok(X,Y) strtok(X,Y)
1414 #define HDstrtok_r(X,Y,Z) strtok_r(X,Y,Z)
1417 #define HDstrtol(S,R,N) strtol(S,R,N)
1420 #ifdef H5_HAVE_STRTOLL
1421 #define HDstrtoll(S,R,N) strtoll(S,R,N)
1427 #define HDstrtoul(S,R,N) strtoul(S,R,N)
1430 #define HDstrtoull(S,R,N) strtoull(S,R,N)
1433 #define HDstrxfrm(X,Y,Z) strxfrm(X,Y,Z)
1435 #ifdef H5_HAVE_SYMLINK
1437 #define HDsymlink(F1,F2) symlink(F1,F2)
1441 #define HDsysconf(N) sysconf(N)
1444 #define HDsystem(S) system(S)
1447 #define HDtan(X) tan(X)
1450 #define HDtanh(X) tanh(X)
1453 #define HDtcdrain(F) tcdrain(F)
1456 #define HDtcflow(F,A) tcflow(F,A)
1459 #define HDtcflush(F,N) tcflush(F,N)
1462 #define HDtcgetattr(F,T) tcgetattr(F,T)
1465 #define HDtcgetpgrp(F) tcgetpgrp(F)
1467 #ifndef HDtcsendbreak
1468 #define HDtcsendbreak(F,N) tcsendbreak(F,N)
1471 #define HDtcsetattr(F,O,T) tcsetattr(F,O,T)
1474 #define HDtcsetpgrp(F,N) tcsetpgrp(F,N)
1477 #define HDtime(T) time(T)
1480 #define HDtimes(T) times(T)
1483 #define HDtmpfile() tmpfile()
1486 #define HDtmpnam(S) tmpnam(S)
1489 #define HDtolower(C) tolower(C)
1492 #define HDtoupper(C) toupper(C)
1495 #define HDttyname(F) ttyname(F)
1498 #define HDtzset() tzset()
1501 #define HDumask(N) umask(N)
1504 #define HDuname(S) uname(S)
1507 #define HDungetc(C,F) ungetc(C,F)
1510 #define HDunlink(S) unlink(S)
1513 #define HDutime(S,T) utime(S,T)
1516 #define HDva_arg(A,T) va_arg(A,T)
1519 #define HDva_copy(D,S) va_copy(D,S)
1522 #define HDva_end(A) va_end(A)
1525 #define HDva_start(A,P) va_start(A,P)
1528 #define HDvasprintf(RET,FMT,A) vasprintf(RET,FMT,A)
1531 #define HDvfprintf(F,FMT,A) vfprintf(F,FMT,A)
1534 #define HDvprintf(FMT,A) vprintf(FMT,A)
1537 #define HDvsprintf(S,FMT,A) vsprintf(S,FMT,A)
1540 #define HDvsnprintf(S,N,FMT,A) vsnprintf(S,N,FMT,A)
1543 #define HDwait(W) wait(W)
1546 #define HDwaitpid(P,W,O) waitpid(P,W,O)
1549 #define HDwcstombs(S,P,Z) wcstombs(S,P,Z)
1552 #define HDwctomb(S,C) wctomb(S,C)
1555 #define HDwrite(F,M,Z) write(F,M,Z)
1562 #if !defined strdup && !defined H5_HAVE_STRDUP
1567 #define HDstrdup(S) strdup(S)
1570 #ifndef HDpthread_self
1571 #define HDpthread_self() pthread_self()
1575 #ifndef HDpthread_self_ulong
1576 #define HDpthread_self_ulong() ((unsigned long)pthread_self())
1581 #define H5_STRINGIZE(x) #x
1582 #define H5_TOSTRING(x) H5_STRINGIZE(x)
1585 #define H5_GLUE(x,y) x##y
1586 #define H5_GLUE3(x,y,z) x##y##z
1587 #define H5_GLUE4(w,x,y,z) w##x##y##z
1593 #define H5_CHECK_OVERFLOW(var, vartype, casttype) \
1595 casttype _tmp_overflow = (casttype)(var); \
1596 HDassert((var) == (vartype)_tmp_overflow); \
1599 #define H5_CHECK_OVERFLOW(var, vartype, casttype)
1606 #define ASSIGN_TO_SMALLER_SIZE(dst, dsttype, src, srctype) \
1608 srctype _tmp_src = (srctype)(src); \
1609 dsttype _tmp_dst = (dsttype)(_tmp_src); \
1610 HDassert(_tmp_src == (srctype)_tmp_dst); \
1614 #define ASSIGN_TO_LARGER_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) \
1615 (dst) = (dsttype)(src);
1617 #define ASSIGN_TO_LARGER_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) \
1619 srctype _tmp_src = (srctype)(src); \
1620 dsttype _tmp_dst = (dsttype)(_tmp_src); \
1621 HDassert(_tmp_src >= 0); \
1622 HDassert(_tmp_src == (srctype)_tmp_dst); \
1626 #define ASSIGN_TO_LARGER_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) \
1627 (dst) = (dsttype)(src);
1629 #define ASSIGN_TO_SAME_SIZE_UNSIGNED_TO_SIGNED(dst, dsttype, src, srctype) \
1631 srctype _tmp_src = (srctype)(src); \
1632 dsttype _tmp_dst = (dsttype)(_tmp_src); \
1633 HDassert(_tmp_dst >= 0); \
1634 HDassert(_tmp_src == (srctype)_tmp_dst); \
1638 #define ASSIGN_TO_SAME_SIZE_SIGNED_TO_UNSIGNED(dst, dsttype, src, srctype) \
1640 srctype _tmp_src = (srctype)(src); \
1641 dsttype _tmp_dst = (dsttype)(_tmp_src); \
1642 HDassert(_tmp_src >= 0); \
1643 HDassert(_tmp_src == (srctype)_tmp_dst); \
1647 #define ASSIGN_TO_SAME_SIZE_SAME_SIGNED(dst, dsttype, src, srctype) \
1648 (dst) = (dsttype)(src);
1665 #define H5_CHECKED_ASSIGN(dst, dsttype, src, srctype) \
1666 ASSIGN_##srctype##_TO_##dsttype(dst,dsttype,src,srctype)\
1669 #define H5_CHECKED_ASSIGN(dst, dsttype, src, srctype) \
1670 (dst) = (dsttype)(src);
1673 #if defined(H5_HAVE_WINDOW_PATH)
1676 #define H5_DIR_SLASH_SEPC '/'
1677 #define H5_DIR_SEPC '\\'
1678 #define H5_DIR_SEPS "\\"
1679 #define H5_CHECK_DELIMITER(SS) ((SS == H5_DIR_SEPC) || (SS == H5_DIR_SLASH_SEPC))
1680 #define H5_CHECK_ABSOLUTE(NAME) ((HDisalpha(NAME[0])) && (NAME[1] == ':') && (H5_CHECK_DELIMITER(NAME[2])))
1681 #define H5_CHECK_ABS_DRIVE(NAME) ((HDisalpha(NAME[0])) && (NAME[1] == ':'))
1682 #define H5_CHECK_ABS_PATH(NAME) (H5_CHECK_DELIMITER(NAME[0]))
1684 #define H5_GET_LAST_DELIMITER(NAME, ptr) { \
1685 char *slash, *backslash; \
1687 slash = HDstrrchr(NAME, H5_DIR_SLASH_SEPC); \
1688 backslash = HDstrrchr(NAME, H5_DIR_SEPC); \
1689 if(backslash > slash) \
1690 (ptr = backslash); \
1697 #define H5_DIR_SEPC '/'
1698 #define H5_DIR_SEPS "/"
1699 #define H5_CHECK_DELIMITER(SS) (SS == H5_DIR_SEPC)
1700 #define H5_CHECK_ABSOLUTE(NAME) (H5_CHECK_DELIMITER(*NAME))
1701 #define H5_CHECK_ABS_DRIVE(NAME) (0)
1702 #define H5_CHECK_ABS_PATH(NAME) (0)
1703 #define H5_GET_LAST_DELIMITER(NAME, ptr) ptr = HDstrrchr(NAME, H5_DIR_SEPC);
1707 #define H5_COLON_SEPC ':'
1711 #ifdef H5_HAVE_C99_FUNC
1712 #define FUNC __func__
1713 #elif defined(H5_HAVE_FUNCTION)
1714 #define FUNC __FUNCTION__
1716 #error "We need __func__ or __FUNCTION__ to test function names!"
1769 #ifdef H5_HAVE_PARALLEL
1770 extern hbool_t H5_coll_api_sanity_check_g;
1774 #define H5DEBUG(X) (H5_debug_g.pkg[H5_PKG_##X].stream)
1793 #define H5TRACE_DECL \
1794 const char *RTYPE = NULL; \
1797 #define H5TRACE0(R,T) \
1799 CALLTIME=H5_trace(NULL,FUNC,T)
1800 #define H5TRACE1(R,T,A0) \
1802 CALLTIME=H5_trace(NULL,FUNC,T,#A0,A0)
1803 #define H5TRACE2(R,T,A0,A1) \
1805 CALLTIME=H5_trace(NULL,FUNC,T,#A0,A0,#A1,A1)
1806 #define H5TRACE3(R,T,A0,A1,A2) \
1808 CALLTIME=H5_trace(NULL,FUNC,T,#A0,A0,#A1,A1,#A2,A2)
1809 #define H5TRACE4(R,T,A0,A1,A2,A3) \
1811 CALLTIME=H5_trace(NULL,FUNC,T,#A0,A0,#A1,A1,#A2,A2,#A3,A3)
1812 #define H5TRACE5(R,T,A0,A1,A2,A3,A4) \
1814 CALLTIME=H5_trace(NULL,FUNC,T,#A0,A0,#A1,A1,#A2,A2,#A3,A3,#A4,A4)
1815 #define H5TRACE6(R,T,A0,A1,A2,A3,A4,A5) \
1817 CALLTIME=H5_trace(NULL,FUNC,T,#A0,A0,#A1,A1,#A2,A2,#A3,A3,#A4,A4,#A5,A5)
1818 #define H5TRACE7(R,T,A0,A1,A2,A3,A4,A5,A6) \
1820 CALLTIME=H5_trace(NULL,FUNC,T,#A0,A0,#A1,A1,#A2,A2,#A3,A3,#A4,A4,#A5,A5,#A6,A6)
1821 #define H5TRACE8(R,T,A0,A1,A2,A3,A4,A5,A6,A7) \
1823 CALLTIME=H5_trace(NULL,FUNC,T,#A0,A0,#A1,A1,#A2,A2,#A3,A3,#A4,A4,#A5,A5,#A6,A6,#A7,A7)
1824 #define H5TRACE9(R,T,A0,A1,A2,A3,A4,A5,A6,A7,A8) \
1826 CALLTIME=H5_trace(NULL,FUNC,T,#A0,A0,#A1,A1,#A2,A2,#A3,A3,#A4,A4,#A5,A5,#A6,A6,#A7,A7, \
1828 #define H5TRACE10(R,T,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9) \
1830 CALLTIME=H5_trace(NULL,FUNC,T,#A0,A0,#A1,A1,#A2,A2,#A3,A3,#A4,A4,#A5,A5,#A6,A6,#A7,A7, \
1832 #define H5TRACE11(R,T,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) \
1834 CALLTIME=H5_trace(NULL,FUNC,T,#A0,A0,#A1,A1,#A2,A2,#A3,A3,#A4,A4,#A5,A5,#A6,A6,#A7,A7, \
1835 #A8,A8,#A9,A9,#A10,A10)
1836 #define H5TRACE12(R,T,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) \
1838 CALLTIME=H5_trace(NULL,FUNC,T,#A0,A0,#A1,A1,#A2,A2,#A3,A3,#A4,A4,#A5,A5,#A6,A6,#A7,A7, \
1839 #A8,A8,#A9,A9,#A10,A10,#A11,A11)
1841 #define H5TRACE_RETURN(V) \
1843 H5_trace(&CALLTIME, FUNC, RTYPE, NULL, V); \
1847 #define H5TRACE_DECL
1848 #define H5TRACE0(R,T)
1849 #define H5TRACE1(R,T,A0)
1850 #define H5TRACE2(R,T,A0,A1)
1851 #define H5TRACE3(R,T,A0,A1,A2)
1852 #define H5TRACE4(R,T,A0,A1,A2,A3)
1853 #define H5TRACE5(R,T,A0,A1,A2,A3,A4)
1854 #define H5TRACE6(R,T,A0,A1,A2,A3,A4,A5)
1855 #define H5TRACE7(R,T,A0,A1,A2,A3,A4,A5,A6)
1856 #define H5TRACE8(R,T,A0,A1,A2,A3,A4,A5,A6,A7)
1857 #define H5TRACE9(R,T,A0,A1,A2,A3,A4,A5,A6,A7,A8)
1858 #define H5TRACE10(R,T,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9)
1859 #define H5TRACE11(R,T,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10)
1860 #define H5TRACE12(R,T,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11)
1861 #define H5TRACE_RETURN(V)
1864 H5_DLL double H5_trace(
const double *calltime,
const char *func,
const char *type, ...);
1896 #define H5_IS_API(S) (\
1897 '_'!=((const char *)S)[2] \
1898 && '_'!=((const char *)S)[3] \
1900 ((const char *)S)[4] \
1901 && (HDisupper(S[3]) || HDisdigit(S[3])) \
1902 && '_'==((const char *)S)[4] \
1908 #define H5_IS_PUB(S) (((HDisdigit(S[1]) || HDisupper(S[1])) && HDislower(S[2])) || \
1909 ((HDisdigit(S[2]) || HDisupper(S[2])) && HDislower(S[3])) || \
1910 (!S[4] || ((HDisdigit(S[3]) || HDisupper(S[3])) && HDislower(S[4]))))
1914 #define H5_IS_PRIV(S) (((HDisdigit(S[1]) || HDisupper(S[1])) && '_' == S[2] && HDislower(S[3])) || \
1915 ((HDisdigit(S[2]) || HDisupper(S[2])) && '_' == S[3] && HDislower(S[4])) || \
1916 ((HDisdigit(S[3]) || HDisupper(S[3])) && '_' == S[4] && HDislower(S[5])))
1920 #define H5_IS_PKG(S) (((HDisdigit(S[1]) || HDisupper(S[1])) && '_' == S[2] && '_' == S[3] && HDislower(S[4])) || \
1921 ((HDisdigit(S[2]) || HDisupper(S[2])) && '_' == S[3] && '_' == S[4] && HDislower(S[5])) || \
1922 ((HDisdigit(S[3]) || HDisupper(S[3])) && '_' == S[4] && '_' == S[5] && HDislower(S[6])))
1928 #ifdef H5_HAVE_THREADSAFE
1934 typedef struct H5_api_struct {
1941 #define H5_INIT_GLOBAL (H5_g.H5_libinit_g)
1942 #define H5_TERM_GLOBAL (H5_g.H5_libterm_g)
1945 #ifdef H5_HAVE_WIN_THREADS
1946 #define H5_FIRST_THREAD_INIT InitOnceExecuteOnce(&H5TS_first_init_g, H5TS_win32_process_enter, NULL, NULL);
1948 #define H5_FIRST_THREAD_INIT pthread_once(&H5TS_first_init_g, H5TS_pthread_first_thread_init);
1952 #define H5_API_LOCK \
1953 H5TS_mutex_lock(&H5_g.init_lock);
1954 #define H5_API_UNLOCK \
1955 H5TS_mutex_unlock(&H5_g.init_lock);
1958 #define H5_API_UNSET_CANCEL \
1959 H5TS_cancel_count_inc();
1961 #define H5_API_SET_CANCEL \
1962 H5TS_cancel_count_dec();
1964 extern H5_api_t H5_g;
1969 #define H5_FIRST_THREAD_INIT
1973 #define H5_API_UNLOCK
1976 #define H5_API_UNSET_CANCEL
1977 #define H5_API_SET_CANCEL
1984 #define H5_INIT_GLOBAL (H5_libinit_g)
1985 #define H5_TERM_GLOBAL (H5_libterm_g)
1989 #ifdef H5_HAVE_CODESTACK
1994 #define H5_PUSH_FUNC H5CS_push(FUNC);
1995 #define H5_POP_FUNC H5CS_pop();
1997 #define H5_PUSH_FUNC
2006 #define H5_PACKAGE_INIT_VAR(x) H5_GLUE(x, _init_g)
2007 #define H5_PACKAGE_INIT_FUNC(x) H5_GLUE(x, __init_package)
2011 #define H5_PKG_INIT_VAR H5_PACKAGE_INIT_VAR(H5_MY_PKG)
2012 #define H5_PKG_INIT_FUNC H5_PACKAGE_INIT_FUNC(H5_MY_PKG)
2013 #define H5_PACKAGE_YES_INIT(err) \
2015 if(!H5_PKG_INIT_VAR && !H5_TERM_GLOBAL) { \
2016 H5_PKG_INIT_VAR = TRUE; \
2017 if(H5_PKG_INIT_FUNC() < 0) { \
2018 H5_PKG_INIT_VAR = FALSE; \
2019 HGOTO_ERROR(H5E_FUNC, H5E_CANTINIT, err, "interface initialization failed") \
2022 #define H5_PACKAGE_NO_INIT(err) \
2024 if(!H5_PKG_INIT_VAR && !H5_TERM_GLOBAL) \
2025 H5_PKG_INIT_VAR = TRUE;
2026 #define H5_PACKAGE_INIT(pkg_init, err) H5_GLUE3(H5_PACKAGE_, pkg_init, _INIT)(err)
2028 #define H5_PKG_INIT_VAR (TRUE)
2029 #define H5_PACKAGE_INIT(pkg_init, err)
2038 #define FUNC_ENTER_CHECK_NAME(asrt) \
2040 static hbool_t func_check = FALSE; \
2044 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)"); \
2047 func_check = TRUE; \
2051 #define FUNC_ENTER_CHECK_NAME(asrt)
2055 #define FUNC_ENTER_COMMON(asrt) \
2056 hbool_t err_occurred = FALSE; \
2058 FUNC_ENTER_CHECK_NAME(asrt);
2060 #define FUNC_ENTER_COMMON_NOERR(asrt) \
2061 FUNC_ENTER_CHECK_NAME(asrt);
2064 #define FUNC_ENTER_API_THREADSAFE \
2066 H5_FIRST_THREAD_INIT \
2069 H5_API_UNSET_CANCEL \
2073 #define FUNC_ENTER_API_VARS \
2077 #define FUNC_ENTER_API_COMMON \
2078 FUNC_ENTER_API_VARS \
2079 FUNC_ENTER_COMMON(H5_IS_API(FUNC)); \
2080 FUNC_ENTER_API_THREADSAFE;
2082 #define FUNC_ENTER_API_INIT(err) \
2084 if(!H5_INIT_GLOBAL && !H5_TERM_GLOBAL) { \
2085 H5_INIT_GLOBAL = TRUE; \
2086 if(H5_init_library() < 0) \
2087 HGOTO_ERROR(H5E_FUNC, H5E_CANTINIT, err, "library initialization failed") \
2091 H5_PACKAGE_INIT(H5_MY_PKG_INIT, err) \
2097 if(H5CX_push() < 0) \
2098 HGOTO_ERROR(H5E_FUNC, H5E_CANTSET, err, "can't set API context") \
2103 #define FUNC_ENTER_API(err) {{ \
2104 FUNC_ENTER_API_COMMON \
2105 FUNC_ENTER_API_INIT(err); \
2107 H5E_clear_stack(NULL); \
2114 #define FUNC_ENTER_API_NOCLEAR(err) {{ \
2115 FUNC_ENTER_API_COMMON \
2116 FUNC_ENTER_API_INIT(err); \
2126 #define FUNC_ENTER_API_NOINIT {{{ \
2127 FUNC_ENTER_API_COMMON \
2139 #define FUNC_ENTER_API_NOINIT_NOERR_NOFS {{{{ \
2140 FUNC_ENTER_API_VARS \
2141 FUNC_ENTER_COMMON_NOERR(H5_IS_API(FUNC)); \
2142 FUNC_ENTER_API_THREADSAFE; \
2147 #define FUNC_ENTER_NOAPI_INIT(err) \
2149 H5_PACKAGE_INIT(H5_MY_PKG_INIT, err) \
2155 #define FUNC_ENTER_NOAPI(err) { \
2156 FUNC_ENTER_COMMON(!H5_IS_API(FUNC)); \
2157 FUNC_ENTER_NOAPI_INIT(err) \
2158 if(H5_PKG_INIT_VAR || !H5_TERM_GLOBAL) {
2161 #define FUNC_ENTER_NOAPI_NOERR { \
2162 FUNC_ENTER_COMMON_NOERR(!H5_IS_API(FUNC)); \
2163 FUNC_ENTER_NOAPI_INIT(-) \
2164 if(H5_PKG_INIT_VAR || !H5_TERM_GLOBAL) {
2174 #define FUNC_ENTER_NOAPI_NOINIT { \
2175 FUNC_ENTER_COMMON(!H5_IS_API(FUNC)); \
2177 if(H5_PKG_INIT_VAR || !H5_TERM_GLOBAL) {
2188 #define FUNC_ENTER_NOAPI_NOINIT_NOERR { \
2189 FUNC_ENTER_COMMON_NOERR(!H5_IS_API(FUNC)); \
2191 if(H5_PKG_INIT_VAR || !H5_TERM_GLOBAL) {
2199 #define FUNC_ENTER_NOAPI_NOFS { \
2200 FUNC_ENTER_COMMON(!H5_IS_API(FUNC)); \
2203 H5_PACKAGE_INIT(H5_MY_PKG_INIT, err) \
2204 if(H5_PKG_INIT_VAR || !H5_TERM_GLOBAL) {
2215 #define FUNC_ENTER_NOAPI_NOERR_NOFS { \
2216 FUNC_ENTER_COMMON_NOERR(!H5_IS_API(FUNC)); \
2217 if(H5_PKG_INIT_VAR || !H5_TERM_GLOBAL) {
2222 #define FUNC_ENTER_NOAPI_TAG(tag, err) { \
2223 haddr_t prev_tag = HADDR_UNDEF; \
2225 FUNC_ENTER_COMMON(!H5_IS_API(FUNC)); \
2226 H5AC_tag(tag, &prev_tag); \
2227 FUNC_ENTER_NOAPI_INIT(err) \
2228 if(H5_PKG_INIT_VAR || !H5_TERM_GLOBAL) {
2230 #define FUNC_ENTER_NOAPI_NOINIT_TAG(tag) { \
2231 haddr_t prev_tag = HADDR_UNDEF; \
2233 FUNC_ENTER_COMMON(!H5_IS_API(FUNC)); \
2234 H5AC_tag(tag, &prev_tag); \
2236 if(H5_PKG_INIT_VAR || !H5_TERM_GLOBAL) {
2239 #define FUNC_ENTER_PACKAGE { \
2240 FUNC_ENTER_COMMON(H5_IS_PKG(FUNC)); \
2242 if(H5_PKG_INIT_VAR || !H5_TERM_GLOBAL) {
2245 #define FUNC_ENTER_PACKAGE_NOERR { \
2246 FUNC_ENTER_COMMON_NOERR(H5_IS_PKG(FUNC)); \
2248 if(H5_PKG_INIT_VAR || !H5_TERM_GLOBAL) {
2252 #define FUNC_ENTER_PACKAGE_TAG(tag) { \
2253 haddr_t prev_tag = HADDR_UNDEF; \
2255 FUNC_ENTER_COMMON(H5_IS_PKG(FUNC)); \
2256 H5AC_tag(tag, &prev_tag); \
2258 if(H5_PKG_INIT_VAR || !H5_TERM_GLOBAL) {
2261 #define FUNC_ENTER_STATIC { \
2262 FUNC_ENTER_COMMON(H5_IS_PKG(FUNC)); \
2264 if(H5_PKG_INIT_VAR || !H5_TERM_GLOBAL) {
2267 #define FUNC_ENTER_STATIC_NOERR { \
2268 FUNC_ENTER_COMMON_NOERR(H5_IS_PKG(FUNC)); \
2270 if(H5_PKG_INIT_VAR || !H5_TERM_GLOBAL) {
2274 #define FUNC_ENTER_STATIC_NOERR_NOFS { \
2275 FUNC_ENTER_COMMON_NOERR(H5_IS_PKG(FUNC)); \
2276 if(H5_PKG_INIT_VAR || !H5_TERM_GLOBAL) {
2280 #define FUNC_ENTER_STATIC_TAG(tag) { \
2281 haddr_t prev_tag = HADDR_UNDEF; \
2283 FUNC_ENTER_COMMON(H5_IS_PKG(FUNC)); \
2284 H5AC_tag(tag, &prev_tag); \
2286 if(H5_PKG_INIT_VAR || !H5_TERM_GLOBAL) {
2298 #define FUNC_LEAVE_API_THREADSAFE \
2302 #define FUNC_LEAVE_API_COMMON(ret_value) \
2306 H5TRACE_RETURN(ret_value);
2308 #define FUNC_LEAVE_API(ret_value) \
2309 FUNC_LEAVE_API_COMMON(ret_value); \
2313 (void)H5E_dump_api_stack(TRUE); \
2314 FUNC_LEAVE_API_THREADSAFE \
2315 return(ret_value); \
2319 #define FUNC_LEAVE_API_NOINIT(ret_value) \
2320 FUNC_LEAVE_API_COMMON(ret_value); \
2323 (void)H5E_dump_api_stack(TRUE); \
2324 FUNC_LEAVE_API_THREADSAFE \
2325 return(ret_value); \
2329 #define FUNC_LEAVE_API_NOFS(ret_value) \
2330 FUNC_LEAVE_API_COMMON(ret_value); \
2331 FUNC_LEAVE_API_THREADSAFE \
2332 return(ret_value); \
2335 #define FUNC_LEAVE_NOAPI(ret_value) \
2339 return(ret_value); \
2342 #define FUNC_LEAVE_NOAPI_VOID \
2354 #define FUNC_LEAVE_NOAPI_NOFS(ret_value) \
2357 return(ret_value); \
2361 #define FUNC_LEAVE_NOAPI_TAG(ret_value) \
2364 H5AC_tag(prev_tag, NULL); \
2366 return(ret_value); \
2375 #define H5_CHECK_PACKAGE_INIT_REG_YES(asrt) HDassert(H5_PACKAGE_INIT_VAR(pkg));
2376 #define H5_CHECK_PACKAGE_INIT_REG_NO(asrt)
2377 #define H5_CHECK_PACKAGE_INIT_INIT_YES(asrt)
2378 #define H5_CHECK_PACKAGE_INIT_INIT_NO(asrt)
2379 #define H5_CHECK_PACKAGE_INIT(pkg, pkg_init, init) H5_GLUE4(H5_CHECK_PACKAGE_INIT_, init, _, pkg_init)(pkg)
2382 #define H5_PKG_YES_INIT(pkg) \
2383 if(!H5_PACKAGE_INIT_VAR(pkg) && !H5_TERM_GLOBAL) { \
2384 H5_PACKAGE_INIT_VAR(pkg) = TRUE; \
2385 if(H5_PACKAGE_INIT_FUNC(pkg)() < 0) { \
2386 H5_PACKAGE_INIT_VAR(pkg) = FALSE; \
2388 H5E_PRINTF(H5E_CANTINIT, "interface initialization failed"); \
2389 ret_value = fail_value; \
2390 goto func_init_failed; \
2393 #define H5_PKG_NO_INIT(pkg) \
2394 if(!H5_PACKAGE_INIT_VAR(pkg) && !H5_TERM_GLOBAL) \
2395 H5_PACKAGE_INIT_VAR(pkg) = TRUE;
2396 #define H5_PKG_INIT(pkg_init, pkg) H5_GLUE3(H5_PKG_, pkg_init, _INIT)(pkg)
2399 #ifdef H5_PKG_SINGLE_SOURCE
2400 #define H5_PKG_DECLARE_YES_FUNC(pkg) static herr_t H5_PACKAGE_INIT_FUNC(pkg)(void);
2402 #define H5_PKG_DECLARE_YES_FUNC(pkg) extern herr_t H5_PACKAGE_INIT_FUNC(pkg)(void);
2404 #define H5_PKG_DECLARE_NO_FUNC(pkg)
2407 #ifdef H5_PKG_SINGLE_SOURCE
2408 #define H5_PKG_DECLARE_VAR(pkg) static hbool_t H5_PACKAGE_INIT_VAR(pkg);
2410 #define H5_PKG_DECLARE_VAR(pkg) extern hbool_t H5_PACKAGE_INIT_VAR(pkg);
2412 #define H5_PKG_DECLARE_FUNC(pkg_init, pkg) H5_GLUE3(H5_PKG_DECLARE_, pkg_init, _FUNC)(pkg)
2422 #define H5_PACKAGE_ENTER(pkg, pkg_init, init) \
2423 FUNC_ENTER_CHECK_NAME(H5_IS_PKG(FUNC)) \
2426 HDassert(H5_INIT_GLOBAL); \
2430 H5_CHECK_PACKAGE_INIT(pkg, pkg_init, init) \
2438 #define H5_PRIVATE_ENTER(pkg, pkg_init) \
2439 FUNC_ENTER_CHECK_NAME(H5_IS_PRIV(FUNC)) \
2442 HDassert(H5_INIT_GLOBAL); \
2445 H5_PKG_INIT(pkg_init, pkg) \
2453 #define H5_PUBLIC_ENTER(pkg, pkg_init) \
2454 FUNC_ENTER_API_VARS \
2455 FUNC_ENTER_API_THREADSAFE; \
2456 FUNC_ENTER_CHECK_NAME(H5_IS_PUB(FUNC)) \
2459 H5E_clear_stack(NULL); \
2462 if(!H5_INIT_GLOBAL && !H5_TERM_GLOBAL) { \
2463 H5_INIT_GLOBAL = TRUE; \
2464 if(H5_init_library() < 0) { \
2466 H5E_PRINTF(H5E_CANTINIT, "interface initialization failed"); \
2467 ret_value = fail_value; \
2468 goto func_init_failed; \
2473 H5_PKG_INIT(pkg_init, pkg) \
2476 HDassert(!H5_api_entered_g); \
2477 H5_api_entered_g = TRUE; \
2489 #define FUNC_ENT_STATIC(pkg, pkg_init) H5_PACKAGE_ENTER(pkg, pkg_init, REG)
2490 #define FUNC_ENT_PKGINIT(pkg, pkg_init) H5_PACKAGE_ENTER(pkg, pkg_init, INIT)
2491 #define FUNC_ENT_PKG(pkg, pkg_init) H5_PACKAGE_ENTER(pkg, pkg_init, REG)
2492 #define FUNC_ENT_PRIV(pkg, pkg_init) H5_PRIVATE_ENTER(pkg, pkg_init)
2493 #define FUNC_ENT_PUB(pkg, pkg_init) H5_PUBLIC_ENTER(pkg, pkg_init)
2496 #define FUNC_PREFIX_STATIC static
2497 #define FUNC_PREFIX_PKGINIT
2498 #define FUNC_PREFIX_PKG
2499 #define FUNC_PREFIX_PRIV
2500 #define FUNC_PREFIX_PUB
2504 #define FUNC_ERR_VAR_ERR(ret_typ, err) \
2505 hbool_t past_catch = FALSE; \
2506 ret_typ fail_value = err;
2508 #define FUNC_ERR_VAR_ERRCATCH(ret_typ, err) \
2509 hbool_t past_catch = FALSE;
2511 #define FUNC_ERR_VAR_NOERR(ret_typ, err)
2514 #define BEGIN_FUNC(scope, use_err, ret_typ, ret_init, err, func) \
2515 H5_GLUE(FUNC_PREFIX_, scope) \
2520 ret_typ ret_value = ret_init; \
2521 H5_GLUE(FUNC_ERR_VAR_, use_err)(ret_typ, err) \
2522 H5_GLUE(FUNC_ENT_, scope)(H5_MY_PKG, H5_MY_PKG_INIT)
2525 #define BEGIN_FUNC_VOID(scope, use_err, func) \
2526 H5_GLUE(FUNC_PREFIX_, scope) \
2531 H5_GLUE(FUNC_ERR_VAR_, use_err)(void, -, -) \
2532 H5_GLUE(FUNC_ENT_, scope)
2535 #define H5_PRIV_YES_FUNC_INIT_FAILED func_init_failed:
2536 #define H5_PRIV_NO_FUNC_INIT_FAILED
2537 #define H5_PRIV_FUNC_INIT_FAILED(pkg_init) H5_GLUE3(H5_PRIV_, pkg_init, _FUNC_INIT_FAILED)
2540 #define FUNC_LEAVE_PKGINIT \
2547 #define FUNC_LEAVE_STATIC \
2554 #define FUNC_LEAVE_PKG \
2561 #define FUNC_LEAVE_PRIV \
2566 H5_PRIV_FUNC_INIT_FAILED(H5_MY_PKG_INIT) \
2571 #define FUNC_LEAVE_PUB \
2579 if(ret_value == fail_value) \
2580 (void)H5E_dump_api_stack(TRUE); \
2583 H5TRACE_RETURN(ret_value); \
2592 HDassert(H5_api_entered_g); \
2593 H5_api_entered_g = FALSE; \
2596 FUNC_LEAVE_API_THREADSAFE
2599 #define END_FUNC(scope) \
2601 H5_GLUE(FUNC_LEAVE_, scope) \
2604 return(ret_value); \
2610 #define END_FUNC_VOID(scope) \
2612 H5_GLUE(FUNC_LEAVE_, scope) \
2622 #define H5_BEGIN_TAG(tag) { \
2623 haddr_t prv_tag = HADDR_UNDEF; \
2624 H5AC_tag(tag, &prv_tag); \
2626 #define H5_END_TAG \
2627 H5AC_tag(prv_tag, NULL); \
2631 #define HDcompile_assert(e) ((void)sizeof(char[ !!(e) ? 1 : -1]))
2687 #ifdef H5_HAVE_PARALLEL
2691 H5_DLL herr_t H5_mpi_comm_dup(MPI_Comm comm, MPI_Comm *comm_new);
2692 H5_DLL herr_t H5_mpi_info_dup(MPI_Info info, MPI_Info *info_new);
2698 MPI_Datatype old_type, MPI_Datatype *new_type);
2703 const uint8_t *marker,
size_t buf_offset,
size_t buf_size);
H5_DLL H5_ATTR_CONST int Nflock(int fd, int operation)
H5_DLL int H5Z_term_package(void)
Definition: H5Z.c:127
hbool_t H5_libinit_g
Definition: H5.c:76
H5_DLL int H5A_top_term_package(void)
Definition: H5A.c:177
struct H5O_copy_file_ud_common_t H5O_copy_file_ud_common_t
#define H5_MY_PKG
Definition: H5ACmodule.h:28
H5_DLL uint32_t H5_checksum_fletcher32(const void *data, size_t len)
Definition: H5checksum.c:110
H5_DLL void H5_term_library(void)
Definition: H5.c:258
@ H5_PKG_MM
Definition: H5private.h:1742
H5_DLL int H5S_top_term_package(void)
Definition: H5S.c:162
H5_debug_open_stream_t * open_stream
Definition: H5private.h:1766
FILE * stream
Definition: H5private.h:1764
uint32_t
Definition: H5overflow.txt:38
@ H5_PKG_VL
Definition: H5private.h:1748
H5_DLL int H5T_top_term_package(void)
Definition: H5T.c:1409
CATCH haddr_t
Definition: H5EAdblock.c:162
H5_DLL uint32_t H5_checksum_metadata(const void *data, size_t len, uint32_t initval)
Definition: H5checksum.c:460
@ H5_PKG_D
Definition: H5private.h:1733
@ H5_PKG_M
Definition: H5private.h:1740
*s *s indent
Definition: H5HLdbg.c:111
H5_DLL int H5PL_term_package(void)
Definition: H5PLint.c:192
#define HDrand()
Definition: H5private.h:1222
Definition: H5Ztrans.c:67
struct H5_debug_t::@40 pkg[H5_NPKGS]
Definition: H5Oprivate.h:701
@ H5_PKG_HL
Definition: H5private.h:1738
@ H5_PKG_AC
Definition: H5private.h:1731
H5_DLL int H5D_term_package(void)
Definition: H5Dint.c:309
H5_DLL double H5_trace(const double *calltime, const char *func, const char *type,...)
Definition: H5trace.c:120
struct H5_debug_open_stream_t * next
Definition: H5private.h:1755
@ H5_PKG_B
Definition: H5private.h:1732
H5_DLL void H5_timer_end(H5_timer_t *sum, H5_timer_t *timer)
Definition: H5timer.c:160
unsigned char uint8_t
Definition: H5private.h:429
H5_DLL int64_t HDstrtoll(const char *s, const char **rest, int base)
Definition: H5system.c:511
H5_DLL int H5L_term_package(void)
Definition: H5L.c:234
char H5_lib_vers_info_g[]
Definition: H5.c:84
int64_t
Definition: H5overflow.txt:35
#define HDsrand(S)
Definition: H5private.h:1228
H5_DLL uint32_t H5_checksum_lookup3(const void *data, size_t len, uint32_t initval)
Definition: H5checksum.c:372
H5_DLL void H5_bandwidth(char *buf, double nbytes, double nseconds)
Definition: H5timer.c:205
H5_DLL int H5T_term_package(void)
Definition: H5T.c:1615
@ H5_PKG_E
Definition: H5private.h:1734
signed char int8_t
Definition: H5private.h:420
double etime
Definition: H5private.h:604
Definition: H5private.h:621
@ H5_PKG_V
Definition: H5private.h:1747
hbool_t H5_api_entered_g
Definition: H5.c:69
@ H5_COPY_DEEP
Definition: H5private.h:617
uint16_t
Definition: H5overflow.txt:37
Invalid arguments to routine Resource unavailable Internal File accessibility Low level I O Function entry exit Object atom Object cache Links B Tree node Symbol table Heap Object header Datatype Dataspace Dataset Data storage Property lists Attribute Data filters External file list References Virtual File Layer Virtual Object Layer Ternary Search Trees Reference Counted Strings Error API Skip Lists Free Space Manager Shared Object Header Messages Extensible Array Fixed Array Plugin for dynamically loaded library Page Buffering API Context Map No error Argument errors Resource errors File accessibility errors FILE
Definition: H5err.txt:88
H5_DLL int H5CX_term_package(void)
Definition: H5CX.c:655
H5_DLL int H5FL_term_package(void)
Definition: H5FL.c:176
struct H5O_pline_t * src_pline
Definition: H5private.h:622
Definition: H5private.h:601
H5_DLL herr_t H5CX_pop(void)
Definition: H5CX.c:3578
H5_DLL int H5R_top_term_package(void)
Definition: H5Rint.c:207
@ H5_PKG_G
Definition: H5private.h:1736
@ H5_PKG_F
Definition: H5private.h:1735
H5_DLL int HDfprintf(FILE *stream, const char *fmt,...)
Definition: H5system.c:112
uint64_t
Definition: H5overflow.txt:39
const char * name
Definition: H5private.h:1763
struct H5_debug_t H5_debug_t
@ H5_PKG_I
Definition: H5private.h:1739
H5_DLL herr_t H5_init_library(void)
Definition: H5.c:109
#define H5_PKG_DECLARE_FUNC(pkg_init, pkg)
Definition: H5private.h:2412
Definition: H5TSprivate.h:78
@ H5_PKG_O
Definition: H5private.h:1743
Definition: H5private.h:626
H5_DLL herr_t H5CX_push(void)
Definition: H5CX.c:787
H5_DLL int H5AC_term_package(void)
Definition: H5AC.c:215
H5_DLL int H5D_top_term_package(void)
Definition: H5Dint.c:252
FILE * stream
Definition: H5private.h:1754
FILE * trace
Definition: H5private.h:1759
H5_debug_t H5_debug_g
Definition: H5.c:86
#define H5_DLL
Definition: H5api_adpt.h:234
@ H5_PKG_P
Definition: H5private.h:1744
H5_pkg_t
Definition: H5private.h:1729
#define H5_ATTR_CONST
Definition: H5private.h:336
H5_DLL void H5_timer_begin(H5_timer_t *timer)
Definition: H5timer.c:114
@ H5_PKG_MF
Definition: H5private.h:1741
double utime
Definition: H5private.h:602
#define H5_PKG_DECLARE_VAR(pkg)
Definition: H5private.h:2410
H5_DLL int H5FS_term_package(void)
@ H5_PKG_A
Definition: H5private.h:1730
H5_DLL int H5F_term_package(void)
Definition: H5F.c:186
off_t h5_stat_size_t
Definition: H5private.h:927
@ H5_PKG_T
Definition: H5private.h:1746
hbool_t ttimes
Definition: H5private.h:1761
hbool_t H5_libterm_g
Definition: H5.c:77
H5_copy_depth_t
Definition: H5private.h:615
H5_DLL int H5I_term_package(void)
Definition: H5I.c:163
double stime
Definition: H5private.h:603
Definition: H5private.h:1753
H5_DLL herr_t H5_build_extpath(const char *name, char **extpath)
Definition: H5system.c:1170
H5_DLL int H5E_term_package(void)
Definition: H5E.c:243
@ H5_COPY_SHALLOW
Definition: H5private.h:616
char H5libhdf5_settings[]
H5_DLL void H5_timer_reset(H5_timer_t *timer)
Definition: H5timer.c:94
H5_DLL int H5FD_term_package(void)
Definition: H5FD.c:148
H5_DLL int H5M_top_term_package(void)
Definition: H5M.c:145
H5_DLL int H5M_term_package(void)
Definition: H5M.c:180
H5_DLL int H5VL_term_package(void)
Definition: H5VLint.c:259
H5_DLL double H5_get_time(void)
Definition: H5system.c:1386
H5_DLL int H5G_top_term_package(void)
Definition: H5G.c:222
H5_DLL uint32_t H5_checksum_crc(const void *data, size_t len)
Definition: H5checksum.c:242
@ H5_PKG_S
Definition: H5private.h:1745
int herr_t
Definition: H5public.h:128
H5_DLL int H5SL_term_package(void)
Definition: H5SL.c:645
struct stat h5_stat_t
Definition: H5private.h:926
Definition: H5private.h:1758
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)
Definition: H5dbg.c:79
bool hbool_t
Definition: H5public.h:159
hbool_t ttop
Definition: H5private.h:1760
H5_DLL void H5_nanosleep(uint64_t nanosec)
Definition: H5system.c:1358
H5_DLL int H5G_term_package(void)
Definition: H5G.c:261
unsigned long fileno
Definition: H5private.h:627
haddr_t addr
Definition: H5private.h:628
H5_DLL int H5P_term_package(void)
Definition: H5Pint.c:550
H5_DLL uint32_t H5_hash_string(const char *str)
Definition: H5checksum.c:490
@ H5_NPKGS
Definition: H5private.h:1750
hsize_t
Definition: H5overflow.txt:44
H5_DLL herr_t H5_combine_path(const char *path1, const char *path2, char **full_name)
Definition: H5system.c:1285
@ H5_PKG_HG
Definition: H5private.h:1737
#define H5_MY_PKG_INIT
Definition: H5ACmodule.h:30
H5_DLL int H5A_term_package(void)
Definition: H5A.c:218
@ H5_PKG_Z
Definition: H5private.h:1749
H5_DLL int H5S_term_package(void)
Definition: H5S.c:209
char * strdup(const char *s)
H5_DLL time_t H5_now(void)
Definition: H5timer.c:254
struct H5_debug_open_stream_t H5_debug_open_stream_t
H5_DLL time_t H5_make_time(struct tm *tm)
Definition: H5system.c:709
H5_DLL int H5R_term_package(void)
Definition: H5Rint.c:243