[systemd-devel] systemd-analyze plot issues in 198

Lennart Poettering lennart at poettering.net
Sun Mar 10 18:29:49 PDT 2013

On Sat, 09.03.13 22:48, Kok, Auke-jan H (auke-jan.h.kok at intel.com) wrote:

> On Sat, Mar 9, 2013 at 4:56 PM, Pierre Schmitz <pierre at archlinux.de> wrote:
> > Am 09.03.2013 23:41, schrieb Kok, Auke-jan H:
> >> The problem is that the code is now generating coordinates as follows:
> >>
> >>     <rect class="box" x="0" y="0" width="2204,000" height="3440,000" />
> >>
> >> Obviously, that needs to be a "." and not a ",".
> >>
> >> Do you get proper output if you run `LC_NUMERIC=C systemd-analyze plot` ... ?
> >
> > Good catch, this will produce the following output which renders just
> > fine: http://paste.xinu.at/3IYLR/
> And, it's already fixed in git. Lennart did some cleanups in between
> breakfast and coffee after v198 and committed a cleanup to
> systemd-analyze which includes:
> @@ -776,18 +820,19 @@ int main(int argc, char *argv[]) {
>          DBusConnection *bus = NULL;
>          setlocale(LC_ALL, "");
> +        setlocale(LC_NUMERIC, "C"); /* we want to format/parse floats
> in C style */

Yes, I "fixed" this issue this way the other day. In general I must say
that formatting floats with printf() or parsing them is something we
really shouldn't do. That's inherently locale-based and hence really
broken. Unfortunately libc doesn't really offer any locale-independent
versions, which is quite a limitation.

Setting LC_NUMERIC is a hack that works for trivial cases, but sucks in
many way, as it is a global setting, which should be local. A program
that outputs floats to the user and into generated files as well
interleaved, would have to constantly switch back and forth which is not
only slow but also a nightmare in threaded environments.

I figure bootchart needs to be fixed the same way...


Lennart Poettering - Red Hat, Inc.

More information about the systemd-devel mailing list