2000-03-14  Ulrich Drepper  <drepper@redhat.com>

	* iconv/skeleton.c: Increment __invocation_counter in inner loop
	since modules depend on it counting the number of times the conversion
	function got called.

	* iconv/gconv_open.c: Optimize loop to setup step data structure.

	* iconv/gconv.h: Pretty print.

2000-03-04  Ulrich Drepper  <drepper@redhat.com>

	* posix/wordexp-test.c: Correct one of the tests added in the last
	change.  Really get the root passwd entry to check again ~root.
This commit is contained in:
Ulrich Drepper 2000-03-14 09:11:00 +00:00
parent 91eecefd76
commit 0aece08ded
4 changed files with 45 additions and 21 deletions

View File

@ -1,3 +1,18 @@
2000-03-14 Ulrich Drepper <drepper@redhat.com>
* iconv/skeleton.c: Increment __invocation_counter in inner loop
since modules depend on it counting the number of times the conversion
function got called.
* iconv/gconv_open.c: Optimize loop to setup step data structure.
* iconv/gconv.h: Pretty print.
2000-03-04 Ulrich Drepper <drepper@redhat.com>
* posix/wordexp-test.c: Correct one of the tests added in the last
change. Really get the root passwd entry to check again ~root.
2000-03-10 Andreas Jaeger <aj@suse.de>
* manual/filesys.texi (Working Directory): Fix last patch.

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1997, 1998, 1999 Free Software Foundation, Inc.
/* Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@ -100,7 +100,7 @@ struct __gconv_step_data
{
unsigned char *__outbuf; /* Output buffer for this step. */
unsigned char *__outbufend; /* Address of first byte after the output
buffer.*/
buffer. */
/* Is this the last module in the chain. */
int __is_last;
@ -114,7 +114,7 @@ struct __gconv_step_data
int __internal_use;
__mbstate_t *__statep;
__mbstate_t __state; /* This element should not be used directly by
__mbstate_t __state; /* This element must not be used directly by
any module; always use STATEP! */
};

View File

@ -1,5 +1,5 @@
/* Find matching transformation algorithms and initialize steps.
Copyright (C) 1997, 1998, 1999 Free Software Foundation, Inc.
Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@ -57,11 +57,13 @@ __gconv_open (const char *toset, const char *fromset, __gconv_t *handle,
/* Call all initialization functions for the transformation
step implementations. */
for (cnt = 0; cnt < nsteps; ++cnt)
for (cnt = 0; cnt < nsteps - 1; ++cnt)
{
size_t size;
/* If this is the last step we must not allocate an
output buffer. */
result->__data[cnt].__is_last = cnt == nsteps - 1;
result->__data[cnt].__is_last = 0;
/* Reset the counter. */
result->__data[cnt].__invocation_counter = 0;
@ -73,21 +75,23 @@ __gconv_open (const char *toset, const char *fromset, __gconv_t *handle,
result->__data[cnt].__statep = &result->__data[cnt].__state;
/* Allocate the buffer. */
if (!result->__data[cnt].__is_last)
{
size_t size = (GCONV_NCHAR_GOAL
* steps[cnt].__max_needed_to);
size = (GCONV_NCHAR_GOAL * steps[cnt].__max_needed_to);
result->__data[cnt].__outbuf = (char *) malloc (size);
if (result->__data[cnt].__outbuf == NULL)
{
res = __GCONV_NOMEM;
break;
}
result->__data[cnt].__outbufend =
result->__data[cnt].__outbuf + size;
result->__data[cnt].__outbuf = (char *) malloc (size);
if (result->__data[cnt].__outbuf == NULL)
{
res = __GCONV_NOMEM;
break;
}
result->__data[cnt].__outbufend =
result->__data[cnt].__outbuf + size;
}
/* Now handle the last entry. */
result->__data[cnt].__is_last = 1;
result->__data[cnt].__invocation_counter = 0;
result->__data[cnt].__internal_use = 0;
result->__data[cnt].__statep = &result->__data[cnt].__state;
}
}

View File

@ -261,6 +261,9 @@ FUNCTION_NAME (struct __gconv_step *step, struct __gconv_step_data *data,
data->__statep, step->__data, &converted
EXTRA_LOOP_ARGS);
/* We finished one use of the loops. */
++data->__invocation_counter;
/* If this is the last step leave the loop, there is nothing
we can do. */
if (data->__is_last)
@ -324,6 +327,11 @@ FUNCTION_NAME (struct __gconv_step *step, struct __gconv_step_data *data,
rerun. */
assert (outbuf == outerr);
assert (nstatus == __GCONV_FULL_OUTPUT);
/* If we haven't consumed a single byte decrement
the invocation counter. */
if (outbuf == outstart)
--data->__invocation_counter;
#endif /* reset input buffer */
}
@ -336,9 +344,6 @@ FUNCTION_NAME (struct __gconv_step *step, struct __gconv_step_data *data,
if (status == __GCONV_FULL_OUTPUT)
status = __GCONV_OK;
}
/* We finished one use of the loops. */
++data->__invocation_counter;
}
while (status == __GCONV_OK);