[LTP] [PATCH v3] tst_test.sh: Normalize the locale

Petr Vorel pvorel@suse.cz
Fri Oct 21 15:11:59 CEST 2022


> Hi!
> > > > > diff --git a/testcases/lib/tst_test.sh b/testcases/lib/tst_test.sh
> > > > > index 28b7d12ba..5ebbe1d25 100644
> > > > > --- a/testcases/lib/tst_test.sh
> > > > > +++ b/testcases/lib/tst_test.sh
> > > > > @@ -831,3 +831,5 @@ if [ -z "$TST_NO_DEFAULT_RUN" ]; then
> > > > >  		fi
> > > > >  	fi
> > > > >  fi
> > > > > +
> > > > > +export LC_ALL=C

> > > > Thinking about it twice this might have impact on other tests.
> > > > Li, Cyril, any idea about it?

> > > Actually I think that we should have put this into the tst_test.sh from
> > > the start. We do have this as a workaround in du01.sh and telnet01.sh
> > > already.

> > > The plus side is that all possible bugreports from users will have all
> > > messages in english which would make debugging easier.

> > Thanks for acking this.

> > I suppose Akihiko is correct that we don't have to put it via setlocale()
> > in C API, right?

> I do not think so. It's not entirely clear from documentation how this
> is supposed to work. However it seems that in bash the effect is
> immediate, if you export new locale and then type nonexisting command
> name to bash prompt to get a message from bash it's in the new locale.
> So either setlocale() is not needed or bash calls it if it detects that
> one of the LC_ variables has been changed and calls it.

> For dash it does not seem that it has been translated at all, it
> produces messages in english either way, so we do not have to care.

> And all localized programs that we start from the shell after the export
> do call setlocale() at the start of the main(). That is actually
> required to enable locale support to begin with.

Yep. I thought more about pure C API programs. Mostly they don't have any locale
related code, but sometimes they call other programs via shell (e.g.
tst_system(), but there are more).

I also aimed for consistency between C and shell API.
That's why I thought we should consider setlocale() on LC_ALL and LANG in
lib/tst_test.c. But maybe I'm wrong.

> > Also I guess you prefer this version (LC_ALL=C). I suggested unset LC_ALL;
> > export LC_COLLATE=C; export LC_NUMERIC=C as it's used in kernel's Makefile (they
> > have more there, but IMHO only this is relevant for us).

> I do not think that LC_COLLATE and LC_NUMERIC is enough, we want actuall
> messages in english. If we do not want to use LC_ALL, which is probably
> the easiest we should use at least LC_MESSAGES and LC_NUMERIC but
> possibly LC_TIME too since date and time can be part of the messages we
> do parse as well.
After some searching and thinking I guess LC_ALL=C and LANG=C should be enough.

Kind regards,
Petr


More information about the ltp mailing list