]> andersk Git - openssh.git/blame - match.c
- Better tests for OpenSSL w/ RSAref
[openssh.git] / match.c
CommitLineData
8efc0c15 1/*
5260325f 2 *
3 * match.c
4 *
5 * Author: Tatu Ylonen <ylo@cs.hut.fi>
6 *
7 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
8 * All rights reserved
9 *
10 * Created: Thu Jun 22 01:17:50 1995 ylo
11 *
12 * Simple pattern matching, with '*' and '?' as wildcards.
13 *
14 */
8efc0c15 15
16#include "includes.h"
17RCSID("$Id$");
18
19#include "ssh.h"
20
aa3378df 21/*
22 * Returns true if the given string matches the pattern (which may contain ?
23 * and * as wildcards), and zero if it does not match.
24 */
8efc0c15 25
5260325f 26int
27match_pattern(const char *s, const char *pattern)
28{
29 for (;;) {
30 /* If at end of pattern, accept if also at end of string. */
31 if (!*pattern)
32 return !*s;
8efc0c15 33
5260325f 34 if (*pattern == '*') {
35 /* Skip the asterisk. */
36 pattern++;
8efc0c15 37
5260325f 38 /* If at end of pattern, accept immediately. */
39 if (!*pattern)
40 return 1;
8efc0c15 41
5260325f 42 /* If next character in pattern is known, optimize. */
43 if (*pattern != '?' && *pattern != '*') {
aa3378df 44 /*
45 * Look instances of the next character in
46 * pattern, and try to match starting from
47 * those.
48 */
5260325f 49 for (; *s; s++)
50 if (*s == *pattern &&
51 match_pattern(s + 1, pattern + 1))
52 return 1;
53 /* Failed. */
54 return 0;
55 }
aa3378df 56 /*
57 * Move ahead one character at a time and try to
58 * match at each position.
59 */
5260325f 60 for (; *s; s++)
61 if (match_pattern(s, pattern))
62 return 1;
63 /* Failed. */
64 return 0;
65 }
aa3378df 66 /*
67 * There must be at least one more character in the string.
68 * If we are at the end, fail.
69 */
5260325f 70 if (!*s)
71 return 0;
8efc0c15 72
aa3378df 73 /* Check if the next character of the string is acceptable. */
5260325f 74 if (*pattern != '?' && *pattern != *s)
75 return 0;
8efc0c15 76
aa3378df 77 /* Move to the next character, both in string and in pattern. */
5260325f 78 s++;
79 pattern++;
80 }
81 /* NOTREACHED */
8efc0c15 82}
This page took 0.177346 seconds and 5 git commands to generate.