> On 2016-08-23 18:56, Corinna Vinschen <corinna-cyg...@cygwin.com> wrote: > > I uploaded a new Cygwin test release 2.6.0-0.12. > ... > The 2.6.0 release is going to introducing the locale_t datatype, as well > as all functions related to locale_t locales and per-thread locales per > POSIX-1.2008. > > So, rather than just providing a single, per-process locale, you can now > create new locales ("newlocale") and set it as locale for the current > thread ("uselocale") or use it directly with one of the new functions > taking a locale_t as parameter (i.e. isalpha_l). > > Since this is brand-new code, this code *will* have bugs. > > It would be very helpful if interested developers and Cygwin package > maintainers could give this new stuff some good testing. >
Hello, I have exercised the new locale-related code and think i found a problem in the strtod_l function (see small test case in gugu.c below). I use 2.6.0-0.12 under CYGWIN_NT-6.1-WOW. Remarks: - the value given in nptr (1.5) has no impact, even an integer value fails - uncomment the first line in order to silence the warning at compile time - the problem was originally found in coreutils-8.25: "seq -w 1 10" produces the same segmentation fault. In order to reproduce this, you must have coreutils compiled under a recent cygwin1.dll otherwise the strtod_l part of the coreutils code is not selected. Regards, Denis Excoffier. % cat gugu.c //#define _GNU_SOURCE 1 #include <stdio.h> #include <locale.h> #include <stdlib.h> // int main() { // locale_t locale = newlocale (LC_ALL_MASK, "C", (locale_t) 0); if (!locale) return 1; char const *nptr = "1.5"; char **endptr; double r1 = strtod (nptr, endptr); fprintf (stderr, "r1=%f\n", r1); double r2 = strtod_l (nptr, endptr, locale); fprintf (stderr, "r2=%f\n", r2); return 0; }; % gcc -O -o gugu gugu.c gugu.c: In function 'main': gugu.c:15:15: warning: implicit declaration of function 'strtod_l' [-Wimplicit-function-declaration] double r2 = strtod_l (nptr, endptr, locale); ^~~~~~~~ % ./gugu r1=1.500000 Segmentation fault (core dumped) % cat gugu.exe.stackdump Exception: STATUS_ACCESS_VIOLATION at eip=6114F2E8 eax=61213530 ebx=6121B0C0 ecx=6121B0D0 edx=6121B040 esi=00000000 edi=61213440 ebp=0028CC88 esp=0028CB68 program=D:\Users\dexcoff1\dexcoff1\cygscf\gugu.exe, pid 61032, thread main cs=0023 ds=002B es=002B fs=0053 gs=002B ss=002B Stack trace: Frame Function Args 0028CC88 6114F2E8 (00000001, 0028CCAC, 80010108, 61007B0A) 0028CD28 61007B6F (00000000, 0028CD84, 61006BA0, 00000000) End of stack trace % objdump -d /usr/bin/cygwin1.dll ... 6114f2d0 <___localeconv_l>: 6114f2d0: 53 push %ebx 6114f2d1: 8b 44 24 08 mov 0x8(%esp),%eax 6114f2d5: 8b 88 48 01 00 00 mov 0x148(%eax),%ecx 6114f2db: 8b 90 40 01 00 00 mov 0x140(%eax),%edx 6114f2e1: 05 f0 00 00 00 add $0xf0,%eax 6114f2e6: 8b 19 mov (%ecx),%ebx 6114f2e8: 89 18 mov %ebx,(%eax) 6114f2ea: 8b 59 04 mov 0x4(%ecx),%ebx 6114f2ed: 8b 49 08 mov 0x8(%ecx),%ecx 6114f2f0: 89 58 04 mov %ebx,0x4(%eax) 6114f2f3: 89 48 08 mov %ecx,0x8(%eax) ... % -- Problem reports: http://cygwin.com/problems.html FAQ: http://cygwin.com/faq/ Documentation: http://cygwin.com/docs.html Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple