@@ -151,33 +151,6 @@ static int XSearch_Callback(xsearch_t *pSearch, xsearch_entry_t *pEntry)
151151 return XSTDNON ;
152152}
153153
154- static xbool_t XSearch_Tokens (xarray_t * pTokens , const char * pName , size_t nLength )
155- {
156- size_t nUsed = XArray_Used (pTokens );
157- if (!nUsed ) return XFALSE ;
158- size_t i , nOffset = 0 ;
159-
160- for (i = 0 ; i < nUsed ; i ++ )
161- {
162- const char * pTok = (const char * )XArray_GetData (pTokens , i );
163- if (xstrused (pTok ) && !xstrcmp (pTok , "*" ))
164- {
165- if (!i && !xstrncmp (pTok , pName , strlen (pTok ))) return XFALSE ;
166- int nPosit = xstrnsrc (pName , nLength , pTok , nOffset );
167- if (nPosit < 0 ) return XFALSE ;
168-
169- nOffset += nPosit ;
170- if (nOffset >= nLength ) return XFALSE ;
171-
172- const char * pOffset = (const char * )& pName [nOffset ];
173- if (i && i + 1 == nUsed && !xstrcmp (pTok , pOffset )) return XFALSE ;
174- nOffset += strlen (pTok );
175- }
176- }
177-
178- return XTRUE ;
179- }
180-
181154static xbool_t XSearch_Multy (xarray_t * pTokens , const char * pName , size_t nLength )
182155{
183156 size_t i , nCount = XArray_Used (pTokens );
@@ -186,12 +159,12 @@ static xbool_t XSearch_Multy(xarray_t *pTokens, const char *pName, size_t nLengt
186159 for (i = 0 ; i < nCount ; i ++ )
187160 {
188161 xarray_data_t * pArrData = XArray_Get (pTokens , i );
189- if (pArrData == NULL || pArrData -> pData == NULL ) continue ;
162+ if (pArrData == NULL || pArrData -> pData == NULL || ! pArrData -> nSize ) continue ;
190163
191- bFound = pArrData -> nKey != XSTDOK ?
192- xstrncmp ((const char * )pArrData -> pData , pName , nLength ) :
193- XSearch_Tokens ((xarray_t * )pArrData -> pData , pName , nLength );
164+ const char * pToken = (const char * )pArrData -> pData ;
165+ size_t nTokenLength = pArrData -> nSize - 1 ;
194166
167+ bFound = xstrnmatch (pName , nLength , pToken , nTokenLength );
195168 if (bFound ) break ;
196169 }
197170
@@ -201,11 +174,9 @@ static xbool_t XSearch_Multy(xarray_t *pTokens, const char *pName, size_t nLengt
201174static xbool_t XSearch_Name (xsearch_t * pSearch , const char * pFileName )
202175{
203176 size_t nLength = strlen (pFileName );
204- xbool_t bFound = pSearch -> bMulty ?
205- XSearch_Multy (& pSearch -> nameTokens , pFileName , nLength ) :
206- XSearch_Tokens (& pSearch -> nameTokens , pFileName , nLength );
207-
208- return bFound ;
177+ xarray_t * pNames = & pSearch -> nameTokens ;
178+ if (!pNames -> nUsed ) return xstrmatch (pFileName , nLength , pSearch -> sName );
179+ return XSearch_Multy (& pSearch -> nameTokens , pFileName , nLength );
209180}
210181
211182static XSTATUS XSearch_Lines (xsearch_t * pSearch , xsearch_context_t * pCtx )
@@ -401,10 +372,7 @@ static XSTATUS XSearch_CheckCriteria(xsearch_t *pSearch, const char *pPath, cons
401372 if (pSearch -> bInsensitive ) xstrncase (sName , sizeof (sName ), XSTR_LOWER , pName );
402373 const char * pSearchName = pSearch -> bInsensitive ? (const char * )sName : pName ;
403374
404- xbool_t bFound = pSearch -> nameTokens .nUsed ?
405- XSearch_Name (pSearch , pSearchName ) :
406- xstrcmp (pSearch -> sName , pSearchName );
407-
375+ xbool_t bFound = XSearch_Name (pSearch , pSearchName );
408376 if (!bFound ) return XSTDNON ;
409377 }
410378
@@ -427,37 +395,6 @@ void XSearch_ClearCb(xarray_data_t *pArrData)
427395 else XArray_Destroy ((xarray_t * )pArrData -> pData );
428396}
429397
430- static size_t XSearch_TokenizeName (xsearch_t * pSrcCtx , const char * pFileName )
431- {
432- xarray_t * pTokens = & pSrcCtx -> nameTokens ;
433- if (xstrsrc (pFileName , ";" ) >= 0 ) xstrsplita (pFileName , ";" , pTokens , XFALSE , XFALSE );
434- else if (xstrsrc (pFileName , "*" ) >= 0 ) return xstrsplita (pFileName , "*" , pTokens , XTRUE , XFALSE );
435-
436- if (!pTokens -> nUsed ) return XSTDNON ;
437- pSrcCtx -> bMulty = XTRUE ;
438- size_t i ;
439-
440- for (i = 0 ; i < pTokens -> nUsed ; i ++ )
441- {
442- char * pToken = XArray_GetData (pTokens , i );
443- if (xstrsrc (pToken , "*" ) >= 0 )
444- {
445- xarray_t * pSubTokens = xstrsplitd (pToken , "*" );
446- if (pSubTokens != NULL )
447- {
448- xarray_data_t * pArrData = XArray_Get (pTokens , i );
449- pArrData -> pData = pSubTokens ;
450- pArrData -> nKey = XSTDOK ;
451-
452- pTokens -> clearCb = XSearch_ClearCb ;
453- xfree (pTokens -> pPool , pToken );
454- }
455- }
456- }
457-
458- return pTokens -> nUsed ;
459- }
460-
461398void XSearch_Init (xsearch_t * pSrcCtx , const char * pFileName )
462399{
463400 pSrcCtx -> pInterrupted = & pSrcCtx -> nInterrupted ;
@@ -466,7 +403,6 @@ void XSearch_Init(xsearch_t *pSrcCtx, const char *pFileName)
466403 pSrcCtx -> bMatchOnly = XFALSE ;
467404 pSrcCtx -> bRecursive = XFALSE ;
468405 pSrcCtx -> bReadStdin = XFALSE ;
469- pSrcCtx -> bMulty = XFALSE ;
470406 pSrcCtx -> callback = NULL ;
471407 pSrcCtx -> pUserCtx = NULL ;
472408
@@ -479,7 +415,9 @@ void XSearch_Init(xsearch_t *pSrcCtx, const char *pFileName)
479415 pSrcCtx -> sName [0 ] = XSTR_NUL ;
480416 pSrcCtx -> sText [0 ] = XSTR_NUL ;
481417
482- XSearch_TokenizeName (pSrcCtx , pFileName );
418+ if (xstrsrc (pFileName , ";" ) >= 0 ) // Tokenize the file name for multy search
419+ xstrsplita (pFileName , ";" , & pSrcCtx -> nameTokens , XFALSE , XFALSE );
420+
483421 xstrncpy (pSrcCtx -> sName , sizeof (pSrcCtx -> sName ), pFileName );
484422
485423 pSrcCtx -> nBufferSize = 0 ;
0 commit comments