From f6b56b5530b00432e5492642487c0a67e8646f9e Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Sun, 21 Feb 1999 09:55:41 +0000 Subject: [PATCH] Update. 1999-02-21 Ulrich Drepper * sysdeps/generic/glob.c (glob): Enlarge buffers for reentrant lookup functions if it is too small. --- ChangeLog | 5 +++++ sysdeps/generic/glob.c | 32 ++++++++++++++++++++++++-------- 2 files changed, 29 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index 0d8cdb9..2f0205c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +1999-02-21 Ulrich Drepper + + * sysdeps/generic/glob.c (glob): Enlarge buffers for reentrant + lookup functions if it is too small. + 1999-02-20 Ulrich Drepper * elf/dl-deps.c (_dl_map_object_deps): Don't add dummy objects created diff --git a/sysdeps/generic/glob.c b/sysdeps/generic/glob.c index c30d8e4..977ce15 100644 --- a/sysdeps/generic/glob.c +++ b/sysdeps/generic/glob.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991,92,93,94,95,96,97,98 Free Software Foundation, Inc. +/* Copyright (C) 1991,92,93,94,95,96,97,98,99 Free Software Foundation, Inc. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as @@ -649,8 +649,18 @@ glob (pattern, flags, errfunc, pglob) pwbuflen = 1024; pwtmpbuf = (char *) __alloca (pwbuflen); - success = (getpwnam_r (name, &pwbuf, pwtmpbuf, pwbuflen, &p) - >= 0); + success = 1; + while (getpwnam_r (name, &pwbuf, pwtmpbuf, pwbuflen, &p) < 0) + { + if (errno != ERANGE) + { + success = 0; + break; + } + pwbuflen *= 2; + pwtmpbuf = (char *) __alloca (pwbuflen); + __set_errno (0); + } # else p = getpwnam (name); success = p != NULL; @@ -723,17 +733,23 @@ glob (pattern, flags, errfunc, pglob) buflen = 1024; pwtmpbuf = (char *) __alloca (buflen); - if (getpwnam_r (user_name, &pwbuf, pwtmpbuf, buflen, &p) >= 0) - home_dir = p->pw_dir; - else - home_dir = NULL; + while (getpwnam_r (user_name, &pwbuf, pwtmpbuf, buflen, &p) < 0) + { + if (errno != ERANGE) + { + p = NULL; + break; + } + pwtmpbuf = __alloca (buflen *= 2); + __set_errno (0); + } # else p = getpwnam (user_name); +# endif if (p != NULL) home_dir = p->pw_dir; else home_dir = NULL; -# endif } /* If we found a home directory use this. */ if (home_dir != NULL) -- 2.7.4