diff options
author | Andreas Schneider <mail@cynapses.org> | 2009-05-05 07:11:21 +0000 |
---|---|---|
committer | Andreas Schneider <mail@cynapses.org> | 2009-05-05 07:11:21 +0000 |
commit | 1a280d859d26690e06030b520973639eab04ead7 (patch) | |
tree | 72900b00b0c1c797b232c369bfe326efd57f462a /libssh | |
parent | dc07d46ccaec73e65c7385c4f3a29da05d281ddd (diff) | |
download | libssh-1a280d859d26690e06030b520973639eab04ead7.tar.gz libssh-1a280d859d26690e06030b520973639eab04ead7.tar.xz libssh-1a280d859d26690e06030b520973639eab04ead7.zip |
Format match_pattern().
git-svn-id: svn+ssh://svn.berlios.de/svnroot/repos/libssh/trunk@714 7dcaeef0-15fb-0310-b436-a5af3365683c
Diffstat (limited to 'libssh')
-rw-r--r-- | libssh/match.c | 117 |
1 files changed, 62 insertions, 55 deletions
diff --git a/libssh/match.c b/libssh/match.c index 35649f6f..33771f9a 100644 --- a/libssh/match.c +++ b/libssh/match.c @@ -39,69 +39,76 @@ * vim: ts=2 sw=2 et cindent */ -#include <sys/types.h> #include <ctype.h> #include <string.h> +#include <sys/types.h> + #include "libssh/priv.h" + /* * Returns true if the given string matches the pattern (which may contain ? * and * as wildcards), and zero if it does not match. */ - static int match_pattern(const char *s, const char *pattern) { - for (;;) { - /* If at end of pattern, accept if also at end of string. */ - if (!*pattern) - return !*s; - - if (*pattern == '*') { - /* Skip the asterisk. */ - pattern++; - - /* If at end of pattern, accept immediately. */ - if (!*pattern) - return 1; - - /* If next character in pattern is known, optimize. */ - if (*pattern != '?' && *pattern != '*') { - /* - * Look instances of the next character in - * pattern, and try to match starting from - * those. - */ - for (; *s; s++) - if (*s == *pattern && - match_pattern(s + 1, pattern + 1)) - return 1; - /* Failed. */ - return 0; - } - /* - * Move ahead one character at a time and try to - * match at each position. - */ - for (; *s; s++) - if (match_pattern(s, pattern)) - return 1; - /* Failed. */ - return 0; - } - /* - * There must be at least one more character in the string. - * If we are at the end, fail. - */ - if (!*s) - return 0; - - /* Check if the next character of the string is acceptable. */ - if (*pattern != '?' && *pattern != *s) - return 0; - - /* Move to the next character, both in string and in pattern. */ - s++; - pattern++; - } - /* NOTREACHED */ + for (;;) { + /* If at end of pattern, accept if also at end of string. */ + if (!*pattern) { + return !*s; + } + + if (*pattern == '*') { + /* Skip the asterisk. */ + pattern++; + + /* If at end of pattern, accept immediately. */ + if (!*pattern) + return 1; + + /* If next character in pattern is known, optimize. */ + if (*pattern != '?' && *pattern != '*') { + /* + * Look instances of the next character in + * pattern, and try to match starting from + * those. + */ + for (; *s; s++) + if (*s == *pattern && match_pattern(s + 1, pattern + 1)) { + return 1; + } + /* Failed. */ + return 0; + } + /* + * Move ahead one character at a time and try to + * match at each position. + */ + for (; *s; s++) { + if (match_pattern(s, pattern)) { + return 1; + } + } + /* Failed. */ + return 0; + } + /* + * There must be at least one more character in the string. + * If we are at the end, fail. + */ + if (!*s) { + return 0; + } + + /* Check if the next character of the string is acceptable. */ + if (*pattern != '?' && *pattern != *s) { + return 0; + } + + /* Move to the next character, both in string and in pattern. */ + s++; + pattern++; + } + + /* NOTREACHED */ } /* |