Ticket #2078: changed return value of init_translation_table() function.

init_translation_table() now returnes newly-allocated string
instead of pointer to the static buffer.

Thanks Vit Rosin for original patch.

Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
This commit is contained in:
Andrew Borodin 2010-03-31 14:02:45 +04:00
parent 993d678ed9
commit 7ada01bfa1
6 changed files with 26 additions and 26 deletions

View File

@ -623,12 +623,14 @@ display_bits_box (void)
run_dlg (dbits_dlg);
if (dbits_dlg->ret_value == B_ENTER) {
const char *errmsg;
char *errmsg;
display_codepage = new_display_codepage;
errmsg =
init_translation_table (source_codepage, display_codepage);
if (errmsg)
errmsg = init_translation_table (source_codepage, display_codepage);
if (errmsg != NULL) {
message (D_ERROR, MSG_ERROR, "%s", errmsg);
g_free (errmsg);
}
#ifdef HAVE_SLANG
tty_display_8bit (display_codepage != 0 && display_codepage != 1);
#else

View File

@ -179,15 +179,13 @@ translate_character (GIConv cd, char c)
return ch;
}
char errbuf[255];
/*
* FIXME: This assumes that ASCII is always the first encoding
* in mc.charsets
*/
#define CP_ASCII 0
const char *
char *
init_translation_table (int cpsource, int cpdisplay)
{
int i;
@ -214,11 +212,8 @@ init_translation_table (int cpsource, int cpdisplay)
/* display <- inpit table */
cd = g_iconv_open (cp_display, cp_source);
if (cd == INVALID_CONV) {
g_snprintf (errbuf, sizeof (errbuf),
_("Cannot translate from %s to %s"), cp_source, cp_display);
return errbuf;
}
if (cd == INVALID_CONV)
return g_strdup_printf (_("Cannot translate from %s to %s"), cp_source, cp_display);
for (i = 128; i <= 255; ++i)
conv_displ[i] = translate_character (cd, i);
@ -228,11 +223,8 @@ init_translation_table (int cpsource, int cpdisplay)
/* inpit <- display table */
cd = g_iconv_open (cp_source, cp_display);
if (cd == INVALID_CONV) {
g_snprintf (errbuf, sizeof (errbuf),
_("Cannot translate from %s to %s"), cp_display, cp_source);
return errbuf;
}
if (cd == INVALID_CONV)
return g_strdup_printf (_("Cannot translate from %s to %s"), cp_display, cp_source);
for (i = 128; i <= 255; ++i) {
unsigned char ch;

View File

@ -28,7 +28,7 @@ const char *get_codepage_id (const int n);
int get_codepage_index (const char *id);
int load_codepages_list (void);
void free_codepages_list (void);
const char *init_translation_table (int cpsource, int cpdisplay);
char *init_translation_table (int cpsource, int cpdisplay);
void convert_to_display (char *str);
void convert_from_input (char *str);
void convert_string (unsigned char *str);

View File

@ -3428,7 +3428,7 @@ set_panel_encoding (WPanel * panel)
const char *encoding = NULL;
char *cd_path;
#ifdef HAVE_CHARSET
const char *errmsg;
char *errmsg;
int r;
r = select_charset (-1, -1, default_source_codepage, FALSE);
@ -3439,7 +3439,7 @@ set_panel_encoding (WPanel * panel)
if (r == SELECT_CHARSET_NO_TRANSLATE)
{
/* No translation */
errmsg = init_translation_table (display_codepage, display_codepage);
g_free (init_translation_table (display_codepage, display_codepage));
cd_path = remove_encoding_from_path (panel->cwd);
do_panel_cd (panel, cd_path, 0);
g_free (cd_path);
@ -3449,9 +3449,10 @@ set_panel_encoding (WPanel * panel)
source_codepage = r;
errmsg = init_translation_table (source_codepage, display_codepage);
if (errmsg)
if (errmsg != NULL)
{
message (D_ERROR, MSG_ERROR, "%s", errmsg);
g_free (errmsg);
return;
}

View File

@ -115,16 +115,21 @@ select_charset (int center_y, int center_x, int current_charset, gboolean seldis
gboolean
do_set_codepage (int codepage)
{
const char *errmsg = NULL;
char *errmsg;
gboolean ret;
source_codepage = codepage;
errmsg = init_translation_table (codepage == SELECT_CHARSET_NO_TRANSLATE ?
display_codepage : source_codepage,
display_codepage);
if (errmsg != NULL)
message (D_ERROR, MSG_ERROR, "%s", errmsg);
ret = errmsg == NULL;
return (errmsg == NULL);
if (!ret) {
message (D_ERROR, MSG_ERROR, "%s", errmsg);
g_free (errmsg);
}
return ret;
}
/* Show menu selecting codepage */

View File

@ -868,7 +868,7 @@ load_setup (void)
if ((autodetect_codeset[0] != '\0') && (strcmp (autodetect_codeset, "off")))
is_autodetect_codeset_enabled = TRUE;
init_translation_table (source_codepage, display_codepage);
g_free (init_translation_table (source_codepage, display_codepage));
if (get_codepage_id (display_codepage))
utf8_display = str_isutf8 (get_codepage_id (display_codepage));
#endif /* HAVE_CHARSET */