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