--- /dev/null
+#define _POSIX_C_SOURCE 200809L
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <stdarg.h>
+#include <string.h>
+
+#include "zpm.h"
+
+void zpm_seterror(struct zpm *zpm, char *msgfmt, ...) {
+ char msg[1024];
+ va_list ap;
+
+ if (zpm->errmsg) {
+ free(zpm->errmsg);
+ zpm->errmsg = 0;
+ }
+
+ if (msgfmt != NULL) {
+ va_start(ap, msgfmt);
+ vsnprintf(msg, sizeof msg, msgfmt, ap);
+ va_end(ap);
+
+ msg[1023] = 0;
+ if (zpm->errmsg) {
+ free(zpm->errmsg);
+ }
+
+ zpm->errmsg = strdup(msg);
+ }
+}