diff options
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | locale/programs/ld-ctype.c | 14 | ||||
-rw-r--r-- | localedata/tests/trans.def | 3 | ||||
-rw-r--r-- | localedata/tst-mbswcs3.c | 19 | ||||
-rw-r--r-- | localedata/tst-trans.c | 17 | ||||
-rwxr-xr-x | localedata/tst-trans.sh | 4 |
6 files changed, 37 insertions, 28 deletions
@@ -1,5 +1,13 @@ 2000-06-17 Ulrich Drepper <drepper@redhat.com> + * locale/programs/ld-ctype.c (ctype_output): Really write out + mboutdigits information. + * localedata/tst-trans.c: Add code to test printf's I flag with locale. + * localedata/tst-trans.sh: Set GCONV_PATH for compilation environment. + * localedata/tests/trans.def: Add outdigit information. + + * localedata/tst-mbswcs3.c: Remove comment. + * stdio-common/vfprintf.c (vfprintf): Fix handling of I flag. * stdio-common/tiformat.c (sprint_ints): Add tests for I flag. * libio/tst_wprintf.c (main): Add test for I flag. diff --git a/locale/programs/ld-ctype.c b/locale/programs/ld-ctype.c index bda89ec9bc..5b570ba00e 100644 --- a/locale/programs/ld-ctype.c +++ b/locale/programs/ld-ctype.c @@ -981,14 +981,14 @@ ctype_output (struct localedef_t *locale, struct charmap_t *charmap, them with a NUL byte following. The NUL byte wouldn't be necessary but it makes it easier for the user. */ total = 0; - for (cnt = elem - _NL_CTYPE_INDIGITS0_MB; + for (cnt = elem - _NL_ITEM_INDEX (_NL_CTYPE_INDIGITS0_MB); cnt < ctype->mbdigits_act; cnt += 10) total += ctype->mbdigits[cnt]->nbytes + 1; iov[2 + elem + offset].iov_base = (char *) alloca (total); iov[2 + elem + offset].iov_len = total; cp = iov[2 + elem + offset].iov_base; - for (cnt = elem - _NL_CTYPE_INDIGITS0_MB; + for (cnt = elem - _NL_ITEM_INDEX (_NL_CTYPE_INDIGITS0_MB); cnt < ctype->mbdigits_act; cnt += 10) { cp = mempcpy (cp, ctype->mbdigits[cnt]->bytes, @@ -1003,14 +1003,14 @@ ctype_output (struct localedef_t *locale, struct charmap_t *charmap, there might be more than one. We simply concatenate all of them with a NUL byte following. The NUL byte wouldn't be necessary but it makes it easier for the user. */ - cnt = elem - _NL_CTYPE_OUTDIGIT0_MB; + cnt = elem - _NL_ITEM_INDEX (_NL_CTYPE_OUTDIGIT0_MB); total = ctype->mboutdigits[cnt]->nbytes + 1; iov[2 + elem + offset].iov_base = (char *) alloca (total); iov[2 + elem + offset].iov_len = total; *(char *) mempcpy (iov[2 + elem + offset].iov_base, - ctype->mbdigits[cnt]->bytes, - ctype->mbdigits[cnt]->nbytes) = '\0'; + ctype->mboutdigits[cnt]->bytes, + ctype->mboutdigits[cnt]->nbytes) = '\0'; idx[elem + 1] = idx[elem] + iov[2 + elem + offset].iov_len; break; @@ -1021,7 +1021,7 @@ ctype_output (struct localedef_t *locale, struct charmap_t *charmap, (uint32_t *) alloca (total * sizeof (uint32_t)); iov[2 + elem + offset].iov_len = total * sizeof (uint32_t); - for (cnt = elem - _NL_CTYPE_INDIGITS0_WC; + for (cnt = elem - _NL_ITEM_INDEX (_NL_CTYPE_INDIGITS0_WC); cnt < ctype->wcdigits_act; cnt += 10) ((uint32_t *) iov[2 + elem + offset].iov_base)[cnt / 10] = ctype->wcdigits[cnt]; @@ -1029,7 +1029,7 @@ ctype_output (struct localedef_t *locale, struct charmap_t *charmap, break; case _NL_ITEM_INDEX (_NL_CTYPE_OUTDIGIT0_WC) ... _NL_ITEM_INDEX (_NL_CTYPE_OUTDIGIT9_WC): - cnt = elem - _NL_CTYPE_OUTDIGIT0_WC; + cnt = elem - _NL_ITEM_INDEX (_NL_CTYPE_OUTDIGIT0_WC); iov[2 + elem + offset].iov_base = &ctype->wcoutdigits[cnt]; iov[2 + elem + offset].iov_len = sizeof (uint32_t); idx[elem + 1] = idx[elem] + iov[2 + elem + offset].iov_len; diff --git a/localedata/tests/trans.def b/localedata/tests/trans.def index 2f2ac61b96..8bda88b7cb 100644 --- a/localedata/tests/trans.def +++ b/localedata/tests/trans.def @@ -110,6 +110,9 @@ toupper (<a>,<A>);/ charconv test test (<A>,<B>);(<B>,<C>) + +outdigit <a>;<b>;<c>;<d>;<e>;<f>;<g>;<h>;<i>;<j> + END LC_CTYPE LC_COLLATE diff --git a/localedata/tst-mbswcs3.c b/localedata/tst-mbswcs3.c index b9846ee8ac..a5929f85c4 100644 --- a/localedata/tst-mbswcs3.c +++ b/localedata/tst-mbswcs3.c @@ -74,22 +74,3 @@ main (void) return result; } - -/* Expected output: - -wcsrtombs(dst,&src,1,&state) -> 1, src = srcbuf+1, dst = buf+1 -wcsrtombs(dst,&src,1,&state) -> 1, src = srcbuf+2, dst = buf+2 -wcsrtombs(dst,&src,3,&state) -> 3, src = srcbuf+3, dst = buf+5 -wcsrtombs(dst,&src,1,&state) -> 1, src = srcbuf+3, dst = buf+6 - -*/ - -/* Output of a non-restarting implementation: - -wcsrtombs(dst,&src,1,&state) -> 1, src = srcbuf+1, dst = buf+1 -wcsrtombs(dst,&src,1,&state) -> 0, src = srcbuf+1, dst = buf+1 -wcsrtombs(dst,&src,3,&state) -> 3, src = srcbuf+2, dst = buf+4 -wcsrtombs(dst,&src,1,&state) -> 0, src = srcbuf+2, dst = buf+4 -wrong results - -*/ diff --git a/localedata/tst-trans.c b/localedata/tst-trans.c index 8bc64ce069..a84ee20e72 100644 --- a/localedata/tst-trans.c +++ b/localedata/tst-trans.c @@ -20,14 +20,18 @@ #include <locale.h> #include <stdio.h> +#include <wchar.h> #include <wctype.h> int main (void) { + char buf[30]; + wchar_t wbuf[30]; wctrans_t t; wint_t wch; int errors = 0; + int len; setlocale (LC_ALL, ""); @@ -48,5 +52,18 @@ main (void) if (wch != L'C') errors = 1; + /* Test the output digit handling. */ + swprintf (wbuf, sizeof (wbuf) / sizeof (wbuf[0]), L"%Id", 0x499602D2); + errors |= wcscmp (wbuf, L"bcdefghija") != 0; + len = wcslen (wbuf); + errors |= len != 10; + printf ("len = %d, wbuf = L\"%ls\"\n", len, wbuf); + + snprintf (buf, sizeof buf, "%Id", 0x499602D2); + errors |= strcmp (buf, "bcdefghija") != 0; + len = strlen (buf); + errors |= len != 10; + printf ("len = %d, buf = \"%s\"\n", len, buf); + return errors; } diff --git a/localedata/tst-trans.sh b/localedata/tst-trans.sh index c4fe934133..c17525dd18 100755 --- a/localedata/tst-trans.sh +++ b/localedata/tst-trans.sh @@ -29,8 +29,8 @@ ${common_objpfx}localedata/tt_TT || exit 1 # Run the test program. -LOCPATH=${common_objpfx}localedata LC_ALL=tt_TT \ -${common_objpfx}elf/ld.so --library-path $common_objpfx \ +LOCPATH=${common_objpfx}localedata GCONV_PATH=${common_objpfx}iconvdata \ +LC_ALL=tt_TT ${common_objpfx}elf/ld.so --library-path $common_objpfx \ ${common_objpfx}localedata/tst-trans > ${common_objpfx}localedata/tst-trans.out exit $? |