summaryrefslogtreecommitdiffstats
path: root/src/H5private.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/H5private.h')
-rw-r--r--src/H5private.h190
1 files changed, 114 insertions, 76 deletions
diff --git a/src/H5private.h b/src/H5private.h
index 25e93f6..2769269 100644
--- a/src/H5private.h
+++ b/src/H5private.h
@@ -1,70 +1,90 @@
-/****************************************************************************
- * NCSA HDF *
- * Software Development Group *
- * National Center for Supercomputing Applications *
- * University of Illinois at Urbana-Champaign *
- * 605 E. Springfield, Champaign IL 61820 *
- * *
- * For conditions of distribution and use, see the accompanying *
- * hdf/COPYING file. *
- * *
- ****************************************************************************/
-
-/* $Id$ */
-
/*
- * This file contains macros & private information for general HDF5 functions.
- * Every HDF5 source file will include this file immediately after any
- * system include files but before any other private include files.
+ * Copyright (C) 1998 NCSA
+ * All rights reserved.
+ *
+ * Programmer: Robb Matzke <matzke@llnl.gov>
+ * Friday, October 30, 1998
+ *
+ * Purpose: This file is included by all HDF5 library source files to
+ * define common things which are not defined in the HDF5 API.
+ * The configuration constants like HAVE_UNISTD_H etc. are
+ * defined in H5config.h which is included by H5public.h.
*/
#ifndef _H5private_H
#define _H5private_H
#include <H5public.h> /* Include Public Definitions */
-/* Version #'s of the major components of the file format */
-#define HDF5_BOOTBLOCK_VERSION 0 /* of the boot block format */
-#define HDF5_FREESPACE_VERSION 0 /* of the Free-Space Info */
-#define HDF5_OBJECTDIR_VERSION 0 /* of the Object Directory format */
-#define HDF5_SHAREDHEADER_VERSION 0 /* of the Shared-Header Info */
-
-/*
- * Status return values for the `herr_t' type.
- * Since some unix/c routines use 0 and -1 (or more precisely, non-negative
- * vs. negative) as their return code, and some assumption had been made in
- * the code about that, it is important to keep these constants the same
- * values. When checking the success or failure of an integer-valued
- * function, remember to compare against zero and not one of these two
- * values.
- */
-#define SUCCEED 0
-#define FAIL (-1)
-#define UFAIL (unsigned)(-1)
-
-
/*
- * Include those things that almost all source files need.
+ * Include ANSI-C header files.
*/
#ifdef STDC_HEADERS
# include <assert.h>
# include <ctype.h>
+# include <errno.h>
# include <fcntl.h>
+# include <float.h>
+# include <math.h>
+# include <stdarg.h>
# include <stdio.h>
# include <stdlib.h>
# include <string.h>
-# include <time.h>
+#endif
-#if defined(WIN32)
-# include<sys\types.h>
-# include<io.h>
-#define F_OK 00
-#define R_OK 04
-#define W_OK 02
-#else
-# include <sys/time.h>
+/*
+ * If _POSIX_VERSION is defined in unistd.h then this system is Posix.1
+ * compliant. Otherwise all bets are off.
+ */
+#ifdef HAVE_UNISTD_H
# include <sys/types.h>
# include <unistd.h>
-#endif /*if defined(WIN32)*/
+#endif
+#ifdef _POSIX_VERSION
+# include <sys/stat.h>
+# include <sys/wait.h>
+# include <pwd.h>
+#endif
+/*
+ * If a program may include both `time.h' and `sys/time.h' then
+ * TIME_WITH_SYS_TIME is defined (see AC_HEADER_TIME in configure.in).
+ * On some older systems, `sys/time.h' includes `time.h' but `time.h' is not
+ * protected against multiple inclusion, so programs should not explicitly
+ * include both files. This macro is useful in programs that use, for example,
+ * `struct timeval' or `struct timezone' as well as `struct tm'. It is best
+ * used in conjunction with `HAVE_SYS_TIME_H', whose existence is checked
+ * by `AC_CHECK_HEADERS(sys/time.h)' in configure.in.
+ */
+#if defined(TIME_WITH_SYS_TIME)
+# include <sys/time.h>
+# include <time.h>
+#elif defined(HAVE_SYS_TIME_H)
+# include <sys/time.h>
+#else
+# include <time.h>
+#endif
+
+/*
+ * Resource usage is not Posix.1 but HDF5 uses it anyway for some performance
+ * and debugging code if available.
+ */
+#ifdef HAVE_SYS_RESOURCE_H
+# include <sys/resource.h>
+#endif
+
+/*
+ * Win32 is severely broken when it comes to ANSI-C and Posix.1 compliance.
+ */
+#ifdef HAVE_IO_H
+# include <io.h>
+#endif
+#ifdef HAVE_WINSOCK_H
+# include <winsock.h>
+# include <winsock2.h>
+#endif
+#ifndef F_OK
+# define F_OK 00
+# define W_OK 02
+# define R_OK 04
#endif
/*
@@ -77,44 +97,64 @@
# include "ProcIDs.h"
#endif
-/* Does the compiler support the __attribute__(()) syntax? */
-#ifndef HAVE_ATTRIBUTE
+/*
+ * Does the compiler support the __attribute__(()) syntax? This is how gcc
+ * suppresses warnings about unused function arguments. It's no big deal if
+ * we don't.
+ */
+#ifdef HAVE_ATTRIBUTE
+# define __unused__ __attribute__((unused))
+#else
# define __attribute__(X) /*void*/
# define __unused__ /*void*/
-#else
-# define __unused__ __attribute__((unused))
-#endif
-
-#if defined(WIN32)
-#undef __unused__
-#define __unused__
#endif
-/* Does the compiler expand __FUNCTION__? */
+/*
+ * Does the compiler expand __FUNCTION__ to be the name of the function
+ * currently being defined? If not then define it to be some constant
+ * string.
+ */
#ifndef HAVE_FUNCTION
-# define __FUNCTION__ "NoFuntionName"
+# define __FUNCTION__ "NoFunctionName"
#endif
+/* Version #'s of the major components of the file format */
+#define HDF5_BOOTBLOCK_VERSION 0 /* of the boot block format */
+#define HDF5_FREESPACE_VERSION 0 /* of the Free-Space Info */
+#define HDF5_OBJECTDIR_VERSION 0 /* of the Object Directory format */
+#define HDF5_SHAREDHEADER_VERSION 0 /* of the Shared-Header Info */
+
+/*
+ * Status return values for the `herr_t' type.
+ * Since some unix/c routines use 0 and -1 (or more precisely, non-negative
+ * vs. negative) as their return code, and some assumption had been made in
+ * the code about that, it is important to keep these constants the same
+ * values. When checking the success or failure of an integer-valued
+ * function, remember to compare against zero and not one of these two
+ * values.
+ */
+#define SUCCEED 0
+#define FAIL (-1)
+#define UFAIL (unsigned)(-1)
+
/* number of members in an array */
#ifndef NELMTS
# define NELMTS(X) (sizeof(X)/sizeof(X[0]))
#endif
/* minimum of two, three, or four values */
-#ifndef 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))
-#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))
/* maximum of two, three, or four values */
-#ifndef 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))
-#endif
+#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))
/* limit the middle value to be within a range (inclusive) */
#define RANGE(LO,X,HI) MAX(LO,MIN(X,HI))
@@ -178,13 +218,11 @@ typedef unsigned uint64;
typedef long int64;
typedef unsigned long uint64;
#elif SIZEOF_LONG_LONG==8
-#if defined(WIN32)
-typedef __int64 int64;
-typedef unsigned __int64 uint64;
-#else
typedef long long int64;
typedef unsigned long long uint64;
-#endif
+#elif SIZEOF___INT64==8
+typedef __int64 int64;
+typedef unsigned __int64 uint64;
#else
# error "no 64-bit integer type"
#endif