summaryrefslogtreecommitdiffstats
path: root/cpukit/libcsupport
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>2004-03-05 17:58:51 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>2004-03-05 17:58:51 +0000
commitb2b143f402b30c7bbe4ee98c58221b0cc78a1e9e (patch)
tree07d852d08ed4fe4c745ada0c7bbca69eaae85a58 /cpukit/libcsupport
parent2004-03-05 Joel Sherrill <joel@OARcorp.com> (diff)
downloadrtems-b2b143f402b30c7bbe4ee98c58221b0cc78a1e9e.tar.bz2
2004-03-05 Joel Sherrill <joel@OARcorp.com>
* libblock/src/bdbuf.c, libblock/src/ramdisk.c, libcsupport/src/newlibc.c, libcsupport/src/sync.c, libmisc/cpuuse/cpuuse.c, libmisc/monitor/mon-symbols.c, libmisc/shell/cmds.c, libmisc/shell/shell.c, libnetworking/kern/kern_sysctl.c, libnetworking/lib/ftpfs.c, libnetworking/lib/tftpDriver.c, libnetworking/libc/gethostbydns.c, libnetworking/libc/gethostbyht.c, libnetworking/libc/gethostnamadr.c, libnetworking/libc/getnetbyht.c, libnetworking/libc/getnetnamadr.c, libnetworking/libc/inet_addr.c, libnetworking/libc/linkaddr.c, libnetworking/libc/map_v4v6.c, libnetworking/libc/ns_print.c, libnetworking/libc/ns_ttl.c, libnetworking/libc/nsap_addr.c, libnetworking/libc/rcmd.c, libnetworking/libc/res_debug.c, libnetworking/libc/res_mkupdate.c, libnetworking/libc/res_query.c, libnetworking/libc/res_send.c, libnetworking/libc/res_update.c, libnetworking/net/radix.c, libnetworking/rtems/mkrootfs.c, librpc/src/rpc/clnt_perror.c, librpc/src/rpc/rtems_rpc.c, librpc/src/rpc/svc.c, sapi/include/confdefs.h, score/macros/rtems/score/chain.inl, score/src/objectidtoname.c:
Diffstat (limited to 'cpukit/libcsupport')
-rw-r--r--cpukit/libcsupport/src/newlibc.c43
-rw-r--r--cpukit/libcsupport/src/sync.c24
2 files changed, 48 insertions, 19 deletions
diff --git a/cpukit/libcsupport/src/newlibc.c b/cpukit/libcsupport/src/newlibc.c
index dcd7dae3b2..b9ba3f8355 100644
--- a/cpukit/libcsupport/src/newlibc.c
+++ b/cpukit/libcsupport/src/newlibc.c
@@ -22,6 +22,12 @@
#if defined(RTEMS_NEWLIB)
#include <rtems/libcsupport.h>
+
+/* Since we compile with strict ANSI we need to undef it to get
+ * prototypes for extensions
+ */
+#undef __STRICT_ANSI__
+
#include <stdlib.h> /* for free() */
#include <string.h> /* for memset() */
@@ -126,26 +132,26 @@ rtems_boolean libc_create_hook(
{
#ifdef __GNUC__
- /* GCC extension: structure constants */
- _REENT_INIT_PTR((ptr));
+ /* GCC extension: structure constants */
+ _REENT_INIT_PTR((ptr));
#else
- /*
- * WARNING: THIS IS VERY DEPENDENT ON NEWLIB!!!
- * Last visual check was against newlib 1.8.2 but last known
- * use was against 1.7.0. This is basically an exansion of
- * REENT_INIT() in <sys/reent.h>.
- */
- memset(ptr, 0, sizeof(*ptr));
- ptr->_stdin = &ptr->__sf[0];
- ptr->_stdout = &ptr->__sf[1];
- ptr->_stderr = &ptr->__sf[2];
- ptr->_current_locale = "C";
- ptr->_new._reent._rand_next = 1;
+ /*
+ * WARNING: THIS IS VERY DEPENDENT ON NEWLIB!!!
+ * Last visual check was against newlib 1.8.2 but last known
+ * use was against 1.7.0. This is basically an exansion of
+ * REENT_INIT() in <sys/reent.h>.
+ */
+ memset(ptr, 0, sizeof(*ptr));
+ ptr->_stdin = &ptr->__sf[0];
+ ptr->_stdout = &ptr->__sf[1];
+ ptr->_stderr = &ptr->__sf[2];
+ ptr->_current_locale = "C";
+ ptr->_new._reent._rand_next = 1;
#endif
- creating_task->libc_reent = ptr;
- return TRUE;
- }
+ creating_task->libc_reent = ptr;
+ return TRUE;
+ }
else
return FALSE;
@@ -235,7 +241,6 @@ rtems_extension libc_delete_hook(
ptr = deleted_task->libc_reent;
}
- /* if (ptr) */
if (ptr && ptr != &libc_global_reent) {
/*
_wrapup_reent(ptr);
@@ -248,7 +253,7 @@ rtems_extension libc_delete_hook(
#if REENT_MALLOCED
free(ptr);
#else
- _Workspace_Free(ptr);
+ _Workspace_Free(ptr);
#endif
}
diff --git a/cpukit/libcsupport/src/sync.c b/cpukit/libcsupport/src/sync.c
index 4d317ce0b1..8d1f52e725 100644
--- a/cpukit/libcsupport/src/sync.c
+++ b/cpukit/libcsupport/src/sync.c
@@ -21,6 +21,13 @@
#include "config.h"
#endif
+/* Since we compile with strict ANSI we need to undef it to get
+ * prototypes for extensions
+ */
+#undef __STRICT_ANSI__
+int fdatasync(int); /* still not always prototyped */
+
+
#include <unistd.h>
#include <stdio.h>
@@ -35,6 +42,7 @@
/* XXX check standards -- Linux version appears to be void */
void _fwalk(struct _reent *, void *);
+
static void sync_wrapper(FILE *f)
{
int fn = fileno(f);
@@ -60,6 +68,22 @@ static void sync_per_thread(Thread_Control *t)
int sync(void)
{
+ extern struct _reent libc_global_reent;
+
+ /*
+ * Walk the one used initially by RTEMS.
+ */
+ _fwalk(&libc_global_reent, sync_wrapper);
+
+ /*
+ * XXX Do we walk the one used globally by newlib?
+ * XXX Do we need the RTEMS global one?
+ */
+
+ /*
+ * Now walk all the per-thread reentrancy structures.
+ */
rtems_iterate_over_all_threads(sync_per_thread);
+
return 0;
}