X-Git-Url: http://git.silcnet.org/gitweb/?a=blobdiff_plain;f=lib%2Fsilcutil%2Funix%2Fsilcunixutil.c;h=4b37ea5e769c65e59dd12656130e675010ad295d;hb=e9374395ec9747bddd3ea0bfd3e5a17717e97b31;hp=8cb6a723f10db57e57b256888d35e5f8aa600ef1;hpb=512bf4efd6075ba124204ded85079696088a62bf;p=silc.git diff --git a/lib/silcutil/unix/silcunixutil.c b/lib/silcutil/unix/silcunixutil.c index 8cb6a723..4b37ea5e 100644 --- a/lib/silcutil/unix/silcunixutil.c +++ b/lib/silcutil/unix/silcunixutil.c @@ -4,127 +4,20 @@ Author: Pekka Riikonen - Copyright (C) 1997 - 2001 Pekka Riikonen + Copyright (C) 1997 - 2007 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. - + the Free Software Foundation; version 2 of the License. + 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] == ',') { - 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; -} +#include "silc.h" /* Returns the username of the user. If the global variable LOGNAME does not exists we will get the name from the password file. */ @@ -132,7 +25,7 @@ int silc_string_match(const char *string1, const char *string2) char *silc_get_username() { char *logname = NULL; - + logname = getenv("LOGNAME"); if (!logname) { logname = getlogin(); @@ -140,15 +33,13 @@ char *silc_get_username() struct passwd *pw; pw = getpwuid(getuid()); - if (!pw) { - fprintf(stderr, "silc_get_username: %s\n", strerror(errno)); - return NULL; - } - + if (!pw) + return strdup("foo"); + logname = pw->pw_name; } } - + return strdup(logname); } @@ -158,16 +49,17 @@ 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 (!pw) + return strdup("No Name"); if (strchr(pw->pw_gecos, ',')) *strchr(pw->pw_gecos, ',') = 0; + if (!strlen(pw->pw_gecos)) + return strdup("No Name"); + realname = strdup(pw->pw_gecos); return realname; @@ -179,3 +71,8 @@ int silc_gettimeofday(struct timeval *p) { return gettimeofday(p, NULL); } + +int silc_file_set_nonblock(int fd) +{ + return fcntl(fd, F_SETFL, fcntl(fd, F_GETFL, 0) | O_NONBLOCK); +}