Index: bin/process_win.cc |
=================================================================== |
--- bin/process_win.cc (revision 433) |
+++ bin/process_win.cc (working copy) |
@@ -180,11 +180,23 @@ |
} |
static int SetOsErrorMessage(char* os_error_message, |
- int os_error_message_len) { |
+ int os_error_message_len) { |
int error_code = GetLastError(); |
- // TODO(sgjesse): Use FormatMessage to get the error message. |
- char message[80]; |
- snprintf(os_error_message, os_error_message_len, "OS Error %d", error_code); |
+ DWORD message_size = |
+ FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, |
+ NULL, |
+ error_code, |
+ MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), |
+ os_error_message, |
+ os_error_message_len, |
+ NULL); |
+ if (message_size == 0) { |
+ if (GetLastError() != ERROR_INSUFFICIENT_BUFFER) { |
+ fprintf(stderr, "FormatMessage failed %d\n", GetLastError()); |
+ } |
+ snprintf(os_error_message, os_error_message_len, "OS Error %d", error_code); |
+ } |
+ os_error_message[os_error_message_len - 1] = '\0'; |
return error_code; |
} |