#include "EXTERN.h" #include "perl.h" #include "XSUB.h" #define NEED_newCONSTSUB #define NEED_sv_2pv_nolen #include "ppport.h" #include /* $Id: FnMatch.xs,v 1.2 2005/03/30 05:34:57 mjp Exp $ */ MODULE = File::FnMatch PACKAGE = File::FnMatch int fnmatch(pattern, ...) char * pattern PROTOTYPE: $$;$ CODE: char * string; int flags; if (items < 2 || items > 3) croak("Usage: File::FnMatch::fnmatch(pattern, string, flags=0)"); string = (char *)SvPV_nolen(ST(1)); if (items < 3) flags = 0; else flags = (int)SvIV(ST(2)); RETVAL = !(fnmatch(pattern, string, flags)); OUTPUT: RETVAL BOOT: { HV *stash = gv_stashpvn("File::FnMatch", 13, TRUE); struct { char *n; I32 v; } File__FnMatch__const[] = { #ifdef FNM_NOESCAPE {"FNM_NOESCAPE", FNM_NOESCAPE}, #endif #ifdef FNM_PATHNAME {"FNM_PATHNAME", FNM_PATHNAME}, #endif #ifdef FNM_FILE_NAME {"FNM_FILE_NAME", FNM_FILE_NAME}, #endif #ifdef FNM_PERIOD {"FNM_PERIOD", FNM_PERIOD}, #endif #ifdef FNM_LEADING_DIR {"FNM_LEADING_DIR", FNM_LEADING_DIR}, #endif #ifdef FNM_CASEFOLD {"FNM_CASEFOLD", FNM_CASEFOLD}, #endif #ifdef FNM_EXTMATCH {"FNM_EXTMATCH", FNM_EXTMATCH}, #endif {Nullch, 0}}; char *name; int i; for (i = 0; name = File__FnMatch__const[i].n; i++) { newCONSTSUB(stash, name, newSViv(File__FnMatch__const[i].v)); } }