summaryrefslogtreecommitdiff
path: root/elf/dl-misc.c
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2001-11-08 01:48:57 +0000
committerUlrich Drepper <drepper@redhat.com>2001-11-08 01:48:57 +0000
commit40b07f5b942d6af4d575274853331590d2ee8ab3 (patch)
tree61cbcd7aa37ec6f649d1d04f7707564ed37d32c9 /elf/dl-misc.c
parent6ed623f848489d5946b1caf61a8a5061bc933b0d (diff)
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.c38
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;
}