msg_gen_function += virReportErrorHelper
msg_gen_function += virReportSystemError
msg_gen_function += xenapiSessionErrorHandler
+msg_gen_function += virLastErrorPrefixMessage
# Uncomment the following and run "make syntax-check" to see diagnostics
# that are not yet marked for translation, but that need to be rewritten
return false;
return true;
}
+
+
+/**
+ * virLastErrorPrefixMessage:
+ * @fmt: printf-style formatting string
+ * @...: Arguments for @fmt
+ *
+ * Prefixes last error reported with message formatted from @fmt. This is useful
+ * if the low level error message does not convey enough information to describe
+ * the problem.
+ */
+void
+virLastErrorPrefixMessage(const char *fmt, ...)
+{
+ int save_errno = errno;
+ virErrorPtr err = virGetLastError();
+ VIR_AUTOFREE(char *) fmtmsg = NULL;
+ VIR_AUTOFREE(char *) newmsg = NULL;
+ va_list args;
+
+ if (!err)
+ return;
+
+ va_start(args, fmt);
+
+ if (virVasprintfQuiet(&fmtmsg, fmt, args) < 0)
+ goto cleanup;
+
+ if (virAsprintfQuiet(&newmsg, "%s: %s", fmtmsg, err->message) < 0)
+ goto cleanup;
+
+ VIR_FREE(err->message);
+ VIR_STEAL_PTR(err->message, newmsg);
+
+ cleanup:
+ va_end(args);
+ errno = save_errno;
+}
void virErrorPreserveLast(virErrorPtr *saveerr);
void virErrorRestore(virErrorPtr *savederr);
+void virLastErrorPrefixMessage(const char *fmt, ...)
+ ATTRIBUTE_FMT_PRINTF(1, 2);
+
VIR_DEFINE_AUTOPTR_FUNC(virError, virFreeError);