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