1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-07-30 22:43:12 +03:00
* 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.
This commit is contained in:
Ulrich Drepper
2001-11-08 01:48:57 +00:00
parent 6ed623f848
commit 40b07f5b94
5 changed files with 135 additions and 128 deletions

View File

@ -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;
}