From 2d3bbb8c67ce04adca32c1f99cedafcedb08093a Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Mon, 15 Jul 1996 00:05:56 +0000 Subject: [PATCH] Sun Jul 14 01:51:39 1996 Roland McGrath * sysdeps/generic/dl-sysdep.c (_dl_sysdep_read_whole_file): New fn. --- sysdeps/generic/dl-sysdep.c | 38 ++++++++++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/sysdeps/generic/dl-sysdep.c b/sysdeps/generic/dl-sysdep.c index 8f9e782205..579054d2ed 100644 --- a/sysdeps/generic/dl-sysdep.c +++ b/sysdeps/generic/dl-sysdep.c @@ -19,6 +19,7 @@ Cambridge, MA 02139, USA. */ #include #include +#include #include #include #include @@ -108,7 +109,7 @@ void _dl_sysdep_start_cleanup (void) { } - + #ifndef MAP_ANON /* This is only needed if the system doesn't support MAP_ANON. */ @@ -119,6 +120,41 @@ _dl_sysdep_open_zero_fill (void) } #endif +/* Read the whole contents of FILE into new mmap'd space with given + protections. *SIZEP gets the size of the file. */ + +void * +_dl_sysdep_read_whole_file (const char *file, size_t *sizep, int prot) +{ + void *contents; + struct stat st; + int fd = __open (file, O_RDONLY); + if (fd < 0) + return NULL; + if (__fstat (fd, &st) < 0) + result = NULL; + else + { + /* Map a copy of the file contents. */ + result = __mmap (0, st.st_size, prot, +#ifdef MAP_COPY + MAP_COPY +#else + MAP_PRIVATE +#endif +#ifdef MAP_FILE + | MAP_FILE +#endif + , fd, 0); + if (result == (void *) -1) + result = NULL; + else + *sizep = st.st_size; + } + __close (fd); + return result; +} + void _dl_sysdep_fatal (const char *msg, ...) {