here the patch is: http://paste.ubuntu.com/23953329/ The code tested, but maybe it sucks. 1. striping @xx, _TT: when mapping with full name failed, we check if there's a '@' in locname. if so, go back to the part of copying catname, override and skip '@xx'. Then we check if there's a '_', and if both '@' and '_TT' is there, point locname to '@xx', set a correct loclen, go back to the part of writing locname to replace '_TT' with '@xx'. If not both, skip and simply override '_TT'. Because there's also '_' in 'LC_xx', we may get into a dead loop of stripping '_TT'. So locname is checked, it's set to NULL if we used strchr to skip once. Same reason, we may get into a dead loop of overriding '_TT'. The first position of '/' should be front of the '_' if we replaced it once, the name will like: 'zh@t/LC_xx'. zh_CN@t (stripped by the first part)-> zh_CN (overrided by the second part)-> zh@t (stripped by the first part again)-> zh 2. about rewriting of '.GBK': I agreeded with keeping the original value of user, and stripping it in gettext() before. But i thought that someone may validate if libc set the correct charset by setlocale(). So we should rewrite .XX to .UTF-8 in setlocale(), we cant return a wrong value in principle. 2017-01-30 0:33 GMT+08:00 Rich Felker : > On Mon, Jan 30, 2017 at 12:14:49AM +0800, He X wrote: > > I can't wait, can i work on it and make a patch for these issues if > Masanori > > Ogino is busy now? I'd like to see that these issues could be solved in > > official musl repo as soon as possible. > > I'm not saying you need to wait, just that you should be aware of past > discussion of the topic, and if you want to propose patches they > should either follow the behavior outlined before or come with > discussion of why you think a different behavior is more appropriate. > > > And maybe rejection for NON-UTF-8, since 'LANG=zh_CN.GBK ./a.out( > > setlocale(LC_*, "") )' showed me a segfault with glibc. > > I don't think "it crashes on glibc" is a good justification for > anything. Rather there should probably be UX discussions of what > different choices mean for different poor-configuration situations > that are likely to arise in the wild (from things like LC_* getting > copied over ssh). > > Rich >