* terms of the GNU Lesser General Public License
* (see cit/LGPL or http://www.gnu.org/licenses/lgpl.html)
*
- * Cplant(TM) Copyright 1998-2004 Sandia Corporation.
+ * Cplant(TM) Copyright 1998-2006 Sandia Corporation.
* Under the terms of Contract DE-AC04-94AL85000, there is a non-exclusive
* license for use of this work by or on behalf of the US Government.
* Export of this program may require a license from the United States
#define __IS_UNUSED
#endif
-#ifndef _LARGEFILE64_SOURCE
-/*
- * Not glibc I guess. Define this ourselves.
- */
-#define _LARGEFILE64_SOURCE 0
-#endif
-
/*
* Define internal file-offset type and it's maximum value.
*/
-#if _LARGEFILE64_SOURCE
+#ifdef _LARGEFILE64_SOURCE
#define _SYSIO_OFF_T off64_t
#ifdef LLONG_MAX
#define _SYSIO_OFF_T_MAX (LLONG_MAX)
* Internally, all file status is carried in the 64-bit capable
* structure.
*/
-#if _LARGEFILE64_SOURCE
+#ifdef _LARGEFILE64_SOURCE
#define intnl_xtvec xtvec64
#else
#define intnl_xtvec xtvec
struct iovec;
/*
+ * Symbol composition.
+ */
+#define _PREPEND_HELPER(p, x) \
+ p ## x
+#define PREPEND(p, x) \
+ _PREPEND_HELPER(p, x)
+
+/*
* SYSIO name label macros
*/
-#define XPREPEND(p,x) p ## x
-#define PREPEND(p,x) XPREPEND(p,x)
-#define SYSIO_LABEL_NAMES 0
-#if SYSIO_LABEL_NAMES
-#define SYSIO_INTERFACE_NAME(x) PREPEND(sysio__, x)
+#ifndef SYSIO_INTERFACE_NAME
+#ifdef SYSIO_LABEL_NAMES
+#define SYSIO_INTERFACE_NAME(x) \
+ PREPEND(SYSIO_LABEL_NAMES, x)
#else
#define SYSIO_INTERFACE_NAME(x) x
-#endif
+#endif /* SYSIO_LABEL_NAMES */
+#endif /* !SYSIO_INTERFACE_NAME */
/* for debugging */
#if 0
} while(0)
/* Interface enter/leave hook functions */
-#if 0
-extern void _sysio_sysenter();
-extern void _sysio_sysleave();
-
+#ifdef SYSIO_TRACING
+extern void *_sysio_entry_trace_q;
+extern void *_sysio_exit_trace_q;
+
+extern void *_sysio_register_trace(void *q,
+ void (*)(const char *file,
+ const char *func,
+ int line,
+ void *data),
+ void *data,
+ void (*destructor)(void *data));
+extern void _sysio_remove_trace(void *q, void *p);
+extern void _sysio_run_trace_q(void *q,
+ const char *file,
+ const char *func,
+ int line);
#define SYSIO_ENTER \
- do { \
- _sysio_sysenter(); \
- } while(0)
+ do { \
+ _sysio_run_trace_q(_sysio_entry_trace_q, \
+ __FILE__, __func__, __LINE__); \
+ } while (0)
+
#define SYSIO_LEAVE \
- do { \
- _sysio_sysleave(); \
- } while(0)
+ do { \
+ _sysio_run_trace_q(_sysio_exit_trace_q, \
+ __FILE__, __func__, __LINE__); \
+ } while (0)
#else
-#define SYSIO_ENTER
-#define SYSIO_LEAVE
-
+#define SYSIO_ENTER \
+ do { } while (0)
+#define SYSIO_LEAVE \
+ do { } while (0)
#endif
-/* accounting for IO stats read and write char count */
+/* Accounting for IO stats; Read and write character count. */
#if defined(REDSTORM)
#define _SYSIO_UPDACCT(w, cc) \
do { \
if ((cc) < 0) \
break; \
- if (!w) \
+ if (w) \
_add_iostats(0, (size_t )(cc)); \
else \
_add_iostats((size_t )(cc), 0); \