O_RSYNC and O_DSYNC

Joel Sherrill joel.sherrill@oarcorp.com
Mon Nov 24 22:32:00 GMT 2014


On 11/24/2014 5:59 AM, Corinna Vinschen wrote:
> Hi Joel,
>
> On Nov 23 08:37, Joel Sherrill wrote:
>> Hi
>>
>> Looking through old RTEMS PRs, someone reported these
>> are missing in newlib. If no target has needed them
>> should we add them for completion?
>>
>> If so, Linux has them wrapped like this:
>>
>> #if __USE_POSIX1999309 || defined __USE_UNIX98
>>   #define O_DSYNC XXX
>>   #if defined(__O_RSYNC)
>>     #define O_RSYNC __ORSYNC
>> #else
>>     #define O_RSYNC XXX
>> #endif
>> #endif
>>
>> How/if should we guard the definitions of O_RSYNC/O_DSYNC?
>> Open Group just cites them as C Library extensions. Linux is
>> marking is as 1999. Does that correspond to newlib's
>> __XSI_VISIBLE >= 600?
> Hmm, good question.  What about __POSIX_VISIBLE >= 199309?
>
>> Should I just pick the next logical values in sys/_default_fcntl.h
>> around line 25 and add these around 45?
> Have a look at lines 48-50.  These are already defined for ages on
> Cygwin (no idea, though, who thought _WIN32 would ever be useful).
>
> Cygwin also defines additional values in its own fcntl.h, and you never
> know if other targest define their own values, too.  It would be nice
> not to introduce clashing values in the default fcntl header.
>
> Here's what Cygwin defines in /usr/include/fcntl.h:
>
>   /* sys/_default_fcntl.h defines values up to 0x40000 (O_NOINHERIT). */
>   #define _FDIRECT        0x80000
>   #define _FNOFOLLOW      0x100000
>   #define _FDIRECTORY     0x200000
>   #define _FEXECSRCH      0x400000
>
>   #define O_DIRECT        _FDIRECT
>   #define O_NOFOLLOW      _FNOFOLLOW
>   #define O_DSYNC         _FSYNC
>   #define O_RSYNC         _FSYNC
>   #define O_DIRECTORY     _FDIRECTORY
>   #define O_EXEC          _FEXECSRCH
>   #define O_SEARCH        _FEXECSRCH
>
> As you can see, O_DSYNC and O_RSYNC are == O_SYNC == _FSYNC.
>
> Given the potential implementation differences between targets and given
> their state as optional in SUSv4, shouldn't the definitions stay outside
> of sys/_default_fcntl.h?
I agree they would have to be guarded by OS but for the purposes
of RTEMS, I think I would be happy to do what Cygwin has done.
But unless we want to split out a target specific fcntl() support file
and move the existing Cygwin support, I am prone to just add
RTEMS support like that for Cygwin.

Any opposition to the addition of an "if rtems" section after the
Cygwin one?

And adding a comment above the base defines that they need to stay
within a sixteen bit integer? That slipped my mind so I think a comment
will help the next person.
> Also, for 16 bit targets the O_DSYNC and O_RSYNC values, as well as any
> other value, should override values from lines 10 to 25 not used in the
> open call (_FMARK, _FDEFER, etc), otherwise we're out of 16 bit flag values.
>
>
> Corinna
>

-- 
Joel Sherrill, Ph.D.             Director of Research & Development
joel.sherrill@OARcorp.com        On-Line Applications Research
Ask me about RTEMS: a free RTOS  Huntsville AL 35805
Support Available                (256) 722-9985



More information about the Newlib mailing list