From ad235e0a6aba61fd6a58afbac7f2c68d879ab4a8 Mon Sep 17 00:00:00 2001 From: pk910 Date: Wed, 17 Aug 2011 04:05:48 +0200 Subject: [PATCH] fixed last commit --- IRCParser.c | 4 ++-- UserNode.c | 4 ++-- bot_NeonServ.c | 5 ++++- lang.c | 47 ++++++++++++++++++++++++----------------------- lang.h | 6 ++++-- main.c | 4 ++-- modcmd.c | 7 +++++++ 7 files changed, 45 insertions(+), 32 deletions(-) diff --git a/IRCParser.c b/IRCParser.c index c52659e..9918abc 100644 --- a/IRCParser.c +++ b/IRCParser.c @@ -368,7 +368,7 @@ void free_parser() { } void reply(struct ClientSocket *client, struct UserNode *user, const char *text, ...) { - char *reply_format = get_language_string(user, text); + const char *reply_format = get_language_string(user, text); if(reply_format == NULL) reply_format = text; if((user->flags & USERFLAG_ISAUTHED) && !(user->flags & USERFLAG_LOADED_SETTINGS)) @@ -380,7 +380,7 @@ void reply(struct ClientSocket *client, struct UserNode *user, const char *text, int pos; if (!(client->flags & SOCKET_FLAG_CONNECTED)) return; sendBuf[0] = '\0'; - va_start(arg_list, formatBuf); + va_start(arg_list, text); pos = vsnprintf(sendBuf, MAXLEN - 2, formatBuf, arg_list); va_end(arg_list); if (pos < 0 || pos > (MAXLEN - 2)) pos = MAXLEN - 2; diff --git a/UserNode.c b/UserNode.c index b2e3c7a..5db84d6 100644 --- a/UserNode.c +++ b/UserNode.c @@ -278,6 +278,6 @@ void load_user_settings(struct UserNode *user) { if(strcmp(row[1], "0")) user->flags |= USERFLAG_REPLY_PRIVMSG; } else - user->language = lang_c; - user->flags |= USERFLAG_LOADED_SETTINGS + user->language = get_default_language(); + user->flags |= USERFLAG_LOADED_SETTINGS; } diff --git a/bot_NeonServ.c b/bot_NeonServ.c index 9c3b004..1621d3c 100644 --- a/bot_NeonServ.c +++ b/bot_NeonServ.c @@ -7,12 +7,13 @@ #include "ChanUser.h" #include "ClientSocket.h" #include "mysqlConn.h" +#include "lang.h" #define BOTID 1 #define CLASSNAME "NeonServ" static const struct default_language_entry msgtab[] = { - + {NULL, NULL} }; static CMD_BIND(neonserv_cmd_users) { @@ -85,6 +86,8 @@ void init_NeonServ() { set_trigger_callback(BOTID, neonserv_trigger_callback); bind_cmd_to_command(BOTID, "users", "users"); bind_cmd_to_command(BOTID, "modes", "modes"); + + register_default_language_table(msgtab); } void free_NeonServ() { diff --git a/lang.c b/lang.c index f2880bc..4c9f877 100644 --- a/lang.c +++ b/lang.c @@ -16,13 +16,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 +42,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 +71,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,13 +81,13 @@ 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)) @@ -95,10 +95,11 @@ char *get_language_string(struct UserNode *user, char* msg_ident) { 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; } diff --git a/lang.h b/lang.h index 68961d3..b909bd7 100644 --- a/lang.h +++ b/lang.h @@ -21,10 +21,12 @@ struct language { struct language_table **entrys; }; +void init_lang(); +void free_lang(); struct language* get_language_by_tag(char *tag); struct language* get_language_by_name(char *name); struct language* get_default_language(); -void register_default_language_table(const struct default_language_entry **msgtab); -char *get_language_string(struct UserNode *user, char* msg_ident); +void register_default_language_table(const struct default_language_entry *msgtab); +char *get_language_string(struct UserNode *user, const char* msg_ident); #endif \ No newline at end of file diff --git a/main.c b/main.c index 4127e33..2d0ffc2 100644 --- a/main.c +++ b/main.c @@ -20,19 +20,19 @@ void cleanup() { free_modcmd(); free_whoqueue(); free_bots(); - free_lang(); free_mysql(); + free_lang(); } int main(void) { init_mysql(); + init_lang(); init_parser(); init_UserNode(); init_ChanNode(); init_bind(); init_modcmd(); - init_lang(); init_bots(); time_t socket_wait; diff --git a/modcmd.c b/modcmd.c index a84d5c8..0ef04e6 100644 --- a/modcmd.c +++ b/modcmd.c @@ -6,6 +6,7 @@ #include "ChanNode.h" #include "ChanUser.h" #include "WHOHandler.h" +#include "lang.h" struct trigger_callback { int botid; @@ -28,6 +29,11 @@ static struct cmd_binding **cmd_binds; static struct cmd_function *cmd_functions = NULL; static struct trigger_callback *trigger_callbacks = NULL; +static const struct default_language_entry msgtab[] = { + + {NULL, NULL} +}; + static int get_binds_index(char first_char) { if(tolower(first_char) >= 'a' && tolower(first_char) <= 'z') { return tolower(first_char - 'a'); @@ -369,6 +375,7 @@ void init_modcmd() { cmd_binds = calloc(27, sizeof(*cmd_binds)); bind_chanmsg(got_chanmsg); bind_privmsg(got_privmsg); + register_default_language_table(msgtab); } void free_modcmd() { -- 2.20.1