[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Libcdio-devel] RFC: libcdio to remove it's version of bool and requ
From: |
Thomas Schmitt |
Subject: |
Re: [Libcdio-devel] RFC: libcdio to remove it's version of bool and require <stdbool.h> ? |
Date: |
Sun, 15 Jul 2018 11:54:53 +0200 |
Hi,
Rocky Bernstein wrote:
> stdbool.h is POSIX. See http://pubs.opengroup.org/onlinepubs/9699919799/
> Thoughts?
... and earlier in a different thread:
> > That will probably break the ABI, but I think I'm okay with that.
Indeed libcdio should do something about the riddling error messages which
appear if <stdbool.h> is included after <cdio/iso9660.h>. (In those
messages, "bool" is about the least prominent name.)
But breaking the ABI is of course not my personal favorite.
include/cdio/types.h already tries to communicate with "All the stdbool.h"
by defining macro __bool_true_false_are_defined .
Obviously my local stdbool.h does not really understand this. (gcc -H says
it is /usr/lib/gcc/x86_64-linux-gnu/4.9/include/stdbool.h .)
How about waving more flags there ?
The following code change compiles although in iso9660_private.h the header
<stdbool.h> is included after <cdio/iso9660.h> which in all branches would
cause compile time errors:
=========================================================================
diff --git a/include/cdio/types.h b/include/cdio/types.h
index dc7e478..6c1a057 100644
--- a/include/cdio/types.h
+++ b/include/cdio/types.h
@@ -104,11 +104,15 @@ typedef uint8_t ubyte;
#endif
#ifndef __cplusplus
+#ifndef _STDBOOL_H
-/* All the stdbool.h seem to define those */
+/* All the stdbool.h seem to define those (but not all seem to obey) */
#ifndef __bool_true_false_are_defined
#define __bool_true_false_are_defined 1
+/* Keep conflicting definitions out, now that own ones get created. */
+#define _STDBOOL_H
+
#undef bool
#undef true
#undef false
@@ -122,6 +126,7 @@ typedef uint8_t ubyte;
#define false 0
#endif /* __bool_true_false_are_defined */
+#endif /* _STDBOOL_H */
#endif /*C++*/
/* some GCC optimizations -- gcc 2.5+ */
diff --git a/lib/iso9660/iso9660_private.h b/lib/iso9660/iso9660_private.h
index c5e1393..53b0264 100644
--- a/lib/iso9660/iso9660_private.h
+++ b/lib/iso9660/iso9660_private.h
@@ -32,6 +32,9 @@
#include <cdio/types.h>
+/* <<< only for a test */
+#include <cdio/iso9660.h>
+
#ifdef HAVE_STDBOOL_H
# include <stdbool.h>
#endif
=========================================================================
I see few potential for regression:
This change can hardly break existing applications, because they would run
into the compiler errors if they included stdbool.h after cdio/types.h.
If they included stdbool.h before cdio/types.h, then "#ifndef _STDBOOL_H"
should not be reached at all, and even if so it should do no harm, because
the first inclusion of stdbool.h should keep out further inclusions of
itself.
Have a nice day :)
Thomas