summaryrefslogtreecommitdiff
path: root/gcc/ada/g-os_lib.adb
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/ada/g-os_lib.adb')
-rw-r--r--gcc/ada/g-os_lib.adb118
1 files changed, 50 insertions, 68 deletions
diff --git a/gcc/ada/g-os_lib.adb b/gcc/ada/g-os_lib.adb
index 825c05c5786..80db696b517 100644
--- a/gcc/ada/g-os_lib.adb
+++ b/gcc/ada/g-os_lib.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1995-2005 Ada Core Technologies, Inc. --
+-- Copyright (C) 1995-2005, AdaCore --
-- --
-- GNAT is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- --
@@ -98,13 +98,14 @@ package body GNAT.OS_Lib is
Blocking : Boolean);
-- Internal routine to implement the two Spawn (blocking/non blocking)
-- routines. If Blocking is set to True then the spawn is blocking
- -- otherwise it is non blocking. In this latter case the Pid contains
- -- the process id number. The first three parameters are as in Spawn.
- -- Note that Spawn_Internal normalizes the argument list before calling
- -- the low level system spawn routines (see Normalize_Arguments). Note
- -- that Normalize_Arguments is designed to do nothing if it is called
- -- more than once, so calling Normalize_Arguments before calling one
- -- of the spawn routines is fine.
+ -- otherwise it is non blocking. In this latter case the Pid contains the
+ -- process id number. The first three parameters are as in Spawn. Note that
+ -- Spawn_Internal normalizes the argument list before calling the low level
+ -- system spawn routines (see Normalize_Arguments).
+ --
+ -- Note: Normalize_Arguments is designed to do nothing if it is called more
+ -- than once, so calling Normalize_Arguments before calling one of the
+ -- spawn routines is fine.
function To_Path_String_Access
(Path_Addr : Address;
@@ -250,10 +251,8 @@ package body GNAT.OS_Lib is
---------------------
function C_String_Length (S : Address) return Integer is
-
function Strlen (S : Address) return Integer;
pragma Import (C, Strlen, "strlen");
-
begin
if S = Null_Address then
return 0;
@@ -333,6 +332,8 @@ package body GNAT.OS_Lib is
return C = Directory_Separator or else C = '/';
end Is_Dirsep;
+ -- Start of processing for Build_Path
+
begin
-- Find base file name
@@ -504,8 +505,7 @@ package body GNAT.OS_Lib is
Dest : constant String := Build_Path (Pathname, Name);
begin
- -- If the target file exists, we have an error
- -- otherwise do the copy.
+ -- If target file exists, we have an error, else do copy
if Is_Regular_File (Dest) then
raise Copy_Error;
@@ -520,7 +520,7 @@ package body GNAT.OS_Lib is
Copy_To (Pathname);
end if;
- -- Overwrite case, destination file may or may not exist
+ -- Overwrite case (destination file may or may not exist)
when Overwrite =>
if Is_Directory (Pathname) then
@@ -529,7 +529,7 @@ package body GNAT.OS_Lib is
Copy_To (Pathname);
end if;
- -- Appending case, destination file may or may not exist
+ -- Append case (destination file may or may not exist)
when Append =>
@@ -537,8 +537,8 @@ package body GNAT.OS_Lib is
if Is_Regular_File (Pathname) then
- -- Append mode and destination file exists, append data
- -- at the end of Pathname.
+ -- Append mode and destination file exists, append data at the
+ -- end of Pathname.
From := Open_Read (Name, Binary);
To := Open_Read_Write (Pathname, Binary);
@@ -857,7 +857,6 @@ package body GNAT.OS_Lib is
function File_Time_Stamp (FD : File_Descriptor) return OS_Time is
function File_Time (FD : File_Descriptor) return OS_Time;
pragma Import (C, File_Time, "__gnat_file_time_fd");
-
begin
return File_Time (FD);
end File_Time_Stamp;
@@ -865,14 +864,12 @@ package body GNAT.OS_Lib is
function File_Time_Stamp (Name : C_File_Name) return OS_Time is
function File_Time (Name : Address) return OS_Time;
pragma Import (C, File_Time, "__gnat_file_time_name");
-
begin
return File_Time (Name);
end File_Time_Stamp;
function File_Time_Stamp (Name : String) return OS_Time is
F_Name : String (1 .. Name'Length + 1);
-
begin
F_Name (1 .. Name'Length) := Name;
F_Name (F_Name'Last) := ASCII.NUL;
@@ -1152,7 +1149,6 @@ package body GNAT.OS_Lib is
(Name : Address;
Length : Integer) return Integer;
pragma Import (C, Is_Absolute_Path, "__gnat_is_absolute_path");
-
begin
return Is_Absolute_Path (Name'Address, Name'Length) /= 0;
end Is_Absolute_Path;
@@ -1164,14 +1160,12 @@ package body GNAT.OS_Lib is
function Is_Directory (Name : C_File_Name) return Boolean is
function Is_Directory (Name : Address) return Integer;
pragma Import (C, Is_Directory, "__gnat_is_directory");
-
begin
return Is_Directory (Name) /= 0;
end Is_Directory;
function Is_Directory (Name : String) return Boolean is
F_Name : String (1 .. Name'Length + 1);
-
begin
F_Name (1 .. Name'Length) := Name;
F_Name (F_Name'Last) := ASCII.NUL;
@@ -1185,14 +1179,12 @@ package body GNAT.OS_Lib is
function Is_Regular_File (Name : C_File_Name) return Boolean is
function Is_Regular_File (Name : Address) return Integer;
pragma Import (C, Is_Regular_File, "__gnat_is_regular_file");
-
begin
return Is_Regular_File (Name) /= 0;
end Is_Regular_File;
function Is_Regular_File (Name : String) return Boolean is
F_Name : String (1 .. Name'Length + 1);
-
begin
F_Name (1 .. Name'Length) := Name;
F_Name (F_Name'Last) := ASCII.NUL;
@@ -1206,14 +1198,12 @@ package body GNAT.OS_Lib is
function Is_Readable_File (Name : C_File_Name) return Boolean is
function Is_Readable_File (Name : Address) return Integer;
pragma Import (C, Is_Readable_File, "__gnat_is_readable_file");
-
begin
return Is_Readable_File (Name) /= 0;
end Is_Readable_File;
function Is_Readable_File (Name : String) return Boolean is
F_Name : String (1 .. Name'Length + 1);
-
begin
F_Name (1 .. Name'Length) := Name;
F_Name (F_Name'Last) := ASCII.NUL;
@@ -1227,14 +1217,12 @@ package body GNAT.OS_Lib is
function Is_Writable_File (Name : C_File_Name) return Boolean is
function Is_Writable_File (Name : Address) return Integer;
pragma Import (C, Is_Writable_File, "__gnat_is_writable_file");
-
begin
return Is_Writable_File (Name) /= 0;
end Is_Writable_File;
function Is_Writable_File (Name : String) return Boolean is
F_Name : String (1 .. Name'Length + 1);
-
begin
F_Name (1 .. Name'Length) := Name;
F_Name (F_Name'Last) := ASCII.NUL;
@@ -1248,14 +1236,12 @@ package body GNAT.OS_Lib is
function Is_Symbolic_Link (Name : C_File_Name) return Boolean is
function Is_Symbolic_Link (Name : Address) return Integer;
pragma Import (C, Is_Symbolic_Link, "__gnat_is_symbolic_link");
-
begin
return Is_Symbolic_Link (Name) /= 0;
end Is_Symbolic_Link;
function Is_Symbolic_Link (Name : String) return Boolean is
F_Name : String (1 .. Name'Length + 1);
-
begin
F_Name (1 .. Name'Length) := Name;
F_Name (F_Name'Last) := ASCII.NUL;
@@ -1370,18 +1356,15 @@ package body GNAT.OS_Lib is
return Process_Id
is
Saved_Output : File_Descriptor;
- Saved_Error : File_Descriptor := Invalid_FD;
- -- We need to initialize Saved_Error to Invalid_FD to avoid
- -- a compiler warning that this variable may be used before
- -- it is initialized (which can not happen, but the compiler
- -- is not smart enough to figure this out).
- Pid : Process_Id;
+ Saved_Error : File_Descriptor := Invalid_FD; -- prevent warning
+ Pid : Process_Id;
begin
if Output_File_Descriptor = Invalid_FD then
return Invalid_Pid;
end if;
-- Set standard output and, if specified, error to the temporary file
+
Saved_Output := Dup (Standout);
Dup2 (Output_File_Descriptor, Standout);
@@ -1417,11 +1400,10 @@ package body GNAT.OS_Lib is
(Program_Name : String;
Args : Argument_List;
Output_File : String;
- Err_To_Out : Boolean := True)
- return Process_Id
+ Err_To_Out : Boolean := True) return Process_Id
is
Output_File_Descriptor : constant File_Descriptor :=
- Create_Output_Text_File (Output_File);
+ Create_Output_Text_File (Output_File);
Result : Process_Id;
begin
@@ -1531,6 +1513,8 @@ package body GNAT.OS_Lib is
end if;
end Quote_Argument;
+ -- Start of processing for Normalize_Arguments
+
begin
if Argument_Needs_Quote then
for K in Args'Range loop
@@ -1857,6 +1841,7 @@ package body GNAT.OS_Lib is
end if;
-- Add the ASCII.NUL to be able to call the C function chdir
+
Path (Pos + 1) := ASCII.NUL;
Status := Change_Dir (Path (1 .. Pos + 1));
@@ -1890,13 +1875,13 @@ package body GNAT.OS_Lib is
-- Start the conversions
- -- If this is not finished after Max_Iterations, give up and
- -- return an empty string.
+ -- If this is not finished after Max_Iterations, give up and return an
+ -- empty string.
for J in 1 .. Max_Iterations loop
- -- If we don't have an absolute pathname, prepend
- -- the directory Reference_Dir.
+ -- If we don't have an absolute pathname, prepend the directory
+ -- Reference_Dir.
if Last = 1
and then not Is_Absolute_Path (Path_Buffer (1 .. End_Path))
@@ -1946,8 +1931,8 @@ package body GNAT.OS_Lib is
end if;
end loop;
- -- Find the end of the current field: last character
- -- or the one preceding the next directory separator.
+ -- Find the end of the current field: last character or the one
+ -- preceding the next directory separator.
while Finish < End_Path
and then Path_Buffer (Finish + 1) /= Directory_Separator
@@ -2058,11 +2043,10 @@ package body GNAT.OS_Lib is
-- Too many iterations: give up
- -- This can happen when there is a circularity in the symbolic links:
- -- A is a symbolic link for B, which itself is a symbolic link, and
- -- the target of B or of another symbolic link target of B is A.
- -- In this case, we return an empty string to indicate failure to
- -- resolve.
+ -- This can happen when there is a circularity in the symbolic links: A
+ -- is a symbolic link for B, which itself is a symbolic link, and the
+ -- target of B or of another symbolic link target of B is A. In this
+ -- case, we return an empty string to indicate failure to resolve.
return "";
end Normalize_Pathname;
@@ -2126,9 +2110,9 @@ package body GNAT.OS_Lib is
----------
function Read
- (FD : File_Descriptor;
- A : System.Address;
- N : Integer) return Integer
+ (FD : File_Descriptor;
+ A : System.Address;
+ N : Integer) return Integer
is
begin
return Integer (System.CRTL.read
@@ -2279,11 +2263,7 @@ package body GNAT.OS_Lib is
Err_To_Out : Boolean := True)
is
Saved_Output : File_Descriptor;
- Saved_Error : File_Descriptor := Invalid_FD;
- -- We need to initialize Saved_Error to Invalid_FD to avoid
- -- a compiler warning that this variable may be used before
- -- it is initialized (which can not happen, but the compiler
- -- is not smart enough to figure this out).
+ Saved_Error : File_Descriptor := Invalid_FD; -- prevent compiler warning
begin
-- Set standard output and error to the temporary file
@@ -2373,15 +2353,15 @@ package body GNAT.OS_Lib is
+ Args_Length (Args);
Command_Last : Natural := 0;
Command : aliased Chars (1 .. Command_Len);
- -- Command contains all characters of the Program_Name and Args,
- -- all terminated by ASCII.NUL characters
+ -- Command contains all characters of the Program_Name and Args, all
+ -- terminated by ASCII.NUL characters
Arg_List_Len : constant Positive := Args'Length + 2;
Arg_List_Last : Natural := 0;
Arg_List : aliased array (1 .. Arg_List_Len) of Char_Ptr;
- -- List with pointers to NUL-terminated strings of the
- -- Program_Name and the Args and terminated with a null pointer.
- -- We rely on the default initialization for the last null pointer.
+ -- List with pointers to NUL-terminated strings of the Program_Name
+ -- and the Args and terminated with a null pointer. We rely on the
+ -- default initialization for the last null pointer.
procedure Add_To_Command (S : String);
-- Add S and a NUL character to Command, updating Last
@@ -2403,8 +2383,10 @@ package body GNAT.OS_Lib is
begin
Command_Last := Command_Last + S'Length;
- -- Move characters one at a time, because Command has
- -- aliased components.
+ -- Move characters one at a time, because Command has aliased
+ -- components.
+
+ -- But not volatile, so why is this necessary ???
for J in S'Range loop
Command (First + J - S'First) := S (J);
@@ -2509,9 +2491,9 @@ package body GNAT.OS_Lib is
-----------
function Write
- (FD : File_Descriptor;
- A : System.Address;
- N : Integer) return Integer
+ (FD : File_Descriptor;
+ A : System.Address;
+ N : Integer) return Integer
is
begin
return Integer (System.CRTL.write