1. C++ / Говнокод #17207

    +53

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    BOOL IsNameInExpression(PCWSTR Expression, PCWSTR Name, DWORD len)
    {
    	WCHAR c, b;
    
    	while (c = *Expression++) 
    	{
    		if (c == L'*') 
    		{
    __loop:
    			switch (*Expression)
    			{
    			case '*':
    				Expression++;
    				goto __loop;
    			case 0:
    				return TRUE;
    			}
    
    			if (len)
    			{
    				do 
    				{
    					if (IsNameInExpression(Expression, Name++, len--)) return TRUE;
    				} while (len);
    			}
    
    			return FALSE;
    		}
    
    		if (!len--)
    		{
    			return FALSE;
    		}
    
    		b = *Name++;
    
    		if (c != L'?' && b != c) 
    		{
    			return FALSE;
    		} 
    	}
    
    	return !len;
    }
    
    BOOL IsNameInExpression(PCWSTR Expression, PUNICODE_STRING Name)
    {
    	RtlUpcaseUnicodeString(Name, Name, FALSE);
    	return IsNameInExpression(Expression, Name->Buffer, Name->Length >> 1);
    }

    Запостил: zhukas, 28 Ноября 2014

    Комментарии (4) RSS

    • ну это наверное самый примитивная (и дисфункциональная) версия glob() которую я только видел.
      Ответить
      • скорее что то типа http://msdn.microsoft.com/en-us/library/hh551132%28v=vs.85%29.aspx для xp,vista
        Ответить
    • Автор молодец! Теперь попросим его реализовать PCRE в стиле НДКА
      Ответить

    Добавить комментарий