Proposing to call setlocale( LC_ALL, "C" ) in msSetup()

Szekeres Tamás szekeres.tamas at FREEMAIL.HU
Fri Apr 28 10:57:34 EDT 2006


Umberto,

I think the problem is greater than it seems. That is: portions of the 
mapserver C code was created with the assumption that the process 
will operate under the default "C" locale and may behave unexpectedly 
under the other locales especially when the decimal separator is other 
than "."

For example the MONO runtime sets the process default locale to the 
system default so the problem hardly gets into the action.

The java runtime - as i have noticed - uses the "C" locale by default so 
generally this is not a problem. But if you can externally change the the 
default local of the process to another (not using dot as the decimal 
sepatator) make test will fail because the test.map in the 
mapserver/tests directory cannot be parsed correctly. 
Mapserver expects dots for the floats regardless of the locale settings. 
So the mapserver code is responsible to ensure the correct setting if 
needed.

I'm not sure if this problem is restricted to the float number conversion, 
so replacing atof, strtod etc. to the locale independent 
implementations would be great, but i don't think if it is enough.
And we should also take the subsequent libraries into consideration 
with the locale dependency stuff. 

Tamas


Umberto Nicoletti <umberto.nicoletti at GMAIL.COM> írta:

> Hi,
> I think the solution is worse than the problem. While it should pose
> no problem for mapserver cgi I can easily imagine it wreaking the
> havoc in Java mapscript and even C# mapscript.
> 
> I am for rewriting the code to be locale sensitive and if possible
> will try to help, but cannot make promises as I am on a really tight
> schedule to fix another localization bug with Java mapscript
> (http://mapserver.gis.umn.edu/bugs/show_bug.cgi?id=1753).
> 
> Best regards,
> Umberto
> 
> On 4/27/06, Szekeres Tamás <szekeres.tamas at freemail.hu> wrote:
> > Developers,
> >
> > I had a problem with that mapserver/mapscript is working
> > under the locale context of the host process, but the code
> > is not ready to operate in all locales so far. For example
> > the lexer expects dot as the decimal separator and some of
> > the locales use comma and atof will truncate the numbers to
> > the integer part causing mystical errors.
> >
> > As a quick fix I suggest to call setlocale to the default
> > "C" at the msSetup initialization function.
> >
> > The best solution would rewriting the code to be locale
> > independent if it is expected.
> >
> > Because we can have some side effects with this change I am
> > calling a vote on it.
> >
> >
> > Tamas
> >
> >
> > 
________________________________________________________
_______________________
> > Digitális képből papírkép már 25 Ft-tól! Ingyenes budapesti 
házhozszállítás! >>>
> > http://www.xlab.hu/index.php?zoneid=levelvegi
> >
> >
> >
> 

_______________________________________________________________________________
Nyerj egy lakást! - Az [origo] ingatlan játékán, egy új lakást nyerhetsz a Szent László Házban.
Költözz még idén új lakásba! http://www.origo.hu/adsminisites/ingatlan/jatek/index.html





More information about the mapserver-dev mailing list