From b5a9efcd9342681200280ef9f764b744d62b62ce Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Tue, 4 May 1999 12:24:18 +0000 Subject: [PATCH] Update. * elf/dl-load.c (expand_dynamic_string_token): Rewrite to loose st variable. --- ChangeLog | 3 +++ FAQ | 39 +++++++++++++++++++++++++++++++++++---- FAQ.in | 13 +++++++++++++ elf/dl-load.c | 6 ++---- 4 files changed, 53 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index a126fe9..4bb25b1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 1999-05-04 Ulrich Drepper + * 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. diff --git a/FAQ b/FAQ index 65d1e7d..69edb3d 100644 --- a/FAQ +++ b/FAQ @@ -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, has to be included (and not ) 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 *. + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . diff --git a/FAQ.in b/FAQ.in index 0b950c8..6a841a0 100644 --- a/FAQ.in +++ b/FAQ.in @@ -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 diff --git a/elf/dl-load.c b/elf/dl-load.c index bdae4ba..46f0b67 100644 --- a/elf/dl-load.c +++ b/elf/dl-load.c @@ -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. */ -- 2.7.4