aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada
diff options
context:
space:
mode:
authorPascal Obry <obry@adacore.com>2009-04-16 12:24:19 +0000
committerArnaud Charlet <charlet@gcc.gnu.org>2009-04-16 14:24:19 +0200
commit468ee33782f620eee72571ee61df0e3e83eb80fb (patch)
tree77bfbb53beec393fc559fe7c0deb44d5bedc9509 /gcc/ada
parentbca17d5131ae9c0db27fa07078e90ac95aa67d87 (diff)
downloadgcc-468ee33782f620eee72571ee61df0e3e83eb80fb.zip
gcc-468ee33782f620eee72571ee61df0e3e83eb80fb.tar.gz
gcc-468ee33782f620eee72571ee61df0e3e83eb80fb.tar.bz2
adaint.h, adaint.c (__gnat_rmdir): New routine.
2009-04-16 Pascal Obry <obry@adacore.com> * adaint.h, adaint.c (__gnat_rmdir): New routine. Simple wrapper routines used to convert to proper encoding on Windows. * s-crtl.ads: Use __gnat_rmdir instead of direct call to the C library. * g-dirope.adb (Remove_Dir): Fix a bug, the root directory was removed twice. From-SVN: r146176
Diffstat (limited to 'gcc/ada')
-rw-r--r--gcc/ada/ChangeLog11
-rw-r--r--gcc/ada/a-direct.adb10
-rw-r--r--gcc/ada/adaint.c17
-rw-r--r--gcc/ada/adaint.h1
-rw-r--r--gcc/ada/g-dirope.adb5
-rw-r--r--gcc/ada/s-crtl.ads4
6 files changed, 35 insertions, 13 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index 12b55c6..aba44e8 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,5 +1,16 @@
2009-04-16 Pascal Obry <obry@adacore.com>
+ * adaint.h, adaint.c (__gnat_rmdir): New routine.
+ Simple wrapper routines used to convert to proper encoding on
+ Windows.
+
+ * s-crtl.ads: Use __gnat_rmdir instead of direct call to the C library.
+
+ * g-dirope.adb (Remove_Dir): Fix a bug, the root directory was removed
+ twice.
+
+2009-04-16 Pascal Obry <obry@adacore.com>
+
* s-crtl.ads, s-os_lib.adb: Minor code clean-up.
2009-04-16 Thomas Quinot <quinot@adacore.com>
diff --git a/gcc/ada/a-direct.adb b/gcc/ada/a-direct.adb
index 07f5836..db9ef9f 100644
--- a/gcc/ada/a-direct.adb
+++ b/gcc/ada/a-direct.adb
@@ -70,7 +70,7 @@ package body Ada.Directories is
type Search_Data is record
Is_Valid : Boolean := False;
- Name : Ada.Strings.Unbounded.Unbounded_String;
+ Name : Unbounded_String;
Pattern : Regexp;
Filter : Filter_Type;
Dir : Dir_Type_Value := No_Dir;
@@ -481,9 +481,7 @@ package body Ada.Directories is
C_Dir_Name : constant String := Directory & ASCII.NUL;
begin
- rmdir (C_Dir_Name);
-
- if System.OS_Lib.Is_Directory (Directory) then
+ if rmdir (C_Dir_Name) /= 0 then
raise Use_Error with
"deletion of directory """ & Directory & """ failed";
end if;
@@ -565,9 +563,7 @@ package body Ada.Directories is
C_Dir_Name : constant String := Directory & ASCII.NUL;
begin
- rmdir (C_Dir_Name);
-
- if System.OS_Lib.Is_Directory (Directory) then
+ if rmdir (C_Dir_Name) /= 0 then
raise Use_Error with
"directory tree rooted at """ &
Directory & """ could not be deleted";
diff --git a/gcc/ada/adaint.c b/gcc/ada/adaint.c
index a777467..43ec654 100644
--- a/gcc/ada/adaint.c
+++ b/gcc/ada/adaint.c
@@ -725,6 +725,23 @@ __gnat_chdir (char *path)
#endif
}
+/* Removing a directory. */
+
+int
+__gnat_rmdir (char *path)
+{
+#if defined (__MINGW32__) && ! defined (__vxworks) && ! defined (CROSS_COMPILE)
+ {
+ TCHAR wpath[GNAT_MAX_PATH_LEN];
+
+ S2WSU (wpath, path, GNAT_MAX_PATH_LEN);
+ return _trmdir (wpath);
+ }
+#else
+ return rmdir (path);
+#endif
+}
+
FILE *
__gnat_fopen (char *path, char *mode, int encoding ATTRIBUTE_UNUSED)
{
diff --git a/gcc/ada/adaint.h b/gcc/ada/adaint.h
index 134cca3..5ed4d76 100644
--- a/gcc/ada/adaint.h
+++ b/gcc/ada/adaint.h
@@ -73,6 +73,7 @@ extern int __gnat_stat (char *,
extern int __gnat_unlink (char *);
extern int __gnat_rename (char *, char *);
extern int __gnat_chdir (char *);
+extern int __gnat_rmdir (char *);
extern FILE *__gnat_fopen (char *, char *, int);
extern FILE *__gnat_freopen (char *, char *, FILE *,
diff --git a/gcc/ada/g-dirope.adb b/gcc/ada/g-dirope.adb
index 33086ed..c7670ef 100644
--- a/gcc/ada/g-dirope.adb
+++ b/gcc/ada/g-dirope.adb
@@ -739,9 +739,7 @@ package body GNAT.Directory_Operations is
-- Remove the directory only if it is empty
if not Recursive then
- rmdir (C_Dir_Name);
-
- if GNAT.OS_Lib.Is_Directory (Dir_Name) then
+ if rmdir (C_Dir_Name) /= 0 then
raise Directory_Error;
end if;
@@ -764,7 +762,6 @@ package body GNAT.Directory_Operations is
Str (1 .. Last) /= ".."
then
Remove_Dir (Str (1 .. Last), True);
- Remove_Dir (Str (1 .. Last));
end if;
else
diff --git a/gcc/ada/s-crtl.ads b/gcc/ada/s-crtl.ads
index 4c76ccf..aa4a8b5 100644
--- a/gcc/ada/s-crtl.ads
+++ b/gcc/ada/s-crtl.ads
@@ -164,8 +164,8 @@ package System.CRTL is
procedure rewind (stream : FILEs);
pragma Import (C, rewind, "rewind");
- procedure rmdir (dir_name : String);
- pragma Import (C, rmdir, "rmdir");
+ function rmdir (dir_name : String) return int;
+ pragma Import (C, rmdir, "__gnat_rmdir");
function chdir (dir_name : String) return int;
pragma Import (C, chdir, "__gnat_chdir");