+1999-02-21 Ulrich Drepper <drepper@cygnus.com>
+
+ * sysdeps/generic/glob.c (glob): Enlarge buffers for reentrant
+ lookup functions if it is too small.
+
1999-02-20 Ulrich Drepper <drepper@cygnus.com>
* elf/dl-deps.c (_dl_map_object_deps): Don't add dummy objects created
-/* 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
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;
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)