Logo Search packages:      
Sourcecode: ksh version File versions  Download package

glob.h

/***********************************************************************
*                                                                      *
*               This software is part of the ast package               *
*          Copyright (c) 1985-2009 AT&T Intellectual Property          *
*                      and is licensed under the                       *
*                  Common Public License, Version 1.0                  *
*                    by AT&T Intellectual Property                     *
*                                                                      *
*                A copy of the License is available at                 *
*            http://www.opensource.org/licenses/cpl1.0.txt             *
*         (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9)         *
*                                                                      *
*              Information and Software Systems Research               *
*                            AT&T Research                             *
*                           Florham Park NJ                            *
*                                                                      *
*                 Glenn Fowler <gsf@research.att.com>                  *
*                  David Korn <dgk@research.att.com>                   *
*                   Phong Vo <kpv@research.att.com>                    *
*                                                                      *
***********************************************************************/
#pragma prototyped
/*
 * posix glob interface definitions with gnu extensions
 */

#ifndef _GLOB_H
#define _GLOB_H

#define GLOB_VERSION    20060717L

#include <stdlib.h>

struct dirent;
struct stat;

struct _glob_;
struct _globlist_;

typedef struct _glob_ glob_t;
typedef struct _globlist_ globlist_t;

struct _globlist_
{
      globlist_t* gl_next;
      char*       gl_begin;
      unsigned char     gl_flags;
      char        gl_path[1];
};

struct _glob_
{
      size_t            gl_pathc;
      char**            gl_pathv;
      size_t            gl_offs;
      globlist_t* gl_list;
      int         gl_flags;

      /* GLOB_DISC data -- memset(&gl,0,sizeof(gl)) before using! */

      const char* gl_fignore;
      const char* gl_suffix;
      unsigned char*    gl_intr;

      int         gl_delim;

      void*       gl_handle;
      void*       (*gl_diropen)(glob_t*, const char*);
      char*       (*gl_dirnext)(glob_t*, void*);
      void        (*gl_dirclose)(glob_t*, void*);
      int         (*gl_type)(glob_t*, const char*, int);
      int         (*gl_attr)(glob_t*, const char*, int);

      /* gnu extensions -- but how do you synthesize dirent and stat? */

      void*       (*gl_opendir)(const char*);
      struct dirent*    (*gl_readdir)(void*);
      void        (*gl_closedir)(void*);
      int         (*gl_stat)(const char*, struct stat*);
      int         (*gl_lstat)(const char*, struct stat*);

      /* ast additions */

      char*       (*gl_nextdir)(glob_t*, char*);
      unsigned long     gl_status;
      unsigned long     gl_version;
      unsigned short    gl_extra;

#ifdef _GLOB_PRIVATE_
      _GLOB_PRIVATE_
#else
      char*       gl_pad[23];
#endif

};

/* standard interface */
#define GLOB_APPEND     0x0001            /* append to previous         */
#define GLOB_DOOFFS     0x0002            /* gl_offs defines argv offset      */
#define GLOB_ERR  0x0004            /* abort on error       */
#define GLOB_MARK 0x0008            /* append / to directories    */
#define GLOB_NOCHECK    0x0010            /* nomatch is original pattern      */
#define GLOB_NOESCAPE   0x0020            /* don't treat \ specially    */
#define GLOB_NOSORT     0x0040            /* don't sort the list        */

/* extended interface */
#define GLOB_STARSTAR   0x0080            /* enable [/]**[/] expansion  */
#define GLOB_BRACE      0x0100            /* enable {...} expansion     */
#define GLOB_ICASE      0x0200            /* ignore case on match       */
#define GLOB_COMPLETE   0x0400            /* shell file completeion     */
#define GLOB_AUGMENTED  0x0800            /* augmented shell patterns   */
#define GLOB_STACK      0x1000            /* allocate on current stack  */
#define GLOB_LIST 0x2000            /* just create gl_list        */
#define GLOB_ALTDIRFUNC 0x4000            /* gnu discipline functions   */
#define GLOB_DISC 0x8000            /* discipline initialized     */

/* gl_status */
#define GLOB_NOTDIR     0x0001            /* last gl_dirnext() not a dir      */

/* gl_type return */
#define GLOB_NOTFOUND   0           /* does not exist       */
#define GLOB_DEV  1           /* exists but not DIR EXE REG */
#define GLOB_DIR  2           /* directory                  */
#define GLOB_EXE  3           /* executable regular file    */
#define GLOB_REG  4           /* regular file               */

/* error return values */
#define GLOB_ABORTED    1
#define GLOB_NOMATCH    2
#define GLOB_NOSPACE    3
#define GLOB_INTR 4
#define GLOB_APPERR     5
#define GLOB_NOSYS      6

#if _BLD_ast && defined(__EXPORT__)
#define extern          __EXPORT__
#endif

extern int  glob(const char*, int, int(*)(const char*,int), glob_t*);
extern void globfree(glob_t*);

#undef      extern

#endif /* _GLOB_H */

Generated by  Doxygen 1.6.0   Back to index