with System.CRTL;
with System.Case_Util; use System.Case_Util;
-with System.OS_Constants;
with System.OS_Lib;
with System.Soft_Links;
-- Should we raise Device_Error for ENOSPC???
- if System.OS_Lib.Errno = System.OS_Constants.ENOENT then
- raise Name_Error;
- else
- raise Use_Error;
- end if;
+ declare
+ subtype Cint is Interfaces.C.int;
+
+ function Is_File_Not_Found_Error
+ (Errno_Value : Cint) return Cint;
+ -- Non-zero when the given errno value indicates a non-
+ -- existing file.
+
+ pragma Import (C, Is_File_Not_Found_Error,
+ "__gnat_is_file_not_found_error");
+ begin
+ if Is_File_Not_Found_Error (Cint (System.OS_Lib.Errno))
+ /= 0
+ then
+ raise Name_Error;
+ else
+ raise Use_Error;
+ end if;
+ end;
end if;
end if;
end if;
#ifdef __vxworks
#include "ioLib.h"
+#include "dosFsLib.h"
+#ifndef __RTP__
+# include "nfsLib.h"
+#endif
#include "selectLib.h"
#include "vxWorks.h"
#endif
+
#ifdef IN_RTS
#define POSIX
#include "tconfig.h"
#endif
#include <time.h>
+#include <errno.h>
#if defined (sun) && defined (__SVR4) && !defined (__vxworks)
/* The declaration is present in <time.h> but conditionalized
}
#endif
+
+int
+__gnat_is_file_not_found_error (int errno_val) {
+ switch (errno_val) {
+ case ENOENT:
+#ifdef __vxworks
+ /* In the case of VxWorks, we also have to take into account various
+ * filesystem-specific variants of this error.
+ */
+ case S_dosFsLib_FILE_NOT_FOUND:
+#ifndef __RTP__
+ case S_nfsLib_NFSERR_NOENT:
+#endif
+#endif
+ return 1;
+
+ default:
+ return 0;
+ }
+}