-/* Copyright (C) 1993-2012 Free Software Foundation, Inc.
+/* Copyright (C) 1993-2016 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Written by Per Bothner <bothner@cygnus.com>.
#include <string.h>
#include <errno.h>
#include <stdlib.h>
+#include <unistd.h>
#ifndef errno
extern int errno;
#endif
to _IO_buf_base, though not necessarily if we have switched from
get mode to put mode. (The reason is to maintain the invariant
that _IO_read_end corresponds to the external file position.)
- _IO_write_base is non-NULL and usually equal to _IO_base_base.
+ _IO_write_base is non-NULL and usually equal to _IO_buf_base.
We also have _IO_write_end == _IO_buf_end, but only in fully buffered mode.
The un-flushed character are those between _IO_write_base and _IO_write_ptr.
void
attribute_compat_text_section
-_IO_old_file_init (fp)
- struct _IO_FILE_plus *fp;
+_IO_old_file_init (struct _IO_FILE_plus *fp)
{
/* POSIX.1 allows another file handle to be used to change the position
of our file descriptor. Hence we actually don't know the actual
int
attribute_compat_text_section
-_IO_old_file_close_it (fp)
- _IO_FILE *fp;
+_IO_old_file_close_it (_IO_FILE *fp)
{
int write_status, close_status;
if (!_IO_file_is_open (fp))
void
attribute_compat_text_section
-_IO_old_file_finish (fp, dummy)
- _IO_FILE *fp;
- int dummy;
+_IO_old_file_finish (_IO_FILE *fp, int dummy)
{
if (_IO_file_is_open (fp))
{
_IO_FILE *
attribute_compat_text_section
-_IO_old_file_fopen (fp, filename, mode)
- _IO_FILE *fp;
- const char *filename;
- const char *mode;
+_IO_old_file_fopen (_IO_FILE *fp, const char *filename, const char *mode)
{
int oflags = 0, omode;
int read_write, fdesc;
_IO_FILE *
attribute_compat_text_section
-_IO_old_file_attach (fp, fd)
- _IO_FILE *fp;
- int fd;
+_IO_old_file_attach (_IO_FILE *fp, int fd)
{
if (_IO_file_is_open (fp))
return NULL;
_IO_FILE *
attribute_compat_text_section
-_IO_old_file_setbuf (fp, p, len)
- _IO_FILE *fp;
- char *p;
- _IO_ssize_t len;
+_IO_old_file_setbuf (_IO_FILE *fp, char *p, _IO_ssize_t len)
{
if (_IO_default_setbuf (fp, p, len) == NULL)
return NULL;
int
attribute_compat_text_section
-_IO_old_do_write (fp, data, to_do)
- _IO_FILE *fp;
- const char *data;
- _IO_size_t to_do;
+_IO_old_do_write (_IO_FILE *fp, const char *data, _IO_size_t to_do)
{
return (to_do == 0 || (_IO_size_t) old_do_write (fp, data, to_do) == to_do)
? 0 : EOF;
static int
attribute_compat_text_section
-old_do_write (fp, data, to_do)
- _IO_FILE *fp;
- const char *data;
- _IO_size_t to_do;
+old_do_write (_IO_FILE *fp, const char *data, _IO_size_t to_do)
{
_IO_size_t count;
if (fp->_flags & _IO_IS_APPENDING)
fp->_cur_column = _IO_adjust_column (fp->_cur_column - 1, data, count) + 1;
_IO_setg (fp, fp->_IO_buf_base, fp->_IO_buf_base, fp->_IO_buf_base);
fp->_IO_write_base = fp->_IO_write_ptr = fp->_IO_buf_base;
- fp->_IO_write_end = ((fp->_flags & (_IO_LINE_BUF+_IO_UNBUFFERED))
+ fp->_IO_write_end = ((fp->_flags & (_IO_LINE_BUF | _IO_UNBUFFERED))
? fp->_IO_buf_base : fp->_IO_buf_end);
return count;
}
int
attribute_compat_text_section
-_IO_old_file_underflow (fp)
- _IO_FILE *fp;
+_IO_old_file_underflow (_IO_FILE *fp)
{
_IO_ssize_t count;
#if 0
int
attribute_compat_text_section
-_IO_old_file_overflow (f, ch)
- _IO_FILE *f;
- int ch;
+_IO_old_file_overflow (_IO_FILE *f, int ch)
{
if (f->_flags & _IO_NO_WRITES) /* SET ERROR */
{
f->_IO_write_end = f->_IO_buf_end;
f->_IO_read_base = f->_IO_read_ptr = f->_IO_read_end;
- if (f->_flags & (_IO_LINE_BUF+_IO_UNBUFFERED))
+ if (f->_flags & (_IO_LINE_BUF | _IO_UNBUFFERED))
f->_IO_write_end = f->_IO_write_ptr;
f->_flags |= _IO_CURRENTLY_PUTTING;
}
int
attribute_compat_text_section
-_IO_old_file_sync (fp)
- _IO_FILE *fp;
+_IO_old_file_sync (_IO_FILE *fp)
{
_IO_ssize_t delta;
int retval = 0;
_IO_off64_t
attribute_compat_text_section
-_IO_old_file_seekoff (fp, offset, dir, mode)
- _IO_FILE *fp;
- _IO_off64_t offset;
- int dir;
- int mode;
+_IO_old_file_seekoff (_IO_FILE *fp, _IO_off64_t offset, int dir, int mode)
{
_IO_off_t result;
_IO_off64_t delta, new_offset;
/* Flush unwritten characters.
(This may do an unneeded write if we seek within the buffer.
But to be able to switch to reading, we would need to set
- egptr to ptr. That can't be done in the current design,
+ egptr to pptr. That can't be done in the current design,
which assumes file_ptr() is eGptr. Anyway, since we probably
end up flushing when we close(), it doesn't make much difference.)
- FIXME: simulate mem-papped files. */
+ FIXME: simulate mem-mapped files. */
if (fp->_IO_write_ptr > fp->_IO_write_base || _IO_in_put_mode (fp))
if (_IO_switch_to_get_mode (fp))
break;
case _IO_seek_end:
{
- struct _G_stat64 st;
+ struct stat64 st;
if (_IO_SYSSTAT (fp, &st) == 0 && S_ISREG (st.st_mode))
{
offset += st.st_size;
_IO_ssize_t
attribute_compat_text_section
-_IO_old_file_write (f, data, n)
- _IO_FILE *f;
- const void *data;
- _IO_ssize_t n;
+_IO_old_file_write (_IO_FILE *f, const void *data, _IO_ssize_t n)
{
_IO_ssize_t to_do = n;
while (to_do > 0)
_IO_size_t
attribute_compat_text_section
-_IO_old_file_xsputn (f, data, n)
- _IO_FILE *f;
- const void *data;
- _IO_size_t n;
+_IO_old_file_xsputn (_IO_FILE *f, const void *data, _IO_size_t n)
{
- register const char *s = (char *) data;
+ const char *s = (char *) data;
_IO_size_t to_do = n;
int must_flush = 0;
_IO_size_t count = 0;
count = f->_IO_buf_end - f->_IO_write_ptr;
if (count >= n)
{
- register const char *p;
+ const char *p;
for (p = s + n; p > s; )
{
if (*--p == '\n')
}
else
{
- register char *p = f->_IO_write_ptr;
- register int i = (int) count;
+ char *p = f->_IO_write_ptr;
+ int i = (int) count;
while (--i >= 0)
*p++ = *s++;
f->_IO_write_ptr = p;