annotate glob/glob.c @ 1313:f0dcdcc9a780

[project @ 1995-06-25 18:42:38 by jwe] Initial revision
author jwe
date Sun, 25 Jun 1995 18:42:38 +0000
parents
children 611d403c7f3d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1313
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
1 /* Copyright (C) 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
2
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
3 This library is free software; you can redistribute it and/or
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
4 modify it under the terms of the GNU Library General Public License as
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
5 published by the Free Software Foundation; either version 2 of the
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
6 License, or (at your option) any later version.
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
7
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
8 This library is distributed in the hope that it will be useful,
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
9 but WITHOUT ANY WARRANTY; without even the implied warranty of
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
10 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
11 Library General Public License for more details.
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
12
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
13 You should have received a copy of the GNU Library General Public
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
14 License along with this library; see the file COPYING.LIB. If
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
15 not, write to the Free Software Foundation, Inc., 675 Mass Ave,
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
16 Cambridge, MA 02139, USA. */
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
17
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
18 /* AIX requires this to be the first thing in the file. */
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
19 #if defined (_AIX) && !defined (__GNUC__)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
20 #pragma alloca
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
21 #endif
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
22
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
23 #ifdef HAVE_CONFIG_H
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
24 #include <config.h>
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
25 #endif
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
26
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
27 #include <errno.h>
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
28 #include <sys/types.h>
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
29
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
30
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
31 /* Comment out all this code if we are using the GNU C Library, and are not
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
32 actually compiling the library itself. This code is part of the GNU C
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
33 Library, but also included in many other GNU distributions. Compiling
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
34 and linking in this code is a waste when using the GNU C library
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
35 (especially if it is a shared library). Rather than having every GNU
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
36 program understand `configure --with-gnu-libc' and omit the object files,
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
37 it is simpler to just do this in the source for each such file. */
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
38
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
39 #if defined (_LIBC) || !defined (__GNU_LIBRARY__)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
40
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
41
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
42 #ifdef STDC_HEADERS
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
43 #include <stddef.h>
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
44 #endif
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
45
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
46 #ifdef HAVE_UNISTD_H
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
47 #include <unistd.h>
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
48 #ifndef POSIX
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
49 #ifdef _POSIX_VERSION
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
50 #define POSIX
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
51 #endif
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
52 #endif
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
53 #endif
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
54
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
55 #if !defined(__GNU_LIBRARY__) && !defined(STDC_HEADERS)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
56 extern int errno;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
57 #endif
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
58
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
59 #ifndef NULL
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
60 #define NULL 0
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
61 #endif
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
62
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
63
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
64 #if defined (POSIX) || defined (HAVE_DIRENT_H) || defined (__GNU_LIBRARY__)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
65 #include <dirent.h>
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
66 #ifndef __GNU_LIBRARY__
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
67 #define D_NAMLEN(d) strlen((d)->d_name)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
68 #else /* GNU C library. */
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
69 #define D_NAMLEN(d) ((d)->d_namlen)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
70 #endif /* Not GNU C library. */
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
71 #else /* Not POSIX or HAVE_DIRENT_H. */
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
72 #define direct dirent
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
73 #define D_NAMLEN(d) ((d)->d_namlen)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
74 #ifdef HAVE_SYS_NDIR_H
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
75 #include <sys/ndir.h>
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
76 #endif /* HAVE_SYS_NDIR_H */
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
77 #ifdef HAVE_SYS_DIR_H
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
78 #include <sys/dir.h>
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
79 #endif /* HAVE_SYS_DIR_H */
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
80 #ifdef HAVE_NDIR_H
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
81 #include <ndir.h>
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
82 #endif /* HAVE_NDIR_H */
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
83 #endif /* POSIX or HAVE_DIRENT_H or __GNU_LIBRARY__. */
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
84
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
85 #if defined (POSIX) && !defined (__GNU_LIBRARY__)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
86 /* Posix does not require that the d_ino field be present, and some
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
87 systems do not provide it. */
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
88 #define REAL_DIR_ENTRY(dp) 1
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
89 #else
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
90 #define REAL_DIR_ENTRY(dp) (dp->d_ino != 0)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
91 #endif /* POSIX */
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
92
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
93 #if (defined (STDC_HEADERS) || defined (__GNU_LIBRARY__))
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
94 #include <stdlib.h>
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
95 #include <string.h>
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
96 #define ANSI_STRING
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
97 #else /* No standard headers. */
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
98
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
99 #ifdef HAVE_STRING_H
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
100 #include <string.h>
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
101 #define ANSI_STRING
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
102 #else
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
103 #include <strings.h>
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
104 #endif
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
105 #ifdef HAVE_MEMORY_H
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
106 #include <memory.h>
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
107 #endif
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
108
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
109 extern char *malloc (), *realloc ();
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
110 extern void free ();
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
111
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
112 extern void qsort ();
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
113 extern void abort (), exit ();
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
114
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
115 #endif /* Standard headers. */
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
116
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
117 #ifndef ANSI_STRING
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
118
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
119 #ifndef bzero
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
120 extern void bzero ();
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
121 #endif
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
122 #ifndef bcopy
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
123 extern void bcopy ();
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
124 #endif
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
125
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
126 #define memcpy(d, s, n) bcopy ((s), (d), (n))
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
127 #define strrchr rindex
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
128 /* memset is only used for zero here, but let's be paranoid. */
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
129 #define memset(s, better_be_zero, n) \
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
130 ((void) ((better_be_zero) == 0 ? (bzero((s), (n)), 0) : (abort(), 0)))
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
131 #endif /* Not ANSI_STRING. */
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
132
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
133 #ifndef HAVE_STRCOLL
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
134 #define strcoll strcmp
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
135 #endif
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
136
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
137
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
138 #ifndef __GNU_LIBRARY__
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
139 #ifdef __GNUC__
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
140 __inline
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
141 #endif
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
142 static char *
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
143 my_realloc (p, n)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
144 char *p;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
145 unsigned int n;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
146 {
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
147 /* These casts are the for sake of the broken Ultrix compiler,
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
148 which warns of illegal pointer combinations otherwise. */
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
149 if (p == NULL)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
150 return (char *) malloc (n);
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
151 return (char *) realloc (p, n);
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
152 }
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
153 #define realloc my_realloc
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
154 #endif
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
155
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
156
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
157 #if !defined(__alloca) && !defined(__GNU_LIBRARY__)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
158
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
159 #ifdef __GNUC__
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
160 #undef alloca
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
161 #define alloca(n) __builtin_alloca (n)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
162 #else /* Not GCC. */
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
163 #if defined (sparc) || defined (HAVE_ALLOCA_H)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
164 #include <alloca.h>
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
165 #else /* Not sparc or HAVE_ALLOCA_H. */
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
166 #ifndef _AIX
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
167 extern char *alloca ();
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
168 #endif /* Not _AIX. */
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
169 #endif /* sparc or HAVE_ALLOCA_H. */
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
170 #endif /* GCC. */
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
171
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
172 #define __alloca alloca
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
173
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
174 #endif
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
175
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
176 #ifndef STDC_HEADERS
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
177 #undef size_t
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
178 #define size_t unsigned int
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
179 #endif
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
180
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
181 /* Some system header files erroneously define these.
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
182 We want our own definitions from <fnmatch.h> to take precedence. */
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
183 #undef FNM_PATHNAME
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
184 #undef FNM_NOESCAPE
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
185 #undef FNM_PERIOD
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
186 #include <fnmatch.h>
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
187
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
188 /* Some system header files erroneously define these.
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
189 We want our own definitions from <glob.h> to take precedence. */
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
190 #undef GLOB_ERR
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
191 #undef GLOB_MARK
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
192 #undef GLOB_NOSORT
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
193 #undef GLOB_DOOFFS
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
194 #undef GLOB_NOCHECK
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
195 #undef GLOB_APPEND
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
196 #undef GLOB_NOESCAPE
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
197 #undef GLOB_PERIOD
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
198 #include <glob.h>
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
199
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
200 __ptr_t (*__glob_opendir_hook) __P ((const char *directory));
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
201 const char *(*__glob_readdir_hook) __P ((__ptr_t stream));
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
202 void (*__glob_closedir_hook) __P ((__ptr_t stream));
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
203
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
204 static int glob_pattern_p __P ((const char *pattern, int quote));
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
205 static int glob_in_dir __P ((const char *pattern, const char *directory,
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
206 int flags,
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
207 int (*errfunc) __P ((const char *, int)),
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
208 glob_t *pglob));
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
209 static int prefix_array __P ((const char *prefix, char **array, size_t n));
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
210 static int collated_compare __P ((const __ptr_t, const __ptr_t));
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
211
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
212 /* Do glob searching for PATTERN, placing results in PGLOB.
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
213 The bits defined above may be set in FLAGS.
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
214 If a directory cannot be opened or read and ERRFUNC is not nil,
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
215 it is called with the pathname that caused the error, and the
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
216 `errno' value from the failing call; if it returns non-zero
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
217 `glob' returns GLOB_ABEND; if it returns zero, the error is ignored.
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
218 If memory cannot be allocated for PGLOB, GLOB_NOSPACE is returned.
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
219 Otherwise, `glob' returns zero. */
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
220 int
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
221 glob (pattern, flags, errfunc, pglob)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
222 const char *pattern;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
223 int flags;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
224 int (*errfunc) __P ((const char *, int));
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
225 glob_t *pglob;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
226 {
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
227 const char *filename;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
228 char *dirname;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
229 size_t dirlen;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
230 int status;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
231 int oldcount;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
232
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
233 if (pattern == NULL || pglob == NULL || (flags & ~__GLOB_FLAGS) != 0)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
234 {
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
235 errno = EINVAL;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
236 return -1;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
237 }
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
238
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
239 /* Find the filename. */
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
240 filename = strrchr (pattern, '/');
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
241 if (filename == NULL)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
242 {
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
243 filename = pattern;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
244 dirname = (char *) ".";
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
245 dirlen = 0;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
246 }
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
247 else if (filename == pattern)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
248 {
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
249 /* "/pattern". */
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
250 dirname = (char *) "/";
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
251 dirlen = 1;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
252 ++filename;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
253 }
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
254 else
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
255 {
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
256 dirlen = filename - pattern;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
257 dirname = (char *) __alloca (dirlen + 1);
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
258 memcpy (dirname, pattern, dirlen);
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
259 dirname[dirlen] = '\0';
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
260 ++filename;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
261 }
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
262
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
263 if (filename[0] == '\0' && dirlen > 1)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
264 /* "pattern/". Expand "pattern", appending slashes. */
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
265 {
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
266 int val = glob (dirname, flags | GLOB_MARK, errfunc, pglob);
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
267 if (val == 0)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
268 pglob->gl_flags = (pglob->gl_flags & ~GLOB_MARK) | (flags & GLOB_MARK);
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
269 return val;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
270 }
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
271
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
272 if (!(flags & GLOB_APPEND))
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
273 {
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
274 pglob->gl_pathc = 0;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
275 pglob->gl_pathv = NULL;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
276 }
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
277
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
278 oldcount = pglob->gl_pathc;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
279
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
280 if (glob_pattern_p (dirname, !(flags & GLOB_NOESCAPE)))
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
281 {
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
282 /* The directory name contains metacharacters, so we
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
283 have to glob for the directory, and then glob for
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
284 the pattern in each directory found. */
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
285 glob_t dirs;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
286 register int i;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
287
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
288 status = glob (dirname,
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
289 ((flags & (GLOB_ERR | GLOB_NOCHECK | GLOB_NOESCAPE)) |
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
290 GLOB_NOSORT),
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
291 errfunc, &dirs);
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
292 if (status != 0)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
293 return status;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
294
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
295 /* We have successfully globbed the preceding directory name.
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
296 For each name we found, call glob_in_dir on it and FILENAME,
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
297 appending the results to PGLOB. */
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
298 for (i = 0; i < dirs.gl_pathc; ++i)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
299 {
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
300 int oldcount;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
301
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
302 #ifdef SHELL
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
303 {
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
304 /* Make globbing interruptible in the bash shell. */
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
305 extern int interrupt_state;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
306
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
307 if (interrupt_state)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
308 {
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
309 globfree (&dirs);
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
310 globfree (&files);
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
311 return GLOB_ABEND;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
312 }
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
313 }
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
314 #endif /* SHELL. */
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
315
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
316 oldcount = pglob->gl_pathc;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
317 status = glob_in_dir (filename, dirs.gl_pathv[i],
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
318 (flags | GLOB_APPEND) & ~GLOB_NOCHECK,
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
319 errfunc, pglob);
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
320 if (status == GLOB_NOMATCH)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
321 /* No matches in this directory. Try the next. */
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
322 continue;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
323
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
324 if (status != 0)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
325 {
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
326 globfree (&dirs);
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
327 globfree (pglob);
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
328 return status;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
329 }
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
330
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
331 /* Stick the directory on the front of each name. */
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
332 if (prefix_array (dirs.gl_pathv[i],
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
333 &pglob->gl_pathv[oldcount],
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
334 pglob->gl_pathc - oldcount))
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
335 {
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
336 globfree (&dirs);
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
337 globfree (pglob);
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
338 return GLOB_NOSPACE;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
339 }
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
340 }
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
341
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
342 flags |= GLOB_MAGCHAR;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
343
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
344 if (pglob->gl_pathc == oldcount)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
345 /* No matches. */
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
346 if (flags & GLOB_NOCHECK)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
347 {
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
348 size_t len = strlen (pattern) + 1;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
349 char *patcopy = (char *) malloc (len);
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
350 if (patcopy == NULL)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
351 return GLOB_NOSPACE;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
352 memcpy (patcopy, pattern, len);
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
353
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
354 pglob->gl_pathv
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
355 = (char **) realloc (pglob->gl_pathv,
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
356 (pglob->gl_pathc +
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
357 ((flags & GLOB_DOOFFS) ?
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
358 pglob->gl_offs : 0) +
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
359 1 + 1) *
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
360 sizeof (char *));
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
361 if (pglob->gl_pathv == NULL)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
362 {
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
363 free (patcopy);
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
364 return GLOB_NOSPACE;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
365 }
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
366
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
367 if (flags & GLOB_DOOFFS)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
368 while (pglob->gl_pathc < pglob->gl_offs)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
369 pglob->gl_pathv[pglob->gl_pathc++] = NULL;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
370
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
371 pglob->gl_pathv[pglob->gl_pathc++] = patcopy;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
372 pglob->gl_pathv[pglob->gl_pathc] = NULL;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
373 pglob->gl_flags = flags;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
374 }
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
375 else
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
376 return GLOB_NOMATCH;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
377 }
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
378 else
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
379 {
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
380 status = glob_in_dir (filename, dirname, flags, errfunc, pglob);
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
381 if (status != 0)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
382 return status;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
383
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
384 if (dirlen > 0)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
385 {
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
386 /* Stick the directory on the front of each name. */
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
387 if (prefix_array (dirname,
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
388 &pglob->gl_pathv[oldcount],
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
389 pglob->gl_pathc - oldcount))
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
390 {
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
391 globfree (pglob);
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
392 return GLOB_NOSPACE;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
393 }
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
394 }
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
395 }
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
396
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
397 if (!(flags & GLOB_NOSORT))
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
398 /* Sort the vector. */
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
399 qsort ((__ptr_t) & pglob->gl_pathv[oldcount],
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
400 pglob->gl_pathc - oldcount,
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
401 sizeof (char *), collated_compare);
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
402
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
403 return 0;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
404 }
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
405
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
406
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
407 /* Free storage allocated in PGLOB by a previous `glob' call. */
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
408 void
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
409 globfree (pglob)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
410 register glob_t *pglob;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
411 {
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
412 if (pglob->gl_pathv != NULL)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
413 {
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
414 register int i;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
415 for (i = 0; i < pglob->gl_pathc; ++i)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
416 if (pglob->gl_pathv[i] != NULL)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
417 free ((__ptr_t) pglob->gl_pathv[i]);
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
418 free ((__ptr_t) pglob->gl_pathv);
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
419 }
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
420 }
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
421
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
422
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
423 /* Do a collated comparison of A and B. */
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
424 static int
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
425 collated_compare (a, b)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
426 const __ptr_t a;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
427 const __ptr_t b;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
428 {
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
429 const char *const s1 = *(const char *const * const) a;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
430 const char *const s2 = *(const char *const * const) b;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
431
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
432 if (s1 == s2)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
433 return 0;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
434 if (s1 == NULL)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
435 return 1;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
436 if (s2 == NULL)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
437 return -1;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
438 return strcoll (s1, s2);
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
439 }
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
440
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
441
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
442 /* Prepend DIRNAME to each of N members of ARRAY, replacing ARRAY's
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
443 elements in place. Return nonzero if out of memory, zero if successful.
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
444 A slash is inserted between DIRNAME and each elt of ARRAY,
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
445 unless DIRNAME is just "/". Each old element of ARRAY is freed. */
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
446 static int
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
447 prefix_array (dirname, array, n)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
448 const char *dirname;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
449 char **array;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
450 size_t n;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
451 {
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
452 register size_t i;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
453 size_t dirlen = strlen (dirname);
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
454
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
455 if (dirlen == 1 && dirname[0] == '/')
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
456 /* DIRNAME is just "/", so normal prepending would get us "//foo".
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
457 We want "/foo" instead, so don't prepend any chars from DIRNAME. */
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
458 dirlen = 0;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
459
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
460 for (i = 0; i < n; ++i)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
461 {
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
462 size_t eltlen = strlen (array[i]) + 1;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
463 char *new = (char *) malloc (dirlen + 1 + eltlen);
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
464 if (new == NULL)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
465 {
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
466 while (i > 0)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
467 free ((__ptr_t) array[--i]);
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
468 return 1;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
469 }
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
470
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
471 memcpy (new, dirname, dirlen);
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
472 new[dirlen] = '/';
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
473 memcpy (&new[dirlen + 1], array[i], eltlen);
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
474 free ((__ptr_t) array[i]);
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
475 array[i] = new;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
476 }
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
477
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
478 return 0;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
479 }
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
480
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
481
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
482 /* Return nonzero if PATTERN contains any metacharacters.
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
483 Metacharacters can be quoted with backslashes if QUOTE is nonzero. */
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
484 static int
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
485 glob_pattern_p (pattern, quote)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
486 const char *pattern;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
487 int quote;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
488 {
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
489 register const char *p;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
490 int open = 0;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
491
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
492 for (p = pattern; *p != '\0'; ++p)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
493 switch (*p)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
494 {
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
495 case '?':
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
496 case '*':
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
497 return 1;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
498
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
499 case '\\':
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
500 if (quote)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
501 ++p;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
502 break;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
503
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
504 case '[':
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
505 open = 1;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
506 break;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
507
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
508 case ']':
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
509 if (open)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
510 return 1;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
511 break;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
512 }
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
513
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
514 return 0;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
515 }
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
516
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
517
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
518 /* Like `glob', but PATTERN is a final pathname component,
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
519 and matches are searched for in DIRECTORY.
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
520 The GLOB_NOSORT bit in FLAGS is ignored. No sorting is ever done.
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
521 The GLOB_APPEND flag is assumed to be set (always appends). */
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
522 static int
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
523 glob_in_dir (pattern, directory, flags, errfunc, pglob)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
524 const char *pattern;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
525 const char *directory;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
526 int flags;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
527 int (*errfunc) __P ((const char *, int));
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
528 glob_t *pglob;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
529 {
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
530 __ptr_t stream;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
531
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
532 struct globlink
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
533 {
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
534 struct globlink *next;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
535 char *name;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
536 };
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
537 struct globlink *names = NULL;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
538 size_t nfound = 0;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
539
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
540 if (!glob_pattern_p (pattern, !(flags & GLOB_NOESCAPE)))
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
541 {
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
542 stream = NULL;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
543 flags |= GLOB_NOCHECK;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
544 }
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
545 else
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
546 {
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
547 flags |= GLOB_MAGCHAR;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
548
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
549 stream = (__glob_opendir_hook ? (*__glob_opendir_hook) (directory)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
550 : (__ptr_t) opendir (directory));
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
551 if (stream == NULL)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
552 {
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
553 if ((errfunc != NULL && (*errfunc) (directory, errno)) ||
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
554 (flags & GLOB_ERR))
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
555 return GLOB_ABEND;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
556 }
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
557 else
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
558 while (1)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
559 {
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
560 const char *name;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
561 size_t len;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
562
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
563 if (__glob_readdir_hook)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
564 {
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
565 name = (*__glob_readdir_hook) (stream);
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
566 if (name == NULL)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
567 break;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
568 len = 0;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
569 }
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
570 else
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
571 {
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
572 struct dirent *d = readdir ((DIR *) stream);
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
573 if (d == NULL)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
574 break;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
575 if (! REAL_DIR_ENTRY (d))
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
576 continue;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
577 name = d->d_name;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
578 #ifdef HAVE_D_NAMLEN
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
579 len = d->d_namlen;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
580 #else
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
581 len = 0;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
582 #endif
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
583 }
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
584
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
585 if (fnmatch (pattern, name,
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
586 (!(flags & GLOB_PERIOD) ? FNM_PERIOD : 0) |
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
587 ((flags & GLOB_NOESCAPE) ? FNM_NOESCAPE : 0)) == 0)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
588 {
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
589 struct globlink *new
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
590 = (struct globlink *) __alloca (sizeof (struct globlink));
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
591 if (len == 0)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
592 len = strlen (name);
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
593 new->name
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
594 = (char *) malloc (len + ((flags & GLOB_MARK) ? 1 : 0) + 1);
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
595 if (new->name == NULL)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
596 goto memory_error;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
597 memcpy ((__ptr_t) new->name, name, len);
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
598 if (flags & GLOB_MARK)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
599 new->name[len++] = '/';
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
600 new->name[len] = '\0';
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
601 new->next = names;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
602 names = new;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
603 ++nfound;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
604 }
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
605 }
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
606 }
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
607
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
608 if (nfound == 0 && (flags & GLOB_NOCHECK))
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
609 {
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
610 size_t len = strlen (pattern);
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
611 nfound = 1;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
612 names = (struct globlink *) __alloca (sizeof (struct globlink));
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
613 names->next = NULL;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
614 names->name = (char *) malloc (len + ((flags & GLOB_MARK) ? 1 : 0) + 1);
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
615 if (names->name == NULL)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
616 goto memory_error;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
617 memcpy (names->name, pattern, len);
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
618 if (flags & GLOB_MARK)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
619 names->name[len++] = '/';
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
620 names->name[len] = '\0';
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
621 }
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
622
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
623 pglob->gl_pathv
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
624 = (char **) realloc (pglob->gl_pathv,
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
625 (pglob->gl_pathc +
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
626 ((flags & GLOB_DOOFFS) ? pglob->gl_offs : 0) +
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
627 nfound + 1) *
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
628 sizeof (char *));
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
629 if (pglob->gl_pathv == NULL)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
630 goto memory_error;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
631
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
632 if (flags & GLOB_DOOFFS)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
633 while (pglob->gl_pathc < pglob->gl_offs)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
634 pglob->gl_pathv[pglob->gl_pathc++] = NULL;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
635
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
636 for (; names != NULL; names = names->next)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
637 pglob->gl_pathv[pglob->gl_pathc++] = names->name;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
638 pglob->gl_pathv[pglob->gl_pathc] = NULL;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
639
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
640 pglob->gl_flags = flags;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
641
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
642 if (stream != NULL)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
643 {
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
644 int save = errno;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
645 if (__glob_closedir_hook)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
646 (*__glob_closedir_hook) (stream);
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
647 else
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
648 (void) closedir ((DIR *) stream);
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
649 errno = save;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
650 }
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
651 return nfound == 0 ? GLOB_NOMATCH : 0;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
652
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
653 memory_error:
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
654 {
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
655 int save = errno;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
656 if (__glob_closedir_hook)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
657 (*__glob_closedir_hook) (stream);
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
658 else
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
659 (void) closedir ((DIR *) stream);
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
660 errno = save;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
661 }
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
662 while (names != NULL)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
663 {
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
664 if (names->name != NULL)
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
665 free ((__ptr_t) names->name);
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
666 names = names->next;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
667 }
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
668 return GLOB_NOSPACE;
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
669 }
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
670
f0dcdcc9a780 [project @ 1995-06-25 18:42:38 by jwe]
jwe
parents:
diff changeset
671 #endif /* _LIBC or not __GNU_LIBRARY__. */