http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56055



             Bug #: 56055

           Summary: Delete_File won't delete special files

    Classification: Unclassified

           Product: gcc

           Version: 4.7.2

            Status: UNCONFIRMED

          Severity: normal

          Priority: P3

         Component: ada

        AssignedTo: unassig...@gcc.gnu.org

        ReportedBy: bj...@xn--rombobjrn-67a.se





According to the Ada Reference Manual, Ada.Directories.Delete_File "deletes an

existing ordinary or special file", that is any kind of file except a

directory. Libgnat's implementation refuses to delete a socket (at least on

GNU/Linux), claiming falsely that the socket doesn't exist.



A more correct approach would be to check first that the file isn't a

directory, then call unlink, and if unlink fails then check errno to see

whether Name_Error or Use_Error should be raised. (To really do the right

thing, fetch the error string with strerror_r and include it in the exception

message.)



Looking through a-direct.adb I see that several subprograms call

Is_Regular_File, and I suspect that most of them will fail in the presence of

special files. Rename for example should probably call File_Exists instead of

Is_Regular_File and Is_Directory.

Reply via email to