5 Author: Pekka Riikonen <priikone@silcnet.org>
7 Copyright (C) 1997 - 2001 Pekka Riikonen
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2 of the License, or
12 (at your option) any later version.
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
21 * These are general utility functions that doesn't belong to any specific
26 #include "silcincludes.h"
28 /* XXX lib/contrib/regex.c might cmopile on WIN32 as well */
30 /* Inspects the `string' for wildcards and returns regex string that can
31 be used by the GNU regex library. A comma (`,') in the `string' means
32 that the string is list. */
34 char *silc_string_regexify(const char *string)
41 for (i = 0; i < len; i++) {
42 if (string[i] == '*' || string[i] == '?')
43 count++; /* Will add '.' */
45 count += 2; /* Will add '|' and '^' */
48 regex = silc_calloc(len + count + 1, sizeof(*regex));
54 for (i = 0; i < len; i++) {
55 if (string[i] == '*' || string[i] == '?') {
58 } else if (string[i] == ',') {
66 regex[count++] = string[i];
75 /* Combines two regex strings into one regex string so that they can be
76 used as one by the GNU regex library. The `string2' is combine into
79 char *silc_string_regex_combine(const char *string1, const char *string2)
84 len1 = strlen(string1);
85 len2 = strlen(string2);
87 tmp = silc_calloc(2 + len1 + len2, sizeof(*tmp));
88 strncat(tmp, string1, len1 - 2);
90 strncat(tmp, string2 + 1, len2 - 1);
95 /* Matches the two strings and returns TRUE if the strings match. */
97 int silc_string_regex_match(const char *regex, const char *string)
102 if (regcomp(&preg, regex, REG_NOSUB | REG_EXTENDED) < 0)
105 if (regexec(&preg, string, 0, NULL, 0) == 0)
113 /* Do regex match to the two strings `string1' and `string2'. If the
114 `string2' matches the `string1' this returns TRUE. */
116 int silc_string_match(const char *string1, const char *string2)
121 if (!string1 || !string2)
124 s1 = silc_string_regexify(string1);
125 ret = silc_string_regex_match(s1, string2);
131 /* Returns the username of the user. If the global variable LOGNAME
132 does not exists we will get the name from the password file. */
134 char *silc_get_username()
136 char *logname = NULL;
138 logname = getenv("LOGNAME");
140 logname = getlogin();
144 pw = getpwuid(getuid());
146 return strdup("foo");
148 logname = pw->pw_name;
152 return strdup(logname);
155 /* Returns the real name of ther user. */
157 char *silc_get_real_name()
159 char *realname = NULL;
162 pw = getpwuid(getuid());
164 return strdup("Foo T. Bar");
166 if (strchr(pw->pw_gecos, ','))
167 *strchr(pw->pw_gecos, ',') = 0;
169 realname = strdup(pw->pw_gecos);
174 /* Return current time to struct timeval. */
176 int silc_gettimeofday(struct timeval *p)
178 return gettimeofday(p, NULL);