OSSP CVS Repository

ossp - Check-in [605]
Not logged in
[Honeypot]  [Browse]  [Home]  [Login]  [Reports
[Search]  [Ticket]  [Timeline
  [Patchset]  [Tagging/Branching

Check-in Number: 605
Date: 2001-Aug-06 12:51:11 (local)
2001-Aug-06 10:51:11 (UTC)
User:thl
Branch:
Comment: add shpat_match from OSSP shpat library
Tickets:
Inspections:
Files:
ossp-pkg/lmtp2nntp/shpat_match.3      added-> 1.1
ossp-pkg/lmtp2nntp/shpat_match.c      added-> 1.1
ossp-pkg/lmtp2nntp/shpat_match.h      added-> 1.1

ossp-pkg/lmtp2nntp/shpat_match.3 -> 1.1

*** /dev/null    Fri Apr 26 22:22:11 2024
--- -    Fri Apr 26 22:28:38 2024
***************
*** 0 ****
--- 1,296 ----
+ .rn '' }`
+ ''' $RCSfile: shpat_match.3,v $$Revision: 1.1 $$Date: 2001/08/06 10:51:11 $
+ '''
+ ''' $Log: shpat_match.3,v $
+ ''' Revision 1.1  2001/08/06 10:51:11  thl
+ ''' add shpat_match from OSSP shpat library
+ '''
+ '''
+ .de Sh
+ .br
+ .if t .Sp
+ .ne 5
+ .PP
+ \fB\\$1\fR
+ .PP
+ ..
+ .de Sp
+ .if t .sp .5v
+ .if n .sp
+ ..
+ .de Ip
+ .br
+ .ie \\n(.$>=3 .ne \\$3
+ .el .ne 3
+ .IP "\\$1" \\$2
+ ..
+ .de Vb
+ .ft CW
+ .nf
+ .ne \\$1
+ ..
+ .de Ve
+ .ft R
+ 
+ .fi
+ ..
+ '''
+ '''
+ '''     Set up \*(-- to give an unbreakable dash;
+ '''     string Tr holds user defined translation string.
+ '''     Bell System Logo is used as a dummy character.
+ '''
+ .tr \(*W-|\(bv\*(Tr
+ .ie n \{\
+ .ds -- \(*W-
+ .ds PI pi
+ .if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+ .if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+ .ds L" ""
+ .ds R" ""
+ '''   \*(M", \*(S", \*(N" and \*(T" are the equivalent of
+ '''   \*(L" and \*(R", except that they are used on ".xx" lines,
+ '''   such as .IP and .SH, which do another additional levels of
+ '''   double-quote interpretation
+ .ds M" """
+ .ds S" """
+ .ds N" """""
+ .ds T" """""
+ .ds L' '
+ .ds R' '
+ .ds M' '
+ .ds S' '
+ .ds N' '
+ .ds T' '
+ 'br\}
+ .el\{\
+ .ds -- \(em\|
+ .tr \*(Tr
+ .ds L" ``
+ .ds R" ''
+ .ds M" ``
+ .ds S" ''
+ .ds N" ``
+ .ds T" ''
+ .ds L' `
+ .ds R' '
+ .ds M' `
+ .ds S' '
+ .ds N' `
+ .ds T' '
+ .ds PI \(*p
+ 'br\}
+ .\"    If the F register is turned on, we'll generate
+ .\"    index entries out stderr for the following things:
+ .\"            TH      Title 
+ .\"            SH      Header
+ .\"            Sh      Subsection 
+ .\"            Ip      Item
+ .\"            X<>     Xref  (embedded
+ .\"    Of course, you have to process the output yourself
+ .\"    in some meaninful fashion.
+ .if \nF \{
+ .de IX
+ .tm Index:\\$1\t\\n%\t"\\$2"
+ ..
+ .nr % 0
+ .rr F
+ .\}
+ .TH shpat_match 3 "19-Aug-1999" "Shpat 1.0.0" "MAX File Name Library"
+ .UC
+ .if n .hy 0
+ .if n .na
+ .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+ .de CQ          \" put $1 in typewriter font
+ .ft CW
+ 'if n "\c
+ 'if t \\&\\$1\c
+ 'if n \\&\\$1\c
+ 'if n \&"
+ \\&\\$2 \\$3 \\$4 \\$5 \\$6 \\$7
+ '.ft R
+ ..
+ .\" @(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2
+ .      \" AM - accent mark definitions
+ .bd B 3
+ .      \" fudge factors for nroff and troff
+ .if n \{\
+ .      ds #H 0
+ .      ds #V .8m
+ .      ds #F .3m
+ .      ds #[ \f1
+ .      ds #] \fP
+ .\}
+ .if t \{\
+ .      ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+ .      ds #V .6m
+ .      ds #F 0
+ .      ds #[ \&
+ .      ds #] \&
+ .\}
+ .      \" simple accents for nroff and troff
+ .if n \{\
+ .      ds ' \&
+ .      ds ` \&
+ .      ds ^ \&
+ .      ds , \&
+ .      ds ~ ~
+ .      ds ? ?
+ .      ds ! !
+ .      ds /
+ .      ds q
+ .\}
+ .if t \{\
+ .      ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+ .      ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+ .      ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+ .      ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+ .      ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+ .      ds ? \s-2c\h'-\w'c'u*7/10'\u\h'\*(#H'\zi\d\s+2\h'\w'c'u*8/10'
+ .      ds ! \s-2\(or\s+2\h'-\w'\(or'u'\v'-.8m'.\v'.8m'
+ .      ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+ .      ds q o\h'-\w'o'u*8/10'\s-4\v'.4m'\z\(*i\v'-.4m'\s+4\h'\w'o'u*8/10'
+ .\}
+ .      \" troff and (daisy-wheel) nroff accents
+ .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+ .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+ .ds v \\k:\h'-(\\n(.wu*9/10-\*(#H)'\v'-\*(#V'\*(#[\s-4v\s0\v'\*(#V'\h'|\\n:u'\*(#]
+ .ds _ \\k:\h'-(\\n(.wu*9/10-\*(#H+(\*(#F*2/3))'\v'-.4m'\z\(hy\v'.4m'\h'|\\n:u'
+ .ds . \\k:\h'-(\\n(.wu*8/10)'\v'\*(#V*4/10'\z.\v'-\*(#V*4/10'\h'|\\n:u'
+ .ds 3 \*(#[\v'.2m'\s-2\&3\s0\v'-.2m'\*(#]
+ .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+ .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+ .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+ .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+ .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+ .ds ae a\h'-(\w'a'u*4/10)'e
+ .ds Ae A\h'-(\w'A'u*4/10)'E
+ .ds oe o\h'-(\w'o'u*4/10)'e
+ .ds Oe O\h'-(\w'O'u*4/10)'E
+ .      \" corrections for vroff
+ .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+ .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+ .      \" for low resolution devices (crt and lpr)
+ .if \n(.H>23 .if \n(.V>19 \
+ \{\
+ .      ds : e
+ .      ds 8 ss
+ .      ds v \h'-1'\o'\(aa\(ga'
+ .      ds _ \h'-1'^
+ .      ds . \h'-1'.
+ .      ds 3 3
+ .      ds o a
+ .      ds d- d\h'-1'\(ga
+ .      ds D- D\h'-1'\(hy
+ .      ds th \o'bp'
+ .      ds Th \o'LP'
+ .      ds ae ae
+ .      ds Ae AE
+ .      ds oe oe
+ .      ds Oe OE
+ .\}
+ .rm #[ #] #H #V #F C
+ .SH "NAME"
+ \fBshpat_match\fR \- match filename or pathname
+ .SH "SYNOPSIS"
+ #include <\fBshpat_match.h\fR>
+ .PP
+ int \fBshpat_match\fR(const char *\fIpattern\fR, const char *\fIstring\fR, int \fIflags\fR);
+ .PP
+ int \fBshpat_match_hasglobchar\fR(const char *\fIpattern\fR);
+ .SH "DESCRIPTION"
+ The \fIshpat_match\fR\|(3) function matches patterns according to the rules used by the
+ shell.  It checks the string specified by the \fIstring\fR argument to see if it
+ matches the pattern specified by the \fIpattern\fR argument.
+ .Sh "Shell Patterns"
+ A \fIpattern\fR consists of normal characters, which match themselves, and
+ meta-characters (aka \fIglob chars\fR).  The meta-characters are ``\f(CW!\fR'\*(R',
+ ``\f(CW*\fR'\*(R', ``\f(CW?\fR'\*(R', and ``\f(CW[\fR'\*(R'.  These characters lose their special
+ meanings if they are quoted with a backslash (``\f(CW\e\fR''). 
+ .PP
+ An asterisk (``\f(CW*\fR'') matches any string of characters.  A question mark
+ (``\f(CW?\fR'') matches any single character.  A left bracket (``\f(CW[\fR'') introduces
+ a character class.  The end of the character class is indicated by a ``\f(CW]\fR'\*(R';
+ if the ``\f(CW]\fR'\*(R' is missing then the ``\f(CW[\fR'\*(R' matches a ``\f(CW[\fR'\*(R' rather than
+ introducing a character class.  A character class matches any of the
+ characters between the square brackets.  A range of characters may be
+ specified using a minus sign (``\f(CW-\fR''). The character class may be
+ complemented/negated by making an exclamation point (``\f(CW!\fR'') the first
+ character of the character class.
+ .PP
+ To include a ``\f(CW]\fR'\*(R' in a character class, make it the first character listed
+ (after the ``\f(CW!\fR'\*(R', if any).  To include a minus sign, make it the first or
+ last character listed.
+ .Sh "Matching Interpretation"
+ The \fIflags\fR argument modifies the interpretation of \fIpattern\fR and \fIstring\fR
+ The value of \fIflags\fR is the bitwise inclusive \fI\s-1OR\s0\fR of any of the following
+ constants, which are defined in the include file \f(CWshpat_match.h\fR.
+ .Ip "\f(CWSHPAT_M_NOESCAPE\fR" 4
+ Normally, every occurrence of a backslash (``\f(CW\e\fR'') followed by a character
+ in \fIpattern\fR is replaced by that character.  This is done to negate any
+ special meaning for the character.  If the \f(CWFNM_NOESCAPE\fR flag is set, a
+ backslash character is treated as an ordinary character.
+ .Ip "\f(CWSHPAT_M_PATHNAME\fR" 4
+ Slash characters in \fIstring\fR must be explicitly matched by slashes in
+ \fIpattern\fR If this flag is not set, then slashes are treated as regular
+ characters.
+ .Ip "\f(CWSHPAT_M_PERIOD\fR" 4
+ Leading periods in \fIstring\fR must be explicitly matched by periods in
+ \fIpattern\fR If this flag is not set, then leading periods are treated as
+ regular characters.  The definition of ``leading'\*(R' is related to the
+ specification of \f(CWFNM_PATHNAME\fR A period is always ``leading'\*(R' if it is the
+ first character in \fIstring\fR Additionally, if \fI\s-1FNM_PATHNAME\s0\fR is set, a period
+ is ``leading'\*(R' if it immediately follows a slash.
+ .Ip "\f(CWSHPAT_M_LEADING_DIR\fR" 4
+ Ignore ``\f(CW/*\fR'\*(R' rest after successful \fIpattern\fR matching.
+ .Ip "\f(CWSHPAT_M_CASEFOLD\fR" 4
+ Ignore case distinctions in both the \fIpattern\fR and the \fIstring\fR.
+ .SH "RETURN VALUES"
+ The \fIshpat_match\fR\|(3) function returns zero if \fIstring\fR matches the pattern
+ specified by \fIpattern\fR, otherwise, it returns the value \f(CWFNM_NOMATCH\fR.
+ .SH "BUGS"
+ The pattern ``\f(CW*\fR'\*(R' matches the empty string, even if \f(CWFNM_PATHNAME\fR is
+ specified.
+ .SH "SEE ALSO"
+ \fIsh\fR\|(1), \fIshpat_glob\fR\|(3).
+ .SH "STANDARDS"
+ The \fIshpat_match\fR\|(3) function conforms to IEEE Std1003.2 (``POSIX.2'')
+ .SH "HISTORY"
+ The \fIshpat_match\fR\|(3) function is derived from the \fIfnmatch\fR\|(3) function of FreeBSD
+ 3.1 which itself derived it from 4.4BSD.  The \fIshpat_match_hasglobchar\fR\|(3)
+ function is derived from the \fIap_is_fnmatch\fR\|(3) function of Apache 1.3.
+ 
+ .rn }` ''
+ .IX Title "shpat_match 3"
+ .IX Name "B<shpat_match> - match filename or pathname"
+ 
+ .IX Header "NAME"
+ 
+ .IX Header "SYNOPSIS"
+ 
+ .IX Header "DESCRIPTION"
+ 
+ .IX Subsection "Shell Patterns"
+ 
+ .IX Subsection "Matching Interpretation"
+ 
+ .IX Item "\f(CWSHPAT_M_NOESCAPE\fR"
+ 
+ .IX Item "\f(CWSHPAT_M_PATHNAME\fR"
+ 
+ .IX Item "\f(CWSHPAT_M_PERIOD\fR"
+ 
+ .IX Item "\f(CWSHPAT_M_LEADING_DIR\fR"
+ 
+ .IX Item "\f(CWSHPAT_M_CASEFOLD\fR"
+ 
+ .IX Header "RETURN VALUES"
+ 
+ .IX Header "BUGS"
+ 
+ .IX Header "SEE ALSO"
+ 
+ .IX Header "STANDARDS"
+ 
+ .IX Header "HISTORY"
+ 


ossp-pkg/lmtp2nntp/shpat_match.c -> 1.1

*** /dev/null    Fri Apr 26 22:22:11 2024
--- -    Fri Apr 26 22:28:38 2024
***************
*** 0 ****
--- 1,259 ----
+ /*
+ **
+ **  shpat_match.c -- MAX POSIX-compliant fnmatch library
+ **
+ */
+ 
+ /*
+  * Copyright (c) 1989, 1993, 1994
+  *      The Regents of the University of California.  All rights reserved.
+  *
+  * This code is derived from software contributed to Berkeley by
+  * Guido van Rossum.
+  *
+  * Redistribution and use in source and binary forms, with or without
+  * modification, are permitted provided that the following conditions
+  * are met:
+  * 1. Redistributions of source code must retain the above copyright
+  *    notice, this list of conditions and the following disclaimer.
+  * 2. Redistributions in binary form must reproduce the above copyright
+  *    notice, this list of conditions and the following disclaimer in the
+  *    documentation and/or other materials provided with the distribution.
+  * 3. All advertising materials mentioning features or use of this software
+  *    must display the following acknowledgement:
+  *      This product includes software developed by the University of
+  *      California, Berkeley and its contributors.
+  * 4. Neither the name of the University nor the names of its contributors
+  *    may be used to endorse or promote products derived from this software
+  *    without specific prior written permission.
+  *
+  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+  * SUCH DAMAGE.
+  */
+ 
+ /*
+  * Function shpat_match() as specified in POSIX 1003.2-1992, section B.6.
+  * Compares a filename or pathname to a pattern.
+  */
+ 
+ #include <ctype.h>
+ #include <string.h>
+ #include <stdio.h>
+ 
+ #include "shpat_match.h"
+ 
+ #define EOS '\0'
+ 
+ #define RANGE_MATCH     1
+ #define RANGE_NOMATCH   0
+ #define RANGE_ERROR     (-1)
+ 
+ static int rangematch(const char *, char, int, char **);
+ 
+ int shpat_match(const char *pattern, const char *string, int flags)
+ {
+     const char *stringstart;
+     char *newp;
+     char c, test;
+ 
+     for (stringstart = string; ; ) {
+         switch (c = *pattern++) {
+             case EOS:
+                 if ((flags & SHPAT_M_LEADING_DIR) && *string == '/')
+                     return (0);
+                 return (*string == EOS ? 0 : SHPAT_M_NOMATCH);
+             case '?':
+                 if (*string == EOS)
+                     return (SHPAT_M_NOMATCH);
+                 if (*string == '/' && (flags & SHPAT_M_PATHNAME))
+                     return (SHPAT_M_NOMATCH);
+                 if (*string == '.' && (flags & SHPAT_M_PERIOD) &&
+                     (string == stringstart ||
+                      ((flags & SHPAT_M_PATHNAME) && *(string - 1) == '/')))
+                     return (SHPAT_M_NOMATCH);
+                 ++string;
+                 break;
+             case '*':
+                 c = *pattern;
+                 /* Collapse multiple stars. */
+                 while (c == '*')
+                     c = *++pattern;
+ 
+                 if (*string == '.' && (flags & SHPAT_M_PERIOD) &&
+                     (string == stringstart ||
+                      ((flags & SHPAT_M_PATHNAME) && *(string - 1) == '/')))
+                     return (SHPAT_M_NOMATCH);
+ 
+                 /* Optimize for pattern with * at end or before /. */
+                 if (c == EOS)
+                     if (flags & SHPAT_M_PATHNAME)
+                         return ((flags & SHPAT_M_LEADING_DIR) ||
+                                 strchr(string, '/') == NULL ?
+                                 0 : SHPAT_M_NOMATCH);
+                     else
+                         return (0);
+                 else if (c == '/' && flags & SHPAT_M_PATHNAME) {
+                     if ((string = strchr(string, '/')) == NULL)
+                         return (SHPAT_M_NOMATCH);
+                     break;
+                 }
+ 
+                 /* General case, use recursion. */
+                 while ((test = *string) != EOS) {
+                     if (!shpat_match(pattern, string, flags & ~SHPAT_M_PERIOD))
+                         return (0);
+                     if (test == '/' && flags & SHPAT_M_PATHNAME)
+                         break;
+                     ++string;
+                 }
+                 return (SHPAT_M_NOMATCH);
+             case '[':
+                 if (*string == EOS)
+                     return (SHPAT_M_NOMATCH);
+                 if (*string == '/' && (flags & SHPAT_M_PATHNAME))
+                     return (SHPAT_M_NOMATCH);
+                 if (*string == '.' && (flags & SHPAT_M_PERIOD) &&
+                     (string == stringstart ||
+                      ((flags & SHPAT_M_PATHNAME) && *(string - 1) == '/')))
+                     return (SHPAT_M_NOMATCH);
+ 
+                 switch (rangematch(pattern, *string, flags, &newp)) {
+                     case RANGE_ERROR:
+                         goto norm;
+                     case RANGE_MATCH:
+                         pattern = newp;
+                         break;
+                     case RANGE_NOMATCH:
+                         return (SHPAT_M_NOMATCH);
+                 }
+                 ++string;
+                 break;
+             case '\\':
+                 if (!(flags & SHPAT_M_NOESCAPE)) {
+                     if ((c = *pattern++) == EOS) {
+                         c = '\\';
+                         --pattern;
+                     }
+                 }
+                 /* FALLTHROUGH */
+             default:
+               norm:
+                 if (c == *string)
+                     ;
+                 else if ((flags & SHPAT_M_CASEFOLD) &&
+                          (tolower((unsigned char) c) ==
+                           tolower((unsigned char) *string)))
+                     ;
+                 else
+                     return (SHPAT_M_NOMATCH);
+                 string++;
+                 break;
+         }
+     }
+     /* NOTREACHED */
+ }
+ 
+ static int rangematch(pattern, test, flags, newp)
+      const char *pattern;
+      char test;
+      int flags;
+      char **newp;
+ {
+     int negate, ok;
+     char c, c2;
+ 
+     /*
+      * A bracket expression starting with an unquoted circumflex
+      * character produces unspecified results (IEEE 1003.2-1992,
+      * 3.13.2).  This implementation treats it like '!', for
+      * consistency with the regular expression syntax.
+      * J.T. Conklin (conklin@ngai.kaleida.com)
+      */
+     if ((negate = (*pattern == '!' || *pattern == '^')))
+         ++pattern;
+ 
+     if (flags & SHPAT_M_CASEFOLD)
+         test = tolower((unsigned char) test);
+ 
+     /*
+      * A right bracket shall lose its special meaning and represent
+      * itself in a bracket expression if it occurs first in the list.
+      * -- POSIX.2 2.8.3.2
+      */
+     ok = 0;
+     c = *pattern++;
+     do {
+         if (c == '\\' && !(flags & SHPAT_M_NOESCAPE))
+             c = *pattern++;
+         if (c == EOS)
+             return (RANGE_ERROR);
+ 
+         if (c == '/' && (flags & SHPAT_M_PATHNAME))
+             return (RANGE_NOMATCH);
+ 
+         if (flags & SHPAT_M_CASEFOLD)
+             c = tolower((unsigned char) c);
+ 
+         if (*pattern == '-'
+             && (c2 = *(pattern + 1)) != EOS && c2 != ']') {
+             pattern += 2;
+             if (c2 == '\\' && !(flags & SHPAT_M_NOESCAPE))
+                 c2 = *pattern++;
+             if (c2 == EOS)
+                 return (RANGE_ERROR);
+ 
+             if (flags & SHPAT_M_CASEFOLD)
+                 c2 = tolower((unsigned char) c2);
+ 
+             if (c <= test && test <= c2)
+                 ok = 1;
+         }
+         else if (c == test)
+             ok = 1;
+     } while ((c = *pattern++) != ']');
+ 
+     *newp = (char *) pattern;
+     return (ok == negate ? RANGE_NOMATCH : RANGE_MATCH);
+ }
+ 
+ /* 
+  * This function returns non-zero if pattern 
+  * contains any glob chars. Borrowed from Apache.
+  */
+ int shpat_match_hasglobchar(const char *pattern)
+ {
+     int nesting;
+ 
+     nesting = 0;
+     while (*pattern) {
+         switch (*pattern) {
+             case '?':
+             case '*':
+                 return 1;
+             case '\\':
+                 if (*pattern++ == EOS)
+                     return 0;
+                 break;
+             case '[':
+                 /* '[' is only a glob if it has a matching ']' */
+                 nesting++;
+                 break;
+             case ']':
+                 if (nesting)
+                     return 1;
+                 break;
+         }
+         pattern++;
+     }
+     return 0;
+ }
+ 


ossp-pkg/lmtp2nntp/shpat_match.h -> 1.1

*** /dev/null    Fri Apr 26 22:22:11 2024
--- -    Fri Apr 26 22:28:38 2024
***************
*** 0 ****
--- 1,63 ----
+ /*
+ **
+ **  shpat_match.h -- MAX POSIX-compliant fnmatch library
+ **
+ */
+ 
+ /*-
+  * Copyright (c) 1992, 1993
+  *      The Regents of the University of California.  All rights reserved.
+  *
+  * Redistribution and use in source and binary forms, with or without
+  * modification, are permitted provided that the following conditions
+  * are met:
+  * 1. Redistributions of source code must retain the above copyright
+  *    notice, this list of conditions and the following disclaimer.
+  * 2. Redistributions in binary form must reproduce the above copyright
+  *    notice, this list of conditions and the following disclaimer in the
+  *    documentation and/or other materials provided with the distribution.
+  * 3. All advertising materials mentioning features or use of this software
+  *    must display the following acknowledgement:
+  *      This product includes software developed by the University of
+  *      California, Berkeley and its contributors.
+  * 4. Neither the name of the University nor the names of its contributors
+  *    may be used to endorse or promote products derived from this software
+  *    without specific prior written permission.
+  *
+  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+  * SUCH DAMAGE.
+  */
+ 
+ #ifndef _SHPAT_MATCH_H_
+ #define _SHPAT_MATCH_H_
+ 
+ #define SHPAT_M_NOMATCH     1       /* Match failed. */
+ 
+ #define SHPAT_M_NOESCAPE    0x01    /* Disable backslash escaping. */
+ #define SHPAT_M_PATHNAME    0x02    /* Slash must be matched by slash. */
+ #define SHPAT_M_PERIOD      0x04    /* Period must be matched by period. */
+ #define SHPAT_M_LEADING_DIR 0x08    /* Ignore /<tail> after Imatch. */
+ #define SHPAT_M_CASEFOLD    0x10    /* Case insensitive search. */
+ #define SHPAT_M_IGNORECASE  FNM_CASEFOLD
+ 
+ #if defined(__cplusplus)
+ extern "C" {
+ #endif
+ 
+ int shpat_match(const char *, const char *, int);
+ int shpat_match_hasglobchar(const char *);
+ 
+ #if defined(__cplusplus)
+ }
+ #endif
+ 
+ #endif /* !_SHPAT_MATCH_H_ */

CVSTrac 2.0.1