simplepattern.cpp revision c02a859e84d50ed6695d80fad89430578a1ed874
/* $Id$ */
/** @file
* IPRT - RTStrSimplePattern.
*/
/*
* Copyright (C) 2006-2008 Sun Microsystems, Inc.
*
* This file is part of VirtualBox Open Source Edition (OSE), as
* available from http://www.virtualbox.org. This file is free software;
* General Public License (GPL) as published by the Free Software
* Foundation, in version 2 as it comes in the "COPYING" file of the
* VirtualBox OSE distribution. VirtualBox OSE is distributed in the
* hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
*
* The contents of this file may alternatively be used under the terms
* of the Common Development and Distribution License Version 1.0
* (CDDL) only, as it comes in the "COPYING.CDDL" file of the
* VirtualBox OSE distribution, in which case the provisions of the
* CDDL are applicable instead of those of the GPL.
*
* You may elect to license modified versions of this file under the
* terms and conditions of either the GPL or the CDDL or both.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
* Clara, CA 95054 USA or visit http://www.sun.com if you need
* additional information or have any questions.
*/
/*******************************************************************************
* Header Files *
*******************************************************************************/
{
#if 0
#else
/* ASSUMES ASCII / UTF-8 */
for (;;)
{
char chPat = *pszPattern;
switch (chPat)
{
default:
return false;
break;
case '*':
{
/* collapse '*' and '?', they are supurfluous */
/* nothing */;
/* if no more pattern, we're done now. */
if (!chPat)
return true;
/* find chPat in the string and try get a match on the remaining pattern. */
for (;;)
{
return true;
if (!chStr)
return false;
}
/* won't ever get here */
break;
}
case '?':
if (!*pszString)
return false;
break;
case '\0':
return !*pszString;
}
pszString++;
pszPattern++;
}
#endif
}
{
/* ASSUMES ASCII / UTF-8 */
for (;;)
{
switch (chPat)
{
default:
{
return false;
break;
}
case '*':
{
/* Collapse '*' and '?', they are supurfluous. End of the pattern == match. */
do
{
if (!--cchPattern)
return true;
chPat = *++pszPattern;
if (!chPat)
return true;
/* Find chPat in the string and try get a match on the remaining pattern. */
for (;;)
{
if (!cchString--)
return false;
return true;
if (!chStr)
return false;
}
/* won't ever get here */
break;
}
case '?':
return false;
break;
case '\0':
}
/* advance */
pszString++;
cchString--;
pszPattern++;
cchPattern--;
}
}
{
const char *pszCur = pszPatterns;
while (*pszCur && cchPatterns)
{
/*
* Find the end of the current pattern.
*/
unsigned char ch;
cchPatterns--, pszEnd++;
/*
* Try match it.
*/
{
if (poffMatchingPattern)
return true;
}
/* advance */
if (!ch || !cchPatterns)
break;
cchPatterns--;
}
if (poffMatchingPattern)
*poffMatchingPattern = ~(size_t)0;
return false;
}