From e42637b67781ed47a1581c6062421de514560cb3 Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Fri, 2 Aug 2002 01:27:53 +0000 Subject: 2002-07-31 Roland McGrath * libio/fileops.c (decide_maybe_mmap): New static function. Code taken from libio/iofopen.c:__fopen_maybe_mmap to try to mmap the file contents. Then switch the jump tables to the mmap tables if it worked, or the vanilla file tables if not. (_IO_file_underflow_maybe_mmap): New function. (_IO_file_seekoff_maybe_mmap): New function. (_IO_file_xsgetn_maybe_mmap): New function. (_IO_file_jumps_maybe_mmap): New variable, jump table using those. * libio/libioP.h: Declare those. * libio/wfileops.c (_IO_wfile_underflow_maybe_mmap): New function. (_IO_wfile_jumps_maybe_mmap): New variable, jump table using that. * libio/iofopen.c (__fopen_maybe_mmap): Don't try to mmap here. If the stream is read-only, set its jump tables to those new ones. * libio/iofdopen.c (_IO_new_fdopen) [_G_HAVE_MMAP]: Set the initial jump tables to the maybe_mmap ones, and don't call __fopen_maybe_mmap. We need the tables set before _IO_file_attach. --- libio/libioP.h | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'libio/libioP.h') diff --git a/libio/libioP.h b/libio/libioP.h index bfb36c30ef..cb9e918468 100644 --- a/libio/libioP.h +++ b/libio/libioP.h @@ -425,8 +425,10 @@ extern void _IO_default_imbue __P ((_IO_FILE *, void *)); extern struct _IO_jump_t _IO_file_jumps; extern struct _IO_jump_t _IO_file_jumps_mmap attribute_hidden; +extern struct _IO_jump_t _IO_file_jumps_maybe_mmap attribute_hidden; extern struct _IO_jump_t _IO_wfile_jumps attribute_hidden; extern struct _IO_jump_t _IO_wfile_jumps_mmap attribute_hidden; +extern struct _IO_jump_t _IO_wfile_jumps_maybe_mmap attribute_hidden; extern struct _IO_jump_t _IO_old_file_jumps attribute_hidden; extern struct _IO_jump_t _IO_streambuf_jumps; extern struct _IO_jump_t _IO_proc_jumps attribute_hidden; @@ -498,6 +500,8 @@ extern _IO_FILE* _IO_file_setbuf __P ((_IO_FILE *, char *, _IO_ssize_t)); extern _IO_off64_t _IO_file_seekoff __P ((_IO_FILE *, _IO_off64_t, int, int)); extern _IO_off64_t _IO_file_seekoff_mmap __P ((_IO_FILE *, _IO_off64_t, int, int)); +extern _IO_off64_t _IO_file_seekoff_maybe_mmap __P ((_IO_FILE *, _IO_off64_t, + int, int)); extern _IO_size_t _IO_file_xsputn __P ((_IO_FILE *, const void *, _IO_size_t)); extern _IO_size_t _IO_file_xsgetn __P ((_IO_FILE *, void *, _IO_size_t)); extern int _IO_file_stat __P ((_IO_FILE *, void *)); @@ -505,6 +509,7 @@ extern int _IO_file_close __P ((_IO_FILE *)); extern int _IO_file_close_mmap __P ((_IO_FILE *)); extern int _IO_file_underflow __P ((_IO_FILE *)); extern int _IO_file_underflow_mmap __P ((_IO_FILE *)); +extern int _IO_file_underflow_maybe_mmap __P ((_IO_FILE *)); extern int _IO_file_overflow __P ((_IO_FILE *, int)); #define _IO_file_is_open(__fp) ((__fp)->_fileno != -1) extern void _IO_file_init __P ((struct _IO_FILE_plus *)); -- cgit v1.2.1