* elf/dl-load.c (expand_dynamic_string_token): Rewrite to loose st
	variable.
This commit is contained in:
Ulrich Drepper 1999-05-04 12:24:18 +00:00
parent 27aa0631c7
commit b5a9efcd93
4 changed files with 53 additions and 8 deletions

View File

@ -1,5 +1,8 @@
1999-05-04 Ulrich Drepper <drepper@cygnus.com>
* elf/dl-load.c (expand_dynamic_string_token): Rewrite to loose st
variable.
* elf/dl-load.c (expand_dynamic_string_token): Recognize { }
around DST. Correctly ignore ORIGIN IN SUID binaries.

39
FAQ
View File

@ -147,6 +147,10 @@ please let me know.
libc5. What can be done?
3.20. Programs compiled with glibc 2.1 can't read db files made with glibc
2.0. What has changed that programs like rpm break?
3.21. Autoconf's AC_CHECK_FUNC macro reports that a function exists, but
when I try to use it, it always returns -1 and sets errno to ENOSYS.
3.22. My program segfaults when I call fclose() on the FILE* returned
from setmntent(). Is this a glibc bug?
4. Miscellaneous
@ -310,10 +314,10 @@ Binutils 2.9.1.0.16 or later is also required.
as much as 400MB).
* plenty of time. Compiling just the shared and static libraries for
i?86-linux takes approximately 1h on an i586@133, or 2.5h on
i486@66, or 4.5h on i486@33. Multiply this by 1.5 or 2.0 if you
build profiling and/or the highly optimized version as well. For
Hurd systems times are much higher.
i?86-linux takes approximately 1h on an AMD-K6@225MHz w/ 96MB of RAM,
45mins on a Celeron@400MHz w/ 128MB, and 55mins on a Alpha@533MHz w/ 256MB.
Multiply this by 1.5 or 2.0 if you build profiling and/or the highly
optimized version as well. For Hurd systems times are much higher.
You should avoid compiling in a NFS mounted filesystem. This is
very slow.
@ -1530,6 +1534,33 @@ interface. For compilation with the old API, <db_185.h> has to be included
(and not <db.h>) and you can link with either `-ldb1' or `-ldb' for either
of the db formats.
3.21. Autoconf's AC_CHECK_FUNC macro reports that a function exists, but
when I try to use it, it always returns -1 and sets errno to ENOSYS.
{ZW} You are using a 2.0 Linux kernel, and the function you are trying to
use is only implemented in 2.1/2.2. Libc considers this to be a function
which exists, because if you upgrade to a 2.2 kernel, it will work. One
such function is sigaltstack.
Your program should check at runtime whether the function works, and
implement a fallback. Note that Autoconf cannot detect unimplemented
functions in other systems' C libraries, so you need to do this anyway.
3.22. My program segfaults when I call fclose() on the FILE* returned
from setmntent(). Is this a glibc bug?
{GK} No. Don't do this. Use endmntent(), that's what it's for.
In general, you should use the correct deallocation routine. For instance,
if you open a file using fopen(), you should deallocate the FILE * using
fclose(), not free(), even though the FILE * is also a pointer.
In the case of setmntent(), it may appear to work in most cases, but it
won't always work. Unfortunately, for compatibility reasons, we can't
change the return type of setmntent() to something other than FILE *.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

13
FAQ.in
View File

@ -1326,6 +1326,19 @@ Your program should check at runtime whether the function works, and
implement a fallback. Note that Autoconf cannot detect unimplemented
functions in other systems' C libraries, so you need to do this anyway.
?? My program segfaults when I call fclose() on the FILE* returned
from setmntent(). Is this a glibc bug?
{GK} No. Don't do this. Use endmntent(), that's what it's for.
In general, you should use the correct deallocation routine. For instance,
if you open a file using fopen(), you should deallocate the FILE * using
fclose(), not free(), even though the FILE * is also a pointer.
In the case of setmntent(), it may appear to work in most cases, but it
won't always work. Unfortunately, for compatibility reasons, we can't
change the return type of setmntent() to something other than FILE *.
? Miscellaneous

View File

@ -158,13 +158,12 @@ expand_dynamic_string_token (struct link_map *l, const char *s)
resulting string is and then we copy it over. Since this is now
frequently executed operation we are looking here not for performance
but rather for code size. */
const char *st, *sf;
const char *sf;
size_t cnt = 0;
size_t origin_len;
size_t total;
char *result, *last_elem, *wp;
st = s;
sf = strchr (s, '$');
while (sf != NULL)
{
@ -182,8 +181,7 @@ expand_dynamic_string_token (struct link_map *l, const char *s)
&& (len = 11) != 0))))
++cnt;
st = sf + len;
sf = strchr (st, '$');
sf = strchr (sf + len, '$');
}
/* If we do not have to replace anything simply copy the string. */