setlocale() sets errno to ENOENT ... open("/usr/lib/locale/de_DE.UTF-8/LC_NUMERIC", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) open("/usr/lib/locale/de_DE.utf8/LC_NUMERIC", O_RDONLY|O_CLOEXEC) = 3 and this causes a problem later on (bsc#908516) --- free.c | 5 +++++ 1 file changed, 5 insertions(+) --- free.c +++ free.c 2015-09-18 12:38:22.565518967 +0000 @@ -205,6 +205,7 @@ int main(int argc, char **argv) int c, flags = 0, unit_set = 0; char *endptr; struct commandline_arguments args; + int errsv; /* * For long options that have no equivalent short option, use a @@ -255,10 +256,12 @@ int main(int argc, char **argv) #ifdef HAVE_PROGRAM_INVOCATION_NAME program_invocation_name = program_invocation_short_name; #endif + errsv = errno; setlocale (LC_ALL, ""); bindtextdomain(PACKAGE, LOCALEDIR); textdomain(PACKAGE); atexit(close_stdout); + errno = errsv; while ((c = getopt_long(argc, argv, "bkmghltCc:ws:V", longopts, NULL)) != -1) switch (c) { @@ -325,6 +328,7 @@ int main(int argc, char **argv) break; case 's': flags |= FREE_REPEAT; + errsv = errno; errno = 0; args.repeat_interval = (1000000 * strtof(optarg, &endptr)); if (errno || optarg == endptr || (endptr && *endptr)) @@ -332,6 +336,7 @@ int main(int argc, char **argv) if (args.repeat_interval < 1) xerrx(EXIT_FAILURE, _("seconds argument `%s' is not positive number"), optarg); + errno = errsv; break; case 'c': flags |= FREE_REPEAT;