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@