From 86f5c9906beac527f3d7966f24811b571a589e08 Mon Sep 17 00:00:00 2001
From: Bernhard Reutner-Fischer
Date: Sun, 22 Jan 2006 22:55:11 +0000
Subject: - add platform.h. - use shorter boilerplate while at it.

---
 include/busybox.h  | 23 ++-------------
 include/libbb.h    | 43 ++++++----------------------
 include/platform.h | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 93 insertions(+), 55 deletions(-)
 create mode 100644 include/platform.h

(limited to 'include')

diff --git a/include/busybox.h b/include/busybox.h
index f16be70..9fb9503 100644
--- a/include/busybox.h
+++ b/include/busybox.h
@@ -2,24 +2,7 @@
 /*
  * Busybox main internal header file
  *
- *
- * This program 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.
- *
- * This 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * Based in part on code from sash, Copyright (c) 1999 by David I. Bell
- * Permission has been granted to redistribute this code under the GPL.
- *
+ * Licensed under the GPL v2 or later, see the file LICENSE in this tarball.
  */
 #ifndef	_BB_INTERNAL_H_
 #define	_BB_INTERNAL_H_    1
@@ -66,8 +49,8 @@ enum SUIDRoot {
 struct BB_applet {
 	const char *name;
 	int (*main) (int argc, char **argv);
-	enum Location location:4;
-	enum SUIDRoot need_suid:4;
+	__extension__ enum Location location:4;
+	__extension__ enum SUIDRoot need_suid:4;
 };
 
 /* From busybox.c */
diff --git a/include/libbb.h b/include/libbb.h
index 2e697a3..8ec1a24 100644
--- a/include/libbb.h
+++ b/include/libbb.h
@@ -2,27 +2,14 @@
 /*
  * Busybox main internal header file
  *
- *
- * This program 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.
- *
- * This 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * Licensed under the GPL v2 or later, see the file LICENSE in this tarball.
  *
  * Based in part on code from sash, Copyright (c) 1999 by David I. Bell
  * Permission has been granted to redistribute this code under the GPL.
  *
  */
-#ifndef	__LIBCONFIG_H__
-#define	__LIBCONFIG_H__    1
+#ifndef	__LIBBUSYBOX_H__
+#define	__LIBBUSYBOX_H__    1
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -36,6 +23,7 @@
 
 #include <features.h>
 
+#include "platform.h"
 #include "bb_config.h"
 #ifdef CONFIG_SELINUX
 #include <selinux/selinux.h>
@@ -50,21 +38,6 @@
 # include "sha1.h"
 #endif
 
-/* Convenience macros to test the version of gcc. */
-#if defined __GNUC__ && defined __GNUC_MINOR__
-# define __GNUC_PREREQ(maj, min) \
-        ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
-#else
-# define __GNUC_PREREQ(maj, min) 0
-#endif
-
-/* __restrict is known in EGCS 1.2 and above. */
-#if !__GNUC_PREREQ (2,92)
-# define __restrict     /* Ignore */
-#endif
-
-#define attribute_noreturn __attribute__ ((__noreturn__))
-
 /* Some useful definitions */
 #define FALSE   ((int) 0)
 #define TRUE    ((int) 1)
@@ -86,7 +59,7 @@
 #define	MAX(a,b) (((a)>(b))?(a):(b))
 #endif
 
-extern void bb_show_usage(void) __attribute__ ((noreturn, externally_visible));
+extern void bb_show_usage(void) ATTRIBUTE_NORETURN ATTRIBUTE_EXTERNALLY_VISIBLE;
 extern void bb_error_msg(const char *s, ...) __attribute__ ((format (printf, 1, 2)));
 extern void bb_error_msg_and_die(const char *s, ...) __attribute__ ((noreturn, format (printf, 1, 2)));
 extern void bb_perror_msg(const char *s, ...) __attribute__ ((format (printf, 1, 2)));
@@ -95,7 +68,7 @@ extern void bb_vherror_msg(const char *s, va_list p);
 extern void bb_herror_msg(const char *s, ...) __attribute__ ((format (printf, 1, 2)));
 extern void bb_herror_msg_and_die(const char *s, ...) __attribute__ ((noreturn, format (printf, 1, 2)));
 
-extern void bb_perror_nomsg_and_die(void) __attribute__ ((noreturn));
+extern void bb_perror_nomsg_and_die(void) ATTRIBUTE_NORETURN;
 extern void bb_perror_nomsg(void);
 
 /* These two are used internally -- you shouldn't need to use them */
@@ -147,7 +120,7 @@ extern FILE *bb_wfopen_input(const char *filename);
 extern FILE *bb_xfopen(const char *path, const char *mode);
 
 extern int   bb_fclose_nonstdin(FILE *f);
-extern void  bb_fflush_stdout_and_exit(int retval) __attribute__ ((noreturn));
+extern void  bb_fflush_stdout_and_exit(int retval) ATTRIBUTE_NORETURN;
 
 #define BB_GETOPT_ERROR 0x80000000UL
 extern const char *bb_opt_complementally;
@@ -498,4 +471,4 @@ extern int hash_fd(int fd, const size_t size, const uint8_t hash_algo, uint8_t *
 #include <dmalloc.h>
 #endif
 
-#endif /* __LIBCONFIG_H__ */
+#endif /* __LIBBUSYBOX_H__ */
diff --git a/include/platform.h b/include/platform.h
new file mode 100644
index 0000000..763292d
--- /dev/null
+++ b/include/platform.h
@@ -0,0 +1,82 @@
+/*
+   Copyright 2006, Bernhard Fischer
+
+   Licensed under the GPL v2 or later, see the file LICENSE in this tarball.
+*/
+#ifndef	__PLATFORM_H
+#define __PLATFORM_H	1
+
+/* Convenience macros to test the version of gcc. */
+#undef __GNUC_PREREQ
+#if defined __GNUC__ && defined __GNUC_MINOR__
+# define __GNUC_PREREQ(maj, min) \
+	        ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
+#else
+# define __GNUC_PREREQ(maj, min) 0
+#endif
+
+/* __restrict is known in EGCS 1.2 and above. */
+#if !__GNUC_PREREQ (2,92)
+# ifndef __restrict
+#  define __restrict     /* Ignore */
+# endif
+#endif
+
+/* Define macros for some gcc attributes.  This permits us to use the
+   macros freely, and know that they will come into play for the
+   version of gcc in which they are supported.  */
+
+#if !__GNUC_PREREQ (2,7)
+# ifndef __attribute__
+#  define __attribute__(x)
+# endif
+#endif
+
+#if 0
+/* Attribute __malloc__ on functions was valid as of gcc 2.96. */
+#ifndef ATTRIBUTE_MALLOC
+# if __GNUC_PREREQ (2,96)
+#  define ATTRIBUTE_MALLOC __attribute__ ((__malloc__))
+# else
+#  define ATTRIBUTE_MALLOC
+# endif /* GNUC >= 2.96 */
+#endif /* ATTRIBUTE_MALLOC */
+#endif
+
+#ifndef ATTRIBUTE_UNUSED
+#define ATTRIBUTE_UNUSED __attribute__ ((__unused__))
+#endif /* ATTRIBUTE_UNUSED */
+
+#ifndef ATTRIBUTE_NORETURN
+#define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__))
+#endif /* ATTRIBUTE_NORETURN */
+
+#ifndef ATTRIBUTE_PACKED
+#define ATTRIBUTE_PACKED __attribute__ ((__packed__))
+#endif /* ATTRIBUTE_NORETURN */
+
+/* -fwhole-program makes all symbols local. The attribute externally_visible
+   forces a symbol global.  */
+#ifndef ATTRIBUTE_EXTERNALLY_VISIBLE
+# if __GNUC_PREREQ (4,1)
+# define ATTRIBUTE_EXTERNALLY_VISIBLE __attribute__ ((__externally_visible__))
+# else
+# define ATTRIBUTE_EXTERNALLY_VISIBLE
+# endif /* GNUC >= 4.1 */
+#endif /* ATTRIBUTE_EXTERNALLY_VISIBLE */
+
+/* We use __extension__ in some places to suppress -pedantic warnings
+   about GCC extensions.  This feature didn't work properly before
+   gcc 2.8.  */
+#if !__GNUC_PREREQ (2,8)
+# ifndef __extension__
+#  define __extension__
+# endif
+#endif
+
+
+/* include USAGE_APPLET_x helper macros for usage.h.  */
+/*
+#include "_usage.h"
+*/
+#endif	/* platform.h	*/
-- 
cgit v1.1