aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/util/Error.cxx26
-rw-r--r--src/util/Error.hxx6
2 files changed, 32 insertions, 0 deletions
diff --git a/src/util/Error.cxx b/src/util/Error.cxx
index ef8282329..92b2cc5d0 100644
--- a/src/util/Error.cxx
+++ b/src/util/Error.cxx
@@ -145,4 +145,30 @@ Error::SetLastError(const char *prefix)
SetLastError(GetLastError(), prefix);
}
+void
+Error::FormatLastError(DWORD _code, const char *fmt, ...)
+{
+ char buffer[1024];
+ va_list ap;
+ va_start(ap, fmt);
+ vsnprintf(buffer, sizeof(buffer), fmt, ap);
+ va_end(ap);
+
+ SetLastError(_code, buffer);
+}
+
+void
+Error::FormatLastError(const char *fmt, ...)
+{
+ DWORD _code = GetLastError();
+
+ char buffer[1024];
+ va_list ap;
+ va_start(ap, fmt);
+ vsnprintf(buffer, sizeof(buffer), fmt, ap);
+ va_end(ap);
+
+ SetLastError(_code, buffer);
+}
+
#endif
diff --git a/src/util/Error.hxx b/src/util/Error.hxx
index 82f01105f..ab66ae5cb 100644
--- a/src/util/Error.hxx
+++ b/src/util/Error.hxx
@@ -168,6 +168,12 @@ public:
#ifdef WIN32
void SetLastError(DWORD _code, const char *prefix);
void SetLastError(const char *prefix);
+
+ gcc_printf(3,4)
+ void FormatLastError(DWORD code, const char *fmt, ...);
+
+ gcc_printf(2,3)
+ void FormatLastError(const char *fmt, ...);
#endif
};