diff --git a/scripts/configure.in b/scripts/configure.in index c0be24f9..b3b33510 100644 --- a/scripts/configure.in +++ b/scripts/configure.in @@ -129,6 +129,9 @@ AC_C_BIGENDIAN dnl Check for required header files AC_HEADER_STDC +dnl Check for compiler bool support +AC_HEADER_STDBOOL + dnl Need either setenv or putenv AC_CHECK_FUNCS(setenv putenv) diff --git a/utils/magic.h b/utils/magic.h index 7b4356d6..b4aa6f46 100644 --- a/utils/magic.h +++ b/utils/magic.h @@ -85,14 +85,7 @@ typedef pointertype ClientData; /* --------------------------- Booleans ------------------------------- */ -typedef unsigned char bool; - -#ifndef TRUE -#define TRUE ((bool)1) -#endif -#ifndef FALSE -#define FALSE ((bool)0) -#endif +#include "utils/magic_stdbool.h" /* ----------------------- Simple functions --------------------------- */ diff --git a/utils/magic_stdbool.h b/utils/magic_stdbool.h new file mode 100644 index 00000000..64af7355 --- /dev/null +++ b/utils/magic_stdbool.h @@ -0,0 +1,101 @@ +/* + * utils/magic_stdbool.h + * + * Copyright (C) 1985, 1990 Regents of the University of California. + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies. The University of California + * makes no representations about the suitability of this + * software for any purpose. It is provided "as is" without + * express or implied warranty. Export of this software outside + * of the United States of America may require an export license. + * + * SPDX-License-Identifier: HPND-UC-export-US + * + * + * This file contains code snippets that are part of the GNU autoconf 2.69 + * project documentation. This project is licensed under GPLv3 with a + * Section 7 clause outlined in autoconf-2.69/COPYING.EXCEPTION. + * + * The documentation for the autoconf project is licensed under GNU Free + * Documentation License Version 1.3 or any later version published by the + * Free Software Foundation. The snippets in here are taken entirely from the + * documentation so fall under GFDL-1.3-or-later terms. + * The documentation published by the FSF can be seen at + * https://www.gnu.org/savannah-checkouts/gnu/autoconf/manual/autoconf-2.69/autoconf.html + * This section seeks to provide attribution by providing references to the source + * a link to the full license text and the required boilerplate text directly below: + * + * Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. + * + * Permission is granted to copy, distribute and/or modify this + * document under the terms of the GNU Free Documentation License, + * Version 1.3 or any later version published by the Free Software + * Foundation; with no Invariant Sections, no Front-Cover texts, and + * no Back-Cover Texts. A copy of the license is included in the + * section entitled "GNU Free Documentation License." + * + * A full copy of the GNU Free Documentation License version 1.3 is available at: + * https://www.gnu.org/licenses/fdl-1.3.html + * SPDX-License-Identifier: GFDL-1.3-or-later + * + * + * All other lines in this file are licensed under the HPND-UC-export-US license + * at the top of this file inline with the main project licensing. + * + */ + +#ifndef _MAGIC__UTILS__MAGIC_STDBOOL_H +#define _MAGIC__UTILS__MAGIC_STDBOOL_H + +#ifdef HAVE_MAGIC_AUTOCONF_CONFIG_H +#include "magic/autoconf/config.h" +#endif + +/* This section is taken from autoconf-2.69 manual + * https://www.gnu.org/software/autoconf/manual/autoconf-2.69/html_node/Particular-Headers.html + * for HAVE_STDBOOL_H + */ +#ifdef HAVE_STDBOOL_H + # include + + #ifndef TRUE + #define TRUE (true) + #endif + #ifndef FALSE + #define FALSE (false) + #endif +#else + # ifndef HAVE__BOOL + # ifdef __cplusplus + typedef bool _Bool; + # else + # define _Bool signed char + # endif + # endif + # define bool _Bool + # define false 0 + # define true 1 + # define __bool_true_false_are_defined 1 + +/* This section is taken from magic project, see historical magic.h */ + /* originally magic.h used unsigned char but should be source compatible with + * a real bool type such as that in C23/C++ + */ + + /*typedef unsigned char bool;*/ +/* commented out the original magic definition to adopt the historical C + * standard definition provided above. + */ + + #ifndef TRUE + #define TRUE ((bool)1) + #endif + #ifndef FALSE + #define FALSE ((bool)0) + #endif +#endif + +#endif /* _MAGIC__UTILS__MAGIC_STDBOOL_H */