Return to match.c CVS log | Up to [local] / src / usr.bin / ssh |
File: [local] / src / usr.bin / ssh / match.c (download)
Revision 1.1, Sun Sep 26 20:53:36 1999 UTC (24 years, 8 months ago) by deraadt
i bet a lot of people didn't know what ssh 1.2.16 had a nice license. well, except for the patent issues. someone in sweden (forget their name at the moment) cleaned out most of the patented code, and now this code removes rsa code. when this is done, it will link against libssl, but the work isn't completely done yet. then we need to bring this up to modern days, featurewise. |
/* match.c Author: Tatu Ylonen <ylo@cs.hut.fi> Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland All rights reserved Created: Thu Jun 22 01:17:50 1995 ylo Simple pattern matching, with '*' and '?' as wildcards. */ #include "includes.h" RCSID("$Id: match.c,v 1.1 1999/09/26 20:53:36 deraadt Exp $"); #include "ssh.h" /* Returns true if the given string matches the pattern (which may contain ? and * as wildcards), and zero if it does not match. */ int match_pattern(const char *s, const char *pattern) { while (1) { /* If at end of pattern, accept if also at end of string. */ if (!*pattern) return !*s; /* Process '*'. */ 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*/ }