summaryrefslogtreecommitdiff
path: root/lib/win32/emu.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/win32/emu.cpp')
-rw-r--r--lib/win32/emu.cpp100
1 files changed, 65 insertions, 35 deletions
diff --git a/lib/win32/emu.cpp b/lib/win32/emu.cpp
index 7e6cbcd0..0a7b8ed6 100644
--- a/lib/win32/emu.cpp
+++ b/lib/win32/emu.cpp
@@ -482,6 +482,32 @@ std::string ConvertPathToAbsoluteUnicode(const char *pFileName)
return tmpStr;
}
+std::string GetErrorMessage(DWORD errorCode)
+{
+ char* pMsgBuf = NULL;
+
+ DWORD chars = FormatMessage
+ (
+ FORMAT_MESSAGE_ALLOCATE_BUFFER |
+ FORMAT_MESSAGE_FROM_SYSTEM,
+ NULL,
+ errorCode,
+ MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
+ (char *)(&pMsgBuf),
+ 0, NULL
+ );
+
+ if (chars == 0 || pMsgBuf == NULL)
+ {
+ return std::string("failed to get error message");
+ }
+
+ std::string out(pMsgBuf);
+ LocalFree(pMsgBuf);
+
+ return out;
+}
+
// --------------------------------------------------------------------------
//
// Function
@@ -560,8 +586,9 @@ HANDLE openfile(const char *pFileName, int flags, int mode)
if (hdir == INVALID_HANDLE_VALUE)
{
- ::syslog(LOG_WARNING, "Failed to open file %s: "
- "error %i", pFileName, GetLastError());
+ ::syslog(LOG_WARNING, "Failed to open file '%s': "
+ "%s", pFileName,
+ GetErrorMessage(GetLastError()).c_str());
return INVALID_HANDLE_VALUE;
}
@@ -589,7 +616,7 @@ int emu_fstat(HANDLE hdir, struct stat * st)
if (!GetFileInformationByHandle(hdir, &fi))
{
::syslog(LOG_WARNING, "Failed to read file information: "
- "error %d", GetLastError());
+ "%s", GetErrorMessage(GetLastError()).c_str());
errno = EACCES;
return -1;
}
@@ -597,7 +624,7 @@ int emu_fstat(HANDLE hdir, struct stat * st)
if (INVALID_FILE_ATTRIBUTES == fi.dwFileAttributes)
{
::syslog(LOG_WARNING, "Failed to get file attributes: "
- "error %d", GetLastError());
+ "%s", GetErrorMessage(GetLastError()).c_str());
errno = EACCES;
return -1;
}
@@ -628,7 +655,7 @@ int emu_fstat(HANDLE hdir, struct stat * st)
if (!GetFileSizeEx(hdir, &st_size))
{
::syslog(LOG_WARNING, "Failed to get file size: "
- "error %d", GetLastError());
+ "%s", GetErrorMessage(GetLastError()).c_str());
errno = EACCES;
return -1;
}
@@ -751,8 +778,9 @@ HANDLE OpenFileByNameUtf8(const char* pFileName, DWORD flags)
}
else
{
- ::syslog(LOG_WARNING,
- "Failed to open '%s': error %d", pFileName, err);
+ ::syslog(LOG_WARNING, "Failed to open '%s': "
+ "%s", pFileName,
+ GetErrorMessage(err).c_str());
errno = EACCES;
}
@@ -820,7 +848,8 @@ int statfs(const char * pName, struct statfs * s)
if (!GetFileInformationByHandle(handle, &fi))
{
::syslog(LOG_WARNING, "Failed to get file information "
- "for '%s': error %d", pName, GetLastError());
+ "for '%s': %s", pName,
+ GetErrorMessage(GetLastError()).c_str());
CloseHandle(handle);
errno = EACCES;
return -1;
@@ -873,8 +902,8 @@ int emu_utimes(const char * pName, const struct timeval times[])
if (!SetFileTime(handle, &creationTime, NULL, &modificationTime))
{
- ::syslog(LOG_ERR, "Failed to set times on '%s': error %d",
- pName, GetLastError());
+ ::syslog(LOG_ERR, "Failed to set times on '%s': %s", pName,
+ GetErrorMessage(GetLastError()).c_str());
CloseHandle(handle);
return 1;
}
@@ -916,8 +945,8 @@ int emu_chmod(const char * pName, mode_t mode)
DWORD attribs = GetFileAttributesW(pBuffer);
if (attribs == INVALID_FILE_ATTRIBUTES)
{
- ::syslog(LOG_ERR, "Failed to get file attributes of '%s': "
- "error %d", pName, GetLastError());
+ ::syslog(LOG_ERR, "Failed to get file attributes of '%s': %s",
+ pName, GetErrorMessage(GetLastError()).c_str());
errno = EACCES;
free(pBuffer);
return -1;
@@ -934,8 +963,8 @@ int emu_chmod(const char * pName, mode_t mode)
if (!SetFileAttributesW(pBuffer, attribs))
{
- ::syslog(LOG_ERR, "Failed to set file attributes of '%s': "
- "error %d", pName, GetLastError());
+ ::syslog(LOG_ERR, "Failed to set file attributes of '%s': %s",
+ pName, GetErrorMessage(GetLastError()).c_str());
errno = EACCES;
free(pBuffer);
return -1;
@@ -1204,8 +1233,8 @@ BOOL AddEventSource
char cmd[MAX_PATH];
if (GetModuleFileName(NULL, cmd, sizeof(cmd)-1) == 0)
{
- ::syslog(LOG_ERR, "Failed to get the program file name: "
- "error %d", GetLastError());
+ ::syslog(LOG_ERR, "Failed to get the program file name: %s",
+ GetErrorMessage(GetLastError()).c_str());
return FALSE;
}
cmd[sizeof(cmd)-1] = 0;
@@ -1224,8 +1253,8 @@ BOOL AddEventSource
0, NULL, REG_OPTION_NON_VOLATILE,
KEY_WRITE, NULL, &hk, &dwDisp))
{
- ::syslog(LOG_ERR, "Failed to create the registry key: "
- "error %d", GetLastError());
+ ::syslog(LOG_ERR, "Failed to create the registry key: %s",
+ GetErrorMessage(GetLastError()).c_str());
return FALSE;
}
@@ -1238,8 +1267,8 @@ BOOL AddEventSource
(LPBYTE) exepath.c_str(), // pointer to value data
(DWORD) (exepath.size()))) // data size
{
- ::syslog(LOG_ERR, "Failed to set the event message file: "
- "error %d", GetLastError());
+ ::syslog(LOG_ERR, "Failed to set the event message file: %s",
+ GetErrorMessage(GetLastError()).c_str());
RegCloseKey(hk);
return FALSE;
}
@@ -1256,8 +1285,8 @@ BOOL AddEventSource
(LPBYTE) &dwData, // pointer to value data
sizeof(DWORD))) // length of value data
{
- ::syslog(LOG_ERR, "Failed to set the supported types: "
- "error %d", GetLastError());
+ ::syslog(LOG_ERR, "Failed to set the supported types: %s",
+ GetErrorMessage(GetLastError()).c_str());
RegCloseKey(hk);
return FALSE;
}
@@ -1272,7 +1301,7 @@ BOOL AddEventSource
(DWORD) (exepath.size()))) // data size
{
::syslog(LOG_ERR, "Failed to set the category message file: "
- "error %d", GetLastError());
+ "%s", GetErrorMessage(GetLastError()).c_str());
RegCloseKey(hk);
return FALSE;
}
@@ -1284,8 +1313,8 @@ BOOL AddEventSource
(LPBYTE) &dwNum, // pointer to value data
sizeof(DWORD))) // length of value data
{
- ::syslog(LOG_ERR, "Failed to set the category count: "
- "error %d", GetLastError());
+ ::syslog(LOG_ERR, "Failed to set the category count: %s",
+ GetErrorMessage(GetLastError()).c_str());
RegCloseKey(hk);
return FALSE;
}
@@ -1318,7 +1347,7 @@ void openlog(const char * daemonName, int, int)
if (newSyslogH == NULL)
{
::syslog(LOG_ERR, "Failed to register our own event source: "
- "error %d", GetLastError());
+ "%s", GetErrorMessage(GetLastError()).c_str());
return;
}
@@ -1417,8 +1446,8 @@ void syslog(int loglevel, const char *frmt, ...)
}
else
{
- printf("Unable to send message to Event Log: "
- "error %i:\r\n", (int)err);
+ printf("Unable to send message to Event Log: %s:\r\n",
+ GetErrorMessage(err).c_str());
fflush(stdout);
}
}
@@ -1562,7 +1591,8 @@ int emu_unlink(const char* pFileName)
else
{
::syslog(LOG_WARNING, "Failed to delete file "
- "'%s': error %d", pFileName, (int)err);
+ "'%s': %s", pFileName,
+ GetErrorMessage(err).c_str());
errno = ENOSYS;
}
return -1;
@@ -1578,7 +1608,7 @@ int console_read(char* pBuffer, size_t BufferSize)
if (hConsole == INVALID_HANDLE_VALUE)
{
::fprintf(stderr, "Failed to get a handle on standard input: "
- "error %d\n", GetLastError());
+ "%s", GetErrorMessage(GetLastError()).c_str());
return -1;
}
@@ -1601,8 +1631,8 @@ int console_read(char* pBuffer, size_t BufferSize)
NULL // reserved
))
{
- ::fprintf(stderr, "Failed to read from console: error %d\n",
- GetLastError());
+ ::fprintf(stderr, "Failed to read from console: %s\n",
+ GetErrorMessage(GetLastError()).c_str());
return -1;
}
@@ -1698,13 +1728,13 @@ bool ConvertTime_tToFileTime(const time_t from, FILETIME *pTo)
// Convert the last-write time to local time.
if (!SystemTimeToFileTime(&stUTC, pTo))
{
- syslog(LOG_ERR, "Failed to convert between time formats: "
- "error %d", GetLastError());
+ syslog(LOG_ERR, "Failed to convert between time formats: %s",
+ GetErrorMessage(GetLastError()).c_str());
return false;
}
return true;
}
-
#endif // WIN32
+