X-Git-Url: http://git.pk910.de/?p=NeonServV5.git;a=blobdiff_plain;f=src%2Ftools.c;h=0232671c5050767aca56177a5bf5a7731ce0449d;hp=51402a092467d40e6290b6caf4272d639215bef1;hb=HEAD;hpb=ec4e52748e5dbb08f49e679c0f22b0da43149713 diff --git a/src/tools.c b/src/tools.c index 51402a0..0232671 100644 --- a/src/tools.c +++ b/src/tools.c @@ -1,4 +1,4 @@ -/* tools.c - NeonServ v5.3 +/* tools.c - NeonServ v5.6 * Copyright (C) 2011-2012 Philipp Kreil (pk910) * * This program is free software: you can redistribute it and/or modify @@ -20,6 +20,7 @@ #include "lang.h" #include "ClientSocket.h" #include "IPNode.h" +#include "log.h" static const struct default_language_entry msgtab[] = { {"TIME_MASK_2_ITEMS", "%s and %s"}, /* {ARGS: "2 days", "1 hour"} */ @@ -204,7 +205,7 @@ char **table_end(struct Table *table) { if(table->contents[row][col][i] == '\002') j++; else if(table->contents[row][col][i] == '\003') { j++; - for(k = 1; k < 2; k++) { + for(k = 1; k <= 2; k++) { if(isdigit(table->contents[row][col][i+k])) j++; else @@ -212,7 +213,8 @@ char **table_end(struct Table *table) { } } } - } + } else if(table->col_flags[col] & TABLE_FLAG_COL_SKIP_NULL) + continue; i -= j; if(col < table->width-1) { for(;i < table->maxwidth[col]; i++) { @@ -374,10 +376,20 @@ int strToTime(struct UserNode *user, char *str) { return total_time; } +int getCurrentSecondsOfDay() { + time_t now = time(0); + struct tm *timeofday = localtime(&now); + int seconds = 0; + seconds += timeofday->tm_hour * 3600; + seconds += timeofday->tm_min * 60; + seconds += timeofday->tm_sec; + return seconds; +} + struct ModeBuffer* initModeBuffer(struct ClientSocket *client, struct ChanNode *chan) { struct ModeBuffer *modeBuf = malloc(sizeof(*modeBuf)); if(!modeBuf) { - perror("malloc() failed"); + printf_log("main", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return NULL; } modeBuf->client = client; @@ -521,7 +533,7 @@ int isFakeHost(char *host) { char *p1, *p2 = host; //find the last dot to identify if the hostmask is a fake host - while((p1 = strstr(p2, "."))) { + while((p1 = strchr(p2, '.'))) { p2 = p1 + 1; } //TLD database: http://www.iana.org/domains/root/db/ @@ -575,6 +587,28 @@ unsigned long crc32(const char *text) { return (crc^0xFFFFFFFF); } +int stricmp (const char *s1, const char *s2) { + return stricmplen(s1, s2, -1); +} + +int stricmplen(const char *s1, const char *s2, int len) { + if (s1 == NULL) + return (s2 == NULL ? 0 : -(*s2)); + if (s2 == NULL) + return *s1; + char c1, c2; + int i = 0; + while ((c1 = tolower(*s1)) == (c2 = tolower(*s2))) { + if (*s1 == '\0') + break; + i++; + s1++; + s2++; + if(len != -1 && i == len) break; + } + return c1 - c2; +} + void init_tools() { register_default_language_table(msgtab); crc32_init();