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
22 # implementation of various structures and helpers
24 ##########################################################################*/
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
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
63 ##########################################################################*/
64 int __rdos_thread_once (int *handle
, void (*func
) (void))
66 if (handle
== 0 || func
== 0)
69 RdosEnterSection(once_section
);
74 RdosLeaveSection(once_section
);
78 /*##########################################################################
80 # Name : __rdos_thread_mutex_init
82 # Purpose....: Emulate GCC pthread_thread_mutex_init
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
104 ##########################################################################*/
105 int __rdos_thread_mutex_lock (int handle
)
107 RdosEnterSection(handle
);
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
122 ##########################################################################*/
123 int __rdos_thread_mutex_trylock (int handle
)
125 RdosEnterSection(handle
);
129 /*##########################################################################
131 # Name : __rdos_thread_mutex_unlock
133 # Purpose....: Emulate GCC pthread_thread_mutex_unlock
135 # In params..: handle
139 ##########################################################################*/
140 int __rdos_thread_mutex_unlock (int handle
)
142 RdosLeaveSection(handle
);
146 /*##########################################################################
150 # Purpose....: Init RDOS specific data
152 # In params..: reent structure
156 ##########################################################################*/
157 void __init_rdos(struct _reent
*reent
)
159 once_section
= RdosCreateSection();
160 _REENT_INIT_PTR(reent
);