Skip to content

Commit

Permalink
Update.
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
Ulrich Drepper committed Mar 14, 2000
1 parent 91eecef commit 0aece08
Show file tree
Hide file tree
Showing 4 changed files with 45 additions and 21 deletions.
15 changes: 15 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -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.
Expand Down
6 changes: 3 additions & 3 deletions iconv/gconv.h
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -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;
Expand All @@ -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! */
};

Expand Down
34 changes: 19 additions & 15 deletions iconv/gconv_open.c
Original file line number Diff line number Diff line change
@@ -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.
Expand Down Expand Up @@ -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;
Expand All @@ -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 = (GCONV_NCHAR_GOAL * steps[cnt].__max_needed_to);

result->__data[cnt].__outbuf = (char *) malloc (size);
if (result->__data[cnt].__outbuf == NULL)
{
size_t 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;
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;
}
}

Expand Down
11 changes: 8 additions & 3 deletions iconv/skeleton.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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 */
}

Expand All @@ -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);

Expand Down

0 comments on commit 0aece08

Please sign in to comment.