2008-05-23 Thomas Quinot <quinot@adacore.com>
authorThomas Quinot <quinot@adacore.com>
Fri, 23 May 2008 13:29:02 +0000 (15:29 +0200)
committerArnaud Charlet <charlet@gcc.gnu.org>
Fri, 23 May 2008 13:29:02 +0000 (15:29 +0200)
* s-os_lib.adb:
(copy_File): Do not open destination file if source file is unreadable.

From-SVN: r135805

gcc/ada/s-os_lib.adb

index f3e369cf853bf231392fd4be2c1a7f11605a4a75..5655b3c0d7c2b0a9810d9f379d12194f8ee896d6 100755 (executable)
@@ -452,7 +452,13 @@ package body System.OS_Lib is
 
       begin
          From := Open_Read (Name, Binary);
-         To   := Create_File (To_Name, Binary);
+
+         --  Do not clobber destination file if source file could not be opened
+
+         if From /= Invalid_FD then
+            To := Create_File (To_Name, Binary);
+         end if;
+
          Copy (From, To);
 
          --  Copy attributes
@@ -545,10 +551,14 @@ package body System.OS_Lib is
             if Is_Regular_File (Pathname) then
 
                --  Append mode and destination file exists, append data at the
-               --  end of Pathname.
+               --  end of Pathname. But if we fail to open source file, do not
+               --  touch destination file at all.
 
                From := Open_Read (Name, Binary);
-               To   := Open_Read_Write (Pathname, Binary);
+               if From /= Invalid_FD then
+                  To := Open_Read_Write (Pathname, Binary);
+               end if;
+
                Lseek (To, 0, Seek_End);
 
                Copy (From, To);