This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Ada] Improve error handling in Ada.Directories search system


This change ensures that when iterating on directory entries using
Ada.Directories, and some parent of the searched directory is not accessable,
Use_Error is appropriately raised (instead of just yielding no entries).

The following program must raise USE_ERROR when run in a directory
whose parent is not accessable by the running user:

with Ada.Directories; use Ada.Directories;
with Ada.Text_IO; use Ada.Text_IO;
procedure LSD is
   S : Search_Type;
   E : Directory_Entry_Type;
begin
   Start_Search (S, ".", "*");
   while More_Entries (S) loop
      Get_Next_Entry (S, E);
      Put_Line (Kind (E)'Img & ": " & Simple_Name (E));
   end loop;
end LSD;

Tested on x86_64-pc-linux-gnu, committed on trunk

2014-02-24  Thomas Quinot  <quinot@adacore.com>

	* adaint.h (struct file_attributes): New component "error"
	(__gnat_error_attributes): Accessor for the above.
	* adaint.c (__gnat_error_attributes): New subprogram
	(__gnat_stat): Fix returned value (expect errno value)
	(__gnat_stat_to_attr): Add management of error component (set to
	stat errno value, except for missing files where it is set to 0,
	and exists is set to 0).
	* osint.ads (File_Attributes_Size): Update per change above,
	also clarify documentation.
	* s-filatt.ads: New file, binding to file attributes related
	functions.
	* Makefile.rtl (s-filatt): New runtime unit.
	* s-crtl.ads (strlen): Expose binding to GCC builtin (falls back
	to library function if not available on target).
	* s-os_lib.ads, s-os_lib.adb (Errno_Message): New subprogram.
	* s-oscons-tmplt.c (SIZEOF_struct_file_attributes,
	SIZEOF_struct_dirent_alloc): New constants.
	* Make-generated.in (s-oscons.ads): Now requires adaint.h.
	* a-direct.adb (Fetch_Next_Entry): Fix incorrect buffer sizes.
	Perform appropriate error checking if stat fails (do not just
	ignore existing files if stat fails)
	* gcc-interface/Make-lang.in (GNAT_ADA_OBJS, GNATBIND_OBJS): Update
	dependencies.

Attachment: difs
Description: Text document


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]