xz: Add a function to print Windows specific error messages.
Native Windows C API functions do not use errno, but instead have to call GetLastError(). There is not an easy way to convert this error code into a helpful message, so this creates a wrapper around the slightly complicated FormatMessage() function. The new message_windows_error() function calls message_error() under the hood, so it will set the exit status to 1.
This commit is contained in:
parent
b43c3e48bf
commit
d6d1e40f19
|
@ -806,6 +806,28 @@ message_signal_handler(void)
|
|||
}
|
||||
|
||||
|
||||
#ifdef _MSC_VER
|
||||
extern void
|
||||
message_windows_error(const char* message, DWORD error_code)
|
||||
{
|
||||
char *error_message;
|
||||
|
||||
if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER
|
||||
| FORMAT_MESSAGE_FROM_SYSTEM
|
||||
| FORMAT_MESSAGE_IGNORE_INSERTS,
|
||||
NULL, error_code, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
|
||||
(LPTSTR)&error_message, 0, NULL)) {
|
||||
message_error("%s: %s", message, error_message);
|
||||
}
|
||||
else {
|
||||
message_error("%s\n", message);
|
||||
}
|
||||
|
||||
LocalFree(error_message);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
extern const char *
|
||||
message_strm(lzma_ret code)
|
||||
{
|
||||
|
|
|
@ -84,6 +84,20 @@ tuklib_attr_noreturn
|
|||
extern void message_signal_handler(void);
|
||||
|
||||
|
||||
#ifdef _MSC_VER
|
||||
/// \brief Print an error message using a Windows specific error code
|
||||
///
|
||||
/// The function uses message_error() internally, so it will set the
|
||||
/// exit code to 1 after printing.
|
||||
///
|
||||
/// \param message Message describing where the error occurred
|
||||
/// \param error_code Error number from GetLastError()
|
||||
extern void
|
||||
message_windows_error(const char* message, DWORD error_code);
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
/// Convert lzma_ret to a string.
|
||||
extern const char *message_strm(lzma_ret code);
|
||||
|
||||
|
|
Loading…
Reference in New Issue