diff options
author | charlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-04-16 12:24:19 +0000 |
---|---|---|
committer | charlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-04-16 12:24:19 +0000 |
commit | 437991c26e282a913f80ad42b75b7256fabaa985 (patch) | |
tree | 77bfbb53beec393fc559fe7c0deb44d5bedc9509 | |
parent | 105907b4e65497fd891ac529c8fc880610f71a40 (diff) | |
download | gcc-437991c26e282a913f80ad42b75b7256fabaa985.tar.gz |
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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@146176 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/ada/ChangeLog | 11 | ||||
-rw-r--r-- | gcc/ada/a-direct.adb | 10 | ||||
-rw-r--r-- | gcc/ada/adaint.c | 17 | ||||
-rw-r--r-- | gcc/ada/adaint.h | 1 | ||||
-rw-r--r-- | gcc/ada/g-dirope.adb | 5 | ||||
-rw-r--r-- | gcc/ada/s-crtl.ads | 4 |
6 files changed, 35 insertions, 13 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 12b55c681b6..aba44e835d0 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 07f5836ff03..db9ef9f7c51 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 a777467e27d..43ec6543ea5 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 134cca30302..5ed4d76a91b 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 33086ed1766..c7670ef558b 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 4c76ccfd611..aa4a8b57086 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"); |