CDSPluginUtils.cpp [plain text]
#include "CDSPluginUtils.h"
#include "DSUtils.h"
#include <CoreFoundation/CoreFoundation.h>
sInt32 PWOpenDirNode( tDirNodeReference fDSRef, char *inNodeName, tDirNodeReference *outNodeRef )
{
sInt32 error = eDSNoErr;
sInt32 error2 = eDSNoErr;
tDataList *pDataList = nil;
pDataList = ::dsBuildFromPathPriv( inNodeName, "/" );
if ( pDataList != nil )
{
error = ::dsOpenDirNode( fDSRef, pDataList, outNodeRef );
error2 = ::dsDataListDeallocatePriv( pDataList );
free( pDataList );
}
return( error );
}
bool DoesThisMatch ( const char *inString,
const char *inPatt,
tDirPatternMatch inHow )
{
bool bOutResult = false;
CFMutableStringRef strRef = CFStringCreateMutable(NULL, 0);
CFMutableStringRef patRef = CFStringCreateMutable(NULL, 0);
CFRange range;
if ( (inString == nil) || (inPatt == nil) || (strRef == nil) || (patRef == nil) )
{
return( false );
}
CFStringAppendCString( strRef, inString, kCFStringEncodingUTF8 );
CFStringAppendCString( patRef, inPatt, kCFStringEncodingUTF8 );
if ( (inHow >= eDSiExact) && (inHow <= eDSiRegularExpression) )
{
CFStringUppercase( strRef, NULL );
CFStringUppercase( patRef, NULL );
}
switch ( inHow )
{
case eDSExact:
case eDSiExact:
{
if ( CFStringCompare( strRef, patRef, 0 ) == kCFCompareEqualTo )
{
bOutResult = true;
}
}
break;
case eDSStartsWith:
case eDSiStartsWith:
{
if ( CFStringHasPrefix( strRef, patRef ) )
{
bOutResult = true;
}
}
break;
case eDSEndsWith:
case eDSiEndsWith:
{
if ( CFStringHasSuffix( strRef, patRef ) )
{
bOutResult = true;
}
}
break;
case eDSContains:
case eDSiContains:
{
range = CFStringFind( strRef, patRef, 0 );
if ( range.location != kCFNotFound )
{
bOutResult = true;
}
}
break;
case eDSLessThan:
case eDSiLessThan:
{
if ( CFStringCompare( strRef, patRef, 0 ) == kCFCompareLessThan )
{
bOutResult = true;
}
}
break;
case eDSGreaterThan:
case eDSiGreaterThan:
{
if ( CFStringCompare( strRef, patRef, 0 ) == kCFCompareGreaterThan )
{
bOutResult = true;
}
}
break;
case eDSLessEqual:
case eDSiLessEqual:
{
if ( CFStringCompare( strRef, patRef, 0 ) != kCFCompareGreaterThan )
{
bOutResult = true;
}
}
break;
case eDSGreaterEqual:
case eDSiGreaterEqual:
{
if ( CFStringCompare( strRef, patRef, 0 ) != kCFCompareLessThan )
{
bOutResult = true;
}
}
break;
default:
break;
}
CFRelease( strRef );
strRef = nil;
CFRelease( patRef );
patRef = nil;
return( bOutResult );
}