Moved util routines for BeOS from Unix, instead of using them
authorPekka Riikonen <priikone@silcnet.org>
Wed, 20 Feb 2002 17:31:11 +0000 (17:31 +0000)
committerPekka Riikonen <priikone@silcnet.org>
Wed, 20 Feb 2002 17:31:11 +0000 (17:31 +0000)
directly from unix/.

lib/silcutil/beos/silcbeosmutex.c
lib/silcutil/beos/silcbeosthread.c
lib/silcutil/beos/silcbeosutil.c

index 74544928168df26ecbfb9c3f21c3ece9fc5507c6..1c9e113a7f1262a701f90795db545aefe7f21e27 100644 (file)
@@ -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"
index d6e88be3e6f785dd5def6fa5d861d0ede66bea11..76870e5266b0da47ce4419ff651ca2a3ffe8f70d 100644 (file)
@@ -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"
index 555839df75b6f531507b04619734c0d8856e8b4d..3e8582d7df62f0878f8c028622e662c7e695d319 100644 (file)
 
 #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);
+}