fixed path of mysql/errmsg.h (OSX compilation fix)
[NeonServV5.git] / src / lang.c
index 1c0a027cdf1d3a293f6b2d3c10cd96030711aed5..e07735e5a7f72e88af4b83096d47fa25a91e9bcd 100644 (file)
@@ -1,4 +1,4 @@
-/* lang.c - NeonServ v5.3
+/* lang.c - NeonServ v5.6
  * Copyright (C) 2011-2012  Philipp Kreil (pk910)
  * 
  * This program is free software: you can redistribute it and/or modify
@@ -135,13 +135,21 @@ void register_default_language_table(const struct default_language_entry *msgtab
 
 void register_language_string(struct language *lang, char *ident, char *text) {
     int cindex = get_entry_index(ident);
-    struct language_table *lang_entry = malloc(sizeof(*lang_entry));
-    if (!lang_entry) {
-        perror("malloc() failed");
-        return;
+    struct language_table *lang_entry;
+    for(lang_entry = lang->entrys[cindex]; lang_entry; lang_entry = lang_entry->next) {
+        if(!strcmp(lang_entry->ident, ident)) break;
     }
-    
-    lang_entry->ident = strdup(ident);
+    if(!lang_entry) {
+        lang_entry = malloc(sizeof(*lang_entry));
+        if (!lang_entry) {
+            perror("malloc() failed");
+            return;
+        }
+        lang_entry->ident = strdup(ident);
+        lang_entry->next = lang->entrys[cindex];
+        lang->entrys[cindex] = lang_entry;
+    } else
+        free(lang_entry->text); //free old text (new one will be set below)
     //replace all:
     //$b to \002
     //$k to \003
@@ -173,8 +181,6 @@ void register_language_string(struct language *lang, char *ident, char *text) {
         }
     } while(a);
     lang_entry->text = strdup(tmp);
-    lang_entry->next = lang->entrys[cindex];
-    lang->entrys[cindex] = lang_entry;
 }
 
 char *get_language_string(struct UserNode *user, const char* msg_ident) {