File-BSDGlob

 view release on metacpan or  search on metacpan

BSDGlob.xs  view on Meta::CPAN

	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::BSDGlob		PACKAGE = File::BSDGlob

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(newSVpv(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:



( run in 0.836 second using v1.01-cache-2.11-cpan-5511b514fd6 )