* [review] Redefine _IO_iconv_t to store a single gconv step pointer [BZ #25097]
@ 2019-11-03 17:11 Florian Weimer (Code Review)
2019-11-13 17:14 ` [review v2] " Szabolcs Nagy (Code Review)
2019-11-13 17:20 ` [pushed] " Sourceware to Gerrit sync (Code Review)
0 siblings, 2 replies; 3+ messages in thread
From: Florian Weimer (Code Review) @ 2019-11-03 17:11 UTC (permalink / raw)
To: libc-alpha; +Cc: Florian Weimer
Change URL: https://gnutoolchain-gerrit.osci.io/r/c/glibc/+/490
......................................................................
Redefine _IO_iconv_t to store a single gconv step pointer [BZ #25097]
libio can only deal with gconv conversions which consist of a single
step. Not using __gconv_info simplifies the data structures somewhat.
This eliminates a new GCC 10 warning about subscribing an inner
zero-length array.
Tested on x86_64-linux-gnu with mainline GCC. Built with
build-many-glibcs.py, also with mainline GCC. Due to GCC PR 92039,
there are failures left on 32-bit architectures with float128 support.
Change-Id: I8b4c489b619a53154712ff32e1b6f13bb92d4203
---
M libio/fileops.c
M libio/iofclose.c
M libio/iofwide.c
M libio/libio.h
4 files changed, 46 insertions(+), 57 deletions(-)
diff --git a/libio/fileops.c b/libio/fileops.c
index d84dd7c..f81646d 100644
--- a/libio/fileops.c
+++ b/libio/fileops.c
@@ -331,23 +331,19 @@
cc = fp->_codecvt = &fp->_wide_data->_codecvt;
- cc->__cd_in.__cd.__nsteps = fcts.towc_nsteps;
- cc->__cd_in.__cd.__steps = fcts.towc;
+ cc->__cd_in.step = fcts.towc;
- cc->__cd_in.__cd.__data[0].__invocation_counter = 0;
- cc->__cd_in.__cd.__data[0].__internal_use = 1;
- cc->__cd_in.__cd.__data[0].__flags = __GCONV_IS_LAST;
- cc->__cd_in.__cd.__data[0].__statep = &result->_wide_data->_IO_state;
+ cc->__cd_in.step_data.__invocation_counter = 0;
+ cc->__cd_in.step_data.__internal_use = 1;
+ cc->__cd_in.step_data.__flags = __GCONV_IS_LAST;
+ cc->__cd_in.step_data.__statep = &result->_wide_data->_IO_state;
- cc->__cd_out.__cd.__nsteps = fcts.tomb_nsteps;
- cc->__cd_out.__cd.__steps = fcts.tomb;
+ cc->__cd_out.step = fcts.tomb;
- cc->__cd_out.__cd.__data[0].__invocation_counter = 0;
- cc->__cd_out.__cd.__data[0].__internal_use = 1;
- cc->__cd_out.__cd.__data[0].__flags
- = __GCONV_IS_LAST | __GCONV_TRANSLIT;
- cc->__cd_out.__cd.__data[0].__statep =
- &result->_wide_data->_IO_state;
+ cc->__cd_out.step_data.__invocation_counter = 0;
+ cc->__cd_out.step_data.__internal_use = 1;
+ cc->__cd_out.step_data.__flags = __GCONV_IS_LAST | __GCONV_TRANSLIT;
+ cc->__cd_out.step_data.__statep = &result->_wide_data->_IO_state;
/* From now on use the wide character callback functions. */
_IO_JUMPS_FILE_plus (fp) = fp->_wide_data->_wide_vtable;
diff --git a/libio/iofclose.c b/libio/iofclose.c
index 398b86d..3c648d6 100644
--- a/libio/iofclose.c
+++ b/libio/iofclose.c
@@ -62,8 +62,8 @@
struct _IO_codecvt *cc = fp->_codecvt;
__libc_lock_lock (__gconv_lock);
- __gconv_release_step (cc->__cd_in.__cd.__steps);
- __gconv_release_step (cc->__cd_out.__cd.__steps);
+ __gconv_release_step (cc->__cd_in.step);
+ __gconv_release_step (cc->__cd_out.step);
__libc_lock_unlock (__gconv_lock);
}
else
diff --git a/libio/iofwide.c b/libio/iofwide.c
index 10e2d66..3acebba 100644
--- a/libio/iofwide.c
+++ b/libio/iofwide.c
@@ -80,22 +80,19 @@
assert (fcts.towc_nsteps == 1);
assert (fcts.tomb_nsteps == 1);
- cc->__cd_in.__cd.__nsteps = fcts.towc_nsteps;
- cc->__cd_in.__cd.__steps = fcts.towc;
+ cc->__cd_in.step = fcts.towc;
- cc->__cd_in.__cd.__data[0].__invocation_counter = 0;
- cc->__cd_in.__cd.__data[0].__internal_use = 1;
- cc->__cd_in.__cd.__data[0].__flags = __GCONV_IS_LAST;
- cc->__cd_in.__cd.__data[0].__statep = &fp->_wide_data->_IO_state;
+ cc->__cd_in.step_data.__invocation_counter = 0;
+ cc->__cd_in.step_data.__internal_use = 1;
+ cc->__cd_in.step_data.__flags = __GCONV_IS_LAST;
+ cc->__cd_in.step_data.__statep = &fp->_wide_data->_IO_state;
- cc->__cd_out.__cd.__nsteps = fcts.tomb_nsteps;
- cc->__cd_out.__cd.__steps = fcts.tomb;
+ cc->__cd_out.step = fcts.tomb;
- cc->__cd_out.__cd.__data[0].__invocation_counter = 0;
- cc->__cd_out.__cd.__data[0].__internal_use = 1;
- cc->__cd_out.__cd.__data[0].__flags
- = __GCONV_IS_LAST | __GCONV_TRANSLIT;
- cc->__cd_out.__cd.__data[0].__statep = &fp->_wide_data->_IO_state;
+ cc->__cd_out.step_data.__invocation_counter = 0;
+ cc->__cd_out.step_data.__internal_use = 1;
+ cc->__cd_out.step_data.__flags = __GCONV_IS_LAST | __GCONV_TRANSLIT;
+ cc->__cd_out.step_data.__statep = &fp->_wide_data->_IO_state;
}
/* From now on use the wide character callback functions. */
@@ -117,14 +114,14 @@
{
enum __codecvt_result result;
- struct __gconv_step *gs = codecvt->__cd_out.__cd.__steps;
+ struct __gconv_step *gs = codecvt->__cd_out.step;
int status;
size_t dummy;
const unsigned char *from_start_copy = (unsigned char *) from_start;
- codecvt->__cd_out.__cd.__data[0].__outbuf = (unsigned char *) to_start;
- codecvt->__cd_out.__cd.__data[0].__outbufend = (unsigned char *) to_end;
- codecvt->__cd_out.__cd.__data[0].__statep = statep;
+ codecvt->__cd_out.step_data.__outbuf = (unsigned char *) to_start;
+ codecvt->__cd_out.step_data.__outbufend = (unsigned char *) to_end;
+ codecvt->__cd_out.step_data.__statep = statep;
__gconv_fct fct = gs->__fct;
#ifdef PTR_DEMANGLE
@@ -133,12 +130,12 @@
#endif
status = DL_CALL_FCT (fct,
- (gs, codecvt->__cd_out.__cd.__data, &from_start_copy,
+ (gs, &codecvt->__cd_out.step_data, &from_start_copy,
(const unsigned char *) from_end, NULL,
&dummy, 0, 0));
*from_stop = (wchar_t *) from_start_copy;
- *to_stop = (char *) codecvt->__cd_out.__cd.__data[0].__outbuf;
+ *to_stop = (char *) codecvt->__cd_out.step_data.__outbuf;
switch (status)
{
@@ -169,14 +166,14 @@
{
enum __codecvt_result result;
- struct __gconv_step *gs = codecvt->__cd_in.__cd.__steps;
+ struct __gconv_step *gs = codecvt->__cd_in.step;
int status;
size_t dummy;
const unsigned char *from_start_copy = (unsigned char *) from_start;
- codecvt->__cd_in.__cd.__data[0].__outbuf = (unsigned char *) to_start;
- codecvt->__cd_in.__cd.__data[0].__outbufend = (unsigned char *) to_end;
- codecvt->__cd_in.__cd.__data[0].__statep = statep;
+ codecvt->__cd_in.step_data.__outbuf = (unsigned char *) to_start;
+ codecvt->__cd_in.step_data.__outbufend = (unsigned char *) to_end;
+ codecvt->__cd_in.step_data.__statep = statep;
__gconv_fct fct = gs->__fct;
#ifdef PTR_DEMANGLE
@@ -185,12 +182,12 @@
#endif
status = DL_CALL_FCT (fct,
- (gs, codecvt->__cd_in.__cd.__data, &from_start_copy,
+ (gs, &codecvt->__cd_in.step_data, &from_start_copy,
(const unsigned char *) from_end, NULL,
&dummy, 0, 0));
*from_stop = (const char *) from_start_copy;
- *to_stop = (wchar_t *) codecvt->__cd_in.__cd.__data[0].__outbuf;
+ *to_stop = (wchar_t *) codecvt->__cd_in.step_data.__outbuf;
switch (status)
{
@@ -217,16 +214,16 @@
__libio_codecvt_encoding (struct _IO_codecvt *codecvt)
{
/* See whether the encoding is stateful. */
- if (codecvt->__cd_in.__cd.__steps[0].__stateful)
+ if (codecvt->__cd_in.step->__stateful)
return -1;
/* Fortunately not. Now determine the input bytes for the conversion
necessary for each wide character. */
- if (codecvt->__cd_in.__cd.__steps[0].__min_needed_from
- != codecvt->__cd_in.__cd.__steps[0].__max_needed_from)
+ if (codecvt->__cd_in.step->__min_needed_from
+ != codecvt->__cd_in.step->__max_needed_from)
/* Not a constant value. */
return 0;
- return codecvt->__cd_in.__cd.__steps[0].__min_needed_from;
+ return codecvt->__cd_in.step->__min_needed_from;
}
@@ -238,12 +235,12 @@
int result;
const unsigned char *cp = (const unsigned char *) from_start;
wchar_t to_buf[max];
- struct __gconv_step *gs = codecvt->__cd_in.__cd.__steps;
+ struct __gconv_step *gs = codecvt->__cd_in.step;
size_t dummy;
- codecvt->__cd_in.__cd.__data[0].__outbuf = (unsigned char *) to_buf;
- codecvt->__cd_in.__cd.__data[0].__outbufend = (unsigned char *) &to_buf[max];
- codecvt->__cd_in.__cd.__data[0].__statep = statep;
+ codecvt->__cd_in.step_data.__outbuf = (unsigned char *) to_buf;
+ codecvt->__cd_in.step_data.__outbufend = (unsigned char *) &to_buf[max];
+ codecvt->__cd_in.step_data.__statep = statep;
__gconv_fct fct = gs->__fct;
#ifdef PTR_DEMANGLE
@@ -252,7 +249,7 @@
#endif
DL_CALL_FCT (fct,
- (gs, codecvt->__cd_in.__cd.__data, &cp,
+ (gs, &codecvt->__cd_in.step_data, &cp,
(const unsigned char *) from_end, NULL,
&dummy, 0, 0));
diff --git a/libio/libio.h b/libio/libio.h
index bed324e..3be2fe8 100644
--- a/libio/libio.h
+++ b/libio/libio.h
@@ -48,14 +48,10 @@
#include <bits/types/wint_t.h>
#include <gconv.h>
-typedef union
+typedef struct
{
- struct __gconv_info __cd;
- struct
- {
- struct __gconv_info __cd;
- struct __gconv_step_data __data;
- } __combined;
+ struct __gconv_step *step;
+ struct __gconv_step_data step_data;
} _IO_iconv_t;
#include <shlib-compat.h>
--
Gerrit-Project: glibc
Gerrit-Branch: master
Gerrit-Change-Id: I8b4c489b619a53154712ff32e1b6f13bb92d4203
Gerrit-Change-Number: 490
Gerrit-PatchSet: 1
Gerrit-Owner: Florian Weimer <fweimer@redhat.com>
Gerrit-MessageType: newchange
^ permalink raw reply related [flat|nested] 3+ messages in thread
* [review v2] Redefine _IO_iconv_t to store a single gconv step pointer [BZ #25097]
2019-11-03 17:11 [review] Redefine _IO_iconv_t to store a single gconv step pointer [BZ #25097] Florian Weimer (Code Review)
@ 2019-11-13 17:14 ` Szabolcs Nagy (Code Review)
2019-11-13 17:20 ` [pushed] " Sourceware to Gerrit sync (Code Review)
1 sibling, 0 replies; 3+ messages in thread
From: Szabolcs Nagy (Code Review) @ 2019-11-13 17:14 UTC (permalink / raw)
To: Florian Weimer, libc-alpha
Szabolcs Nagy has posted comments on this change.
Change URL: https://gnutoolchain-gerrit.osci.io/r/c/glibc/+/490
......................................................................
Patch Set 2: Code-Review+2
--
Gerrit-Project: glibc
Gerrit-Branch: master
Gerrit-Change-Id: I8b4c489b619a53154712ff32e1b6f13bb92d4203
Gerrit-Change-Number: 490
Gerrit-PatchSet: 2
Gerrit-Owner: Florian Weimer <fweimer@redhat.com>
Gerrit-Reviewer: Szabolcs Nagy <szabolcs.nagy@arm.com>
Gerrit-Comment-Date: Wed, 13 Nov 2019 17:14:07 +0000
Gerrit-HasComments: No
Gerrit-Has-Labels: Yes
Gerrit-MessageType: comment
^ permalink raw reply [flat|nested] 3+ messages in thread
* [pushed] Redefine _IO_iconv_t to store a single gconv step pointer [BZ #25097]
2019-11-03 17:11 [review] Redefine _IO_iconv_t to store a single gconv step pointer [BZ #25097] Florian Weimer (Code Review)
2019-11-13 17:14 ` [review v2] " Szabolcs Nagy (Code Review)
@ 2019-11-13 17:20 ` Sourceware to Gerrit sync (Code Review)
1 sibling, 0 replies; 3+ messages in thread
From: Sourceware to Gerrit sync (Code Review) @ 2019-11-13 17:20 UTC (permalink / raw)
To: Florian Weimer, libc-alpha; +Cc: Szabolcs Nagy
Sourceware to Gerrit sync has submitted this change.
Change URL: https://gnutoolchain-gerrit.osci.io/r/c/glibc/+/490
......................................................................
Redefine _IO_iconv_t to store a single gconv step pointer [BZ #25097]
libio can only deal with gconv conversions which consist of a single
step. Not using __gconv_info simplifies the data structures somewhat.
This eliminates a new GCC 10 warning about subscribing an inner
zero-length array.
Tested on x86_64-linux-gnu with mainline GCC. Built with
build-many-glibcs.py, also with mainline GCC. Due to GCC PR 92039,
there are failures left on 32-bit architectures with float128 support.
Change-Id: I8b4c489b619a53154712ff32e1b6f13bb92d4203
---
M libio/fileops.c
M libio/iofclose.c
M libio/iofwide.c
M libio/libio.h
4 files changed, 46 insertions(+), 57 deletions(-)
Approvals:
Szabolcs Nagy: Looks good to me, approved
diff --git a/libio/fileops.c b/libio/fileops.c
index d84dd7c..f81646d 100644
--- a/libio/fileops.c
+++ b/libio/fileops.c
@@ -331,23 +331,19 @@
cc = fp->_codecvt = &fp->_wide_data->_codecvt;
- cc->__cd_in.__cd.__nsteps = fcts.towc_nsteps;
- cc->__cd_in.__cd.__steps = fcts.towc;
+ cc->__cd_in.step = fcts.towc;
- cc->__cd_in.__cd.__data[0].__invocation_counter = 0;
- cc->__cd_in.__cd.__data[0].__internal_use = 1;
- cc->__cd_in.__cd.__data[0].__flags = __GCONV_IS_LAST;
- cc->__cd_in.__cd.__data[0].__statep = &result->_wide_data->_IO_state;
+ cc->__cd_in.step_data.__invocation_counter = 0;
+ cc->__cd_in.step_data.__internal_use = 1;
+ cc->__cd_in.step_data.__flags = __GCONV_IS_LAST;
+ cc->__cd_in.step_data.__statep = &result->_wide_data->_IO_state;
- cc->__cd_out.__cd.__nsteps = fcts.tomb_nsteps;
- cc->__cd_out.__cd.__steps = fcts.tomb;
+ cc->__cd_out.step = fcts.tomb;
- cc->__cd_out.__cd.__data[0].__invocation_counter = 0;
- cc->__cd_out.__cd.__data[0].__internal_use = 1;
- cc->__cd_out.__cd.__data[0].__flags
- = __GCONV_IS_LAST | __GCONV_TRANSLIT;
- cc->__cd_out.__cd.__data[0].__statep =
- &result->_wide_data->_IO_state;
+ cc->__cd_out.step_data.__invocation_counter = 0;
+ cc->__cd_out.step_data.__internal_use = 1;
+ cc->__cd_out.step_data.__flags = __GCONV_IS_LAST | __GCONV_TRANSLIT;
+ cc->__cd_out.step_data.__statep = &result->_wide_data->_IO_state;
/* From now on use the wide character callback functions. */
_IO_JUMPS_FILE_plus (fp) = fp->_wide_data->_wide_vtable;
diff --git a/libio/iofclose.c b/libio/iofclose.c
index 398b86d..3c648d6 100644
--- a/libio/iofclose.c
+++ b/libio/iofclose.c
@@ -62,8 +62,8 @@
struct _IO_codecvt *cc = fp->_codecvt;
__libc_lock_lock (__gconv_lock);
- __gconv_release_step (cc->__cd_in.__cd.__steps);
- __gconv_release_step (cc->__cd_out.__cd.__steps);
+ __gconv_release_step (cc->__cd_in.step);
+ __gconv_release_step (cc->__cd_out.step);
__libc_lock_unlock (__gconv_lock);
}
else
diff --git a/libio/iofwide.c b/libio/iofwide.c
index 10e2d66..3acebba 100644
--- a/libio/iofwide.c
+++ b/libio/iofwide.c
@@ -80,22 +80,19 @@
assert (fcts.towc_nsteps == 1);
assert (fcts.tomb_nsteps == 1);
- cc->__cd_in.__cd.__nsteps = fcts.towc_nsteps;
- cc->__cd_in.__cd.__steps = fcts.towc;
+ cc->__cd_in.step = fcts.towc;
- cc->__cd_in.__cd.__data[0].__invocation_counter = 0;
- cc->__cd_in.__cd.__data[0].__internal_use = 1;
- cc->__cd_in.__cd.__data[0].__flags = __GCONV_IS_LAST;
- cc->__cd_in.__cd.__data[0].__statep = &fp->_wide_data->_IO_state;
+ cc->__cd_in.step_data.__invocation_counter = 0;
+ cc->__cd_in.step_data.__internal_use = 1;
+ cc->__cd_in.step_data.__flags = __GCONV_IS_LAST;
+ cc->__cd_in.step_data.__statep = &fp->_wide_data->_IO_state;
- cc->__cd_out.__cd.__nsteps = fcts.tomb_nsteps;
- cc->__cd_out.__cd.__steps = fcts.tomb;
+ cc->__cd_out.step = fcts.tomb;
- cc->__cd_out.__cd.__data[0].__invocation_counter = 0;
- cc->__cd_out.__cd.__data[0].__internal_use = 1;
- cc->__cd_out.__cd.__data[0].__flags
- = __GCONV_IS_LAST | __GCONV_TRANSLIT;
- cc->__cd_out.__cd.__data[0].__statep = &fp->_wide_data->_IO_state;
+ cc->__cd_out.step_data.__invocation_counter = 0;
+ cc->__cd_out.step_data.__internal_use = 1;
+ cc->__cd_out.step_data.__flags = __GCONV_IS_LAST | __GCONV_TRANSLIT;
+ cc->__cd_out.step_data.__statep = &fp->_wide_data->_IO_state;
}
/* From now on use the wide character callback functions. */
@@ -117,14 +114,14 @@
{
enum __codecvt_result result;
- struct __gconv_step *gs = codecvt->__cd_out.__cd.__steps;
+ struct __gconv_step *gs = codecvt->__cd_out.step;
int status;
size_t dummy;
const unsigned char *from_start_copy = (unsigned char *) from_start;
- codecvt->__cd_out.__cd.__data[0].__outbuf = (unsigned char *) to_start;
- codecvt->__cd_out.__cd.__data[0].__outbufend = (unsigned char *) to_end;
- codecvt->__cd_out.__cd.__data[0].__statep = statep;
+ codecvt->__cd_out.step_data.__outbuf = (unsigned char *) to_start;
+ codecvt->__cd_out.step_data.__outbufend = (unsigned char *) to_end;
+ codecvt->__cd_out.step_data.__statep = statep;
__gconv_fct fct = gs->__fct;
#ifdef PTR_DEMANGLE
@@ -133,12 +130,12 @@
#endif
status = DL_CALL_FCT (fct,
- (gs, codecvt->__cd_out.__cd.__data, &from_start_copy,
+ (gs, &codecvt->__cd_out.step_data, &from_start_copy,
(const unsigned char *) from_end, NULL,
&dummy, 0, 0));
*from_stop = (wchar_t *) from_start_copy;
- *to_stop = (char *) codecvt->__cd_out.__cd.__data[0].__outbuf;
+ *to_stop = (char *) codecvt->__cd_out.step_data.__outbuf;
switch (status)
{
@@ -169,14 +166,14 @@
{
enum __codecvt_result result;
- struct __gconv_step *gs = codecvt->__cd_in.__cd.__steps;
+ struct __gconv_step *gs = codecvt->__cd_in.step;
int status;
size_t dummy;
const unsigned char *from_start_copy = (unsigned char *) from_start;
- codecvt->__cd_in.__cd.__data[0].__outbuf = (unsigned char *) to_start;
- codecvt->__cd_in.__cd.__data[0].__outbufend = (unsigned char *) to_end;
- codecvt->__cd_in.__cd.__data[0].__statep = statep;
+ codecvt->__cd_in.step_data.__outbuf = (unsigned char *) to_start;
+ codecvt->__cd_in.step_data.__outbufend = (unsigned char *) to_end;
+ codecvt->__cd_in.step_data.__statep = statep;
__gconv_fct fct = gs->__fct;
#ifdef PTR_DEMANGLE
@@ -185,12 +182,12 @@
#endif
status = DL_CALL_FCT (fct,
- (gs, codecvt->__cd_in.__cd.__data, &from_start_copy,
+ (gs, &codecvt->__cd_in.step_data, &from_start_copy,
(const unsigned char *) from_end, NULL,
&dummy, 0, 0));
*from_stop = (const char *) from_start_copy;
- *to_stop = (wchar_t *) codecvt->__cd_in.__cd.__data[0].__outbuf;
+ *to_stop = (wchar_t *) codecvt->__cd_in.step_data.__outbuf;
switch (status)
{
@@ -217,16 +214,16 @@
__libio_codecvt_encoding (struct _IO_codecvt *codecvt)
{
/* See whether the encoding is stateful. */
- if (codecvt->__cd_in.__cd.__steps[0].__stateful)
+ if (codecvt->__cd_in.step->__stateful)
return -1;
/* Fortunately not. Now determine the input bytes for the conversion
necessary for each wide character. */
- if (codecvt->__cd_in.__cd.__steps[0].__min_needed_from
- != codecvt->__cd_in.__cd.__steps[0].__max_needed_from)
+ if (codecvt->__cd_in.step->__min_needed_from
+ != codecvt->__cd_in.step->__max_needed_from)
/* Not a constant value. */
return 0;
- return codecvt->__cd_in.__cd.__steps[0].__min_needed_from;
+ return codecvt->__cd_in.step->__min_needed_from;
}
@@ -238,12 +235,12 @@
int result;
const unsigned char *cp = (const unsigned char *) from_start;
wchar_t to_buf[max];
- struct __gconv_step *gs = codecvt->__cd_in.__cd.__steps;
+ struct __gconv_step *gs = codecvt->__cd_in.step;
size_t dummy;
- codecvt->__cd_in.__cd.__data[0].__outbuf = (unsigned char *) to_buf;
- codecvt->__cd_in.__cd.__data[0].__outbufend = (unsigned char *) &to_buf[max];
- codecvt->__cd_in.__cd.__data[0].__statep = statep;
+ codecvt->__cd_in.step_data.__outbuf = (unsigned char *) to_buf;
+ codecvt->__cd_in.step_data.__outbufend = (unsigned char *) &to_buf[max];
+ codecvt->__cd_in.step_data.__statep = statep;
__gconv_fct fct = gs->__fct;
#ifdef PTR_DEMANGLE
@@ -252,7 +249,7 @@
#endif
DL_CALL_FCT (fct,
- (gs, codecvt->__cd_in.__cd.__data, &cp,
+ (gs, &codecvt->__cd_in.step_data, &cp,
(const unsigned char *) from_end, NULL,
&dummy, 0, 0));
diff --git a/libio/libio.h b/libio/libio.h
index bed324e..3be2fe8 100644
--- a/libio/libio.h
+++ b/libio/libio.h
@@ -48,14 +48,10 @@
#include <bits/types/wint_t.h>
#include <gconv.h>
-typedef union
+typedef struct
{
- struct __gconv_info __cd;
- struct
- {
- struct __gconv_info __cd;
- struct __gconv_step_data __data;
- } __combined;
+ struct __gconv_step *step;
+ struct __gconv_step_data step_data;
} _IO_iconv_t;
#include <shlib-compat.h>
--
Gerrit-Project: glibc
Gerrit-Branch: master
Gerrit-Change-Id: I8b4c489b619a53154712ff32e1b6f13bb92d4203
Gerrit-Change-Number: 490
Gerrit-PatchSet: 3
Gerrit-Owner: Florian Weimer <fweimer@redhat.com>
Gerrit-Reviewer: Szabolcs Nagy <szabolcs.nagy@arm.com>
Gerrit-MessageType: merged
^ permalink raw reply related [flat|nested] 3+ messages in thread
end of thread, other threads:[~2019-11-13 17:20 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-11-03 17:11 [review] Redefine _IO_iconv_t to store a single gconv step pointer [BZ #25097] Florian Weimer (Code Review)
2019-11-13 17:14 ` [review v2] " Szabolcs Nagy (Code Review)
2019-11-13 17:20 ` [pushed] " Sourceware to Gerrit sync (Code Review)
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).