summaryrefslogtreecommitdiff
path: root/snprintfv/compat.h
diff options
context:
space:
mode:
Diffstat (limited to 'snprintfv/compat.h')
-rw-r--r--snprintfv/compat.h315
1 files changed, 315 insertions, 0 deletions
diff --git a/snprintfv/compat.h b/snprintfv/compat.h
new file mode 100644
index 0000000..0145b97
--- /dev/null
+++ b/snprintfv/compat.h
@@ -0,0 +1,315 @@
+/* -*- Mode: C -*-
+ * --------------------------------------------------------------------
+ * compat.h.in --- verbose but portable cpp defines for snprintfv
+ * Copyright (C) 1999 Gary V. Vaughan
+ * Originally by Gary V. Vaughan, 1999
+ * This file is part of Snprintfv
+ *
+ * Snprintfv is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * Snprintfv program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * As a special exception to the GNU General Public License, if you
+ * distribute this file as part of a program that also links with and
+ * uses the libopts library from AutoGen, you may include it under
+ * the same distribution terms used by the libopts library.
+ *
+ * Code: */
+
+#ifndef SNPRINTFV_COMPAT_H
+#define SNPRINTFV_COMPAT_H 1
+
+#define _GNU_SOURCE 1 /* for strsignal in GNU's libc */
+#define __USE_GNU 1 /* exact same thing as above */
+#define __EXTENSIONS__ 1 /* and another way to call for it */
+
+#ifdef __cplusplus
+extern "C" {
+#define SNV_END_EXTERN_C }
+#else
+#define SNV_END_EXTERN_C
+#endif /* __cplusplus */
+
+#define NO_FLOAT_PRINTING
+
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef HAVE_STDLIB_H
+# include <stdlib.h>
+#endif
+
+#ifdef HAVE_ERRNO_H
+# include <errno.h>
+# ifndef errno
+ /* Some sytems #define this! */
+ extern int errno;
+# endif
+#endif
+
+#if defined( HAVE_LIMITS_H )
+# include <limits.h>
+
+#elif defined( HAVE_SYS_LIMITS_H )
+# include <sys/limits.h>
+
+#elif defined( HAVE_VALUES_H )
+# ifndef MAXINT
+# include <values.h>
+# endif /* MAXINT */
+#endif
+
+#if defined( HAVE_STRING_H )
+# include <string.h>
+
+#elif defined( HAVE_STRINGS_H )
+# include <strings.h>
+#endif
+
+#if defined( HAVE_MEMORY_H )
+# include <memory.h>
+#endif
+
+#if defined( HAVE_INTTYPES_H )
+# include <inttypes.h>
+
+#elif defined( HAVE_STDINT_H )
+# include <stdint.h>
+#endif
+
+#ifndef HAVE_UINTMAX_T
+# if defined( HAVE_LONG_LONG )
+ typedef long long intmax_t;
+ typedef unsigned long long uintmax_t;
+# else
+ typedef long intmax_t;
+ typedef unsigned long uintmax_t;
+# endif
+#endif
+
+#if defined( HAVE_STDARG_H )
+# include <stdarg.h>
+# ifndef VA_START
+# define VA_START(a, f) va_start(a, f)
+# define VA_END(a) va_end(a)
+# endif /* VA_START */
+# define SNV_USING_STDARG_H
+#elif defined( HAVE_VARARGS_H )
+# include <varargs.h>
+# ifndef VA_START
+# define VA_START(a, f) va_start(a)
+# define VA_END(a) va_end(a)
+# endif /* VA_START */
+# undef SNV_USING_STDARG_H
+#else
+# include "must-have-stdarg-or-varargs"
+#endif
+
+#if HAVE_RUNETYPE_H
+# include <runetype.h>
+#endif
+
+#ifdef HAVE_WCHAR_H
+# include <wchar.h>
+#endif
+
+#ifdef HAVE_WCHAR_T
+typedef wchar_t snv_wchar_t;
+#else
+typedef int snv_wchar_t;
+#endif
+
+#ifdef HAVE_WINT_T
+typedef wint_t snv_wint_t;
+#else
+typedef int snv_wint_t;
+#endif
+
+/* inline and const keywords are (mostly) handled by config.h */
+#ifdef __GNUC__
+# ifndef const
+# define const __const
+# endif
+# ifndef inline
+# define inline __inline
+# endif
+# ifndef signed
+# define signed __signed
+# endif
+#else
+# ifndef __STDC__
+# undef signed
+# define signed
+# endif
+#endif
+
+#ifdef __STDC__
+# define _SNV_STR(x) #x
+ typedef void *snv_pointer;
+ typedef const void *snv_constpointer;
+#else
+# define _SNV_STR(x) "x"
+ typedef char *snv_pointer;
+ typedef char *snv_constpointer;
+#endif
+
+#if defined(HAVE_FPUTC_UNLOCKED) && defined(HAVE_FLOCKFILE)
+# define SNV_FPUTC_UNLOCKED fputc_unlocked
+# define SNV_PUTC_UNLOCKED putc_unlocked
+# define SNV_WITH_LOCKED_FP(fp, tmp_var) \
+ for (flockfile (fp), tmp_var = 1; \
+ tmp_var--; funlockfile (fp))
+#else
+# define SNV_FPUTC_UNLOCKED fputc
+# define SNV_PUTC_UNLOCKED putc
+# define SNV_WITH_LOCKED_FP(fp, tmp_var) \
+ for (tmp_var = 1; tmp_var--; )
+#endif
+
+/*
+ * Define macros for storing integers inside pointers.
+ * Be aware that it is only safe to use these macros to store `int'
+ * values in `char*' (or `void*') words, and then extract them later.
+ * Although it will work the other way round on many common
+ * architectures, it is not portable to assume a `char*' can be
+ * stored in an `int' and extracted later without loss of the msb's
+ */
+#define SNV_POINTER_TO_LONG(p) ((long)(p))
+#define SNV_POINTER_TO_ULONG(p) ((unsigned long)(p))
+#define SNV_LONG_TO_POINTER(i) ((snv_pointer)(long)(i))
+#define SNV_ULONG_TO_POINTER(u) ((snv_pointer)(unsigned long)(u))
+
+#ifdef HAVE_STDBOOL_H
+#include <stdbool.h>
+#else
+typedef enum {
+ false = 0,
+ true = 1
+} bool;
+#endif
+
+#ifdef __CYGWIN32__
+# ifndef __CYGWIN__
+# define __CYGWIN__
+# endif
+#endif
+#ifdef __CYGWIN__
+# ifndef _WIN32
+# define _WIN32
+# endif
+#endif
+
+#ifndef PARAMS
+# define PARAMS(args) args
+#endif
+
+#undef SNV_STMT_START
+#undef SNV_STMT_END
+#if defined (__GNUC__) && !defined (__STRICT_ANSI__) && !defined (__cplusplus)
+# define SNV_STMT_START (void)(
+# define SNV_STMT_END )
+
+#elif (defined (sun) || defined (__sun__))
+# define SNV_STMT_START if (1)
+# define SNV_STMT_END else (void)0
+
+#else
+# define SNV_STMT_START do
+# define SNV_STMT_END while (false)
+#endif
+
+#ifdef _WIN32
+# ifdef DLL_EXPORT
+# define SNV_SCOPE extern __declspec(dllexport)
+# else
+# ifdef LIBSNPRINTFV_DLL_IMPORT
+# define SNV_SCOPE extern __declspec(dllimport)
+# endif
+# endif
+#endif
+#ifndef SNV_SCOPE
+# define SNV_SCOPE extern
+#endif
+
+#undef SNV_GNUC_PRINTF
+#undef SNV_GNUC_NORETURN
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 4)
+# define SNV_GNUC_PRINTF( args, format_idx, arg_idx ) \
+ args __attribute__((format (printf, format_idx, arg_idx)))
+# define SNV_GNUC_NORETURN \
+ __attribute__((noreturn))
+# define SNV_ASSERT_FCN " (", __PRETTY_FUNCTION__, ")"
+#else /* !__GNUC__ */
+# define SNV_GNUC_PRINTF( args, format_idx, arg_idx ) args
+# define SNV_GNUC_NORETURN
+# define SNV_ASSERT_FCN "", "", ""
+#endif /* !__GNUC__ */
+
+#define SNV_ASSERT_FMT "file %s: line %d%s%s%s: assertion \"%s\" failed.\n"
+
+#define snv_assert(expr) snv_fassert(stderr, expr)
+#define snv_fassert(stream, expr) SNV_STMT_START { \
+ if (!(expr)) { \
+ fprintf (stream, SNV_ASSERT_FMT, __FILE__, __LINE__, \
+ SNV_ASSERT_FCN, _SNV_STR(expr)); \
+ exit(EXIT_FAILURE); \
+ }; } SNV_STMT_END
+
+#define return_if_fail(expr) freturn_if_fail(stderr, expr)
+#define freturn_if_fail(expr) SNV_STMT_START { \
+ if (!(expr)) { \
+ fprintf (stream, SNV_ASSERT_FMT, __FILE__, __LINE__, \
+ SNV_ASSERT_FCN, _SNV_STR(expr)); \
+ return; \
+ }; } SNV_STMT_END
+
+#define return_val_if_fail(expr, val) freturn_val_if_fail(stderr, expr, val)
+#define freturn_val_if_fail(stream, expr, val) SNV_STMT_START { \
+ if (!(expr)) { \
+ fprintf (stream, SNV_ASSERT_FMT, __FILE__, __LINE__, \
+ SNV_ASSERT_FCN, _SNV_STR(expr)); \
+ return val; \
+ }; } SNV_STMT_END
+
+#ifndef MAX
+#define MAX(a,b) ((a) > (b) ? (a) : (b))
+#endif
+
+#ifndef MIN
+#define MIN(a,b) ((a) < (b) ? (a) : (b))
+#endif
+
+#ifndef ABS
+#define ABS(a) ((a) < 0 ? -(a) : (a))
+#endif
+
+typedef SNV_LONG_DOUBLE snv_long_double;
+
+#ifndef HAVE_STRTOUL
+extern unsigned long
+strtoul( const char *nptrm, char **endptr, register int base );
+#endif
+
+SNV_END_EXTERN_C
+#endif /* SNPRINTFV_COMPAT_H */
+
+/*
+ * Local Variables:
+ * mode: C
+ * c-file-style: "gnu"
+ * indent-tabs-mode: nil
+ * End:
+ * end of snprintfv/compat.h */