[RFC] Another idea for 6015
Paolo Carlini
pcarlini@unitus.it
Thu Apr 4 12:00:00 GMT 2002
Benjamin Kosnik wrote:
>>My idea is the following: /after/ snprintf has done its work, due to MT,
>>it could be possible that __out has the wrong decimal point, that is
>>/not "."/, as we expect. We expect the "C" decimal point.
>>Therefore, conditionalized to ("MT" && !glibc2.3) we look for the actual
>>decimal point and we fix it to ".". This is thread-safe, completely.
>>
>I thought that snprintf would fail due to the expected separator in the
>current locale differing from the "C" separator in __out, so that __v
>wouldn't even be valid.
>
Benjamin, now perhaps I begin to understand your doubts... but I think
we are safe!
Consider this:
#include <locale.h>
#include <stdio.h>
int main()
{
setlocale(LC_ALL, "it_IT");
printf("%g\n", 30.34);
return 0;
}
The decimal point in Italy is ",", but this does /not/ fail! Quite to
the contrary, it is only this way that it works well! It would /not/
work correctly this way:
#include <locale.h>
#include <stdio.h>
int main()
{
setlocale(LC_ALL, "it_IT");
printf("%g\n", 30,34);
^
return 0; |____________
}
I this that worried you?
Benjamin I want your approval, I do not feel like working without your
general approval of the approach.
>At this point, I'm not quite sure I understand you. The testsuites test
>for this situation, so if you feel like you have a solution that would
>work, I suggest you experiment, hack the code, and see if the testsuites
>pass. If they do, let me know about what you've got.....
>
Sure.
>I remain convinced that the best solution is your first one.
>
The problem is that sadly Ulrich convincingly argued that in general is
not at all easy...
Ciao,
Paolo.
More information about the Libstdc++
mailing list