aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArnaud Charlet <charlet@gcc.gnu.org>2009-04-20 12:23:29 +0200
committerArnaud Charlet <charlet@gcc.gnu.org>2009-04-20 12:23:29 +0200
commit4fd1e8b0018d82b6830bd57d413e8429b379e580 (patch)
tree574ce9131a64849db6a95cbc24418300aacf56dd
parent9013065bc05ad988ff59dda83b1847880757f20d (diff)
downloadgcc-4fd1e8b0018d82b6830bd57d413e8429b379e580.zip
gcc-4fd1e8b0018d82b6830bd57d413e8429b379e580.tar.gz
gcc-4fd1e8b0018d82b6830bd57d413e8429b379e580.tar.bz2
[multiple changes]
2009-04-20 Thomas Quinot <quinot@adacore.com> * s-oscons-tmplt.c: Add support for generating a dummy version of s-oscons.ads providing all possible constants. * g-socthi-mingw.ads: Fix calling convention for __gnat_inet_pton. * socket.c (__gnat_inet_pton): On Windows make sure we always use the ANSI version (not the UNICODE version) of WSAStringToAddress. 2009-04-20 Pascal Obry <obry@adacore.com> * adaint.c (__gnat_set_OWNER_ACL): properly free memory allocated for the security descriptor and make sure all handles are closed before leaving this procedure. From-SVN: r146392
-rw-r--r--gcc/ada/ChangeLog16
-rw-r--r--gcc/ada/adaint.c20
-rw-r--r--gcc/ada/g-socthi-mingw.ads2
-rw-r--r--gcc/ada/s-oscons-tmplt.c42
-rw-r--r--gcc/ada/socket.c2
5 files changed, 66 insertions, 16 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index 80163b6..dbbd2ee 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,3 +1,19 @@
+2009-04-20 Thomas Quinot <quinot@adacore.com>
+
+ * s-oscons-tmplt.c: Add support for generating a dummy version of
+ s-oscons.ads providing all possible constants.
+
+ * g-socthi-mingw.ads: Fix calling convention for __gnat_inet_pton.
+
+ * socket.c (__gnat_inet_pton): On Windows make sure we always use the
+ ANSI version (not the UNICODE version) of WSAStringToAddress.
+
+2009-04-20 Pascal Obry <obry@adacore.com>
+
+ * adaint.c (__gnat_set_OWNER_ACL): properly free memory
+ allocated for the security descriptor and make sure all
+ handles are closed before leaving this procedure.
+
2009-04-20 Javier Miranda <miranda@adacore.com>
* einfo.ads, einfo.adb (Is_Underlying_Record_View): New subprogram
diff --git a/gcc/ada/adaint.c b/gcc/ada/adaint.c
index 4977297..24719cf 100644
--- a/gcc/ada/adaint.c
+++ b/gcc/ada/adaint.c
@@ -1820,8 +1820,8 @@ __gnat_check_OWNER_ACL
PRIVILEGE_SET PrivilegeSet;
DWORD dwPrivSetSize = sizeof (PRIVILEGE_SET);
BOOL fAccessGranted = FALSE;
- HANDLE hToken;
- DWORD nLength;
+ HANDLE hToken = NULL;
+ DWORD nLength = 0;
SECURITY_DESCRIPTOR* pSD = NULL;
GetFileSecurity
@@ -1839,14 +1839,14 @@ __gnat_check_OWNER_ACL
(wname, OWNER_SECURITY_INFORMATION |
GROUP_SECURITY_INFORMATION | DACL_SECURITY_INFORMATION,
pSD, nLength, &nLength))
- return 0;
+ goto error;
if (!ImpersonateSelf (SecurityImpersonation))
- return 0;
+ goto error;
if (!OpenThreadToken
(GetCurrentThread(), TOKEN_DUPLICATE | TOKEN_QUERY, FALSE, &hToken))
- return 0;
+ goto error;
/* Undoes the effect of ImpersonateSelf. */
@@ -1867,9 +1867,17 @@ __gnat_check_OWNER_ACL
&dwPrivSetSize, /* size of PrivilegeSet buffer */
&dwAccessAllowed, /* receives mask of allowed access rights */
&fAccessGranted))
- return 0;
+ goto error;
+ CloseHandle (hToken);
+ HeapFree (GetProcessHeap (), 0, pSD);
return fAccessGranted;
+
+ error:
+ if (hToken)
+ CloseHandle (hToken);
+ HeapFree (GetProcessHeap (), 0, pSD);
+ return 0;
}
static void
diff --git a/gcc/ada/g-socthi-mingw.ads b/gcc/ada/g-socthi-mingw.ads
index 9c3ab0c..49dd11c 100644
--- a/gcc/ada/g-socthi-mingw.ads
+++ b/gcc/ada/g-socthi-mingw.ads
@@ -234,7 +234,7 @@ private
pragma Import (Stdcall, C_Getpeername, "getpeername");
pragma Import (Stdcall, C_Getsockname, "getsockname");
pragma Import (Stdcall, C_Getsockopt, "getsockopt");
- pragma Import (Stdcall, Inet_Pton, "__gnat_inet_pton");
+ pragma Import (C, Inet_Pton, "__gnat_inet_pton");
pragma Import (Stdcall, C_Ioctl, "ioctlsocket");
pragma Import (Stdcall, C_Listen, "listen");
pragma Import (Stdcall, C_Recv, "recv");
diff --git a/gcc/ada/s-oscons-tmplt.c b/gcc/ada/s-oscons-tmplt.c
index be35f1b..2bcb80a 100644
--- a/gcc/ada/s-oscons-tmplt.c
+++ b/gcc/ada/s-oscons-tmplt.c
@@ -79,10 +79,6 @@ pragma Style_Checks ("M32766");
**
**/
-#ifndef TARGET
-# error Please define TARGET
-#endif
-
#include <stdlib.h>
#include <string.h>
#include <limits.h>
@@ -95,6 +91,26 @@ pragma Style_Checks ("M32766");
#include "gsocket.h"
+#ifdef DUMMY
+
+# if defined (TARGET)
+# error TARGET may not be defined when generating the dummy version
+# else
+# define TARGET "batch runtime compilation (dummy values)"
+# endif
+
+# if !(defined (HAVE_SOCKETS) && defined (HAVE_TERMIOS))
+# error Features missing on platform
+# endif
+
+# define NATIVE
+
+#endif
+
+#ifndef TARGET
+# error Please define TARGET
+#endif
+
#ifndef HAVE_SOCKETS
# include <errno.h>
#endif
@@ -109,8 +125,16 @@ pragma Style_Checks ("M32766");
#ifdef NATIVE
#include <stdio.h>
+
+#ifdef DUMMY
+int counter = 0;
+# define _VAL(x) counter++
+#else
+# define _VAL(x) x
+#endif
+
#define CND(name,comment) \
- printf ("\n->CND:$%d:" #name ":$%d:" comment, __LINE__, ((int) name));
+ printf ("\n->CND:$%d:" #name ":$%d:" comment, __LINE__, ((int) _VAL (name)));
#define CNS(name,comment) \
printf ("\n->CNS:$%d:" #name ":" name ":" comment, __LINE__);
@@ -1179,9 +1203,11 @@ TXT(" Thread_Blocking_IO : constant Boolean := True;")
/**
** System-specific constants follow
+ ** Each section should be activated if compiling for the corresponding
+ ** platform *or* generating the dummy version for runtime test compilation.
**/
-#ifdef __vxworks
+#if defined (__vxworks) || defined (DUMMY)
/*
@@ -1198,7 +1224,7 @@ CND(ERROR, "VxWorks generic error")
#endif
-#ifdef __MINGW32__
+#if defined (__MINGW32__) || defined (DUMMY)
/*
------------------------------
@@ -1220,7 +1246,7 @@ CND(WSAEDISCON, "Disconnected")
putchar ('\n');
#endif
-#ifdef __APPLE__
+#if defined (__APPLE__) || defined (DUMMY)
/*
-------------------------------
diff --git a/gcc/ada/socket.c b/gcc/ada/socket.c
index 5ddaa39..1c7de25 100644
--- a/gcc/ada/socket.c
+++ b/gcc/ada/socket.c
@@ -422,7 +422,7 @@ __gnat_inet_pton (int af, const char *src, void *dst) {
int rc;
ss.ss_family = af;
- rc = WSAStringToAddress (src, af, NULL, (struct sockaddr *)&ss, &sslen);
+ rc = WSAStringToAddressA (src, af, NULL, (struct sockaddr *)&ss, &sslen);
if (rc > 0) {
switch (af) {
case AF_INET: