diff options
author | Ulrich Drepper <drepper@redhat.com> | 2007-02-21 09:36:46 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2007-02-21 09:36:46 +0000 |
commit | 63a2f30529aca7a97f84a7f2a6f8afc40f0a3cdb (patch) | |
tree | 0c7a8b02e3f4963fd1408cecd3b506749c2489d9 /io/ftw.c | |
parent | c8703f884991059dcaea8a78a4ae00ff7b1118eb (diff) | |
download | glibc-63a2f30529aca7a97f84a7f2a6f8afc40f0a3cdb.tar.gz |
[BZ #4076]cvs/fedora-glibc-20070221T1011
* io/ftw.c (ftw_startup): Handle special case of FTW_CHDIR in /.
(open_dir_stream): Likewise.
* io/Makefile (tests): Add bug-ftw5.
io/bug-ftw5.c: New file.
Diffstat (limited to 'io/ftw.c')
-rw-r--r-- | io/ftw.c | 28 |
1 files changed, 22 insertions, 6 deletions
@@ -1,5 +1,5 @@ /* File tree walker functions. - Copyright (C) 1996-2003, 2004, 2006 Free Software Foundation, Inc. + Copyright (C) 1996-2003, 2004, 2006, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996. @@ -348,8 +348,17 @@ open_dir_stream (int *dfdp, struct ftw_data *data, struct dir_data *dirp) } else { - const char *name = ((data->flags & FTW_CHDIR) - ? data->dirbuf + data->ftw.base: data->dirbuf); + const char *name; + + if (data->flags & FTW_CHDIR) + { + name = data->dirbuf + data->ftw.base; + if (name[0] == '\0') + name = "."; + } + else + name = data->dirbuf; + dirp->stream = __opendir (name); } @@ -721,9 +730,16 @@ ftw_startup (const char *dir, int is_nftw, void *func, int descriptors, /* Get stat info for start directory. */ if (result == 0) { - const char *name = ((data.flags & FTW_CHDIR) - ? data.dirbuf + data.ftw.base - : data.dirbuf); + const char *name; + + if (data.flags & FTW_CHDIR) + { + name = data.dirbuf + data.ftw.base; + if (name[0] == '\0') + name = "."; + } + else + name = data.dirbuf; if (((flags & FTW_PHYS) ? LXSTAT (_STAT_VER, name, &st) |