/* glbic *scanf grouping support for floating point does not seem to be working. $ diff -u glibc uClibc --- glibc 2003-08-16 21:19:02.000000000 -0500 +++ uClibc 2003-08-16 21:19:06.000000000 -0500 @@ -1,3 +1,3 @@ -locale: en_US.UTF-8 grouping: 3 3 -r=2 ldbl = 100 n1=0 n2=4 buf=",000," -r=2 ldbl = 1 n1=0 n2=1 buf=",000.5" +locale: en_US.UTF-8 grouping: 3 +r=1 ldbl = 1e+134 n1=0 n2=180 buf="?????????" +r=1 ldbl = 1000.5 n1=0 n2=7 buf="?????????" */ #include #include #include #include #include int main(void) { long double ldbl; int r, n1, n2, i; const char *s; const char *g; struct lconv *lc; char buf[10]; if (!(s = setlocale(LC_ALL, "en_US.UTF-8"))) { printf("setlocale failed!\n"); return EXIT_FAILURE; } lc = localeconv(); printf("locale: %s grouping:", s); for (g = lc->grouping ; *g ; g++) { printf(" %d", *g); } printf("\n"); memset(buf, '?', sizeof(buf)); buf[sizeof(buf)-1] = 0; i = 0; n1 = n2 = -1; errno = 0; ldbl = 0./0.; r = sscanf(" 100,000,000,000,000,000,000,000,000,000,000,000,000,000,000" ",000,000,000,000,000,000,000,000,000,000,000,000,000,000,000" ",000,000,000,000,000,000,000,000,000,000,000,000,000,000,009", "%n%'Lf%n%5s", &n1, &ldbl, &n2, buf); printf("r=%d ldbl = %Lg n1=%d n2=%d buf=\"%s\"\n", r, ldbl, n1, n2, buf); memset(buf, '?', sizeof(buf)); buf[sizeof(buf)-1] = 0; i = 0; n1 = n2 = -1; errno = 0; ldbl = 0./0.; r = sscanf("1,000.5", "%n%'Lf%n%s", &n1, &ldbl, &n2, buf); printf("r=%d ldbl = %Lg n1=%d n2=%d buf=\"%s\"\n", r, ldbl, n1, n2, buf); return 0; }