This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
fix defines for PERL_BITFIELDxx on Linux and Win32 smoke-me/fix_bitfield_definitions 17549/head
authorYves Orton <demerphq@gmail.com>
Sat, 8 Feb 2020 10:02:08 +0000 (11:02 +0100)
committerYves Orton <demerphq@gmail.com>
Sat, 8 Feb 2020 10:02:08 +0000 (11:02 +0100)
for some reason PERL_BITFIELD32 is defined as "unsigned" which is
defined to be the same as "unsigned int" which could be 16 bits.

This changes the definition for PERL_BITFIELDxx to be the same
on both platforms and to use the full names for the type, and to
use a type which is guaranteed to be at least 32 bits long for
PERL_BITFIELD32.

perl.h
win32/win32.h

diff --git a/perl.h b/perl.h
index 003e4c9..9198ee0 100644 (file)
--- a/perl.h
+++ b/perl.h
@@ -3827,13 +3827,13 @@ typedef        struct crypt_data {     /* straight from /usr/include/crypt.h */
 
 /* macros to define bit-fields in structs. */
 #ifndef PERL_BITFIELD8
-#  define PERL_BITFIELD8 unsigned
+#  define PERL_BITFIELD8 unsigned char
 #endif
 #ifndef PERL_BITFIELD16
-#  define PERL_BITFIELD16 unsigned
+#  define PERL_BITFIELD16 unsigned short int
 #endif
 #ifndef PERL_BITFIELD32
-#  define PERL_BITFIELD32 unsigned
+#  define PERL_BITFIELD32 unsigned long int
 #endif
 
 #include "sv.h"
index e9138af..a91776c 100644 (file)
@@ -255,8 +255,8 @@ struct utsname {
 /* VC uses non-standard way to determine the size and alignment if bit-fields */
 /* MinGW will compile with -mms-bitfields, so should use the same types */
 #define PERL_BITFIELD8  unsigned char
-#define PERL_BITFIELD16 unsigned short
-#define PERL_BITFIELD32 unsigned int
+#define PERL_BITFIELD16 unsigned short int
+#define PERL_BITFIELD32 unsigned long int
 
 #ifdef _MSC_VER                        /* Microsoft Visual C++ */