From f7f59e5e1de4d47a88138f0695bc63a8c99fa99e Mon Sep 17 00:00:00 2001 From: Amar Takhar Date: Sat, 22 May 2010 21:09:37 +0000 Subject: [PATCH] Add an ErrorString utility which converts the code from GetLastError() into a human readable std::string. Originally committed to SVN as r4345. --- .../libaegisub_vs2008.vcproj | 4 +++ .../libaegisub/include/libaegisub/util_win.h | 33 +++++++++++++++++++ aegisub/libaegisub/windows/util.cpp | 16 +++++++++ 3 files changed, 53 insertions(+) create mode 100644 aegisub/libaegisub/include/libaegisub/util_win.h diff --git a/aegisub/build/libaegisub_vs2008/libaegisub_vs2008.vcproj b/aegisub/build/libaegisub_vs2008/libaegisub_vs2008.vcproj index 083430e21..533fb1eb5 100644 --- a/aegisub/build/libaegisub_vs2008/libaegisub_vs2008.vcproj +++ b/aegisub/build/libaegisub_vs2008/libaegisub_vs2008.vcproj @@ -211,6 +211,10 @@ RelativePath="..\..\libaegisub\include\libaegisub\util.h" > + + diff --git a/aegisub/libaegisub/include/libaegisub/util_win.h b/aegisub/libaegisub/include/libaegisub/util_win.h new file mode 100644 index 000000000..aea19ebe3 --- /dev/null +++ b/aegisub/libaegisub/include/libaegisub/util_win.h @@ -0,0 +1,33 @@ +// Copyright (c) 2010, Amar Takhar +// +// Permission to use, copy, modify, and distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +// +// $Id$ + +/// @file util.h +/// @brief Public interface for Windows utilities. +/// @ingroup libaegisub windows + +#ifndef LAGI_PRE +#include +#include +#endif + +namespace agi { + namespace util { + + std::string ErrorString(DWORD error); + + + } // namespace util +} // namespace agi diff --git a/aegisub/libaegisub/windows/util.cpp b/aegisub/libaegisub/windows/util.cpp index c20b1d78b..1da2329e0 100644 --- a/aegisub/libaegisub/windows/util.cpp +++ b/aegisub/libaegisub/windows/util.cpp @@ -28,6 +28,7 @@ #include #include "libaegisub/util.h" +#include "libaegisub/util_win.h" namespace agi { namespace util { @@ -55,5 +56,20 @@ void Rename(const std::string& from, const std::string& to) { MoveFileExA(from.c_str(), to.c_str(), MOVEFILE_REPLACE_EXISTING); } +std::string ErrorString(DWORD error) { + LPSTR lpstr = NULL; + + if(FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, error, 0, (LPSTR)&lpstr, 0, NULL) == 0) { + /// @todo Return the actual 'unknown error' string from windows. + std::string str("Unknown Error"); + return str; + } + + std::string str(lpstr); + LocalFree(lpstr); + return str; +} + + } // namespace io } // namespace agi