From 01aff1ea3752f4531599db435db787c8065b9963 Mon Sep 17 00:00:00 2001 From: Corinna Vinschen Date: Fri, 15 Mar 2013 13:19:29 +0000 Subject: * newlib/libc/stdio/findfp.c (glue_with_file): New. (__sfmoreglue): Use glue_with_file to avoid alignment problems. --- newlib/ChangeLog | 5 +++++ newlib/libc/stdio/findfp.c | 22 +++++++++++++--------- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/newlib/ChangeLog b/newlib/ChangeLog index fdb3489..c78d5ca 100644 --- a/newlib/ChangeLog +++ b/newlib/ChangeLog @@ -1,3 +1,8 @@ +2013-03-15 Sebastian Huber + + * newlib/libc/stdio/findfp.c (glue_with_file): New. + (__sfmoreglue): Use glue_with_file to avoid alignment problems. + 2013-02-28 Corinna Vinschen * libc/include/machine/setjmp.h (sigjmp_buf): Fix definition of diff --git a/newlib/libc/stdio/findfp.c b/newlib/libc/stdio/findfp.c index 0beb1e5..7ab3bdb 100644 --- a/newlib/libc/stdio/findfp.c +++ b/newlib/libc/stdio/findfp.c @@ -77,23 +77,27 @@ _DEFUN(std, (ptr, flags, file, data), #endif } +struct glue_with_file { + struct _glue glue; + FILE file; +}; + struct _glue * _DEFUN(__sfmoreglue, (d, n), struct _reent *d _AND register int n) { - struct _glue *g; - FILE *p; + struct glue_with_file *g; - g = (struct _glue *) _malloc_r (d, sizeof (*g) + n * sizeof (FILE)); + g = (struct glue_with_file *) + _malloc_r (d, sizeof (*g) + (n - 1) * sizeof (FILE)); if (g == NULL) return NULL; - p = (FILE *) (g + 1); - g->_next = NULL; - g->_niobs = n; - g->_iobs = p; - memset (p, 0, n * sizeof (FILE)); - return g; + g->glue._next = NULL; + g->glue._niobs = n; + g->glue._iobs = &g->file; + memset (&g->file, 0, n * sizeof (FILE)); + return &g->glue; } /* -- cgit v1.1