This is needed to reliably support call like:
cmn_err(..., "a=%s, b=%s", xstrerror(a), xstrerror(b));
On systems where strerror uses a static buffer (even if it is per-thread), this may result in the same pointer being passed to both arguments and therefore the resulting message confusingly printing the same error string twice.