summaryrefslogtreecommitdiff
path: root/jam-files/engine/glob.c
diff options
context:
space:
mode:
Diffstat (limited to 'jam-files/engine/glob.c')
-rw-r--r--jam-files/engine/glob.c152
1 files changed, 0 insertions, 152 deletions
diff --git a/jam-files/engine/glob.c b/jam-files/engine/glob.c
deleted file mode 100644
index 527d6c80..00000000
--- a/jam-files/engine/glob.c
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * Copyright 1994 Christopher Seiwald. All rights reserved.
- *
- * This file is part of Jam - see jam.c for Copyright information.
- */
-
-/*
- * glob.c - match a string against a simple pattern
- *
- * Understands the following patterns:
- *
- * * any number of characters
- * ? any single character
- * [a-z] any single character in the range a-z
- * [^a-z] any single character not in the range a-z
- * \x match x
- *
- * External functions:
- *
- * glob() - match a string against a simple pattern
- *
- * Internal functions:
- *
- * globchars() - build a bitlist to check for character group match
- */
-
-# include "jam.h"
-
-# define CHECK_BIT( tab, bit ) ( tab[ (bit)/8 ] & (1<<( (bit)%8 )) )
-# define BITLISTSIZE 16 /* bytes used for [chars] in compiled expr */
-
-static void globchars( char * s, char * e, char * b );
-
-
-/*
- * glob() - match a string against a simple pattern.
- */
-
-int glob( char * c, char * s )
-{
- char bitlist[ BITLISTSIZE ];
- char * here;
-
- for ( ; ; )
- switch ( *c++ )
- {
- case '\0':
- return *s ? -1 : 0;
-
- case '?':
- if ( !*s++ )
- return 1;
- break;
-
- case '[':
- /* Scan for matching ]. */
-
- here = c;
- do if ( !*c++ ) return 1;
- while ( ( here == c ) || ( *c != ']' ) );
- ++c;
-
- /* Build character class bitlist. */
-
- globchars( here, c, bitlist );
-
- if ( !CHECK_BIT( bitlist, *(unsigned char *)s ) )
- return 1;
- ++s;
- break;
-
- case '*':
- here = s;
-
- while ( *s )
- ++s;
-
- /* Try to match the rest of the pattern in a recursive */
- /* call. If the match fails we'll back up chars, retrying. */
-
- while ( s != here )
- {
- int r;
-
- /* A fast path for the last token in a pattern. */
- r = *c ? glob( c, s ) : *s ? -1 : 0;
-
- if ( !r )
- return 0;
- if ( r < 0 )
- return 1;
- --s;
- }
- break;
-
- case '\\':
- /* Force literal match of next char. */
- if ( !*c || ( *s++ != *c++ ) )
- return 1;
- break;
-
- default:
- if ( *s++ != c[ -1 ] )
- return 1;
- break;
- }
-}
-
-
-/*
- * globchars() - build a bitlist to check for character group match.
- */
-
-static void globchars( char * s, char * e, char * b )
-{
- int neg = 0;
-
- memset( b, '\0', BITLISTSIZE );
-
- if ( *s == '^' )
- {
- ++neg;
- ++s;
- }
-
- while ( s < e )
- {
- int c;
-
- if ( ( s + 2 < e ) && ( s[1] == '-' ) )
- {
- for ( c = s[0]; c <= s[2]; ++c )
- b[ c/8 ] |= ( 1 << ( c % 8 ) );
- s += 3;
- }
- else
- {
- c = *s++;
- b[ c/8 ] |= ( 1 << ( c % 8 ) );
- }
- }
-
- if ( neg )
- {
- int i;
- for ( i = 0; i < BITLISTSIZE; ++i )
- b[ i ] ^= 0377;
- }
-
- /* Do not include \0 in either $[chars] or $[^chars]. */
- b[0] &= 0376;
-}