diff options
Diffstat (limited to 'contrib/perl5/ext/File/Glob/Glob.xs')
-rw-r--r-- | contrib/perl5/ext/File/Glob/Glob.xs | 208 |
1 files changed, 0 insertions, 208 deletions
diff --git a/contrib/perl5/ext/File/Glob/Glob.xs b/contrib/perl5/ext/File/Glob/Glob.xs deleted file mode 100644 index ee8c0c9..0000000 --- a/contrib/perl5/ext/File/Glob/Glob.xs +++ /dev/null @@ -1,208 +0,0 @@ -#include "EXTERN.h" -#include "perl.h" -#include "XSUB.h" - -#include "bsd_glob.h" - -/* XXX: need some thread awareness */ -static int GLOB_ERROR = 0; - -static double -constant(char *name, int arg) -{ - errno = 0; - if (strlen(name) <= 5) - goto not_there; - switch (*(name+5)) { - case 'A': - if (strEQ(name, "GLOB_ABEND")) -#ifdef GLOB_ABEND - return GLOB_ABEND; -#else - goto not_there; -#endif - if (strEQ(name, "GLOB_ALPHASORT")) -#ifdef GLOB_ALPHASORT - return GLOB_ALPHASORT; -#else - goto not_there; -#endif - if (strEQ(name, "GLOB_ALTDIRFUNC")) -#ifdef GLOB_ALTDIRFUNC - return GLOB_ALTDIRFUNC; -#else - goto not_there; -#endif - break; - case 'B': - if (strEQ(name, "GLOB_BRACE")) -#ifdef GLOB_BRACE - return GLOB_BRACE; -#else - goto not_there; -#endif - break; - case 'C': - break; - case 'D': - break; - case 'E': - if (strEQ(name, "GLOB_ERR")) -#ifdef GLOB_ERR - return GLOB_ERR; -#else - goto not_there; -#endif - if (strEQ(name, "GLOB_ERROR")) - return GLOB_ERROR; - break; - case 'F': - break; - case 'G': - break; - case 'H': - break; - case 'I': - break; - case 'J': - break; - case 'K': - break; - case 'L': - break; - case 'M': - if (strEQ(name, "GLOB_MARK")) -#ifdef GLOB_MARK - return GLOB_MARK; -#else - goto not_there; -#endif - break; - case 'N': - if (strEQ(name, "GLOB_NOCASE")) -#ifdef GLOB_NOCASE - return GLOB_NOCASE; -#else - goto not_there; -#endif - if (strEQ(name, "GLOB_NOCHECK")) -#ifdef GLOB_NOCHECK - return GLOB_NOCHECK; -#else - goto not_there; -#endif - if (strEQ(name, "GLOB_NOMAGIC")) -#ifdef GLOB_NOMAGIC - return GLOB_NOMAGIC; -#else - goto not_there; -#endif - if (strEQ(name, "GLOB_NOSORT")) -#ifdef GLOB_NOSORT - return GLOB_NOSORT; -#else - goto not_there; -#endif - if (strEQ(name, "GLOB_NOSPACE")) -#ifdef GLOB_NOSPACE - return GLOB_NOSPACE; -#else - goto not_there; -#endif - break; - case 'O': - break; - case 'P': - break; - case 'Q': - if (strEQ(name, "GLOB_QUOTE")) -#ifdef GLOB_QUOTE - return GLOB_QUOTE; -#else - goto not_there; -#endif - break; - case 'R': - break; - case 'S': - break; - case 'T': - if (strEQ(name, "GLOB_TILDE")) -#ifdef GLOB_TILDE - return GLOB_TILDE; -#else - goto not_there; -#endif - break; - case 'U': - break; - case 'V': - break; - case 'W': - break; - case 'X': - break; - case 'Y': - break; - case 'Z': - break; - } - errno = EINVAL; - return 0; - -not_there: - errno = ENOENT; - return 0; -} - -#ifdef WIN32 -#define errfunc NULL -#else -int -errfunc(const char *foo, int bar) { - return !(bar == ENOENT || bar == ENOTDIR); -} -#endif - -MODULE = File::Glob PACKAGE = File::Glob - -void -doglob(pattern,...) - char *pattern -PROTOTYPE: $;$ -PREINIT: - glob_t pglob; - int i; - int retval; - int flags = 0; - SV *tmp; -PPCODE: - { - /* allow for optional flags argument */ - if (items > 1) { - flags = (int) SvIV(ST(1)); - } - - /* call glob */ - retval = bsd_glob(pattern, flags, errfunc, &pglob); - GLOB_ERROR = retval; - - /* return any matches found */ - EXTEND(sp, pglob.gl_pathc); - for (i = 0; i < pglob.gl_pathc; i++) { - /* printf("# bsd_glob: %s\n", pglob.gl_pathv[i]); */ - tmp = sv_2mortal(newSVpvn(pglob.gl_pathv[i], - strlen(pglob.gl_pathv[i]))); - TAINT; - SvTAINT(tmp); - PUSHs(tmp); - } - - bsd_globfree(&pglob); - } - -double -constant(name,arg) - char *name - int arg -PROTOTYPE: $$ |