Merge branch 'development'
[NeonServV5.git] / src / tools.c
index 3ad8a41f532600f3b01bbf84169b69d3fdeb875a..0232671c5050767aca56177a5bf5a7731ce0449d 100644 (file)
@@ -1,4 +1,4 @@
-/* tools.c - NeonServ v5.5
+/* 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 
@@ -375,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;
@@ -576,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();