1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-08-01 10:06:57 +03:00
2002-08-29  Ulrich Drepper  <drepper@redhat.com>

	* libio/fileops.c (_IO_new_file_fopen): Recognize new mode specifier
	'm' to enable mmap I/O.
	* libio/libio.h (_IO_FILE): Rename _blksize field to _flags2.  The
	former wasn't used (anymore?).
	(_IO_FLAGS2_MMAP): New define.
	* libio/genops.c (_IO_no_init): Initialize _flags2 field.
	* libio/iofopen.c (__fopen_maybe_mmap): Use mmap callbacks only if
	_IO_FLAGS2_MMAP bit is set.
	* libio/iofdopen.c (_IO_new_fdopen): Recognize 'm' mode specifier.
	Enable mmap-using mode only if 'm' was set.
This commit is contained in:
Ulrich Drepper
2002-08-30 07:07:16 +00:00
parent b7fc6d07af
commit dd0ee2e102
5 changed files with 47 additions and 6 deletions

View File

@ -59,8 +59,10 @@ _IO_new_fdopen (fd, mode)
struct _IO_wide_data wd;
} *new_f;
int fd_flags;
int i;
int use_mmap = 0;
switch (*mode++)
switch (*mode)
{
case 'r':
read_write = _IO_NO_WRITES;
@ -76,8 +78,26 @@ _IO_new_fdopen (fd, mode)
MAYBE_SET_EINVAL;
return NULL;
}
if (mode[0] == '+' || (mode[0] == 'b' && mode[1] == '+'))
read_write &= _IO_IS_APPENDING;
for (i = 1; i < 5; ++i)
{
switch (*++mode)
{
case '\0':
break;
case '+':
read_write &= _IO_IS_APPENDING;
break;
case 'm':
use_mmap = 1;
continue;
case 'x':
case 'b':
default:
/* Ignore */
continue;
}
break;
}
#ifdef F_GETFL
fd_flags = _IO_fcntl (fd, F_GETFL);
#ifndef O_ACCMODE
@ -129,12 +149,13 @@ _IO_new_fdopen (fd, mode)
call _IO_file_attach or else it will allocate a buffer immediately. */
_IO_no_init (&new_f->fp.file, 0, 0, &new_f->wd,
#ifdef _G_HAVE_MMAP
(read_write & _IO_NO_WRITES) ? &_IO_wfile_jumps_maybe_mmap :
(use_mmap && (read_write & _IO_NO_WRITES))
? &_IO_wfile_jumps_maybe_mmap :
#endif
&INTUSE(_IO_wfile_jumps));
_IO_JUMPS (&new_f->fp) =
#ifdef _G_HAVE_MMAP
(read_write & _IO_NO_WRITES) ? &_IO_file_jumps_maybe_mmap :
(use_mmap && (read_write & _IO_NO_WRITES)) ? &_IO_file_jumps_maybe_mmap :
#endif
&INTUSE(_IO_file_jumps);
INTUSE(_IO_file_init) (&new_f->fp);