From b98bab5e1d4c9a7bf95f608cbb04cfde2a972b87 Mon Sep 17 00:00:00 2001 From: Art Cancro Date: Thu, 8 Dec 2005 03:22:56 +0000 Subject: [PATCH] Improved the reliability of per-thread locale by unsetting it at the end of each transaction. --- webcit/ChangeLog | 4 ++++ webcit/context_loop.c | 6 ++++++ webcit/gettext.c | 32 ++++++++++++++++++++------------ webcit/locate_host.c | 2 +- webcit/webcit.c | 5 ----- webcit/webcit.h | 1 + 6 files changed, 32 insertions(+), 18 deletions(-) diff --git a/webcit/ChangeLog b/webcit/ChangeLog index 7d4061a42..ed04cffee 100644 --- a/webcit/ChangeLog +++ b/webcit/ChangeLog @@ -1,5 +1,9 @@ $Id$ +Wed Dec 7 22:22:09 EST 2005 ajc +* Improved the reliability of per-thread locale by unsetting it at the end + of each transaction. + Wed Dec 7 17:57:57 EST 2005 ajc * Fixed more missing localization items diff --git a/webcit/context_loop.c b/webcit/context_loop.c index b7fdf2a9c..bde5ff2a6 100644 --- a/webcit/context_loop.c +++ b/webcit/context_loop.c @@ -434,7 +434,13 @@ void context_loop(int sock) TheSession->http_sock = sock; TheSession->lastreq = time(NULL); /* log */ TheSession->gzip_ok = gzip_ok; +#ifdef ENABLE_NLS + go_selected_language(); /* set locale */ +#endif session_loop(req); /* do transaction */ +#ifdef ENABLE_NLS + stop_selected_language(); /* unset locale */ +#endif pthread_mutex_unlock(&TheSession->SessionMutex); /* unbind */ /* Free the request buffer */ diff --git a/webcit/gettext.c b/webcit/gettext.c index 4d44e533a..421e668d0 100644 --- a/webcit/gettext.c +++ b/webcit/gettext.c @@ -34,8 +34,8 @@ void httplang_to_locale(const char *LocaleString) int nParts; const int nAvail = 1; /* Number of members in AvailLang */ char *search = (char *) malloc(len); - locale_t my_Locale; - locale_t my_Empty_Locale; + // locale_t my_Locale; + // locale_t my_Empty_Locale; memcpy(search, LocaleString, len); search[len] = '\0'; @@ -98,14 +98,16 @@ void httplang_to_locale(const char *LocaleString) memcpy(search, locale, len); memcpy(&search[len], ".UTF8", 5); search[len + 5] = '\0'; - my_Empty_Locale = newlocale(LC_ALL_MASK, NULL, NULL); /* create default locale */ - my_Locale = newlocale(LC_MESSAGES_MASK /*|LC_TIME_MASK FIXME */ , - search, my_Empty_Locale); - - uselocale(my_Locale); - // freelocale(my_Locale); - // freelocale(my_Empty_Locale); - free(search); + + + // my_Empty_Locale = newlocale(LC_ALL_MASK, NULL, NULL); /* create default locale */ + // my_Locale = newlocale(LC_MESSAGES_MASK /*|LC_TIME_MASK FIXME */ , + // search, my_Empty_Locale); + + // uselocale(my_Locale); + // // freelocale(my_Locale); + // // freelocale(my_Empty_Locale); + // free(search); } @@ -175,13 +177,16 @@ void set_selected_language(char *lang) { } /* - * Activate the selected language for this session. + * Activate and deactivate the selected language for this session. */ void go_selected_language(void) { - lprintf(9, "uselocale(%d)\n", WC->selected_language); uselocale(wc_locales[WC->selected_language]); } +void stop_selected_language(void) { + uselocale(LC_GLOBAL_LOCALE); +} + /* * Create a locale_t for each available language @@ -216,4 +221,7 @@ void set_selected_language(char *lang) { void go_selected_language(void) { } +void stop_selected_language(void) { +} + #endif /* ENABLE_NLS */ diff --git a/webcit/locate_host.c b/webcit/locate_host.c index ba7026216..034fd05e9 100644 --- a/webcit/locate_host.c +++ b/webcit/locate_host.c @@ -11,7 +11,7 @@ void locate_host(char *tbuf, int client_socket) { struct sockaddr_in cs; struct hostent *ch; - int len; + socklen_t len; char *i; int a1, a2, a3, a4; diff --git a/webcit/webcit.c b/webcit/webcit.c index 716275b31..d66f29e19 100644 --- a/webcit/webcit.c +++ b/webcit/webcit.c @@ -926,10 +926,6 @@ void session_loop(struct httprequest *req) WC->vars = NULL; WC->is_wap = 0; -#ifdef ENABLE_NLS - go_selected_language(); -#endif /* ENABLE_NLS */ - hptr = req; if (hptr == NULL) return; @@ -1532,5 +1528,4 @@ SKIP_ALL_THIS_CRAP: free(WC->upload); WC->upload_length = 0; } - } diff --git a/webcit/webcit.h b/webcit/webcit.h index acc399d9f..1a66c76c1 100644 --- a/webcit/webcit.h +++ b/webcit/webcit.h @@ -656,6 +656,7 @@ void set_floordiv_expanded(char *which_floordiv); void offer_languages(void); void set_selected_language(char *); void go_selected_language(void); +void stop_selected_language(void); void embed_room_banner(char *, int); /* navbar types that can be passed to embed_room_banner */ -- 2.39.2