diff options
author | Ulrich Drepper <drepper@redhat.com> | 2001-11-08 01:48:57 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2001-11-08 01:48:57 +0000 |
commit | 40b07f5b942d6af4d575274853331590d2ee8ab3 (patch) | |
tree | 61cbcd7aa37ec6f649d1d04f7707564ed37d32c9 /elf/dl-misc.c | |
parent | 6ed623f848489d5946b1caf61a8a5061bc933b0d (diff) | |
download | glibc-40b07f5b942d6af4d575274853331590d2ee8ab3.tar.gz glibc-40b07f5b942d6af4d575274853331590d2ee8ab3.tar.xz glibc-40b07f5b942d6af4d575274853331590d2ee8ab3.zip |
Update.
* sysdeps/generic/dl-cache.c: Optimize SEARCH_CACHE and HWCAP_CHECK macro code. * elf/dl-misc.c (_dl_sysdep_read_whole_file): Optimize code a bit. Now returns MAP_FAILED on error. * elf/rtld.c: Adjust caller. * sysdeps/generic/dl-cache.c: Likewise. * sysdeps/generic/ldsodefs.h: Adjust description.
Diffstat (limited to 'elf/dl-misc.c')
-rw-r--r-- | elf/dl-misc.c | 38 |
1 files changed, 18 insertions, 20 deletions
diff --git a/elf/dl-misc.c b/elf/dl-misc.c index f1abfb7f29..a96689edf7 100644 --- a/elf/dl-misc.c +++ b/elf/dl-misc.c @@ -44,40 +44,38 @@ _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. */ + protections. *SIZEP gets the size of the file. On error MAP_FAILED + is returned. */ void * internal_function _dl_sysdep_read_whole_file (const char *file, size_t *sizep, int prot) { - void *result; + void *result = MAP_FAILED; struct stat64 st; int fd = __open (file, O_RDONLY); - if (fd < 0) - return NULL; - if (__fxstat64 (_STAT_VER, fd, &st) < 0 - /* No need to map the file if it is empty. */ - || st.st_size == 0) - result = NULL; - else + if (fd >= 0) { - /* Map a copy of the file contents. */ - result = __mmap (0, st.st_size, prot, + if (__fxstat64 (_STAT_VER, fd, &st) >= 0) + { + *sizep = st.st_size; + + /* No need to map the file if it is empty. */ + if (*sizep != 0) + /* Map a copy of the file contents. */ + result = __mmap (NULL, *sizep, prot, #ifdef MAP_COPY - MAP_COPY + MAP_COPY #else - MAP_PRIVATE + MAP_PRIVATE #endif #ifdef MAP_FILE - | MAP_FILE + | MAP_FILE #endif - , fd, 0); - if (result == MAP_FAILED) - result = NULL; - else - *sizep = st.st_size; + , fd, 0); + } + __close (fd); } - __close (fd); return result; } |