ts(1): parse user format string only once
authorcheloha <cheloha@openbsd.org>
Thu, 1 Sep 2022 00:14:36 +0000 (00:14 +0000)
committercheloha <cheloha@openbsd.org>
Thu, 1 Sep 2022 00:14:36 +0000 (00:14 +0000)
commit34a84998a99ecc4e5f09fb81d875c3779648ebba
tree7f1db78df718f789cc4875783b2dd9dfb66fbfe0
parentefda2f85484b8139ebba7cb3f4d2d5e0ac34cadd
ts(1): parse user format string only once

Currently, ts(1) reparses the user format string every time it prints
a timestamp.  This is wasteful.

If we isolate the parsing loop in fmtfmt() and move the rest of the
work into a new function, fmtprint(), we can cut some overhead out
of the hot loop.

We still need to update any microsecond substrings in the parsed
format string every time we print a timestamp.  So during parsing in
fmtfmt() we build a list of pointers to locations in the parsed buffer
where the microsecond substring needs to be copied during fmtprint().

With input from deraadt@.

Link1: https://marc.info/?l=openbsd-tech&m=165769139318084&w=2
Link2: https://marc.info/?l=openbsd-tech&m=165910022501353&w=2

OK job@
usr.bin/ts/ts.c