summaryrefslogtreecommitdiffstats
path: root/newlib/libc/sys/rdos/rdoshelp.c
diff options
context:
space:
mode:
authorJeff Johnston <jjohnstn@redhat.com>2006-01-31 19:33:56 +0000
committerJeff Johnston <jjohnstn@redhat.com>2006-01-31 19:33:56 +0000
commitd968b3c86fc59507e3604ebc704aeb111f301a12 (patch)
treeb4a0f936f8810a8cf695d4b42f7c733041bc9d85 /newlib/libc/sys/rdos/rdoshelp.c
parent63a149a18fd9437576cdb81520a2246b14705e57 (diff)
downloadcygnal-d968b3c86fc59507e3604ebc704aeb111f301a12.tar.gz
cygnal-d968b3c86fc59507e3604ebc704aeb111f301a12.tar.bz2
cygnal-d968b3c86fc59507e3604ebc704aeb111f301a12.zip
2006-01-31 Leif Ekblad <leif@rdos.net>
* configure.host: RDOS support added * libc/include/sys/config.h: Ditto. * libc/sys/rdos/Makefile.am, libc/sys/rdos/Makefile.in: New files. * libc/sys/rdos/aclocal.m4, libc/sys/rdos/chown.c: Ditto. * libc/sys/rdos/close.c, libc/sys/rdos/config.h: Ditto. * libc/sys/rdos/configure, libc/sys/rdos/configure.in: Ditto. * libc/sys/rdos/crt0.S, libc/sys/rdos/execve.c: Ditto. * libc/sys/rdos/fork.c, libc/sys/rdos/fstat.c: Ditto. * libc/sys/rdos/getenv.c, libc/sys/rdos/getpid.c: Ditto. * libc/sys/rdos/gettod.c, libc/sys/rdos/isatty.c: Ditto. * libc/sys/rdos/kill.c, libc/sys/rdos/link.c: Ditto. * libc/sys/rdos/lseek.c, libc/sys/rdos/open.c: Ditto. * libc/sys/rdos/rdos.S, libc/sys/rdos/rdos.h: Ditto. * libc/sys/rdos/rdoshelp.c, libc/sys/rdos/read.c: Ditto. * libc/sys/rdos/readlink.c, libc/sys/rdos/sbrk.c: Ditto. * libc/sys/rdos/stat.c, libc/sys/rdos/symlink.c: Ditto. * libc/sys/rdos/times.c, libc/sys/rdos/unlink.c: Ditto. * libc/sys/rdos/user.def, libc/sys/rdos/wait.c: Ditto. * libc/sys/rdos/write.c: Ditto.
Diffstat (limited to 'newlib/libc/sys/rdos/rdoshelp.c')
-rw-r--r--newlib/libc/sys/rdos/rdoshelp.c162
1 files changed, 162 insertions, 0 deletions
diff --git a/newlib/libc/sys/rdos/rdoshelp.c b/newlib/libc/sys/rdos/rdoshelp.c
new file mode 100644
index 000000000..20d25353d
--- /dev/null
+++ b/newlib/libc/sys/rdos/rdoshelp.c
@@ -0,0 +1,162 @@
+/*#######################################################################
+# RDOS operating system
+# Copyright (C) 1988-2006, Leif Ekblad
+#
+# This library is free software; you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published
+# by the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# The author of this program may be contacted at leif@rdos.net
+#
+# rdoshelp.c
+# implementation of various structures and helpers
+#
+##########################################################################*/
+
+#include <reent.h>
+#include <rdos.h>
+#include <stdio.h>
+
+char *__env[1] = { 0 };
+char **environ = __env;
+
+static int once_section;
+static int key_section;
+
+/*##########################################################################
+#
+# Name : _get_impure_data_size
+#
+# Purpose....: Get size of _reent structure
+#
+# In params..: *
+# Out params.: *
+# Returns....: size
+#
+##########################################################################*/
+int get_impure_data_size()
+{
+ return sizeof(struct _reent);
+}
+
+/*##########################################################################
+#
+# Name : __rdos_thread_once
+#
+# Purpose....: Emulate GCC pthread_once
+#
+# In params..: Handle initially 0
+# : function to initially call
+# Out params.: *
+# Returns....: result
+#
+##########################################################################*/
+int __rdos_thread_once (int *handle, void (*func) (void))
+{
+ if (handle == 0 || func == 0)
+ return 0;
+
+ RdosEnterSection(once_section);
+ if (*handle == 0)
+ (*func)();
+ else
+ *handle = 1;
+ RdosLeaveSection(once_section);
+ return 0;
+}
+
+/*##########################################################################
+#
+# Name : __rdos_thread_mutex_init
+#
+# Purpose....: Emulate GCC pthread_thread_mutex_init
+#
+# In params..: *
+# Out params.: *
+# Returns....: handle
+#
+##########################################################################*/
+int __rdos_thread_mutex_init (void)
+{
+ return RdosCreateSection();
+}
+
+/*##########################################################################
+#
+# Name : __rdos_thread_mutex_lock
+#
+# Purpose....: Emulate GCC pthread_thread_mutex_lock
+#
+# In params..: handle
+# Out params.: *
+# Returns....: *
+#
+##########################################################################*/
+int __rdos_thread_mutex_lock (int handle)
+{
+ RdosEnterSection(handle);
+ return 0;
+}
+
+/*##########################################################################
+#
+# Name : __rdos_thread_mutex_trylock
+#
+# Purpose....: Emulate GCC pthread_thread_mutex_trylock
+# Try is not yet implemented, and lock is used.
+#
+# In params..: handle
+# Out params.: *
+# Returns....: *
+#
+##########################################################################*/
+int __rdos_thread_mutex_trylock (int handle)
+{
+ RdosEnterSection(handle);
+ return 0;
+}
+
+/*##########################################################################
+#
+# Name : __rdos_thread_mutex_unlock
+#
+# Purpose....: Emulate GCC pthread_thread_mutex_unlock
+#
+# In params..: handle
+# Out params.: *
+# Returns....: *
+#
+##########################################################################*/
+int __rdos_thread_mutex_unlock (int handle)
+{
+ RdosLeaveSection(handle);
+ return 0;
+}
+
+/*##########################################################################
+#
+# Name : __init_rdos
+#
+# Purpose....: Init RDOS specific data
+#
+# In params..: reent structure
+# Out params.: *
+# Returns....: *
+#
+##########################################################################*/
+void __init_rdos(struct _reent *reent)
+{
+ once_section = RdosCreateSection();
+ _REENT_INIT_PTR(reent);
+ __sinit(reent);
+}