aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada
diff options
context:
space:
mode:
authorArnaud Charlet <charlet@gcc.gnu.org>2009-04-15 12:51:32 +0200
committerArnaud Charlet <charlet@gcc.gnu.org>2009-04-15 12:51:32 +0200
commit55cc1a0524a460e8b224878114842463100b0e0e (patch)
treedb6c6af475721d139150f29938adcb6018b85725 /gcc/ada
parent1f6821b4dcdcc3bf95f6aa4551cc755e113162be (diff)
downloadgcc-55cc1a0524a460e8b224878114842463100b0e0e.zip
gcc-55cc1a0524a460e8b224878114842463100b0e0e.tar.gz
gcc-55cc1a0524a460e8b224878114842463100b0e0e.tar.bz2
[multiple changes]
2009-04-15 Pascal Obry <obry@adacore.com> Add support for Win32 native encoding for delete/rename routines. * adaint.c (__gnat_unlink): New routine. (__gnat_rename): New routine. Simple wrapper routines used to convert to proper encoding on Windows. * s-os_lib.adb: Use __gnat_unlink and __gnat_rename instead of direct call to the C library. * g-sercom-mingw.adb, s-win32.ads: Update Win32 binding. 2009-04-15 Robert Dewar <dewar@adacore.com> * s-tassta.adb: Minor reformatting From-SVN: r146101
Diffstat (limited to 'gcc/ada')
-rw-r--r--gcc/ada/ChangeLog18
-rw-r--r--gcc/ada/adaint.c35
-rw-r--r--gcc/ada/g-sercom-mingw.adb2
-rwxr-xr-xgcc/ada/s-os_lib.adb4
-rw-r--r--gcc/ada/s-tassta.adb2
-rw-r--r--gcc/ada/s-win32.ads113
6 files changed, 125 insertions, 49 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index 99395eb..4f33243 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,3 +1,21 @@
+2009-04-15 Pascal Obry <obry@adacore.com>
+
+ Add support for Win32 native encoding for delete/rename routines.
+
+ * adaint.c (__gnat_unlink): New routine.
+ (__gnat_rename): New routine.
+ Simple wrapper routines used to convert to proper encoding on
+ Windows.
+
+ * s-os_lib.adb: Use __gnat_unlink and __gnat_rename instead of direct
+ call to the C library.
+
+ * g-sercom-mingw.adb, s-win32.ads: Update Win32 binding.
+
+2009-04-15 Robert Dewar <dewar@adacore.com>
+
+ * s-tassta.adb: Minor reformatting
+
2009-04-15 Robert Dewar <dewar@adacore.com>
* frontend.adb (Frontend): Set proper default for
diff --git a/gcc/ada/adaint.c b/gcc/ada/adaint.c
index a6e7429..c84cd3e 100644
--- a/gcc/ada/adaint.c
+++ b/gcc/ada/adaint.c
@@ -694,6 +694,41 @@ __gnat_os_filename (char *filename, char *w_filename ATTRIBUTE_UNUSED,
#endif
}
+/* Delete a file. */
+
+int
+__gnat_unlink (char *path)
+{
+#if defined (__MINGW32__) && ! defined (__vxworks) && ! defined (CROSS_COMPILE)
+ {
+ TCHAR wpath[GNAT_MAX_PATH_LEN];
+
+ S2WSU (wpath, path, GNAT_MAX_PATH_LEN);
+ return _tunlink (wpath);
+ }
+#else
+ return unlink (path);
+#endif
+}
+
+/* Rename a file. */
+
+int
+__gnat_rename (char *from, char *to)
+{
+#if defined (__MINGW32__) && ! defined (__vxworks) && ! defined (CROSS_COMPILE)
+ {
+ TCHAR wfrom[GNAT_MAX_PATH_LEN], wto[GNAT_MAX_PATH_LEN];
+
+ S2WSU (wfrom, from, GNAT_MAX_PATH_LEN);
+ S2WSU (wto, to, GNAT_MAX_PATH_LEN);
+ return _trename (wfrom, wto);
+ }
+#else
+ return rename (from, to);
+#endif
+}
+
FILE *
__gnat_fopen (char *path, char *mode, int encoding ATTRIBUTE_UNUSED)
{
diff --git a/gcc/ada/g-sercom-mingw.adb b/gcc/ada/g-sercom-mingw.adb
index abb3227..03bd6ab 100644
--- a/gcc/ada/g-sercom-mingw.adb
+++ b/gcc/ada/g-sercom-mingw.adb
@@ -106,7 +106,7 @@ package body GNAT.Serial_Communications is
Success := CloseHandle (HANDLE (Port.H.all));
end if;
- Port.H.all := CreateFile
+ Port.H.all := CreateFileA
(lpFileName => C_Name (C_Name'First)'Address,
dwDesiredAccess => GENERIC_READ or GENERIC_WRITE,
dwShareMode => 0,
diff --git a/gcc/ada/s-os_lib.adb b/gcc/ada/s-os_lib.adb
index 0e1c6c7..0add64f 100755
--- a/gcc/ada/s-os_lib.adb
+++ b/gcc/ada/s-os_lib.adb
@@ -848,7 +848,7 @@ package body System.OS_Lib is
R : Integer;
function unlink (A : Address) return Integer;
- pragma Import (C, unlink, "unlink");
+ pragma Import (C, unlink, "__gnat_unlink");
begin
R := unlink (Name);
@@ -2246,7 +2246,7 @@ package body System.OS_Lib is
Success : out Boolean)
is
function rename (From, To : Address) return Integer;
- pragma Import (C, rename, "rename");
+ pragma Import (C, rename, "__gnat_rename");
R : Integer;
begin
R := rename (Old_Name, New_Name);
diff --git a/gcc/ada/s-tassta.adb b/gcc/ada/s-tassta.adb
index 836f332..9a5ce9f 100644
--- a/gcc/ada/s-tassta.adb
+++ b/gcc/ada/s-tassta.adb
@@ -1388,6 +1388,8 @@ package body System.Tasking.Stages is
-- unwound. The common notification routine has been called at the
-- raise point already.
+ -- Lock to prevent unsynchronized output
+
Initialization.Task_Lock (Self_Id);
To_Stderr ("task ");
diff --git a/gcc/ada/s-win32.ads b/gcc/ada/s-win32.ads
index f8856fb..3597591 100644
--- a/gcc/ada/s-win32.ads
+++ b/gcc/ada/s-win32.ads
@@ -82,51 +82,53 @@ package System.Win32 is
-- Files --
-----------
- GENERIC_READ : constant := 16#80000000#;
- GENERIC_WRITE : constant := 16#40000000#;
-
- CREATE_NEW : constant := 1;
- CREATE_ALWAYS : constant := 2;
- OPEN_EXISTING : constant := 3;
- OPEN_ALWAYS : constant := 4;
- TRUNCATE_EXISTING : constant := 5;
-
- FILE_SHARE_DELETE : constant := 16#00000004#;
- FILE_SHARE_READ : constant := 16#00000001#;
- FILE_SHARE_WRITE : constant := 16#00000002#;
-
- FILE_BEGIN : constant := 0;
- FILE_CURRENT : constant := 1;
- FILE_END : constant := 2;
-
- PAGE_NOACCESS : constant := 16#0001#;
- PAGE_READONLY : constant := 16#0002#;
- PAGE_READWRITE : constant := 16#0004#;
- PAGE_WRITECOPY : constant := 16#0008#;
- PAGE_EXECUTE : constant := 16#0010#;
-
- FILE_MAP_ALL_ACCESS : constant := 16#F001f#;
- FILE_MAP_READ : constant := 4;
- FILE_MAP_WRITE : constant := 2;
- FILE_MAP_COPY : constant := 1;
-
- FILE_ADD_FILE : constant := 16#0002#;
- FILE_ADD_SUBDIRECTORY : constant := 16#0004#;
- FILE_APPEND_DATA : constant := 16#0004#;
- FILE_CREATE_PIPE_INSTANCE : constant := 16#0004#;
- FILE_DELETE_CHILD : constant := 16#0040#;
- FILE_EXECUTE : constant := 16#0020#;
- FILE_LIST_DIRECTORY : constant := 16#0001#;
- FILE_READ_ATTRIBUTES : constant := 16#0080#;
- FILE_READ_DATA : constant := 16#0001#;
- FILE_READ_EA : constant := 16#0008#;
- FILE_TRAVERSE : constant := 16#0020#;
- FILE_WRITE_ATTRIBUTES : constant := 16#0100#;
- FILE_WRITE_DATA : constant := 16#0002#;
- FILE_WRITE_EA : constant := 16#0010#;
- STANDARD_RIGHTS_READ : constant := 16#20000#;
- STANDARD_RIGHTS_WRITE : constant := 16#20000#;
- SYNCHRONIZE : constant := 16#100000#;
+ CP_UTF8 : constant := 65001;
+
+ GENERIC_READ : constant := 16#80000000#;
+ GENERIC_WRITE : constant := 16#40000000#;
+
+ CREATE_NEW : constant := 1;
+ CREATE_ALWAYS : constant := 2;
+ OPEN_EXISTING : constant := 3;
+ OPEN_ALWAYS : constant := 4;
+ TRUNCATE_EXISTING : constant := 5;
+
+ FILE_SHARE_DELETE : constant := 16#00000004#;
+ FILE_SHARE_READ : constant := 16#00000001#;
+ FILE_SHARE_WRITE : constant := 16#00000002#;
+
+ FILE_BEGIN : constant := 0;
+ FILE_CURRENT : constant := 1;
+ FILE_END : constant := 2;
+
+ PAGE_NOACCESS : constant := 16#0001#;
+ PAGE_READONLY : constant := 16#0002#;
+ PAGE_READWRITE : constant := 16#0004#;
+ PAGE_WRITECOPY : constant := 16#0008#;
+ PAGE_EXECUTE : constant := 16#0010#;
+
+ FILE_MAP_ALL_ACCESS : constant := 16#F001f#;
+ FILE_MAP_READ : constant := 4;
+ FILE_MAP_WRITE : constant := 2;
+ FILE_MAP_COPY : constant := 1;
+
+ FILE_ADD_FILE : constant := 16#0002#;
+ FILE_ADD_SUBDIRECTORY : constant := 16#0004#;
+ FILE_APPEND_DATA : constant := 16#0004#;
+ FILE_CREATE_PIPE_INSTANCE : constant := 16#0004#;
+ FILE_DELETE_CHILD : constant := 16#0040#;
+ FILE_EXECUTE : constant := 16#0020#;
+ FILE_LIST_DIRECTORY : constant := 16#0001#;
+ FILE_READ_ATTRIBUTES : constant := 16#0080#;
+ FILE_READ_DATA : constant := 16#0001#;
+ FILE_READ_EA : constant := 16#0008#;
+ FILE_TRAVERSE : constant := 16#0020#;
+ FILE_WRITE_ATTRIBUTES : constant := 16#0100#;
+ FILE_WRITE_DATA : constant := 16#0002#;
+ FILE_WRITE_EA : constant := 16#0010#;
+ STANDARD_RIGHTS_READ : constant := 16#20000#;
+ STANDARD_RIGHTS_WRITE : constant := 16#20000#;
+ SYNCHRONIZE : constant := 16#100000#;
FILE_ATTRIBUTE_READONLY : constant := 16#00000001#;
FILE_ATTRIBUTE_HIDDEN : constant := 16#00000002#;
@@ -159,6 +161,16 @@ package System.Win32 is
bInheritHandle : BOOL;
end record;
+ function CreateFileA
+ (lpFileName : Address;
+ dwDesiredAccess : DWORD;
+ dwShareMode : DWORD;
+ lpSecurityAttributes : access SECURITY_ATTRIBUTES;
+ dwCreationDisposition : DWORD;
+ dwFlagsAndAttributes : DWORD;
+ hTemplateFile : HANDLE) return HANDLE;
+ pragma Import (Stdcall, CreateFileA, "CreateFileA");
+
function CreateFile
(lpFileName : Address;
dwDesiredAccess : DWORD;
@@ -167,7 +179,7 @@ package System.Win32 is
dwCreationDisposition : DWORD;
dwFlagsAndAttributes : DWORD;
hTemplateFile : HANDLE) return HANDLE;
- pragma Import (Stdcall, CreateFile, "CreateFileA");
+ pragma Import (Stdcall, CreateFile, "CreateFileW");
function GetFileSize
(hFile : HANDLE;
@@ -220,6 +232,15 @@ package System.Win32 is
function UnmapViewOfFile (lpBaseAddress : System.Address) return BOOL;
pragma Import (Stdcall, UnmapViewOfFile, "UnmapViewOfFile");
+ function MultiByteToWideChar
+ (CodePage : WORD;
+ dwFlags : DWORD;
+ lpMultiByteStr : System.Address;
+ cchMultiByte : WORD;
+ lpWideCharStr : System.Address;
+ cchWideChar : WORD) return BOOL;
+ pragma Import (Stdcall, MultiByteToWideChar, "MultiByteToWideChar");
+
------------------------
-- System Information --
------------------------