(linenum→info "unix/slp.c:2238")

glibc/2.7/posix/glob.h

    1: /* Copyright (C) 1991,92,95-98,2000,2001,2004 Free Software Foundation, Inc.
    2:    This file is part of the GNU C Library.
    3: 
    4:    The GNU C Library is free software; you can redistribute it and/or
    5:    modify it under the terms of the GNU Lesser General Public
    6:    License as published by the Free Software Foundation; either
    7:    version 2.1 of the License, or (at your option) any later version.
    8: 
    9:    The GNU C Library is distributed in the hope that it will be useful,
   10:    but WITHOUT ANY WARRANTY; without even the implied warranty of
   11:    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   12:    Lesser General Public License for more details.
   13: 
   14:    You should have received a copy of the GNU Lesser General Public
   15:    License along with the GNU C Library; if not, write to the Free
   16:    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
   17:    02111-1307 USA.  */
   18: 
   19: #ifndef _GLOB_H
   20: #define _GLOB_H 1
   21: 
   22: #include <sys/cdefs.h>
   23: 
   24: __BEGIN_DECLS
   25: 
   26: /* We need `size_t' for the following definitions.  */
   27: #ifndef __size_t
   28: # if defined __GNUC__ && __GNUC__ >= 2
   29: typedef __SIZE_TYPE__ __size_t;
   30: #  ifdef __USE_XOPEN
   31: typedef __SIZE_TYPE__ size_t;
   32: #  endif
   33: # else
   34: #  include <stddef.h>
   35: #  ifndef __size_t
   36: #   define __size_t size_t
   37: #  endif
   38: # endif
   39: #else
   40: /* The GNU CC stddef.h version defines __size_t as empty.  We need a real
   41:    definition.  */
   42: # undef __size_t
   43: # define __size_t size_t
   44: #endif
   45: 
   46: /* Bits set in the FLAGS argument to `glob'.  */
   47: #define GLOB_ERR        (1 << 0)/* Return on read errors.  */
   48: #define GLOB_MARK       (1 << 1)/* Append a slash to each name.  */
   49: #define GLOB_NOSORT     (1 << 2)/* Don't sort the names.  */
   50: #define GLOB_DOOFFS     (1 << 3)/* Insert PGLOB->gl_offs NULLs.  */
   51: #define GLOB_NOCHECK    (1 << 4)/* If nothing matches, return the pattern.  */
   52: #define GLOB_APPEND     (1 << 5)/* Append to results of a previous call.  */
   53: #define GLOB_NOESCAPE   (1 << 6)/* Backslashes don't quote metacharacters.  */
   54: #define GLOB_PERIOD     (1 << 7)/* Leading `.' can be matched by metachars.  */
   55: 
   56: #if !defined __USE_POSIX2 || defined __USE_BSD || defined __USE_GNU
   57: # define GLOB_MAGCHAR    (1 << 8)/* Set in gl_flags if any metachars seen.  */
   58: # define GLOB_ALTDIRFUNC (1 << 9)/* Use gl_opendir et al functions.  */
   59: # define GLOB_BRACE      (1 << 10)/* Expand "{a,b}" to "a" "b".  */
   60: # define GLOB_NOMAGIC    (1 << 11)/* If no magic chars, return the pattern.  */
   61: # define GLOB_TILDE      (1 << 12)/* Expand ~user and ~ to home directories. */
   62: # define GLOB_ONLYDIR    (1 << 13)/* Match only directories.  */
   63: # define GLOB_TILDE_CHECK (1 << 14)/* Like GLOB_TILDE but return an error
   64:                                       if the user name is not available.  */
   65: # define __GLOB_FLAGS   (GLOB_ERR|GLOB_MARK|GLOB_NOSORT|GLOB_DOOFFS| \
   66:                          GLOB_NOESCAPE|GLOB_NOCHECK|GLOB_APPEND|     \
   67:                          GLOB_PERIOD|GLOB_ALTDIRFUNC|GLOB_BRACE|     \
   68:                          GLOB_NOMAGIC|GLOB_TILDE|GLOB_ONLYDIR|GLOB_TILDE_CHECK)
   69: #else
   70: # define __GLOB_FLAGS   (GLOB_ERR|GLOB_MARK|GLOB_NOSORT|GLOB_DOOFFS| \
   71:                          GLOB_NOESCAPE|GLOB_NOCHECK|GLOB_APPEND|     \
   72:                          GLOB_PERIOD)
   73: #endif
   74: 
   75: /* Error returns from `glob'.  */
   76: #define GLOB_NOSPACE    1  /* Ran out of memory.  */
   77: #define GLOB_ABORTED    2  /* Read error.  */
   78: #define GLOB_NOMATCH    3  /* No matches found.  */
   79: #define GLOB_NOSYS      4    /* Not implemented.  */
   80: #ifdef __USE_GNU
   81: /* Previous versions of this file defined GLOB_ABEND instead of
   82:    GLOB_ABORTED.  Provide a compatibility definition here.  */
   83: # define GLOB_ABEND GLOB_ABORTED
   84: #endif
   85: 
   86: /* Structure describing a globbing run.  */
   87: #ifdef __USE_GNU
   88: struct stat;
   89: #endif
   90: typedef struct
   91:   {
   92:     __size_t gl_pathc;          /* Count of paths matched by the pattern.  */
   93:     char **gl_pathv;            /* List of matched pathnames.  */
   94:     __size_t gl_offs;           /* Slots to reserve in `gl_pathv'.  */
   95:     int gl_flags;               /* Set to FLAGS, maybe | GLOB_MAGCHAR.  */
   96: 
   97:     /* If the GLOB_ALTDIRFUNC flag is set, the following functions
   98:        are used instead of the normal file access functions.  */
   99:     void (*gl_closedir) (void *);
  100: #ifdef __USE_GNU
  101:     struct dirent *(*gl_readdir) (void *);
  102: #else
  103:     void *(*gl_readdir) (void *);
  104: #endif
  105:     void *(*gl_opendir) (__const char *);
  106: #ifdef __USE_GNU
  107:     int (*gl_lstat) (__const char *__restrict, struct stat *__restrict);
  108:     int (*gl_stat) (__const char *__restrict, struct stat *__restrict);
  109: #else
  110:     int (*gl_lstat) (__const char *__restrict, void *__restrict);
  111:     int (*gl_stat) (__const char *__restrict, void *__restrict);
  112: #endif
  113:   } glob_t;
  114: 
  115: #ifdef __USE_LARGEFILE64
  116: # ifdef __USE_GNU
  117: struct stat64;
  118: # endif
  119: typedef struct
  120:   {
  121:     __size_t gl_pathc;
  122:     char **gl_pathv;
  123:     __size_t gl_offs;
  124:     int gl_flags;
  125: 
  126:     /* If the GLOB_ALTDIRFUNC flag is set, the following functions
  127:        are used instead of the normal file access functions.  */
  128:     void (*gl_closedir) (void *);
  129: # ifdef __USE_GNU
  130:     struct dirent64 *(*gl_readdir) (void *);
  131: # else
  132:     void *(*gl_readdir) (void *);
  133: # endif
  134:     void *(*gl_opendir) (__const char *);
  135: # ifdef __USE_GNU
  136:     int (*gl_lstat) (__const char *__restrict, struct stat64 *__restrict);
  137:     int (*gl_stat) (__const char *__restrict, struct stat64 *__restrict);
  138: # else
  139:     int (*gl_lstat) (__const char *__restrict, void *__restrict);
  140:     int (*gl_stat) (__const char *__restrict, void *__restrict);
  141: # endif
  142:   } glob64_t;
  143: #endif
  144: 
  145: #if __USE_FILE_OFFSET64 && __GNUC__ < 2
  146: # define glob glob64
  147: # define globfree globfree64
  148: #endif
  149: 
  150: /* Do glob searching for PATTERN, placing results in PGLOB.
  151:    The bits defined above may be set in FLAGS.
  152:    If a directory cannot be opened or read and ERRFUNC is not nil,
  153:    it is called with the pathname that caused the error, and the
  154:    `errno' value from the failing call; if it returns non-zero
  155:    `glob' returns GLOB_ABEND; if it returns zero, the error is ignored.
  156:    If memory cannot be allocated for PGLOB, GLOB_NOSPACE is returned.
  157:    Otherwise, `glob' returns zero.  */
  158: #if !defined __USE_FILE_OFFSET64 || __GNUC__ < 2
  159: extern int glob (__const char *__restrict __pattern, int __flags,
  160:                  int (*__errfunc) (__const char *, int),
  161:                  glob_t *__restrict __pglob) __THROW;
  162: 
  163: /* Free storage allocated in PGLOB by a previous `glob' call.  */
  164: extern void globfree (glob_t *__pglob) __THROW;
  165: #else
  166: extern int __REDIRECT_NTH (glob, (__const char *__restrict __pattern,
  167:                                   int __flags,
  168:                                   int (*__errfunc) (__const char *, int),
  169:                                   glob_t *__restrict __pglob), glob64);
  170: 
  171: extern void __REDIRECT_NTH (globfree, (glob_t *__pglob), globfree64);
  172: #endif
  173: 
  174: #ifdef __USE_LARGEFILE64
  175: extern int glob64 (__const char *__restrict __pattern, int __flags,
  176:                    int (*__errfunc) (__const char *, int),
  177:                    glob64_t *__restrict __pglob) __THROW;
  178: 
  179: extern void globfree64 (glob64_t *__pglob) __THROW;
  180: #endif
  181: 
  182: 
  183: #ifdef __USE_GNU
  184: /* Return nonzero if PATTERN contains any metacharacters.
  185:    Metacharacters can be quoted with backslashes if QUOTE is nonzero.
  186: 
  187:    This function is not part of the interface specified by POSIX.2
  188:    but several programs want to use it.  */
  189: extern int glob_pattern_p (__const char *__pattern, int __quote) __THROW;
  190: #endif
  191: 
  192: __END_DECLS
  193: 
  194: #endif /* glob.h  */
Syntax (Markdown)