// glob.h — POSIX pathname expansion.
//
// glob(pattern, flags, errfunc, &gb) iterates the directory portion
// of `pattern` via the GS/OS Get_Dir_Entry ($201C) call and stashes
// matches (against `pattern`'s leaf via fnmatch) into gb.gl_pathv.
// On a stub-only build (no real GS/OS dispatcher), glob() returns
// GLOB_NOMATCH with errno=ENOSYS unless GLOB_NOCHECK is set, in
// which case it returns a single-element result containing the
// original pattern.
//
// globfree() releases the malloc'd gl_pathv vector + entries.
#ifndef _GLOB_H
#define _GLOB_H

#ifdef __cplusplus
extern "C" {
#endif

typedef unsigned long size_t;

typedef struct {
    size_t gl_pathc;
    char **gl_pathv;
    size_t gl_offs;
} glob_t;

#define GLOB_NOSPACE   1
#define GLOB_ABORTED   2
#define GLOB_NOMATCH   3

#define GLOB_ERR       0x01
#define GLOB_MARK      0x02
#define GLOB_NOSORT    0x04
#define GLOB_NOCHECK   0x10
#define GLOB_NOESCAPE  0x40

int  glob(const char *pattern, int flags,
          int (*errfunc)(const char *, int),
          glob_t *pglob);
void globfree(glob_t *pglob);

#ifdef __cplusplus
}
#endif

#endif
