update from main archive 961114
[kopensolaris-gnu/glibc.git] / posix / glob.h
1 /* Copyright (C) 1991, 1992, 1995, 1996 Free Software Foundation, Inc.
2
3    This file is part of the GNU C Library.  Its master source is NOT part of
4    the C library, however.  The master source lives in /gd/gnu/lib.
5
6    The GNU C Library is free software; you can redistribute it and/or
7    modify it under the terms of the GNU Library General Public License as
8    published by the Free Software Foundation; either version 2 of the
9    License, or (at your option) any later version.
10
11    The GNU C Library is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14    Library General Public License for more details.
15
16    You should have received a copy of the GNU Library General Public
17    License along with the GNU C Library; see the file COPYING.LIB.  If not,
18    write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19    Boston, MA 02111-1307, USA.  */
20
21 #ifndef _GLOB_H
22
23 #define _GLOB_H 1
24
25 #ifdef  __cplusplus
26 extern "C"
27 {
28 #endif
29
30 #undef  __ptr_t
31 #if (defined (__cplusplus) || (defined (__STDC__) && __STDC__) \
32      || defined (WIN32))
33 #undef  __P
34 #define __P(protos)     protos
35 #define __ptr_t void *
36 #else /* Not C++ or ANSI C.  */
37 #undef  __P
38 #define __P(protos)     ()
39 #undef  const
40 #define const
41 #define __ptr_t char *
42 #endif /* C++ or ANSI C.  */
43
44 /* Bits set in the FLAGS argument to `glob'.  */
45 #define GLOB_ERR        (1 << 0)/* Return on read errors.  */
46 #define GLOB_MARK       (1 << 1)/* Append a slash to each name.  */
47 #define GLOB_NOSORT     (1 << 2)/* Don't sort the names.  */
48 #define GLOB_DOOFFS     (1 << 3)/* Insert PGLOB->gl_offs NULLs.  */
49 #define GLOB_NOCHECK    (1 << 4)/* If nothing matches, return the pattern.  */
50 #define GLOB_APPEND     (1 << 5)/* Append to results of a previous call.  */
51 #define GLOB_NOESCAPE   (1 << 6)/* Backslashes don't quote metacharacters.  */
52 #define GLOB_PERIOD     (1 << 7)/* Leading `.' can be matched by metachars.  */
53 #define __GLOB_FLAGS    (GLOB_ERR|GLOB_MARK|GLOB_NOSORT|GLOB_DOOFFS| \
54                          GLOB_NOESCAPE|GLOB_NOCHECK|GLOB_APPEND|     \
55                          GLOB_PERIOD|GLOB_ALTDIRFUNC|GLOB_BRACE|     \
56                          GLOB_NOMAGIC|GLOB_TILDE)
57
58 #if !defined (_POSIX_C_SOURCE) || _POSIX_C_SOURCE < 2 || defined (_BSD_SOURCE)
59 #define GLOB_MAGCHAR    (1 << 8)/* Set in gl_flags if any metachars seen.  */
60 #define GLOB_ALTDIRFUNC (1 << 9)/* Use gl_opendir et al functions.  */
61 #define GLOB_BRACE      (1 << 10)/* Expand "{a,b}" to "a" "b".  */
62 #define GLOB_NOMAGIC    (1 << 11)/* If no magic chars, return the pattern.  */
63 #define GLOB_TILDE      (1 <<12)/* Expand ~user and ~ to home directories.  */
64 #endif
65
66 /* Error returns from `glob'.  */
67 #define GLOB_NOSPACE    1       /* Ran out of memory.  */
68 #define GLOB_ABEND      2       /* Read error.  */
69 #define GLOB_NOMATCH    3       /* No matches found.  */
70
71 /* Structure describing a globbing run.  */
72 #if !defined (_AMIGA) && !defined (VMS) /* Buggy compiler.   */
73 struct stat;
74 #endif
75 typedef struct
76   {
77     int gl_pathc;               /* Count of paths matched by the pattern.  */
78     char **gl_pathv;            /* List of matched pathnames.  */
79     int gl_offs;                /* Slots to reserve in `gl_pathv'.  */
80     int gl_flags;               /* Set to FLAGS, maybe | GLOB_MAGCHAR.  */
81
82     /* If the GLOB_ALTDIRFUNC flag is set, the following functions
83        are used instead of the normal file access functions.  */
84     void (*gl_closedir) __P ((void *));
85     struct dirent *(*gl_readdir) __P ((void *));
86     __ptr_t (*gl_opendir) __P ((const char *));
87     int (*gl_lstat) __P ((const char *, struct stat *));
88     int (*gl_stat) __P ((const char *, struct stat *));
89   } glob_t;
90
91 /* Do glob searching for PATTERN, placing results in PGLOB.
92    The bits defined above may be set in FLAGS.
93    If a directory cannot be opened or read and ERRFUNC is not nil,
94    it is called with the pathname that caused the error, and the
95    `errno' value from the failing call; if it returns non-zero
96    `glob' returns GLOB_ABEND; if it returns zero, the error is ignored.
97    If memory cannot be allocated for PGLOB, GLOB_NOSPACE is returned.
98    Otherwise, `glob' returns zero.  */
99 extern int glob __P ((const char *__pattern, int __flags,
100                       int (*__errfunc) __P ((const char *, int)),
101                       glob_t *__pglob));
102
103 /* Free storage allocated in PGLOB by a previous `glob' call.  */
104 extern void globfree __P ((glob_t *__pglob));
105
106
107 #ifdef  __cplusplus
108 }
109 #endif
110
111 #endif /* glob.h  */