From: Pekka Riikonen Date: Sat, 23 Jun 2001 16:11:15 +0000 (+0000) Subject: updates. X-Git-Tag: robodoc-323~151 X-Git-Url: http://git.silcnet.org/gitweb/?p=silc.git;a=commitdiff_plain;h=7b92fac40fa3252101a476bf6f3b68d38f7176d9 updates. --- diff --git a/CHANGES b/CHANGES index d1807073..eb6efa1b 100644 --- a/CHANGES +++ b/CHANGES @@ -19,6 +19,9 @@ Sat Jun 23 16:01:00 EEST 2001 Pekka Riikonen Added WIN32 specific network routines to the lib/silcutil/win32/silcwin32net.c. + * Added Unix specific utility functions from the + lib/silcutil/silcutil.c to lib/silcutil/unix/silcunixutil.c. + Fri Jun 22 10:44:14 EEST 2001 Pekka Riikonen * Do not handle JOIN notify in the server if the target client diff --git a/includes/silcincludes.h b/includes/silcincludes.h index f99e5e09..63f9e675 100644 --- a/includes/silcincludes.h +++ b/includes/silcincludes.h @@ -31,6 +31,8 @@ #ifdef SILC_WIN32 #include +#include +#include #endif #include @@ -56,7 +58,7 @@ #error fcntl.h not found in the system #endif -#ifdef HAVE_ASSERT_H +#ifdef HAVE_ERRNO_H #include #else #error errno.h not found in the system diff --git a/lib/contrib/regex.c b/lib/contrib/regex.c index e0d95f72..5845a416 100644 --- a/lib/contrib/regex.c +++ b/lib/contrib/regex.c @@ -24,9 +24,11 @@ #pragma alloca #endif +/* #ifndef _GNU_SOURCE #define _GNU_SOURCE #endif +*/ /* We need this for `regex.h', and perhaps for the Emacs include files. */ #include diff --git a/lib/silcutil/silcnet.h b/lib/silcutil/silcnet.h index 5b35a066..2bb23e75 100644 --- a/lib/silcutil/silcnet.h +++ b/lib/silcutil/silcnet.h @@ -114,6 +114,19 @@ void silc_net_close_connection(int sock); ***/ int silc_net_accept_connection(int sock); +/****f* silcutil/SilcNetAPI/silc_net_set_socket_nonblock + * + * SYNOPSIS + * + * int silc_net_set_socket_nonblock(int sock); + * + * DESCRIPTION + * + * Sets the socket to non-blocking mode. + * + ***/ +int silc_net_set_socket_nonblock(int sock); + /****f* silcutil/SilcNetAPI/silc_net_set_socket_opt * * SYNOPSIS diff --git a/lib/silcutil/silcutil.c b/lib/silcutil/silcutil.c index 56ff3090..fa482dcc 100644 --- a/lib/silcutil/silcutil.c +++ b/lib/silcutil/silcutil.c @@ -643,147 +643,6 @@ int silc_string_compare(char *string1, char *string2) return FALSE; } -/* 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] == ',') { - regex[count] = '|'; - count++; - continue; - } - - regex[count] = string[i]; - count++; - } - - regex[count - 1] = ')'; - 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; - - s1 = silc_string_regexify(string1); - ret = silc_string_regex_match(s1, string2); - silc_free(s1); - - return ret; -} - -/* Returns the username of the user. If the global variable LOGNAME - does not exists we will get the name from the password file. */ - -char *silc_get_username() -{ - char *logname = NULL; - - logname = getenv("LOGNAME"); - if (!logname) { - logname = getlogin(); - if (!logname) { - struct passwd *pw; - - pw = getpwuid(getuid()); - if (!pw) { - fprintf(stderr, "silc_get_username: %s\n", strerror(errno)); - return NULL; - } - - logname = pw->pw_name; - } - } - - return strdup(logname); -} - -/* Returns the real name of ther user. */ - -char *silc_get_real_name() -{ - char *realname = NULL; - struct passwd *pw; - - pw = getpwuid(getuid()); - if (!pw) { - fprintf(stderr, "silc_get_username: %s\n", strerror(errno)); - return NULL; - } - - if (strchr(pw->pw_gecos, ',')) - *strchr(pw->pw_gecos, ',') = 0; - - realname = strdup(pw->pw_gecos); - - return realname; -} - /* Basic has function to hash strings. May be used with the SilcHashTable. Note that this lowers the characters of the string (with tolower()) so this is used usually with nicknames, channel and server names to provide diff --git a/lib/silcutil/unix/Makefile.am b/lib/silcutil/unix/Makefile.am index c0ab8480..033cb9bb 100644 --- a/lib/silcutil/unix/Makefile.am +++ b/lib/silcutil/unix/Makefile.am @@ -22,7 +22,8 @@ noinst_LIBRARIES = libsilcunixutil.a libsilcunixutil_a_SOURCES = \ silcunixschedule.c \ - silcunixnet.c + silcunixnet.c \ + silcunixutil.c EXTRA_DIST = *.h diff --git a/lib/silcutil/unix/silcunixnet.c b/lib/silcutil/unix/silcunixnet.c index 1abb7a0c..de1b1e33 100644 --- a/lib/silcutil/unix/silcunixnet.c +++ b/lib/silcutil/unix/silcunixnet.c @@ -22,8 +22,6 @@ #include "silcincludes.h" #include "silcnet.h" -int silc_net_set_socket_nonblock(int sock); - /* This function creates server or daemon or listener or what ever. This does not fork a new process, it must be done by the caller if caller wants to create a child process. This is used by the SILC server. diff --git a/lib/silcutil/unix/silcunixutil.c b/lib/silcutil/unix/silcunixutil.c new file mode 100644 index 00000000..1e1c4408 --- /dev/null +++ b/lib/silcutil/unix/silcunixutil.c @@ -0,0 +1,169 @@ +/* + + silcunixutil.c + + Author: Pekka Riikonen + + Copyright (C) 1997 - 2000 Pekka Riikonen + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + +*/ +/* + * These are general utility functions that doesn't belong to any specific + * group of routines. + */ +/* $Id$ */ + +#include "silcincludes.h" + +/* XXX lib/contrib/regex.c might cmopile on WIN32 as well */ + +/* 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] == ',') { + regex[count] = '|'; + count++; + continue; + } + + regex[count] = string[i]; + count++; + } + + regex[count - 1] = ')'; + 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; + + s1 = silc_string_regexify(string1); + ret = silc_string_regex_match(s1, string2); + silc_free(s1); + + return ret; +} + +/* Returns the username of the user. If the global variable LOGNAME + does not exists we will get the name from the password file. */ + +char *silc_get_username() +{ + char *logname = NULL; + + logname = getenv("LOGNAME"); + if (!logname) { + logname = getlogin(); + if (!logname) { + struct passwd *pw; + + pw = getpwuid(getuid()); + if (!pw) { + fprintf(stderr, "silc_get_username: %s\n", strerror(errno)); + return NULL; + } + + logname = pw->pw_name; + } + } + + return strdup(logname); +} + +/* Returns the real name of ther user. */ + +char *silc_get_real_name() +{ + char *realname = NULL; + struct passwd *pw; + + pw = getpwuid(getuid()); + if (!pw) { + fprintf(stderr, "silc_get_username: %s\n", strerror(errno)); + return NULL; + } + + if (strchr(pw->pw_gecos, ',')) + *strchr(pw->pw_gecos, ',') = 0; + + realname = strdup(pw->pw_gecos); + + return realname; +}