Auto merge of #27995 - nagisa:windows-error-message, r=alexcrichton

According to https://msdn.microsoft.com/en-us/library/windows/desktop/ms679351(v=vs.85).aspx:

> If the function succeeds, the return value is the number of TCHARs stored in the output buffer,
> excluding the terminating null character.

_**Completely untested**_… since I have no Windows machine or anything of a sort to test this on.

r? @aturon
This commit is contained in:
bors 2015-08-25 16:22:17 +00:00
commit b339f38fa2

View file

@ -74,7 +74,7 @@ pub fn error_string(errnum: i32) -> String {
langId, langId,
buf.as_mut_ptr(), buf.as_mut_ptr(),
buf.len() as DWORD, buf.len() as DWORD,
ptr::null()); ptr::null()) as usize;
if res == 0 { if res == 0 {
// Sometimes FormatMessageW can fail e.g. system doesn't like langId, // Sometimes FormatMessageW can fail e.g. system doesn't like langId,
let fm_err = errno(); let fm_err = errno();
@ -82,8 +82,7 @@ pub fn error_string(errnum: i32) -> String {
errnum, fm_err); errnum, fm_err);
} }
let b = buf.iter().position(|&b| b == 0).unwrap_or(buf.len()); match String::from_utf16(&buf[..res]) {
match String::from_utf16(&buf[..b]) {
Ok(mut msg) => { Ok(mut msg) => {
// Trim trailing CRLF inserted by FormatMessageW // Trim trailing CRLF inserted by FormatMessageW
let len = msg.trim_right().len(); let len = msg.trim_right().len();