Cygwin: access: Fix X_OK behaviour for backup operators and admins
[newlib-cygwin.git] / newlib / libc / sys / rdos / rdoshelp.c
blob20d25353d094bfd499ff41e95a938dec703303c1
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 # rdoshelp.c
22 # implementation of various structures and helpers
24 ##########################################################################*/
26 #include <reent.h>
27 #include <rdos.h>
28 #include <stdio.h>
30 char *__env[1] = { 0 };
31 char **environ = __env;
33 static int once_section;
34 static int key_section;
36 /*##########################################################################
38 # Name : _get_impure_data_size
40 # Purpose....: Get size of _reent structure
42 # In params..: *
43 # Out params.: *
44 # Returns....: size
46 ##########################################################################*/
47 int get_impure_data_size()
49 return sizeof(struct _reent);
52 /*##########################################################################
54 # Name : __rdos_thread_once
56 # Purpose....: Emulate GCC pthread_once
58 # In params..: Handle initially 0
59 # : function to initially call
60 # Out params.: *
61 # Returns....: result
63 ##########################################################################*/
64 int __rdos_thread_once (int *handle, void (*func) (void))
66 if (handle == 0 || func == 0)
67 return 0;
69 RdosEnterSection(once_section);
70 if (*handle == 0)
71 (*func)();
72 else
73 *handle = 1;
74 RdosLeaveSection(once_section);
75 return 0;
78 /*##########################################################################
80 # Name : __rdos_thread_mutex_init
82 # Purpose....: Emulate GCC pthread_thread_mutex_init
84 # In params..: *
85 # Out params.: *
86 # Returns....: handle
88 ##########################################################################*/
89 int __rdos_thread_mutex_init (void)
91 return RdosCreateSection();
94 /*##########################################################################
96 # Name : __rdos_thread_mutex_lock
98 # Purpose....: Emulate GCC pthread_thread_mutex_lock
100 # In params..: handle
101 # Out params.: *
102 # Returns....: *
104 ##########################################################################*/
105 int __rdos_thread_mutex_lock (int handle)
107 RdosEnterSection(handle);
108 return 0;
111 /*##########################################################################
113 # Name : __rdos_thread_mutex_trylock
115 # Purpose....: Emulate GCC pthread_thread_mutex_trylock
116 # Try is not yet implemented, and lock is used.
118 # In params..: handle
119 # Out params.: *
120 # Returns....: *
122 ##########################################################################*/
123 int __rdos_thread_mutex_trylock (int handle)
125 RdosEnterSection(handle);
126 return 0;
129 /*##########################################################################
131 # Name : __rdos_thread_mutex_unlock
133 # Purpose....: Emulate GCC pthread_thread_mutex_unlock
135 # In params..: handle
136 # Out params.: *
137 # Returns....: *
139 ##########################################################################*/
140 int __rdos_thread_mutex_unlock (int handle)
142 RdosLeaveSection(handle);
143 return 0;
146 /*##########################################################################
148 # Name : __init_rdos
150 # Purpose....: Init RDOS specific data
152 # In params..: reent structure
153 # Out params.: *
154 # Returns....: *
156 ##########################################################################*/
157 void __init_rdos(struct _reent *reent)
159 once_section = RdosCreateSection();
160 _REENT_INIT_PTR(reent);
161 __sinit(reent);