]> git.ipfire.org Git - thirdparty/bird.git/blame - lib/patmatch.c
Merge remote-tracking branch 'origin/master' into mq-filter-stack
[thirdparty/bird.git] / lib / patmatch.c
CommitLineData
dee929d8
MM
1/*
2 * BIRD Library -- Generic Shell-Like Pattern Matching (currently only '?' and '*')
3 *
7722938d 4 * (c) 1998--2000 Martin Mares <mj@ucw.cz>
dee929d8
MM
5 */
6
7#include "nest/bird.h"
8#include "lib/string.h"
9
10#ifndef MATCH_FUNC_NAME
11#define MATCH_FUNC_NAME patmatch
12#endif
13
14#ifndef Convert
15#define Convert(x) x
16#endif
17
18int
e422ca0f 19MATCH_FUNC_NAME(const byte *p, const byte *s)
dee929d8
MM
20{
21 while (*p)
22 {
23 if (*p == '?' && *s)
24 p++, s++;
25 else if (*p == '*')
26 {
27 int z = p[1];
28
29 if (!z)
30 return 1;
31 if (z == '\\' && p[2])
32 z = p[2];
33 z = Convert(z);
34 for(;;)
35 {
36 while (*s && Convert(*s) != z)
37 s++;
38 if (!*s)
39 return 0;
40 if (MATCH_FUNC_NAME(p+1, s))
41 return 1;
42 s++;
43 }
44 }
45 else
46 {
47 if (*p == '\\' && p[1])
48 p++;
49 if (Convert(*p++) != Convert(*s++))
50 return 0;
51 }
52 }
53 return !*s;
54}
7722938d
MM
55
56#if 0
57/**
58 * patmatch - match shell-like patterns
59 * @p: pattern
60 * @s: string
61 *
62 * patmatch() returns whether given string @s matches the given shell-like
63 * pattern @p. The patterns consist of characters (which are matched literally),
64 * question marks which match any single character, asterisks which match any
65 * (possibly empty) string of characters and backslashes which are used to
66 * escape any special characters and force them to be treated literally.
67 *
68 * The matching process is not optimized with respect to time, so please
69 * avoid using this function for complex patterns.
70 */
71int
72patmatch(byte *p, byte *s)
73{ DUMMY; }
74#endif