1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-08-07 06:43:00 +03:00
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:
Ulrich Drepper
1998-04-13 17:54:00 +00:00
parent 40c0dc53b0
commit 2aea1d796e
18 changed files with 149 additions and 477 deletions

View File

@@ -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;