summaryrefslogtreecommitdiff
path: root/src/numeric.c
diff options
context:
space:
mode:
authormichael <michael@82007160-df01-0410-b94d-b575c5fd34c7>2013-04-19 19:16:09 +0000
committermichael <michael@82007160-df01-0410-b94d-b575c5fd34c7>2013-04-19 19:16:09 +0000
commitf27e1d9b7ee2cbd16bbdadf35872ef39f0527aac (patch)
treedf119cb19885ea1eed8c994ed1568858c8064474 /src/numeric.c
parent6b18f4241216eee3ea96ac807509bbd246a534f5 (diff)
- Made all numeric defines use the actual string instead of the numeric value
which allows to use gcc's printf format attribute - Remove current message locale implementation git-svn-id: svn://svn.ircd-hybrid.org/svnroot/ircd-hybrid/trunk@1832 82007160-df01-0410-b94d-b575c5fd34c7
Diffstat (limited to 'src/numeric.c')
-rw-r--r--src/numeric.c195
1 files changed, 0 insertions, 195 deletions
diff --git a/src/numeric.c b/src/numeric.c
index 21c574e..e08c48d 100644
--- a/src/numeric.c
+++ b/src/numeric.c
@@ -30,198 +30,3 @@
#include "log.h"
#include "send.h"
#include "client.h"
-#include "messages.tab"
-
-static char used_locale[LOCALE_LENGTH] = "standard";
-
-/*
- * form_str
- *
- * inputs - numeric
- * output - corresponding string
- * side effects - NONE
- */
-const char* form_str(int numeric)
-{
- assert(-1 < numeric);
- assert(numeric < ERR_LAST_ERR_MSG);
-
- if (numeric > ERR_LAST_ERR_MSG)
- numeric = ERR_LAST_ERR_MSG;
- if (numeric < 0)
- numeric = ERR_LAST_ERR_MSG;
-
- assert(replies[numeric].standard != NULL);
-
- return (replies[numeric].translated != NULL ? replies[numeric].translated :
- replies[numeric].standard);
-}
-
-/* Attempts to change a numeric with index "reply" to "new_reply".
- * Returns 1 if ok, 0 otherwise.
- */
-static int
-change_reply(const char *locale, int linecnt, int reply, char *new_reply)
-{
- int found;
- char *new = new_reply;
- const char *old = replies[reply].standard;
-
- for (; *new; new++)
- {
- if (*new == '%')
- {
- if (!*++new) break;
- if (*new != '%')
- {
- /* We've just found a format symbol. Check if it is the next format
- * symbol in the original reply.
- */
- for (; *new >= '0' && *new <= '9'; new++); /* skip size prefix */
- found = 0;
- for (; *old; old++)
- {
- if (*old == '%')
- {
- if (!*++old) break; /* shouldn't happen */
- if (*old != '%')
- {
- for (; *old >= '0' && *old <= '9'; old++); /* skip size prefix */
- if (*new != *old++)
- {
- ilog(LOG_TYPE_IRCD, "Incompatible format symbols (%s.lang, %d)",
- locale, linecnt);
- return 0;
- }
- found = 1;
- break;
- }
- }
- }
- if (!found)
- {
- ilog(LOG_TYPE_IRCD, "Too many format symbols (%s.lang, %d)", locale, linecnt);
- return(0);
- }
- }
- }
- }
-
- MyFree(replies[reply].translated);
- replies[reply].translated = xstrdup(new_reply);
- return(1);
-}
-
-/* Loads a language file. Errors are logged into the log file. */
-void
-set_locale(const char *locale)
-{
- int i, res = 1, linecnt = 0;
- char buffer[IRCD_BUFSIZE + 1];
- char *ident, *reply;
- FILE *f;
-
- /* Restore standard replies */
- for (i = 0; i <= ERR_LAST_ERR_MSG; i++) /* 0 isn't a magic number! ;> */
- {
- if (replies[i].translated != NULL)
- {
- MyFree(replies[i].translated);
- replies[i].translated = NULL;
- }
- }
-
- if (strchr(locale, '/') != NULL)
- {
- strlcpy(used_locale, "standard", sizeof(used_locale)); /* XXX paranoid */
- return;
- }
-
- /* yes, I know - the slash isn't necessary. But I have to be sure
- * that it'll work even if some lame admin won't put "/" at the end
- * of MSGPATH.
- */
- snprintf(buffer, sizeof(buffer), "%s/%s.lang", MSGPATH, locale);
- if ((f = fopen(buffer, "r")) == NULL)
- {
- strlcpy(used_locale, "standard", sizeof(used_locale)); /* XXX */
- return;
- }
-
- /* Process the language file */
- while (fgets(buffer, sizeof(buffer), f))
- {
- ++linecnt;
- if (buffer[0] == ';')
- continue; /* that's a comment */
-
- if ((ident = strpbrk(buffer, "\r\n")) != NULL)
- *ident = '\0';
-
- /* skip spaces if there are any */
- for (ident = buffer; *ident == ' ' || *ident == '\t'; ident++)/* null */;
- if (*ident == '\0')
- continue; /* empty line */
-
- /* skip after the reply identificator */
- for (reply = ident; *reply != ' ' && *reply != '\t' && *reply != ':';
- reply++)
- if (*reply == '\0') goto error;
-
- if (*reply == ' ' || *reply == '\t')
- {
- for (*reply++ = '\0'; *reply == ' ' || *reply == '\t'; reply++);
- if (*reply != ':')
- {
- error:
- ilog(LOG_TYPE_IRCD, "Invalid line in language file (%s.lang, %d)",
- locale, linecnt);
- res = 0;
- continue;
- }
- }
- else
- *reply++ = '\0';
- if (*ident == '\0')
- goto error;
-
- /* skip to the beginning of reply */
- while (*reply == ' ' || *reply == '\t') reply++;
- if (*reply == '\0')
- goto error;
-
- for (i = 0; i <= ERR_LAST_ERR_MSG; i++)
- {
- if (replies[i].name != NULL)
- {
- if (irccmp(replies[i].name, ident) == 0)
- {
- if (!change_reply(locale, linecnt, i, reply)) res = 0;
- i = -1;
- break;
- }
- }
- }
- if (i != -1)
- {
- ilog(LOG_TYPE_IRCD,
- "Unknown numeric %s (%s.lang, %d)", ident, locale, linecnt);
- res = 0;
- }
- }
- fclose(f);
-
- strlcpy(used_locale, locale, sizeof(used_locale));
- if (!res)
- sendto_realops_flags(UMODE_ALL, L_ADMIN, SEND_NOTICE,
- "Language file [%s] contains "
- "errors, check server log file for more details",
- used_locale);
-}
-
-/* Returns the name of current locale. */
-const char *
-get_locale(void)
-{
- return used_locale;
-}