mirror of
https://sourceware.org/git/glibc.git
synced 2025-08-07 06:43:00 +03:00
Update.
1998-04-13 17:40 Ulrich Drepper <drepper@cygnus.com> * iconvdata/8bit-gap.c: Simplify step data handling. * iconvdata/8bit-generic.c: Likewise. * iconvdata/big5.c: Likewise. * iconvdata/euccn.c: Likewise. * iconvdata/eucjp.c: Likewise. * iconvdata/euckr.c: Likewise. * iconvdata/euctw.c: Likewise. * iconvdata/iso6937.c: Likewise. * iconvdata/iso8859-1.c: Likewise. * iconvdata/jis0208.h: Likewise. * iconvdata/jis0212.c: Likewise. * iconvdata/jis0212.h: Likewise. * iconvdata/johab.c: Likewise. * iconvdata/ksc5601.h: Likewise. * iconvdata/sjis.c: Likewise. * iconvdata/t61.c: Likewise. * iconvdata/uhc.c: Likewise.
This commit is contained in:
@@ -19,57 +19,32 @@
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include <gconv.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
/* Direction of the transformation. */
|
||||
enum direction
|
||||
{
|
||||
illegal,
|
||||
to_8bit,
|
||||
from_8bit
|
||||
};
|
||||
|
||||
struct s_8bit_data
|
||||
{
|
||||
enum direction dir;
|
||||
};
|
||||
/* We use three objects to describe the operation mode. */
|
||||
static int from_8bit_object;
|
||||
static int to_8bit_object;
|
||||
|
||||
|
||||
int
|
||||
gconv_init (struct gconv_step *step)
|
||||
{
|
||||
/* Determine which direction. */
|
||||
struct s_8bit_data *new_data;
|
||||
enum direction dir;
|
||||
int result;
|
||||
|
||||
if (strcasestr (step->from_name, NAME) != NULL)
|
||||
dir = from_8bit;
|
||||
step->data = &from_8bit_object;
|
||||
else if (strcasestr (step->to_name, NAME) != NULL)
|
||||
dir = to_8bit;
|
||||
step->data = &to_8bit_object;
|
||||
else
|
||||
dir = illegal;
|
||||
return GCONV_NOCONV;
|
||||
|
||||
result = GCONV_NOCONV;
|
||||
if (dir != illegal
|
||||
&& ((new_data
|
||||
= (struct s_8bit_data *) malloc (sizeof (struct s_8bit_data)))
|
||||
!= NULL))
|
||||
{
|
||||
new_data->dir = dir;
|
||||
step->data = new_data;
|
||||
result = GCONV_OK;
|
||||
}
|
||||
|
||||
return result;
|
||||
return GCONV_OK;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
gconv_end (struct gconv_step *data)
|
||||
{
|
||||
free (data->data);
|
||||
/* Nothing to do. */
|
||||
}
|
||||
|
||||
|
||||
@@ -106,15 +81,13 @@ gconv (struct gconv_step *step, struct gconv_step_data *data,
|
||||
}
|
||||
else
|
||||
{
|
||||
enum direction dir = ((struct s_8bit_data *) step->data)->dir;
|
||||
|
||||
do_write = 0;
|
||||
|
||||
do
|
||||
{
|
||||
result = GCONV_OK;
|
||||
|
||||
if (dir == from_8bit)
|
||||
if (step->data == &from_8bit_object)
|
||||
{
|
||||
size_t inchars = *inbufsize;
|
||||
size_t outwchars = data->outbufavail;
|
||||
@@ -191,7 +164,7 @@ gconv (struct gconv_step *step, struct gconv_step_data *data,
|
||||
if (data->is_last)
|
||||
{
|
||||
/* This is the last step. */
|
||||
result = (*inbufsize > (dir == from_8bit
|
||||
result = (*inbufsize > (step->data == &from_8bit_object
|
||||
? 0 : sizeof (wchar_t) - 1)
|
||||
? GCONV_FULL_OUTPUT : GCONV_EMPTY_INPUT);
|
||||
break;
|
||||
|
Reference in New Issue
Block a user