syslog called werrstr with the error previously saved, but werrstr's first argument is a format, and if the error contained % it can and does cause crashes. just call errstr again to swap it back. it's needed in case the syslog format refers to %r. also call errstr at the right point, after the call to sysname(), which does a system call.