- Fix for possible unset uid/gid in toproto
 - Fix for default mtree style
 - Update libelf
 - Importing libexecinfo
 - Resynchronize GCC, mpc, gmp, mpfr
 - build.sh: Replace params with show-params.
     This has been done as the make target has been renamed in the same
     way, while a new target named params has been added. This new
     target generates a file containing all the parameters, instead of
     printing it on the console.
 - Update test48 with new etc/services (Fix by Ben Gras <ben@minix3.org)
     get getservbyport() out of the inner loop
Change-Id: Ie6ad5226fa2621ff9f0dee8782ea48f9443d2091
		
	
			
		
			
				
	
	
		
			532 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
			
		
		
	
	
			532 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
.\"	$NetBSD: glob.3,v 1.42 2012/12/27 21:17:47 christos Exp $
 | 
						|
.\"
 | 
						|
.\" Copyright (c) 1989, 1991, 1993, 1994
 | 
						|
.\"	The Regents of the University of California.  All rights reserved.
 | 
						|
.\"
 | 
						|
.\" This code is derived from software contributed to Berkeley by
 | 
						|
.\" Guido van Rossum.
 | 
						|
.\" Redistribution and use in source and binary forms, with or without
 | 
						|
.\" modification, are permitted provided that the following conditions
 | 
						|
.\" are met:
 | 
						|
.\" 1. Redistributions of source code must retain the above copyright
 | 
						|
.\"    notice, this list of conditions and the following disclaimer.
 | 
						|
.\" 2. Redistributions in binary form must reproduce the above copyright
 | 
						|
.\"    notice, this list of conditions and the following disclaimer in the
 | 
						|
.\"    documentation and/or other materials provided with the distribution.
 | 
						|
.\" 3. Neither the name of the University nor the names of its contributors
 | 
						|
.\"    may be used to endorse or promote products derived from this software
 | 
						|
.\"    without specific prior written permission.
 | 
						|
.\"
 | 
						|
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
 | 
						|
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
						|
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
						|
.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
 | 
						|
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
						|
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 | 
						|
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | 
						|
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 | 
						|
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
						|
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
						|
.\" SUCH DAMAGE.
 | 
						|
.\"
 | 
						|
.\"     @(#)glob.3	8.3 (Berkeley) 4/16/94
 | 
						|
.\"
 | 
						|
.Dd December 27, 2012
 | 
						|
.Dt GLOB 3
 | 
						|
.Os
 | 
						|
.Sh NAME
 | 
						|
.Nm glob ,
 | 
						|
.Nm globfree ,
 | 
						|
.Nm glob_pattern_p
 | 
						|
.Nd generate pathnames matching a pattern
 | 
						|
.Sh LIBRARY
 | 
						|
.Lb libc
 | 
						|
.Sh SYNOPSIS
 | 
						|
.In glob.h
 | 
						|
.Ft int
 | 
						|
.Fn glob "const char * restrict pattern" "int flags" "int (*errfunc)(const char *, int)" "glob_t * restrict pglob"
 | 
						|
.Ft void
 | 
						|
.Fn globfree "glob_t *pglob"
 | 
						|
.Ft int
 | 
						|
.Fn glob_pattern_p "const char *pattern" "int quote"
 | 
						|
.Sh DESCRIPTION
 | 
						|
The
 | 
						|
.Fn glob
 | 
						|
function
 | 
						|
is a pathname generator that implements the rules for file name pattern
 | 
						|
matching used by the shell.
 | 
						|
.Pp
 | 
						|
The include file
 | 
						|
.Pa glob.h
 | 
						|
defines the structure type
 | 
						|
.Fa glob_t ,
 | 
						|
which contains at least the following fields:
 | 
						|
.Bd -literal
 | 
						|
typedef struct {
 | 
						|
	size_t gl_pathc;	/* count of total paths so far */
 | 
						|
	size_t gl_matchc;	/* count of paths matching pattern */
 | 
						|
	size_t gl_offs;		/* reserved at beginning of gl_pathv */
 | 
						|
	int gl_flags;		/* returned flags */
 | 
						|
	char **gl_pathv;	/* list of paths matching pattern */
 | 
						|
} glob_t;
 | 
						|
.Ed
 | 
						|
.Pp
 | 
						|
The argument
 | 
						|
.Fa pattern
 | 
						|
is a pointer to a pathname pattern to be expanded.
 | 
						|
The
 | 
						|
.Fn glob
 | 
						|
argument
 | 
						|
matches all accessible pathnames against the pattern and creates
 | 
						|
a list of the pathnames that match.
 | 
						|
In order to have access to a pathname,
 | 
						|
.Fn glob
 | 
						|
requires search permission on every component of a path except the last
 | 
						|
and read permission on each directory of any filename component of
 | 
						|
.Fa pattern
 | 
						|
that contains any of the special characters
 | 
						|
.Ql * ,
 | 
						|
.Ql \&?
 | 
						|
or
 | 
						|
.Ql \&[ .
 | 
						|
.Pp
 | 
						|
The
 | 
						|
.Fn glob
 | 
						|
argument
 | 
						|
stores the number of matched pathnames into the
 | 
						|
.Fa gl_pathc
 | 
						|
field, and a pointer to a list of pointers to pathnames into the
 | 
						|
.Fa gl_pathv
 | 
						|
field.
 | 
						|
The first pointer after the last pathname is
 | 
						|
.Dv NULL .
 | 
						|
If the pattern does not match any pathnames, the returned number of
 | 
						|
matched paths is set to zero.
 | 
						|
.Pp
 | 
						|
It is the caller's responsibility to create the structure pointed to by
 | 
						|
.Fa pglob .
 | 
						|
The
 | 
						|
.Fn glob
 | 
						|
function allocates other space as needed, including the memory pointed
 | 
						|
to by
 | 
						|
.Fa gl_pathv .
 | 
						|
.Pp
 | 
						|
The argument
 | 
						|
.Fa flags
 | 
						|
is used to modify the behavior of
 | 
						|
.Fn glob .
 | 
						|
The value of
 | 
						|
.Fa flags
 | 
						|
is the bitwise inclusive
 | 
						|
.Tn OR
 | 
						|
of any of the following
 | 
						|
values defined in
 | 
						|
.Pa glob.h :
 | 
						|
.Bl -tag -width GLOB_ALTDIRFUNC
 | 
						|
.It Dv GLOB_APPEND
 | 
						|
Append pathnames generated to the ones from a previous call (or calls)
 | 
						|
to
 | 
						|
.Fn glob .
 | 
						|
The value of
 | 
						|
.Fa gl_pathc
 | 
						|
will be the total matches found by this call and the previous call(s).
 | 
						|
The pathnames are appended to, not merged with the pathnames returned by
 | 
						|
the previous call(s).
 | 
						|
Between calls, the caller must not change the setting of the
 | 
						|
.Dv GLOB_DOOFFS
 | 
						|
flag, nor change the value of
 | 
						|
.Fa gl_offs
 | 
						|
when
 | 
						|
.Dv GLOB_DOOFFS
 | 
						|
is set, nor (obviously) call
 | 
						|
.Fn globfree
 | 
						|
for
 | 
						|
.Fa pglob .
 | 
						|
.It Dv GLOB_DOOFFS
 | 
						|
Make use of the
 | 
						|
.Fa gl_offs
 | 
						|
field.
 | 
						|
If this flag is set,
 | 
						|
.Fa gl_offs
 | 
						|
is used to specify how many
 | 
						|
.Dv NULL
 | 
						|
pointers to prepend to the beginning
 | 
						|
of the
 | 
						|
.Fa gl_pathv
 | 
						|
field.
 | 
						|
In other words,
 | 
						|
.Fa gl_pathv
 | 
						|
will point to
 | 
						|
.Fa gl_offs
 | 
						|
.Dv NULL
 | 
						|
pointers,
 | 
						|
followed by
 | 
						|
.Fa gl_pathc
 | 
						|
pathname pointers, followed by a
 | 
						|
.Dv NULL
 | 
						|
pointer.
 | 
						|
.It Dv GLOB_ERR
 | 
						|
Causes
 | 
						|
.Fn glob
 | 
						|
to return when it encounters a directory that it cannot open or read.
 | 
						|
Ordinarily,
 | 
						|
.Fn glob
 | 
						|
continues to find matches.
 | 
						|
.It Dv GLOB_MARK
 | 
						|
Each pathname that is a directory that matches
 | 
						|
.Fa pattern
 | 
						|
has a slash
 | 
						|
appended.
 | 
						|
.It Dv GLOB_NOCHECK
 | 
						|
If
 | 
						|
.Fa pattern
 | 
						|
does not match any pathname, then
 | 
						|
.Fn glob
 | 
						|
returns a list
 | 
						|
consisting of only
 | 
						|
.Fa pattern ,
 | 
						|
with one level of backslash escapes removed,
 | 
						|
the number of total pathnames set to 1, and the number of matched
 | 
						|
pathnames set to 0.
 | 
						|
.It Dv GLOB_NOSORT
 | 
						|
By default, the pathnames are sorted in ascending
 | 
						|
.Tn ASCII
 | 
						|
order;
 | 
						|
this flag prevents that sorting (speeding up
 | 
						|
.Fn glob ) .
 | 
						|
.El
 | 
						|
.Pp
 | 
						|
The following values may also be included in
 | 
						|
.Fa flags ,
 | 
						|
however, they are non-standard extensions to
 | 
						|
.St -p1003.2 .
 | 
						|
.Bl -tag -width GLOB_ALTDIRFUNC
 | 
						|
.It Dv GLOB_ALTDIRFUNC
 | 
						|
The following additional fields in the pglob structure have been
 | 
						|
initialized with alternate functions for glob to use to open, read,
 | 
						|
and close directories and to get stat information on names found
 | 
						|
in those directories.
 | 
						|
.Bd -literal
 | 
						|
	void *(*gl_opendir)(const char * name);
 | 
						|
	struct dirent *(*gl_readdir)(void *);
 | 
						|
	void (*gl_closedir)(void *);
 | 
						|
	int (*gl_lstat)(const char *name, struct stat *st);
 | 
						|
	int (*gl_stat)(const char *name, struct stat *st);
 | 
						|
.Ed
 | 
						|
.Pp
 | 
						|
This extension is provided to allow programs such as
 | 
						|
.Xr restore 8
 | 
						|
to provide globbing from directories stored on tape.
 | 
						|
.It Dv GLOB_BRACE
 | 
						|
Pre-process the pattern string to expand
 | 
						|
.Ql {pat,pat,...}
 | 
						|
strings like
 | 
						|
.Xr csh 1 .
 | 
						|
The pattern
 | 
						|
.Ql {}
 | 
						|
is left unexpanded for historical reasons
 | 
						|
.Po
 | 
						|
.Xr csh 1
 | 
						|
does the same thing to ease typing of
 | 
						|
.Xr find 1
 | 
						|
patterns
 | 
						|
.Pc .
 | 
						|
.It Dv GLOB_LIMIT
 | 
						|
Limit the amount of memory used to store matched strings to
 | 
						|
.Li 64K ,
 | 
						|
the number of
 | 
						|
.Xr stat 2
 | 
						|
calls to 128, and the number of
 | 
						|
.Xr readdir 3
 | 
						|
calls to 16K.
 | 
						|
This option should be set for programs that can be coerced to a denial of
 | 
						|
service attack via patterns that expand to a very large number of matches,
 | 
						|
such as a long string of
 | 
						|
.Li */../*/..
 | 
						|
.It Dv GLOB_MAGCHAR
 | 
						|
Set by the
 | 
						|
.Fn glob
 | 
						|
function if the pattern included globbing characters.
 | 
						|
See the description of the usage of the
 | 
						|
.Fa gl_matchc
 | 
						|
structure member for more details.
 | 
						|
.It Dv GLOB_NOESCAPE
 | 
						|
Disable the use of the backslash
 | 
						|
.Pq Ql \e
 | 
						|
character for quoting.
 | 
						|
.It Dv GLOB_NOMAGIC
 | 
						|
Is the same as
 | 
						|
.Dv GLOB_NOCHECK
 | 
						|
but it only appends the
 | 
						|
.Fa pattern
 | 
						|
if it does not contain any of the special characters ``*'', ``?'' or ``[''.
 | 
						|
.Dv GLOB_NOMAGIC
 | 
						|
is provided to simplify implementing the historic
 | 
						|
.Xr csh 1
 | 
						|
globbing behavior and should probably not be used anywhere else.
 | 
						|
.It Dv GLOB_NO_DOTDIRS
 | 
						|
Hide
 | 
						|
.Sq Li \&.
 | 
						|
and
 | 
						|
.Sq Li \&..
 | 
						|
from metacharacter matches, regardless of whether
 | 
						|
.Dv GLOB_PERIOD
 | 
						|
is set and whether the pattern component begins with a literal period.
 | 
						|
.It Dv GLOB_PERIOD
 | 
						|
Allow metacharacters to match a leading period in a filename.
 | 
						|
.It Dv GLOB_STAR
 | 
						|
Indicates that two adjacent
 | 
						|
.Li *
 | 
						|
characters will do a recursive match in all subdirs, without following
 | 
						|
symbolic links and three adjacent
 | 
						|
.Li *
 | 
						|
characters will also follow symbolic links.
 | 
						|
.It Dv GLOB_TILDE
 | 
						|
Expand patterns that start with
 | 
						|
.Ql ~
 | 
						|
to user name home directories.
 | 
						|
.El
 | 
						|
.Pp
 | 
						|
If, during the search, a directory is encountered that cannot be opened
 | 
						|
or read and
 | 
						|
.Fa errfunc
 | 
						|
is
 | 
						|
.Pf non- Dv NULL ,
 | 
						|
.Fn glob
 | 
						|
calls
 | 
						|
.Fa (*errfunc)(path, errno) .
 | 
						|
This may be unintuitive: a pattern like
 | 
						|
.Ql */Makefile
 | 
						|
will try to
 | 
						|
.Xr stat 2
 | 
						|
.Ql foo/Makefile
 | 
						|
even if
 | 
						|
.Ql foo
 | 
						|
is not a directory, resulting in a
 | 
						|
call to
 | 
						|
.Fa errfunc .
 | 
						|
The error routine can suppress this action by testing for
 | 
						|
.Dv ENOENT
 | 
						|
and
 | 
						|
.Dv ENOTDIR ;
 | 
						|
however, the
 | 
						|
.Dv GLOB_ERR
 | 
						|
flag will still cause an immediate
 | 
						|
return when this happens.
 | 
						|
.Pp
 | 
						|
If
 | 
						|
.Fa errfunc
 | 
						|
returns non-zero,
 | 
						|
.Fn glob
 | 
						|
stops the scan and returns
 | 
						|
.Dv GLOB_ABORTED
 | 
						|
after setting
 | 
						|
.Fa gl_pathc
 | 
						|
and
 | 
						|
.Fa gl_pathv
 | 
						|
to reflect any paths already matched.
 | 
						|
This also happens if an error is encountered and
 | 
						|
.Dv GLOB_ERR
 | 
						|
is set in
 | 
						|
.Fa flags ,
 | 
						|
regardless of the return value of
 | 
						|
.Fa errfunc ,
 | 
						|
if called.
 | 
						|
If
 | 
						|
.Dv GLOB_ERR
 | 
						|
is not set and either
 | 
						|
.Fa errfunc
 | 
						|
is
 | 
						|
.Dv NULL
 | 
						|
or
 | 
						|
.Fa errfunc
 | 
						|
returns zero, the error is ignored.
 | 
						|
.Pp
 | 
						|
The
 | 
						|
.Fn globfree
 | 
						|
function frees any space associated with
 | 
						|
.Fa pglob
 | 
						|
from a previous call(s) to
 | 
						|
.Fn glob .
 | 
						|
.Pp
 | 
						|
The
 | 
						|
.Fn glob_pattern_p
 | 
						|
returns
 | 
						|
.Dv 1
 | 
						|
if the
 | 
						|
.Fa pattern
 | 
						|
has any special characters that
 | 
						|
.Fn glob
 | 
						|
will interpret and
 | 
						|
.Dv 0
 | 
						|
otherwise.
 | 
						|
If the
 | 
						|
.Fa quote
 | 
						|
argument is non-zero, then backslash quoted characters are ignored.
 | 
						|
.Pp
 | 
						|
The historical
 | 
						|
.Dv GLOB_QUOTE
 | 
						|
flag is no longer supported.
 | 
						|
Per
 | 
						|
.St -p1003.2-92 ,
 | 
						|
backslash escaping of special characters is the default behaviour;
 | 
						|
it may be disabled by specifying the
 | 
						|
.Dv GLOB_NOESCAPE
 | 
						|
flag.
 | 
						|
.Sh RETURN VALUES
 | 
						|
On successful completion,
 | 
						|
.Fn glob
 | 
						|
returns zero.
 | 
						|
In addition the fields of
 | 
						|
.Fa pglob
 | 
						|
contain the values described below:
 | 
						|
.Bl -tag -width GLOB_NOCHECK
 | 
						|
.It Fa gl_pathc
 | 
						|
contains the total number of matched pathnames so far.
 | 
						|
This includes other matches from previous invocations of
 | 
						|
.Fn glob
 | 
						|
if
 | 
						|
.Dv GLOB_APPEND
 | 
						|
was specified.
 | 
						|
.It Fa gl_matchc
 | 
						|
contains the number of matched pathnames in the current invocation of
 | 
						|
.Fn glob .
 | 
						|
.It Fa gl_flags
 | 
						|
contains a copy of the
 | 
						|
.Fa flags
 | 
						|
parameter with the bit
 | 
						|
.Dv GLOB_MAGCHAR
 | 
						|
set if
 | 
						|
.Fa pattern
 | 
						|
contained any of the special characters ``*'', ``?'' or ``['', cleared
 | 
						|
if not.
 | 
						|
.It Fa gl_pathv
 | 
						|
contains a pointer to a
 | 
						|
.Dv NULL Ns -terminated
 | 
						|
list of matched pathnames.
 | 
						|
However, if
 | 
						|
.Fa gl_pathc
 | 
						|
is zero, the contents of
 | 
						|
.Fa gl_pathv
 | 
						|
are undefined.
 | 
						|
.El
 | 
						|
.Pp
 | 
						|
If
 | 
						|
.Fn glob
 | 
						|
terminates due to an error, it sets
 | 
						|
.Va errno
 | 
						|
and returns one of the following non-zero constants, which are defined
 | 
						|
in the include file
 | 
						|
.In glob.h :
 | 
						|
.Bl -tag -width GLOB_ABORTEDXXX
 | 
						|
.It Dv GLOB_ABORTED
 | 
						|
The scan was stopped because an error was encountered and either
 | 
						|
.Dv GLOB_ERR
 | 
						|
was set or
 | 
						|
.Fa (*errfunc)()
 | 
						|
returned non-zero.
 | 
						|
.It Dv GLOB_NOMATCH
 | 
						|
The pattern does not match any existing pathname, and
 | 
						|
.Dv GLOB_NOCHECK
 | 
						|
was not set in
 | 
						|
.Dv flags .
 | 
						|
.It Dv GLOB_NOSPACE
 | 
						|
An attempt to allocate memory failed, or if
 | 
						|
.Va errno
 | 
						|
was 0
 | 
						|
.Li GLOB_LIMIT
 | 
						|
was specified in the flags and
 | 
						|
.Li ARG_MAX
 | 
						|
patterns were matched.
 | 
						|
.El
 | 
						|
.Pp
 | 
						|
The historical
 | 
						|
.Dv GLOB_ABEND
 | 
						|
return constant is no longer supported.
 | 
						|
Portable applications should use the
 | 
						|
.Dv GLOB_ABORTED
 | 
						|
constant instead.
 | 
						|
.Pp
 | 
						|
The arguments
 | 
						|
.Fa pglob\-\*[Gt]gl_pathc
 | 
						|
and
 | 
						|
.Fa pglob\-\*[Gt]gl_pathv
 | 
						|
are still set as specified above.
 | 
						|
.Sh ENVIRONMENT
 | 
						|
.Bl -tag -width HOME -compact
 | 
						|
.It Ev HOME
 | 
						|
If defined, used as the home directory of the current user in
 | 
						|
tilde expansions.
 | 
						|
.El
 | 
						|
.Sh EXAMPLES
 | 
						|
A rough equivalent of
 | 
						|
.Ql "ls -l *.c *.h"
 | 
						|
can be obtained with the
 | 
						|
following code:
 | 
						|
.Bd -literal -offset indent
 | 
						|
glob_t g;
 | 
						|
 | 
						|
g.gl_offs = 2;
 | 
						|
glob("*.c", GLOB_DOOFFS, NULL, \*[Am]g);
 | 
						|
glob("*.h", GLOB_DOOFFS | GLOB_APPEND, NULL, \*[Am]g);
 | 
						|
g.gl_pathv[0] = "ls";
 | 
						|
g.gl_pathv[1] = "-l";
 | 
						|
execvp("ls", g.gl_pathv);
 | 
						|
.Ed
 | 
						|
.Sh SEE ALSO
 | 
						|
.Xr sh 1 ,
 | 
						|
.Xr fnmatch 3 ,
 | 
						|
.Xr regexp 3 ,
 | 
						|
.Xr glob 7
 | 
						|
.Sh STANDARDS
 | 
						|
The
 | 
						|
.Fn glob
 | 
						|
function is expected to be
 | 
						|
.St -p1003.2
 | 
						|
compatible with the exception
 | 
						|
that the flags
 | 
						|
.Dv GLOB_ALTDIRFUNC ,
 | 
						|
.Dv GLOB_BRACE ,
 | 
						|
.Dv GLOB_LIMIT ,
 | 
						|
.Dv GLOB_MAGCHAR ,
 | 
						|
.Dv GLOB_NOESCAPE ,
 | 
						|
.Dv GLOB_NOMAGIC ,
 | 
						|
.Dv GLOB_NO_DOTDIRS ,
 | 
						|
.Dv GLOB_PERIOD ,
 | 
						|
.Dv GLOB_STAR ,
 | 
						|
.Dv GLOB_TILDE ,
 | 
						|
and the fields
 | 
						|
.Fa gl_matchc
 | 
						|
and
 | 
						|
.Fa gl_flags
 | 
						|
should not be used by applications striving for strict
 | 
						|
.Tn POSIX
 | 
						|
conformance.
 | 
						|
.Sh HISTORY
 | 
						|
The
 | 
						|
.Fn glob
 | 
						|
and
 | 
						|
.Fn globfree
 | 
						|
functions first appeared in
 | 
						|
.Bx 4.4 .
 | 
						|
The
 | 
						|
.Fn glob_pattern_p
 | 
						|
function is modelled after the one found in glibc.
 | 
						|
.Sh BUGS
 | 
						|
Patterns longer than
 | 
						|
.Dv MAXPATHLEN
 | 
						|
may cause unchecked errors.
 | 
						|
.Pp
 | 
						|
The
 | 
						|
.Fn glob
 | 
						|
function may fail and set
 | 
						|
.Va errno
 | 
						|
for any of the errors specified for the library routines
 | 
						|
.Xr stat 2 ,
 | 
						|
.Xr closedir 3 ,
 | 
						|
.Xr opendir 3 ,
 | 
						|
.Xr readdir 3 ,
 | 
						|
.Xr malloc 3 ,
 | 
						|
and
 | 
						|
.Xr free 3 .
 |