[Ada] Fix errno for rename for the VxWorks 6 target
This fixes the wrong errno for rename when the file is not existing on a dosFs. In the end it makes Ada.Directories.Rename raising the right exception in the case we are trying to move a file in a non existing directory. 2019-09-18 Frederic Konrad <konrad@adacore.com> gcc/ada/ * adaint.c: Include dosFsLib.h and vwModNum.h for VxWorks 6. (__gnat_rename): Map S_dosFsLib_FILE_NOT_FOUND to ENOENT. From-SVN: r275846
This commit is contained in:
parent
dcbe49a6c4
commit
82fa20a211
@ -1,3 +1,8 @@
|
||||
2019-09-18 Frederic Konrad <konrad@adacore.com>
|
||||
|
||||
* adaint.c: Include dosFsLib.h and vwModNum.h for VxWorks 6.
|
||||
(__gnat_rename): Map S_dosFsLib_FILE_NOT_FOUND to ENOENT.
|
||||
|
||||
2019-09-18 Steve Baird <baird@adacore.com>
|
||||
|
||||
* freeze.adb (Freeze_Object_Declaration): Do not call
|
||||
|
@ -74,6 +74,12 @@
|
||||
(such as chmod) are only available on VxWorks 6. */
|
||||
#include "version.h"
|
||||
|
||||
/* vwModNum.h and dosFsLib.h are needed for the VxWorks 6 rename workaround.
|
||||
See below. */
|
||||
#if (_WRS_VXWORKS_MAJOR == 6)
|
||||
#include <vwModNum.h>
|
||||
#include <dosFsLib.h>
|
||||
#endif /* 6.x */
|
||||
#endif /* VxWorks */
|
||||
|
||||
#if defined (__APPLE__)
|
||||
@ -754,6 +760,20 @@ __gnat_rename (char *from, char *to)
|
||||
S2WSC (wto, to, GNAT_MAX_PATH_LEN);
|
||||
return _trename (wfrom, wto);
|
||||
}
|
||||
#elif defined (__vxworks) && (_WRS_VXWORKS_MAJOR == 6)
|
||||
{
|
||||
/* When used on a dos filesystem under VxWorks 6.9 rename will trigger a
|
||||
S_dosFsLib_FILE_NOT_FOUND errno when the file is not found. Let's map
|
||||
that to ENOENT so Ada.Directory.Rename can detect that and raise the
|
||||
Name_Error exception. */
|
||||
int ret = rename (from, to);
|
||||
|
||||
if (ret && (errno == S_dosFsLib_FILE_NOT_FOUND))
|
||||
{
|
||||
errno = ENOENT;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
#else
|
||||
return rename (from, to);
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user