From 07e9194eecf9d0db9856bc7405f5030d83eccadc Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Fri, 5 Mar 2004 18:24:24 +0000 Subject: 2004-03-05 Joel Sherrill * libcsupport/src/newlibc.c, libcsupport/src/sync.c: Eliminate warnings. Explicitly defeat __STRICT_ANSI__ since both legitimately use routines beyond ANSI. --- cpukit/ChangeLog | 6 ++++++ cpukit/libcsupport/src/newlibc.c | 43 ++++++++++++++++++++++------------------ cpukit/libcsupport/src/sync.c | 24 ++++++++++++++++++++++ 3 files changed, 54 insertions(+), 19 deletions(-) diff --git a/cpukit/ChangeLog b/cpukit/ChangeLog index 84d04fcb34..19f41cbc1e 100644 --- a/cpukit/ChangeLog +++ b/cpukit/ChangeLog @@ -1,3 +1,9 @@ +2004-03-05 Joel Sherrill + + * libcsupport/src/newlibc.c, libcsupport/src/sync.c: Eliminate + warnings. Explicitly defeat __STRICT_ANSI__ since both + legitimately use routines beyond ANSI. + 2004-03-05 Joel Sherrill * cpukit/libblock/src/bdbuf.c: Initialize pointer to avoid warning. 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 + +/* Since we compile with strict ANSI we need to undef it to get + * prototypes for extensions + */ +#undef __STRICT_ANSI__ + #include /* for free() */ #include /* 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 . - */ - 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 . + */ + 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 #include @@ -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; } -- cgit v1.2.3