+/*
+ * Sets the library error to code; fmt is a printf-style string that may use
+ * up to one %s directive, to refer to arg.
+ */
+void cdecl__err(unsigned code, const char *fmt, const char *arg)
+{
+ struct err_state *state;
+ int rc, try = 0;
+
+ state = get_err_state();
+ if (!state)
+ return;
+
+retry:
+ rc = snprintf(state->str, state->nstr, fmt, arg);
+ if (rc > 0 && rc >= state->nstr) {
+ assert(try++ == 0 && rc < SIZE_MAX / 4);
+ state = alloc_err_state(state, (size_t)(rc+1u) * 3 / 2);
+ if (!state)
+ return;
+
+ goto retry;
+ }
+
+ state->err.str = state->str;
+ state->err.code = code;