1
1

src/strutil.c (_str_convert): fixed memory leak: don't get error of valid

byte sequence conversion. Small optimization. Removed redundant code.
Этот коммит содержится в:
Andrew Borodin 2009-04-29 20:35:42 +04:00
родитель a93716386c
Коммит 4c5c8d4247

Просмотреть файл

@ -141,15 +141,18 @@ _str_convert (GIConv coder, const char *string, int size, GString * buffer)
&bytes_written, &error);
if (error)
{
switch (error->code)
int code = error->code;
g_error_free (error);
error = NULL;
switch (code)
{
case G_CONVERT_ERROR_NO_CONVERSION:
/* Conversion between the requested character sets is not supported. */
tmp_buff = g_strnfill (strlen (string), '?');
g_string_append (buffer, tmp_buff);
g_free (tmp_buff);
g_error_free (error);
error = NULL;
return ESTR_FAILURE;
case G_CONVERT_ERROR_ILLEGAL_SEQUENCE:
@ -158,10 +161,10 @@ _str_convert (GIConv coder, const char *string, int size, GString * buffer)
/* recode valid byte sequence */
tmp_buff = g_convert_with_iconv ((const gchar *) string,
bytes_read,
coder,
NULL, NULL, &error);
coder, NULL, NULL, NULL);
if (tmp_buff != NULL) {
if (tmp_buff != NULL)
{
g_string_append (buffer, tmp_buff);
g_free (tmp_buff);
}
@ -175,8 +178,6 @@ _str_convert (GIConv coder, const char *string, int size, GString * buffer)
}
else
{
g_error_free (error);
error = NULL;
return ESTR_PROBLEM;
}
state = ESTR_PROBLEM;
@ -184,8 +185,6 @@ _str_convert (GIConv coder, const char *string, int size, GString * buffer)
case G_CONVERT_ERROR_PARTIAL_INPUT:
/* Partial character sequence at end of input. */
g_error_free (error);
error = NULL;
g_string_append (buffer, tmp_buff);
g_free (tmp_buff);
if ((int)bytes_read < left)
@ -201,16 +200,9 @@ _str_convert (GIConv coder, const char *string, int size, GString * buffer)
case G_CONVERT_ERROR_NOT_ABSOLUTE_PATH: /* Don't know how handle this error :( */
case G_CONVERT_ERROR_FAILED: /* Conversion failed for some reason. */
default:
g_error_free (error);
error = NULL;
if (tmp_buff){
g_free (tmp_buff);
tmp_buff = NULL;
}
g_free (tmp_buff);
return ESTR_FAILURE;
}
g_error_free (error);
error = NULL;
}
else
{