Cygwin: access: Fix X_OK behaviour for backup operators and admins
[newlib-cygwin.git] / newlib / libc / sys / rdos / open.c
blobf84098857d278647aa322d8b514f5a53695ffd07
1 /*#######################################################################
2 # RDOS operating system
3 # Copyright (C) 1988-2006, Leif Ekblad
5 # This library is free software; you can redistribute it and/or modify
6 # it under the terms of the GNU Lesser General Public License as published
7 # by the Free Software Foundation; either version 2.1 of the License, or
8 # (at your option) any later version.
10 # This library is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 # GNU Lesser General Public License for more details.
15 # You should have received a copy of the GNU Lesser General Public
16 # License along with this library; if not, write to the Free Software
17 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 # The author of this program may be contacted at leif@rdos.net
21 # open.c
22 # open function implementation
24 ##########################################################################*/
26 #include "config.h"
27 #include <_ansi.h>
28 #include <_syslist.h>
29 #include <fcntl.h>
30 #include <errno.h>
31 #include "rdos.h"
32 #include <stdarg.h>
34 int open(const char *file, int flags, ...)
36 int handle;
37 int pos;
39 if (flags & O_CREAT)
40 handle = RdosCreateFile(file, flags);
41 else
42 handle = RdosOpenFile(file, flags);
44 if (handle >= 0)
46 if (flags & O_APPEND)
48 pos = RdosGetFileSize(handle);
49 RdosSetFilePos(handle, pos);
52 if (flags & O_TRUNC)
53 RdosSetFileSize(handle, 0);
55 return handle;
57 else
58 return -1;