From f93d80a4907e9ddd4bdc8b12a9f82cf2b279d07b Mon Sep 17 00:00:00 2001 From: Pekka Riikonen Date: Wed, 20 Feb 2002 17:31:11 +0000 Subject: [PATCH] Moved util routines for BeOS from Unix, instead of using them directly from unix/. --- lib/silcutil/beos/silcbeosmutex.c | 1 + lib/silcutil/beos/silcbeosthread.c | 1 + lib/silcutil/beos/silcbeosutil.c | 107 ++++++++++++++++++++++++++++- 3 files changed, 107 insertions(+), 2 deletions(-) diff --git a/lib/silcutil/beos/silcbeosmutex.c b/lib/silcutil/beos/silcbeosmutex.c index 74544928..1c9e113a 100644 --- a/lib/silcutil/beos/silcbeosmutex.c +++ b/lib/silcutil/beos/silcbeosmutex.c @@ -16,6 +16,7 @@ GNU General Public License for more details. */ +/* I used Apache's APR code as a reference here. */ /* $Id$ */ #include "silcincludes.h" diff --git a/lib/silcutil/beos/silcbeosthread.c b/lib/silcutil/beos/silcbeosthread.c index d6e88be3..76870e52 100644 --- a/lib/silcutil/beos/silcbeosthread.c +++ b/lib/silcutil/beos/silcbeosthread.c @@ -16,6 +16,7 @@ GNU General Public License for more details. */ +/* I used Apache's APR code as a reference here. */ /* $Id$ */ #include "silcincludes.h" diff --git a/lib/silcutil/beos/silcbeosutil.c b/lib/silcutil/beos/silcbeosutil.c index 555839df..3e8582d7 100644 --- a/lib/silcutil/beos/silcbeosutil.c +++ b/lib/silcutil/beos/silcbeosutil.c @@ -20,5 +20,108 @@ #include "silcincludes.h" -/* Maybe works, or maybe not */ -#include "../unix/silcunixutil.c" +/* Inspects the `string' for wildcards and returns regex string that can + be used by the GNU regex library. A comma (`,') in the `string' means + that the string is list. */ + +char *silc_string_regexify(const char *string) +{ + int i, len, count; + char *regex; + + len = strlen(string); + count = 4; + for (i = 0; i < len; i++) + if (string[i] == '*' || string[i] == '?') + count++; + + regex = silc_calloc(len + count, sizeof(*regex)); + + count = 0; + regex[count] = '('; + count++; + + for (i = 0; i < len; i++) { + if (string[i] == '*' || string[i] == '?') { + regex[count] = '.'; + count++; + } else if (string[i] == ',') { + if (i + 1 == len) + continue; + regex[count] = '|'; + count++; + continue; + } + + regex[count] = string[i]; + count++; + } + + regex[count++] = ')'; + regex[count] = '$'; + + return regex; +} + +/* Combines two regex strings into one regex string so that they can be + used as one by the GNU regex library. The `string2' is combine into + the `string1'. */ + +char *silc_string_regex_combine(const char *string1, const char *string2) +{ + char *tmp; + int len1, len2; + + len1 = strlen(string1); + len2 = strlen(string2); + + tmp = silc_calloc(2 + len1 + len2, sizeof(*tmp)); + strncat(tmp, string1, len1 - 2); + strncat(tmp, "|", 1); + strncat(tmp, string2 + 1, len2 - 1); + + return tmp; +} + +/* Matches the two strings and returns TRUE if the strings match. */ + +int silc_string_regex_match(const char *regex, const char *string) +{ + regex_t preg; + int ret = FALSE; + + if (regcomp(&preg, regex, REG_NOSUB | REG_EXTENDED) < 0) + return FALSE; + + if (regexec(&preg, string, 0, NULL, 0) == 0) + ret = TRUE; + + regfree(&preg); + + return ret; +} + +/* Do regex match to the two strings `string1' and `string2'. If the + `string2' matches the `string1' this returns TRUE. */ + +int silc_string_match(const char *string1, const char *string2) +{ + char *s1; + int ret = FALSE; + + if (!string1 || !string2) + return ret; + + s1 = silc_string_regexify(string1); + ret = silc_string_regex_match(s1, string2); + silc_free(s1); + + return ret; +} + +/* Return current time to struct timeval. */ + +int silc_gettimeofday(struct timeval *p) +{ + return gettimeofday(p, NULL); +} -- 2.43.0