diff options
author | Roland McGrath <roland@redhat.com> | 1995-04-27 16:43:27 +0000 |
---|---|---|
committer | Roland McGrath <roland@redhat.com> | 1995-04-27 16:43:27 +0000 |
commit | 675981bc4f126d9a8efef0c8b3314baba0ea855c (patch) | |
tree | 0b29daea5e499861333f9cd33f8f14a8f531a5e3 | |
parent | 11af972f8726626ce0561c0222eef2bd1a3add61 (diff) | |
download | gunmake-675981bc4f126d9a8efef0c8b3314baba0ea855c.tar.gz |
Updated from libc
-rw-r--r-- | glob/ChangeLog | 8 | ||||
-rw-r--r-- | glob/glob.c | 32 |
2 files changed, 34 insertions, 6 deletions
diff --git a/glob/ChangeLog b/glob/ChangeLog index a81698a..6e535ee 100644 --- a/glob/ChangeLog +++ b/glob/ChangeLog @@ -1,3 +1,11 @@ +Tue Apr 25 17:17:19 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu> + + * posix/glob.c (glob): If GLOB_MARK set, stat names to find + directories and append slashes to them in final pass before + sorting. + (glob_in_dir): If GLOB_MARK set, just allocate the extra char for the + slash; never append it here. + Wed Mar 8 13:38:13 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu> * posix/glob/configure.bat: Fixes from DJ. diff --git a/glob/glob.c b/glob/glob.c index 243730d..81f3049 100644 --- a/glob/glob.c +++ b/glob/glob.c @@ -26,6 +26,7 @@ Cambridge, MA 02139, USA. */ #include <errno.h> #include <sys/types.h> +#include <sys/stat.h> /* Comment out all this code if we are using the GNU C Library, and are not @@ -173,6 +174,17 @@ extern char *alloca (); #endif +#ifndef __GNU_LIBRARY__ +#define __lstat lstat +#ifndef HAVE_LSTAT +#define lstat stat +#endif +#ifdef STAT_MACROS_BROKEN +#undef S_ISDIR +#define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR) +#endif +#endif + #ifndef STDC_HEADERS #undef size_t #define size_t unsigned int @@ -394,9 +406,21 @@ glob (pattern, flags, errfunc, pglob) } } + if (flags & GLOB_MARK) + { + /* Append slashes to directory names. glob_in_dir has already + allocated the extra character for us. */ + int i; + struct stat st; + for (i = oldcount; i < pglob->gl_pathc; ++i) + if (__lstat (pglob->gl_pathv[i], &st) == 0 && + S_ISDIR (st.st_mode)) + strcat (pglob->gl_pathv[i], "/"); + } + if (!(flags & GLOB_NOSORT)) /* Sort the vector. */ - qsort ((__ptr_t) & pglob->gl_pathv[oldcount], + qsort ((__ptr_t) &pglob->gl_pathv[oldcount], pglob->gl_pathc - oldcount, sizeof (char *), collated_compare); @@ -595,8 +619,6 @@ glob_in_dir (pattern, directory, flags, errfunc, pglob) if (new->name == NULL) goto memory_error; memcpy ((__ptr_t) new->name, name, len); - if (flags & GLOB_MARK) - new->name[len++] = '/'; new->name[len] = '\0'; new->next = names; names = new; @@ -611,12 +633,10 @@ glob_in_dir (pattern, directory, flags, errfunc, pglob) nfound = 1; names = (struct globlink *) __alloca (sizeof (struct globlink)); names->next = NULL; - names->name = (char *) malloc (len + ((flags & GLOB_MARK) ? 1 : 0) + 1); + names->name = (char *) malloc (len + 1); if (names->name == NULL) goto memory_error; memcpy (names->name, pattern, len); - if (flags & GLOB_MARK) - names->name[len++] = '/'; names->name[len] = '\0'; } |