added some code & compiler information to cmd_netinfo
[NeonServV5.git] / lang.c
diff --git a/lang.c b/lang.c
index f2880bc2f300da7cb33342e7f5d330ecc4b1e925..3acd0662548564129a5e381fccbe6a7686a35eef 100644 (file)
--- a/lang.c
+++ b/lang.c
@@ -1,5 +1,6 @@
 #include "lang.h"
 #include "UserNode.h"
+#include "DBHelper.h"
 
 #define DEFAULT_LANG_TAG "EN"
 #define DEFAULT_LANG_NAME "English"
@@ -16,13 +17,13 @@ void free_lang() {
 }
 
 static struct language* add_language(char *langtag, char *langname) {
-    int index;
-    for(index = 0; index < MAXLANGUAGES; index++) {
-        if(langdict[index] == NULL) break;
-        if(!strcmp(langdict[index]->langname, langname) || !strcmp(langdict[index]->langtag, langtag))
-            return langdict[index];
+    int cindex;
+    for(cindex = 0; cindex < MAXLANGUAGES; cindex++) {
+        if(langdict[cindex] == NULL) break;
+        if(!strcmp(langdict[cindex]->langname, langname) || !strcmp(langdict[cindex]->langtag, langtag))
+            return langdict[cindex];
     }
-    if(index == MAXLANGUAGES) return NULL;
+    if(cindex == MAXLANGUAGES) return NULL;
     struct language *lang = malloc(sizeof(*lang));
     if (!lang) {
         perror("malloc() failed");
@@ -42,21 +43,21 @@ static int get_entry_index(const char *ident) {
 }
 
 struct language* get_language_by_tag(char *tag) {
-    int index;
-    for(index = 0; index < MAXLANGUAGES; index++) {
-        if(langdict[index] == NULL) break;
-        if(!strcmp(langdict[index]->langtag, tag))
-            return langdict[index];
+    int cindex;
+    for(cindex = 0; cindex < MAXLANGUAGES; cindex++) {
+        if(langdict[cindex] == NULL) break;
+        if(!strcmp(langdict[cindex]->langtag, tag))
+            return langdict[cindex];
     }
     return NULL;
 }
 
 struct language* get_language_by_name(char *name) {
-    int index;
-    for(index = 0; index < MAXLANGUAGES; index++) {
-        if(langdict[index] == NULL) break;
-        if(!strcmp(langdict[index]->langname, name))
-            return langdict[index];
+    int cindex;
+    for(cindex = 0; cindex < MAXLANGUAGES; cindex++) {
+        if(langdict[cindex] == NULL) break;
+        if(!strcmp(langdict[cindex]->langname, name))
+            return langdict[cindex];
     }
     return NULL;
 }
@@ -71,9 +72,9 @@ void register_default_language_table(const struct default_language_entry *msgtab
     if(lang_c == NULL) 
         lang_c = add_language(DEFAULT_LANG_TAG, DEFAULT_LANG_NAME);
     struct language_table *lang_entry;
-    int index;
+    int cindex;
     while(msgtab->ident) {
-        index = get_entry_index(msgtab->ident);
+        cindex = get_entry_index(msgtab->ident);
         lang_entry = malloc(sizeof(*lang_entry));
         if (!lang_entry) {
             perror("malloc() failed");
@@ -81,24 +82,45 @@ void register_default_language_table(const struct default_language_entry *msgtab
         }
         lang_entry->ident = strdup(msgtab->ident);
         lang_entry->text = strdup(msgtab->text);
-        lang_entry->next = lang_c->entrys[index];
-        lang_c->entrys[index] = lang_entry;
+        lang_entry->next = lang_c->entrys[cindex];
+        lang_c->entrys[cindex] = lang_entry;
         msgtab++;
     }
 }
 
-char *get_language_string(struct UserNode *user, char* msg_ident) {
+char *get_language_string(struct UserNode *user, const char* msg_ident) {
     struct language* lang;
     if((user->flags & USERFLAG_ISAUTHED)) {
-        if(!(user->flags & USERFLAG_LOADED_SETTINGS))
-            load_user_settings(user);
+        loadUserSettings(user);
         lang = user->language;
     } else
         lang = lang_c;
-    int index = get_entry_index(msg_ident);
+    int cindex = get_entry_index(msg_ident);
     struct language_table* entry;
-    for(entry = lang->entrys[index]; entry; entry = entry->next) {
+    for(entry = lang->entrys[cindex]; entry; entry = entry->next) {
         if(!strcmp(entry->ident, msg_ident))
             return entry->text;
     }
+    return NULL;
+}
+
+char *build_language_string(struct UserNode *user, char *buffer, const char *msg_ident, ...) {
+    char *formatStr = get_language_string(user, msg_ident);
+    if(!formatStr) return NULL;
+    if(buffer == NULL) {
+        buffer = (char *)malloc((MAXLEN+1) * sizeof(char));
+        if (!buffer) {
+            perror("malloc() failed");
+            return NULL;
+        }
+    }
+    int pos;
+    va_list arg_list;
+    buffer[0] = '\0';
+    va_start(arg_list, msg_ident);
+    pos = vsnprintf(buffer, MAXLEN - 2, formatStr, arg_list);
+    va_end(arg_list);
+    if (pos < 0 || pos > (MAXLEN - 2)) pos = MAXLEN - 2;
+    buffer[pos] = '\0';
+    return buffer;
 }