Patchwork [Ada] Incorrect sign extensions on IOCTL system constants

login
register
mail settings
Submitter Arnaud Charlet
Date Oct. 29, 2012, 11:36 a.m.
Message ID <20121029113625.GA626@adacore.com>
Download mbox | patch
Permalink /patch/194979/
State New
Headers show

Comments

Arnaud Charlet - Oct. 29, 2012, 11:36 a.m.
This change fixes incorrect values in s-oscons.ads on x86_64-freebsd,
which were caused by those values being processed as signed, instead of
unsigned, integers.

Tested on x86_64-pc-linux-gnu, committed on trunk

2012-10-29  Thomas Quinot  <quinot@adacore.com>

	* s-oscons-tmplt.c: Fix signedness of ioctl request identifiers
	for x86_64-freebsd.

Patch

Index: s-oscons-tmplt.c
===================================================================
--- s-oscons-tmplt.c	(revision 192918)
+++ s-oscons-tmplt.c	(working copy)
@@ -218,6 +218,14 @@ 
 
 #define CST(name,comment) C(#name,String,name,comment)
 
+/* ioctl(2) requests are "int" in UNIX, but "unsigned long" on FreeBSD */
+
+#ifdef __FreeBSD__
+# define CNI CNU
+#else
+# define CNI CND
+#endif
+
 #define STR(x) STR1(x)
 #define STR1(x) #x
 
@@ -373,12 +381,12 @@ 
 #ifndef FIONBIO
 # define FIONBIO -1
 #endif
-CND(FIONBIO, "Set/clear non-blocking io")
+CNI(FIONBIO, "Set/clear non-blocking io")
 
 #ifndef FIONREAD
 # define FIONREAD -1
 #endif
-CND(FIONREAD, "How many bytes to read")
+CNI(FIONREAD, "How many bytes to read")
 
 /*
 
@@ -1318,6 +1326,7 @@ 
 #define SIZEOF_sigset (sizeof (sigset_t))
 CND(SIZEOF_sigset, "sigset");
 #endif
+
 /*
 
    --  Fields of struct msghdr
@@ -1399,7 +1408,7 @@ 
 /* There's no clock_gettime or clock_id's on Darwin, generate a dummy value */
 # define CLOCK_RT_Ada "-1"
 
-#elif defined(FreeBSD) || defined(_AIX)
+#elif defined(__FreeBSD__) || defined(_AIX)
 /** On these platforms use system provided monotonic clock instead of
  ** the default CLOCK_REALTIME. We then need to set up cond var attributes
  ** appropriately (see thread.c).