On Feb 2 15:32, Tony Cook wrote: > Hi list, > > Simplified to a C program below, calls to sprintf() under the ps_AF > and ps_AF.utf8 locales are returning a value that doesn't match the > length of the formatted string: > > tony@phobos ~ > $ cat ps_AF.c > #include > #include > #include > > int main(int argc, char **argv) { > char buf[100]; > char *loc = argc > 1 ? argv[1] : "ps_AF"; > const char *real_loc; > if (!(real_loc = setlocale(LC_NUMERIC, loc))) { > perror("setlocale"); > return 1; > } > printf("locale %s\n", real_loc); > size_t len = sprintf(buf, "%g", 2.34); > printf("len %zu\n", len); > printf("strlen %zu\n", strlen(buf)); > > return 0; > } Thanks for the testcase. > (and the decimal point under ps_AF on Linux is multi-byte, character > 0x66b or ARABIC DECIMAL SEPARATOR.) As on Cygwin. The problem was that Newlib's printf function didn't take multibyte decimal points into account when computing the field size for the output. I fixed that in the git repo. Thanks, Corinna -- Corinna Vinschen Please, send mails regarding Cygwin to Cygwin Maintainer cygwin AT cygwin DOT com Red Hat