The routines to modify the file attributes (rwx) are now implemented on VxWorks 6 (kernel and RTP) using the underlying chmod VxWorks routine.
Tested on x86_64-pc-linux-gnu, committed on trunk 2011-08-05 Jose Ruiz <r...@adacore.com> * adaint.c (__gnat_set_writable, __gnat_set_readable, __gnat_set_executable, __gnat_set_non_writable, __gnat_set_non_readable, __gnat_copy_attribs): On VxWorks 6.x and later, the required chmod routine is available, so we use the default implementation of these functions. * s-os_lib.ads (Copy_File, Copy_Time_Stamps): Document that there is support for copying attributes on VxWorks 6.
Index: adaint.c =================================================================== --- adaint.c (revision 177390) +++ adaint.c (working copy) @@ -56,6 +56,10 @@ #include <vxCpuLib.h> #endif /* _WRS_CONFIG_SMP */ +/* We need to know the VxWorks version because some file operations + (such as chmod) are only available on VxWorks 6. */ +#include "version.h" + #endif /* VxWorks */ #if (defined (__mips) && defined (__sgi)) || defined (__APPLE__) @@ -84,6 +88,17 @@ #include <unixio.h> #endif +#ifdef __vxworks +/* S_IREAD and S_IWRITE are not defined in VxWorks */ +#ifndef S_IREAD +#define S_IREAD (S_IRUSR | S_IRGRP | S_IROTH) +#endif + +#ifndef S_IWRITE +#define S_IWRITE (S_IWUSR) +#endif +#endif + /* We don't have libiberty, so use malloc. */ #define xmalloc(S) malloc (S) #define xrealloc(V,S) realloc (V,S) @@ -2191,7 +2206,8 @@ SetFileAttributes (wname, GetFileAttributes (wname) & ~FILE_ATTRIBUTE_READONLY); -#elif ! defined (__vxworks) && ! defined(__nucleus__) +#elif ! (defined (__vxworks) && _WRS_VXWORKS_MAJOR < 6) && \ + ! defined(__nucleus__) GNAT_STRUCT_STAT statbuf; if (GNAT_STAT (name, &statbuf) == 0) @@ -2213,7 +2229,8 @@ if (__gnat_can_use_acl (wname)) __gnat_set_OWNER_ACL (wname, GRANT_ACCESS, FILE_GENERIC_EXECUTE); -#elif ! defined (__vxworks) && ! defined(__nucleus__) +#elif ! (defined (__vxworks) && _WRS_VXWORKS_MAJOR < 6) && \ + ! defined(__nucleus__) GNAT_STRUCT_STAT statbuf; if (GNAT_STAT (name, &statbuf) == 0) @@ -2240,7 +2257,8 @@ SetFileAttributes (wname, GetFileAttributes (wname) | FILE_ATTRIBUTE_READONLY); -#elif ! defined (__vxworks) && ! defined(__nucleus__) +#elif ! (defined (__vxworks) && _WRS_VXWORKS_MAJOR < 6) && \ + ! defined(__nucleus__) GNAT_STRUCT_STAT statbuf; if (GNAT_STAT (name, &statbuf) == 0) @@ -2262,7 +2280,8 @@ if (__gnat_can_use_acl (wname)) __gnat_set_OWNER_ACL (wname, GRANT_ACCESS, FILE_GENERIC_READ); -#elif ! defined (__vxworks) && ! defined(__nucleus__) +#elif ! (defined (__vxworks) && _WRS_VXWORKS_MAJOR < 6) && \ + ! defined(__nucleus__) GNAT_STRUCT_STAT statbuf; if (GNAT_STAT (name, &statbuf) == 0) @@ -2283,7 +2302,8 @@ if (__gnat_can_use_acl (wname)) __gnat_set_OWNER_ACL (wname, DENY_ACCESS, FILE_GENERIC_READ); -#elif ! defined (__vxworks) && ! defined(__nucleus__) +#elif ! (defined (__vxworks) && _WRS_VXWORKS_MAJOR < 6) && \ + ! defined(__nucleus__) GNAT_STRUCT_STAT statbuf; if (GNAT_STAT (name, &statbuf) == 0) @@ -3555,7 +3575,8 @@ int __gnat_copy_attribs (char *from, char *to, int mode) { -#if defined (VMS) || defined (__vxworks) || defined (__nucleus__) +#if defined (VMS) || (defined (__vxworks) && _WRS_VXWORKS_MAJOR < 6) || \ + defined (__nucleus__) return -1; #elif defined (_WIN32) && !defined (RTX) Index: s-os_lib.ads =================================================================== --- s-os_lib.ads (revision 177274) +++ s-os_lib.ads (working copy) @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1995-2010, Free Software Foundation, Inc. -- +-- Copyright (C) 1995-2011, Free Software Foundation, Inc. -- -- -- -- 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- -- @@ -343,7 +343,7 @@ -- effect of "cp -p" on Unix systems, and None corresponds to the typical -- effect of "cp" on Unix systems. - -- Note: Time_Stamps and Full are not supported on VMS and VxWorks + -- Note: Time_Stamps and Full are not supported on VMS and VxWorks 5 procedure Copy_File (Name : String; @@ -371,7 +371,7 @@ -- furthermore Dest must be writable. Success will be set to True if the -- operation was successful and False otherwise. -- - -- Note: this procedure is not supported on VMS and VxWorks. On these + -- Note: this procedure is not supported on VMS and VxWorks 5. On these -- platforms, Success is always set to False. function Read