aboutsummaryrefslogtreecommitdiff
path: root/newlib/libc
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2013-03-15 13:19:29 +0000
committerCorinna Vinschen <corinna@vinschen.de>2013-03-15 13:19:29 +0000
commit01aff1ea3752f4531599db435db787c8065b9963 (patch)
tree2915e413eae883943f668688944f09b3f3c4442e /newlib/libc
parentba4241416022484a69775ddc85ec16e040ba1a11 (diff)
downloadnewlib-01aff1ea3752f4531599db435db787c8065b9963.zip
newlib-01aff1ea3752f4531599db435db787c8065b9963.tar.gz
newlib-01aff1ea3752f4531599db435db787c8065b9963.tar.bz2
* newlib/libc/stdio/findfp.c (glue_with_file): New.
(__sfmoreglue): Use glue_with_file to avoid alignment problems.
Diffstat (limited to 'newlib/libc')
-rw-r--r--newlib/libc/stdio/findfp.c22
1 files changed, 13 insertions, 9 deletions
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;
}
/*