1 #include "EXTERN.h" 2 #include "perl.h" 3 #include "XSUB.h" 4 5 #define NEED_newCONSTSUB 6 #define NEED_sv_2pv_nolen 7 #include "ppport.h" 8 9 #include <fnmatch.h> 10 11 /* $Id: FnMatch.xs,v 1.2 2005/03/30 05:34:57 mjp Exp $ */ 12 13 MODULE = File::FnMatch PACKAGE = File::FnMatch 14 15 int 16 fnmatch(pattern, ...) 17 char * pattern 18 19 PROTOTYPE: $$;$ 20 21 CODE: 22 char * string; 23 int flags; 24 25 if (items < 2 || items > 3) 26 croak("Usage: File::FnMatch::fnmatch(pattern, string, flags=0)"); 27 28 string = (char *)SvPV_nolen(ST(1)); 29 30 if (items < 3) 31 flags = 0; 32 else 33 flags = (int)SvIV(ST(2)); 34 35 RETVAL = !(fnmatch(pattern, string, flags)); 36 37 OUTPUT: 38 RETVAL 39 40 BOOT: 41 { 42 HV *stash = gv_stashpvn("File::FnMatch", 13, TRUE); 43 struct { char *n; I32 v; } File__FnMatch__const[] = { 44 #ifdef FNM_NOESCAPE 45 {"FNM_NOESCAPE", FNM_NOESCAPE}, 46 #endif 47 #ifdef FNM_PATHNAME 48 {"FNM_PATHNAME", FNM_PATHNAME}, 49 #endif 50 #ifdef FNM_FILE_NAME 51 {"FNM_FILE_NAME", FNM_FILE_NAME}, 52 #endif 53 #ifdef FNM_PERIOD 54 {"FNM_PERIOD", FNM_PERIOD}, 55 #endif 56 #ifdef FNM_LEADING_DIR 57 {"FNM_LEADING_DIR", FNM_LEADING_DIR}, 58 #endif 59 #ifdef FNM_CASEFOLD 60 {"FNM_CASEFOLD", FNM_CASEFOLD}, 61 #endif 62 #ifdef FNM_EXTMATCH 63 {"FNM_EXTMATCH", FNM_EXTMATCH}, 64 #endif 65 {Nullch, 0}}; 66 char *name; 67 int i; 68 69 for (i = 0; name = File__FnMatch__const[i].n; i++) { 70 newCONSTSUB(stash, name, newSViv(File__FnMatch__const[i].v)); 71 } 72 } 73