summaryrefslogtreecommitdiff
path: root/portable
diff options
context:
space:
mode:
authorRuss Allbery <rra@stanford.edu>2008-04-24 02:02:49 +0000
committerRuss Allbery <rra@stanford.edu>2008-04-24 02:02:49 +0000
commit92ff7f21ad0b167f8d742a9d7b5f93704a57619c (patch)
tree7adae5f227b6463e07d5cd0f1dab82b7f1c6be47 /portable
parent34c58f9471b3df4fa8b719b3c3534940ba5cfe1b (diff)
Major coding style cleanup. Updated all shared code from my other
projects. The configure option requesting AFS kaserver support (and thus building kasetkey) is now --with-kaserver instead of --with-afs. If KRB5_CONFIG was explicitly set in the environment, don't use a different krb5-config based on --with-krb4 or --with-krb5. If krb5-config isn't executable, don't use it. This allows one to force library probing by setting KRB5_CONFIG to point to a nonexistent file. Sanity-check the results of krb5-config before proceeding and error out in configure if they don't work. Stop setting Stanford-specific compile-time defaults for the wallet server and port.
Diffstat (limited to 'portable')
-rw-r--r--portable/asprintf.c28
-rw-r--r--portable/dummy.c23
-rw-r--r--portable/snprintf.c32
-rw-r--r--portable/stdbool.h43
-rw-r--r--portable/strlcat.c2
-rw-r--r--portable/strlcpy.c2
-rw-r--r--portable/system.h111
7 files changed, 199 insertions, 42 deletions
diff --git a/portable/asprintf.c b/portable/asprintf.c
index 56a69c4..9cae827 100644
--- a/portable/asprintf.c
+++ b/portable/asprintf.c
@@ -1,19 +1,21 @@
-/* $Id$
-**
-** Replacement for a missing asprintf and vasprintf.
-**
-** Written by Russ Allbery <rra@stanford.edu>
-** This work is hereby placed in the public domain by its author.
-**
-** Provides the same functionality as the standard GNU library routines
-** asprintf and vasprintf for those platforms that don't have them.
-*/
+/* $Id$
+ *
+ * Replacement for a missing asprintf and vasprintf.
+ *
+ * Provides the same functionality as the standard GNU library routines
+ * asprintf and vasprintf for those platforms that don't have them.
+ *
+ * Written by Russ Allbery <rra@stanford.edu>
+ * This work is hereby placed in the public domain by its author.
+ */
#include <config.h>
-#include <system.h>
+#include <portable/system.h>
-/* If we're running the test suite, rename the functions to avoid conflicts
- with the system versions. */
+/*
+ * If we're running the test suite, rename the functions to avoid conflicts
+ * with the system versions.
+ */
#if TESTING
# define asprintf test_asprintf
# define vasprintf test_vasprintf
diff --git a/portable/dummy.c b/portable/dummy.c
index e5a6224..66341c3 100644
--- a/portable/dummy.c
+++ b/portable/dummy.c
@@ -1,15 +1,14 @@
-/* $Id$
-**
-** Dummy symbol to prevent an empty library.
-**
-** Written by Russ Allbery <rra@stanford.edu>
-** This work is hereby placed in the public domain by its author.
-**
-** On platforms that already have all of the functions that libportable would
-** supply, Automake builds an empty library and then calls ar with
-** nonsensical arguments. Ensure that libportable always contains at least
-** one symbol.
-*/
+/* $Id$
+ *
+ * Dummy symbol to prevent an empty library.
+ *
+ * On platforms that already have all of the functions that libportable would
+ * supply, Automake builds an empty library and then calls ar with nonsensical
+ * arguments. Ensure that libportable always contains at least one symbol.
+ *
+ * Written by Russ Allbery <rra@stanford.edu>
+ * This work is hereby placed in the public domain by its author.
+ */
/* Prototype to avoid gcc warnings. */
int portable_dummy(void);
diff --git a/portable/snprintf.c b/portable/snprintf.c
index bef3da7..3c39de8 100644
--- a/portable/snprintf.c
+++ b/portable/snprintf.c
@@ -1,18 +1,20 @@
-/* $Id$
-**
-** Replacement for a missing snprintf or vsnprintf.
-**
-** The following implementation of snprintf was taken mostly verbatim from
-** <http://www.fiction.net/~blong/programs/>; it is the version of snprintf
-** used in Mutt.
-**
-** Please do not reformat or otherwise change this file more than
-** necessary so that later merges with the original source are easy.
-** Bug fixes and improvements should be sent back to the original author.
-*/
-
-/* If we're running the test suite, rename snprintf and vsnprintf to avoid
- conflicts with the system version. */
+/* $Id$
+ *
+ * Replacement for a missing snprintf or vsnprintf.
+ *
+ * The following implementation of snprintf was taken mostly verbatim from
+ * <http://www.fiction.net/~blong/programs/>; it is the version of snprintf
+ * used in Mutt.
+ *
+ * Please do not reformat or otherwise change this file more than necessary so
+ * that later merges with the original source are easy. Bug fixes and
+ * improvements should be sent back to the original author.
+ */
+
+/*
+ * If we're running the test suite, rename snprintf and vsnprintf to avoid
+ * conflicts with the system version.
+ */
#if TESTING
# define snprintf test_snprintf
# define vsnprintf test_vsnprintf
diff --git a/portable/stdbool.h b/portable/stdbool.h
new file mode 100644
index 0000000..61dd8a1
--- /dev/null
+++ b/portable/stdbool.h
@@ -0,0 +1,43 @@
+/* $Id$
+ *
+ * Portability wrapper around <stdbool.h>.
+ *
+ * Provides the bool and _Bool types and the true and false constants,
+ * following the C99 specification, on hosts that don't have stdbool.h. This
+ * logic is based heavily on the example in the Autoconf manual.
+ *
+ * Written by Russ Allbery <rra@stanford.edu>
+ * This work is hereby placed in the public domain by its author.
+ */
+
+#ifndef PORTABLE_STDBOOL_H
+#define PORTABLE_STDBOOL_H 1
+
+#if HAVE_STDBOOL_H
+# include <stdbool.h>
+#else
+# if !HAVE__BOOL
+# ifdef __cplusplus
+typedef bool _Bool;
+# elif _WIN32
+# include <windef.h>
+# define bool BOOL
+# else
+typedef unsigned char _Bool;
+# define bool _Bool
+# endif
+# endif
+# define false 0
+# define true 1
+# define __bool_true_false_are_defined 1
+#endif
+
+/*
+ * If we define bool and don't tell Perl, it will try to define its own and
+ * fail. Only of interest for programs that also include Perl headers.
+ */
+#ifndef HAS_BOOL
+# define HAS_BOOL 1
+#endif
+
+#endif /* !PORTABLE_STDBOOL_H */
diff --git a/portable/strlcat.c b/portable/strlcat.c
index 971a348..4816f90 100644
--- a/portable/strlcat.c
+++ b/portable/strlcat.c
@@ -15,7 +15,7 @@
*/
#include <config.h>
-#include <system.h>
+#include <portable/system.h>
/*
* If we're running the test suite, rename strlcat to avoid conflicts with
diff --git a/portable/strlcpy.c b/portable/strlcpy.c
index 1dd49a3..d281645 100644
--- a/portable/strlcpy.c
+++ b/portable/strlcpy.c
@@ -14,7 +14,7 @@
*/
#include <config.h>
-#include <system.h>
+#include <portable/system.h>
/*
* If we're running the test suite, rename strlcpy to avoid conflicts with
diff --git a/portable/system.h b/portable/system.h
new file mode 100644
index 0000000..1408ba7
--- /dev/null
+++ b/portable/system.h
@@ -0,0 +1,111 @@
+/* $Id$
+ *
+ * Declarations of routines and variables in the C library. Including this
+ * file is the equivalent of including all of the following headers, portably:
+ *
+ * #include <sys/types.h>
+ * #include <stdarg.h>
+ * #include <stdbool.h>
+ * #include <stdio.h>
+ * #include <stdlib.h>
+ * #include <stddef.h>
+ * #include <stdint.h>
+ * #include <string.h>
+ * #include <unistd.h>
+ *
+ * Missing functions are provided via #define or prototyped if available.
+ * Also provides some standard #defines.
+ *
+ * Written by Russ Allbery <rra@stanford.edu>
+ * This work is hereby placed in the public domain by its author.
+ */
+
+#ifndef PORTABLE_SYSTEM_H
+#define PORTABLE_SYSTEM_H 1
+
+/* Make sure we have our configuration information. */
+#include <config.h>
+
+/* BEGIN_DECL and __attribute__. */
+#include <portable/macros.h>
+
+/* A set of standard ANSI C headers. We don't care about pre-ANSI systems. */
+#include <stdarg.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <string.h>
+#if HAVE_INTTYPES_H
+# include <inttypes.h>
+#endif
+#if HAVE_STDINT_H
+# include <stdint.h>
+#endif
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+
+/* SCO OpenServer gets int32_t from here. */
+#if HAVE_SYS_BITYPES_H
+# include <sys/bitypes.h>
+#endif
+
+/* Get the bool type. */
+#include <portable/stdbool.h>
+
+BEGIN_DECLS
+
+/*
+ * Provide prototypes for functions not declared in system headers. Use the
+ * HAVE_DECL macros for those functions that may be prototyped but
+ * implemented incorrectly or implemented without a prototype.
+ */
+#if !HAVE_ASPRINTF
+extern int asprintf(char **, const char *, ...);
+extern int vasprintf(char **, const char *, va_list);
+#endif
+#if !HAVE_DECL_SNPRINTF
+extern int snprintf(char *, size_t, const char *, ...)
+ __attribute__((__format__(printf, 3, 4)));
+#endif
+#if !HAVE_DECL_VSNPRINTF
+extern int vsnprintf(char *, size_t, const char *, va_list);
+#endif
+#if !HAVE_STRLCAT
+extern size_t strlcat(char *, const char *, size_t);
+#endif
+#if !HAVE_STRLCPY
+extern size_t strlcpy(char *, const char *, size_t);
+#endif
+
+END_DECLS
+
+/* Windows provides snprintf under a different name. */
+#ifdef _WIN32
+# define snprintf _snprintf
+#endif
+
+/*
+ * POSIX requires that these be defined in <unistd.h>. If one of them has
+ * been defined, all the rest almost certainly have.
+ */
+#ifndef STDIN_FILENO
+# define STDIN_FILENO 0
+# define STDOUT_FILENO 1
+# define STDERR_FILENO 2
+#endif
+
+/*
+ * C99 requires va_copy. Older versions of GCC provide __va_copy. Per the
+ * Autoconf manual, memcpy is a generally portable fallback.
+ */
+#ifndef va_copy
+# ifdef __va_copy
+# define va_copy(d, s) __va_copy((d), (s))
+# else
+# define va_copy(d, s) memcpy(&(d), &(s), sizeof(va_list))
+# endif
+#endif
+
+#endif /* !PORTABLE_SYSTEM_H */