4.4BSD snapshot (revision 8.1)
[unix-history] / usr / src / lib / libc / gen / glob.3
CommitLineData
ae59e04c 1.\" Copyright (c) 1989, 1991 The Regents of the University of California.
b4ee7c09
KB
2.\" All rights reserved.
3.\"
4.\" This code is derived from software contributed to Berkeley by
5.\" Guido van Rossum.
91cff1e1 6.\" %sccs.include.redist.man%
b4ee7c09 7.\"
74155b62 8.\" @(#)glob.3 8.1 (Berkeley) %G%
b4ee7c09 9.\"
ae59e04c
CL
10.Dd
11.Dt GLOB 3
12.Os
13.Sh NAME
14.Nm glob ,
15.Nm globfree
16.Nd generate pathnames matching a pattern
17.Sh SYNOPSIS
18.Fd #include <glob.h>
19.Ft int
7e0d0f77 20.Fn glob "const char *pattern" "int flags" "const int (*errfunc)(const char *, int)" "glob_t *pglob"
ae59e04c
CL
21.Ft void
22.Fn globfree "glob_t *pglob"
23.Sh DESCRIPTION
24The
25.Fn glob
26function
b4ee7c09
KB
27is a pathname generator that implements the rules for file name pattern
28matching used by the shell.
ae59e04c 29.Pp
b4ee7c09 30The include file
ae59e04c 31.Pa glob.h
b4ee7c09 32defines the structure type
ae59e04c 33.Fa glob_t ,
b4ee7c09 34which contains at least the following fields:
48dd900b 35.Bd -literal
b4ee7c09 36typedef struct {
f6ec3c7f
KB
37 int gl_pathc; /* count of total paths so far */
38 int gl_matchc; /* count of paths matching pattern */
b4ee7c09 39 int gl_offs; /* reserved at beginning of gl_pathv */
f6ec3c7f 40 int gl_flags; /* returned flags */
b4ee7c09
KB
41 char **gl_pathv; /* list of paths matching pattern */
42} glob_t;
ae59e04c
CL
43.Ed
44.Pp
b4ee7c09 45The argument
ae59e04c 46.Fa pattern
b4ee7c09 47is a pointer to a pathname pattern to be expanded.
ae59e04c
CL
48The
49.Fn glob
50argument
b4ee7c09
KB
51matches all accessible pathnames against the pattern and creates
52a list of the pathnames that match.
53In order to have access to a pathname,
ae59e04c 54.Fn glob
b4ee7c09
KB
55requires search permission on every component of a path except the last
56and read permission on each directory of any filename component of
ae59e04c
CL
57.Fa pattern
58that contains any of the special characters
59.Ql * ,
60.Ql ?
61or
62.Ql [ .
63.Pp
64The
65.Fn glob
66argument
b4ee7c09 67stores the number of matched pathnames into the
ae59e04c 68.Fa gl_pathc
b4ee7c09 69field, and a pointer to a list of pointers to pathnames into the
ae59e04c 70.Fa gl_pathv
b4ee7c09 71field.
ae59e04c
CL
72The first pointer after the last pathname is
73.Dv NULL .
b4ee7c09
KB
74If the pattern does not match any pathnames, the returned number of
75matched paths is set to zero.
ae59e04c 76.Pp
b4ee7c09 77It is the caller's responsibility to create the structure pointed to by
ae59e04c 78.Fa pglob .
b4ee7c09 79The
ae59e04c 80.Fn glob
b4ee7c09
KB
81function allocates other space as needed, including the memory pointed
82to by
ae59e04c
CL
83.Fa gl_pathv .
84.Pp
b4ee7c09 85The argument
ae59e04c 86.Fa flags
b4ee7c09 87is used to modify the behavior of
ae59e04c 88.Fn glob .
b4ee7c09 89The value of
ae59e04c
CL
90.Fa flags
91is the bitwise inclusive
92.Tn OR
93of any of the following
b4ee7c09 94values defined in
ae59e04c 95.Pa glob.h :
7e0d0f77 96.Bl -tag -width GLOB_ALTDIRFUNC
ae59e04c 97.It Dv GLOB_APPEND
b4ee7c09
KB
98Append pathnames generated to the ones from a previous call (or calls)
99to
ae59e04c 100.Fn glob .
b4ee7c09 101The value of
ae59e04c 102.Fa gl_pathc
b4ee7c09
KB
103will be the total matches found by this call and the previous call(s).
104The pathnames are appended to, not merged with the pathnames returned by
105the previous call(s).
106Between calls, the caller must not change the setting of the
ae59e04c
CL
107.Dv GLOB_DOOFFS
108flag, nor change the value of
109.Fa gl_offs
b4ee7c09 110when
ae59e04c
CL
111.Dv GLOB_DOOFFS
112is set, nor (obviously) call
113.Fn globfree
b4ee7c09 114for
ae59e04c
CL
115.Fa pglob .
116.It Dv GLOB_DOOFFS
b4ee7c09 117Make use of the
ae59e04c 118.Fa gl_offs
b4ee7c09
KB
119field.
120If this flag is set,
ae59e04c
CL
121.Fa gl_offs
122is used to specify how many
123.Dv NULL
124pointers to prepend to the beginning
b4ee7c09 125of the
ae59e04c 126.Fa gl_pathv
b4ee7c09
KB
127field.
128In other words,
ae59e04c 129.Fa gl_pathv
b4ee7c09 130will point to
ae59e04c
CL
131.Fa gl_offs
132.Dv NULL
133pointers,
b4ee7c09 134followed by
ae59e04c
CL
135.Fa gl_pathc
136pathname pointers, followed by a
137.Dv NULL
138pointer.
139.It Dv GLOB_ERR
b4ee7c09 140Causes
ae59e04c 141.Fn glob
b4ee7c09
KB
142to return when it encounters a directory that it cannot open or read.
143Ordinarily,
ae59e04c 144.Fn glob
b4ee7c09 145continues to find matches.
ae59e04c 146.It Dv GLOB_MARK
b4ee7c09 147Each pathname that is a directory that matches
ae59e04c 148.Fa pattern
b4ee7c09
KB
149has a slash
150appended.
ae59e04c 151.It Dv GLOB_NOCHECK
b4ee7c09 152If
ae59e04c 153.Fa pattern
b4ee7c09 154does not match any pathname, then
ae59e04c 155.Fn glob
b4ee7c09
KB
156returns a list
157consisting of only
ae59e04c 158.Fa pattern ,
f6ec3c7f
KB
159with the number of total pathnames is set to 1, and the number of matched
160pathnames set to 0.
b4ee7c09 161If
ae59e04c 162.Dv GLOB_QUOTE
b4ee7c09 163is set, its effect is present in the pattern returned.
7e0d0f77
KB
164.It Dv GLOB_NOSORT
165By default, the pathnames are sorted in ascending
166.Tn ASCII
167order;
168this flag prevents that sorting (speeding up
169.Fn glob ) .
170.El
171.Pp
172The following values may also be included in
173.Fa flags ,
174however, they are non-standard extensions to
175.St -p1003.2 .
176.Bl -tag -width GLOB_ALTDIRFUNC
177.It Dv GLOB_ALTDIRFUNC
178The following additional fields in the pglob structure have been
179initialized with alternate functions for glob to use to open, read,
180and close directories and to get stat information on names found
181in those directories.
182.Bd -literal
183 void *(*gl_opendir)(const char * name);
184 struct dirent *(*gl_readdir)(void *);
185 void (*gl_closedir)(void *);
186 int (*gl_lstat)(const char *name, struct stat *st);
187 int (*gl_stat)(const char *name, struct stat *st);
188.Ed
189.Pp
190This extension is provided to allow programs such as
191.Xr restore 8
192to provide globbing from directories stored on tape.
193.It Dv GLOB_BRACE
194Pre-process the pattern string to expand
195.Ql {pat,pat,...}
196strings like
197.Xr csh 1. The pattern
198.Ql {}
199is left unexpanded for historical reasons
200.Xr (Csh 1
201does the same thing to
202ease typing
203of
204.Xr find 1
205patterns).
206.It Dv GLOB_MAGCHAR
207Set by the
208.Fn glob
209function if the pattern included globbing characters.
210See the description of the usage of the
211.Fa gl_matchc
212structure member for more details.
a5ba4a08
KB
213.It Dv GLOB_NOMAGIC
214Is the same as
215.Dv GLOB_NOCHECK
216but it only appends the
217.Fa pattern
218if it does not contain any of the special characters ``*'', ``?'' or ``[''.
219.Dv GLOB_NOMAGIC
220is provided to simplify implementing the historic
221.Xr csh 1
222globbing behavior and should probably not be used anywhere else.
ae59e04c
CL
223.It Dv GLOB_QUOTE
224Use the backslash
225.Pq Ql \e
226character for quoting: every occurrence of
b4ee7c09
KB
227a backslash followed by a character in the pattern is replaced by that
228character, avoiding any special interpretation of the character.
7e0d0f77
KB
229.It Dv GLOB_TILDE
230Expand patterns that start with
231.Ql ~
232to user name home directories.
ae59e04c
CL
233.El
234.Pp
b4ee7c09
KB
235If, during the search, a directory is encountered that cannot be opened
236or read and
ae59e04c
CL
237.Fa errfunc
238is
239.Pf non- Dv NULL ,
240.Fn glob
241calls
7e0d0f77 242.Fa (*errfunc)(path, errno) .
ae59e04c
CL
243This may be unintuitive: a pattern like
244.Ql */Makefile
245will try to
246.Xr stat 2
247.Ql foo/Makefile
248even if
249.Ql foo
250is not a directory, resulting in a
b4ee7c09 251call to
ae59e04c
CL
252.Fa errfunc .
253The error routine can suppress this action by testing for
254.Dv ENOENT
255and
256.Dv ENOTDIR ;
257however, the
258.Dv GLOB_ERR
259flag will still cause an immediate
b4ee7c09 260return when this happens.
ae59e04c 261.Pp
b4ee7c09 262If
ae59e04c 263.Fa errfunc
b4ee7c09 264returns non-zero,
ae59e04c 265.Fn glob
b4ee7c09 266stops the scan and returns
ae59e04c 267.Dv GLOB_ABEND
b4ee7c09 268after setting
ae59e04c 269.Fa gl_pathc
b4ee7c09 270and
ae59e04c 271.Fa gl_pathv
b4ee7c09
KB
272to reflect any paths already matched.
273This also happens if an error is encountered and
ae59e04c 274.Dv GLOB_ERR
b4ee7c09 275is set in
ae59e04c 276.Fa flags ,
b4ee7c09 277regardless of the return value of
ae59e04c 278.Fa errfunc ,
b4ee7c09
KB
279if called.
280If
ae59e04c 281.Dv GLOB_ERR
b4ee7c09 282is not set and either
ae59e04c
CL
283.Fa errfunc
284is
285.Dv NULL
286or
287.Fa errfunc
b4ee7c09 288returns zero, the error is ignored.
ae59e04c 289.Pp
b4ee7c09 290The
ae59e04c 291.Fn globfree
b4ee7c09 292function frees any space associated with
ae59e04c 293.Fa pglob
b4ee7c09 294from a previous call(s) to
ae59e04c
CL
295.Fn glob .
296.Sh RETURN VALUES
b4ee7c09 297On successful completion,
ae59e04c 298.Fn glob
b4ee7c09 299returns zero.
f6ec3c7f 300In addition the fields of
ae59e04c 301.Fa pglob
f6ec3c7f 302contain the values described below:
ae59e04c
CL
303.Bl -tag -width GLOB_NOCHECK
304.It Fa gl_pathc
f6ec3c7f
KB
305contains the total number of matched pathnames so far.
306This includes other matches from previous invocations of
ae59e04c 307.Fn glob
f6ec3c7f 308if
ae59e04c 309.Dv GLOB_APPEND
f6ec3c7f 310was specified.
ae59e04c 311.It Fa gl_matchc
f6ec3c7f 312contains the number of matched pathnames in the current invocation of
ae59e04c
CL
313.Fn glob .
314.It Fa gl_flags
f6ec3c7f 315contains a copy of the
ae59e04c
CL
316.Fa flags
317parameter with the bit
318.Dv GLOB_MAGCHAR
319set if
320.Fa pattern
f6ec3c7f
KB
321contained any of the special characters ``*'', ``?'' or ``['', cleared
322if not.
ae59e04c
CL
323.It Fa gl_pathv
324contains a pointer to a
325.Dv NULL Ns -terminated
326list of matched pathnames.
b4ee7c09 327However, if
ae59e04c 328.Fa gl_pathc
b4ee7c09 329is zero, the contents of
ae59e04c 330.Fa gl_pathv
f6ec3c7f 331are undefined.
ae59e04c
CL
332.El
333.Pp
b4ee7c09 334If
ae59e04c 335.Fn glob
b4ee7c09
KB
336terminates due to an error, it sets errno and returns one of the
337following non-zero constants, which are defined in the include
ae59e04c
CL
338file
339.Aq Pa glob.h :
340.Bl -tag -width GLOB_NOCHECK
341.It Dv GLOB_NOSPACE
b4ee7c09 342An attempt to allocate memory failed.
ae59e04c 343.It Dv GLOB_ABEND
b4ee7c09 344The scan was stopped because an error was encountered and either
ae59e04c
CL
345.Dv GLOB_ERR
346was set or
347.Fa (*errfunc)()
348returned non-zero.
349.El
350.Pp
b4ee7c09 351The arguments
ae59e04c 352.Fa pglob\->gl_pathc
b4ee7c09 353and
ae59e04c 354.Fa pglob\->gl_pathv
b4ee7c09 355are still set as specified above.
ae59e04c
CL
356.Sh SEE ALSO
357.Xr sh 1 ,
358.Xr fnmatch 3 ,
359.Xr wordexp 3 ,
360.Xr regexp 3
361.Sh STANDARDS
b4ee7c09 362The
ae59e04c
CL
363.Fn glob
364function is expected to be
365.St -p1003.2
366compatible with the exception
bb047aa3 367that the flags
7e0d0f77
KB
368.Dv GLOB_ALTDIRFUNC,
369.Dv GLOB_BRACE
370.Dv GLOB_MAGCHAR,
371.Dv GLOB_NOMAGIC,
372.Dv GLOB_QUOTE,
bb047aa3 373and
7e0d0f77 374.Dv GLOB_TILDE,
f6ec3c7f 375and the fields
ae59e04c 376.Fa gl_matchc
f6ec3c7f 377and
ae59e04c
CL
378.Fa gl_flags
379should not be used by applications striving for strict
380.Tn POSIX
381conformance.
382.Sh EXAMPLE
383A rough equivalent of
384.Ql "ls -l *.c *.h"
385can be obtained with the
b4ee7c09 386following code:
ae59e04c
CL
387.Bd -literal -offset indent
388GLOB_t g;
b4ee7c09
KB
389
390g.gl_offs = 2;
391glob("*.c", GLOB_DOOFFS, NULL, &g);
392glob("*.h", GLOB_DOOFFS | GLOB_APPEND, NULL, &g);
393g.gl_pathv[0] = "ls";
394g.gl_pathv[1] = "-l";
395execvp("ls", g.gl_pathv);
ae59e04c
CL
396.Ed
397.Sh HISTORY
398The
399.Fn glob
400and
401.Fn globfree
402functions are
403.Ud .
404.Sh BUGS
405Patterns longer than
406.Dv MAXPATHLEN
407may cause unchecked errors.
408.Pp
409The
410.Fn glob
411argument
b4ee7c09
KB
412may fail and set errno for any of the errors specified for the
413library routines
ae59e04c
CL
414.Xr stat 2 ,
415.Xr closedir 3 ,
416.Xr opendir 3 ,
417.Xr readdir 3 ,
418.Xr malloc 3 ,
b4ee7c09 419and
ae59e04c 420.Xr free 3 .