glob.xs

来自「source of perl for linux application,」· XS 代码 · 共 73 行

XS
73
字号
#include "EXTERN.h"#include "perl.h"#include "XSUB.h"#include "bsd_glob.h"#define MY_CXT_KEY "File::Glob::_guts" XS_VERSIONtypedef struct {    int		x_GLOB_ERROR;} my_cxt_t;START_MY_CXT#define GLOB_ERROR	(MY_CXT.x_GLOB_ERROR)#include "const-c.inc"#ifdef WIN32#define errfunc		NULL#elsestatic interrfunc(const char *foo, int bar) {  return !(bar == EACCES || bar == ENOENT || bar == ENOTDIR);}#endifMODULE = File::Glob		PACKAGE = File::GlobBOOT:{    MY_CXT_INIT;}voiddoglob(pattern,...)    char *patternPROTOTYPE: $;$PREINIT:    glob_t pglob;    int i;    int retval;    int flags = 0;    SV *tmp;PPCODE:    {	dMY_CXT;	/* 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);    }INCLUDE: const-xs.inc

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?