/* Test 'setlocale()' behaviour. Copyright (C) 2016 Assaf Gordon license: GNU All permissive license. compile: cc -o print-locale print-locale.c test: ./print-locale LC_ALL=C ./print-locale LC_ALL=missing ./print-locale */ #include #include #include int main(void) { char* p = getenv("LC_ALL"); printf("LC_ALL env var = '%s'\n", p?p:"(NULL)"); p = setlocale(LC_ALL,""); printf("setlocale(LC_ALL,\"\") = '%s'\n", p?p:"(NULL)"); p = setlocale(LC_ALL,NULL); printf("LC_ALL from setlocale = '%s'\n", p?p:"(NULL)"); p = setlocale(LC_COLLATE,NULL); printf("LC_COLLATE from setlocale = '%s'\n", p?p:"(NULL)"); return 0; } ==== glibc (Ubuntu) ==== $ ./print-locale LC_ALL env var = '(NULL)' setlocale(LC_ALL,"") = 'en_US.UTF-8' LC_ALL from setlocale = 'en_US.UTF-8' LC_COLLATE from setlocale = 'en_US.UTF-8' $ LC_ALL=C ./print-locale LC_ALL env var = 'C' setlocale(LC_ALL,"") = 'C' LC_ALL from setlocale = 'C' LC_COLLATE from setlocale = 'C' $ LC_ALL=missing ./print-locale LC_ALL env var = 'missing' setlocale(LC_ALL,"") = '(NULL)' LC_ALL from setlocale = 'C' LC_COLLATE from setlocale = 'C' ==== musl libc ======= $ ./print-locale LC_ALL env var = '(NULL)' setlocale(LC_ALL,"") = 'C.UTF-8;C;C;C;C;C' LC_ALL from setlocale = 'C.UTF-8;C;C;C;C;C' LC_COLLATE from setlocale = 'C' $ LC_ALL=c ./print-locale LC_ALL env var = 'C' setlocale(LC_ALL,"") = 'C;C;C;C;C;C' LC_ALL from setlocale = 'C;C;C;C;C;C' LC_COLLATE from setlocale = 'C' $ LC_ALL=missing ./print-locale LC_ALL env var = 'missing' setlocale(LC_ALL,"") = 'missing;missing;missing;missing;missing;missing' LC_ALL from setlocale = 'missing;missing;missing;missing;missing;missing' LC_COLLATE from setlocale = 'missing' ==== FreeBSD ==== $ ./print-locale LC_ALL env var = '(NULL)' setlocale(LC_ALL,"") = 'C' LC_ALL from setlocale = 'C' LC_COLLATE from setlocale = 'C' $ LC_ALL=C ./print-locale LC_ALL env var = 'C' setlocale(LC_ALL,"") = 'C' LC_ALL from setlocale = 'C' LC_COLLATE from setlocale = 'C' $ LC_ALL=missing ./print-locale LC_ALL env var = 'missing' setlocale(LC_ALL,"") = '(NULL)' LC_ALL from setlocale = 'C' LC_COLLATE from setlocale = 'C' ==== OpenBSD ==== $ ./print-locale LC_ALL env var = '(NULL)' setlocale(LC_ALL,"") = 'C' LC_ALL from setlocale = 'C' LC_COLLATE from setlocale = 'C' $ LC_ALL=C ./print-locale LC_ALL env var = 'C' setlocale(LC_ALL,"") = 'C' LC_ALL from setlocale = 'C' LC_COLLATE from setlocale = 'C' $ LC_ALL=missing ./print-locale LC_ALL env var = 'missing' setlocale(LC_ALL,"") = 'C/missing/C/C/C/C' LC_ALL from setlocale = 'C/missing/C/C/C/C' LC_COLLATE from setlocale = 'C'