diff options
Diffstat (limited to 'libio/genops.c')
-rw-r--r-- | libio/genops.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/libio/genops.c b/libio/genops.c index 20d0df2d89..3776b9e332 100644 --- a/libio/genops.c +++ b/libio/genops.c @@ -210,12 +210,20 @@ save_for_backup (fp) return EOF; /* FIXME */ if (least_mark < 0) { +#ifdef _LIBC + __mempcpy (__mempcpy (new_buffer + avail, + fp->_IO_save_end + least_mark, + -least_mark), + fp->_IO_read_base, + fp->_IO_read_end - fp->_IO_read_base); +#else memcpy (new_buffer + avail, fp->_IO_save_end + least_mark, -least_mark); memcpy (new_buffer + avail - least_mark, fp->_IO_read_base, fp->_IO_read_end - fp->_IO_read_base); +#endif } else memcpy (new_buffer + avail, @@ -368,9 +376,13 @@ _IO_default_xsputn (f, data, n) count = more; if (count > 20) { +#ifdef _LIBC + f->_IO_write_ptr = __mempcpy (f->_IO_write_ptr, s, count); +#else memcpy (f->_IO_write_ptr, s, count); - s += count; f->_IO_write_ptr += count; +#endif + s += count; } else if (count <= 0) count = 0; @@ -419,8 +431,12 @@ _IO_default_xsgetn (fp, data, n) count = more; if (count > 20) { +#ifdef _LIBC + s = __mempcpy (s, fp->_IO_read_ptr, count); +#else memcpy (s, fp->_IO_read_ptr, count); s += count; +#endif fp->_IO_read_ptr += count; } else if (count <= 0) |