From 1a9ddb9110451a85b6efce6f5432d07d11026f8a Mon Sep 17 00:00:00 2001 From: crs Date: Sat, 28 Feb 2004 12:30:52 +0000 Subject: [PATCH] Added missing files. --- lib/platform/CMSWindowsUtil.cpp | 75 +++++++++++++++++++++++++++++++++ lib/platform/CMSWindowsUtil.h | 38 +++++++++++++++++ 2 files changed, 113 insertions(+) create mode 100644 lib/platform/CMSWindowsUtil.cpp create mode 100644 lib/platform/CMSWindowsUtil.h diff --git a/lib/platform/CMSWindowsUtil.cpp b/lib/platform/CMSWindowsUtil.cpp new file mode 100644 index 00000000..4b3e3f4c --- /dev/null +++ b/lib/platform/CMSWindowsUtil.cpp @@ -0,0 +1,75 @@ +/* + * synergy -- mouse and keyboard sharing utility + * Copyright (C) 2004 Chris Schoeneman + * + * This package is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * found in the file COPYING that should have accompanied this file. + * + * This package is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#include "CMSWindowsUtil.h" +#include "CStringUtil.h" +#include + +// +// CMSWindowsUtil +// + +CString +CMSWindowsUtil::getString(HINSTANCE instance, DWORD id) +{ + char buffer[1024]; + int size = static_cast(sizeof(buffer) / sizeof(buffer[0])); + char* msg = buffer; + + // load string + int n = LoadString(instance, id, msg, size); + msg[n] = '\0'; + if (n < size) { + return msg; + } + + // not enough buffer space. keep trying larger buffers until + // we get the whole string. + msg = NULL; + do { + size <<= 1; + delete[] msg; + char* msg = new char[size]; + n = LoadString(instance, id, msg, size); + } while (n == size); + msg[n] = '\0'; + + CString result(msg); + delete[] msg; + return result; +} + +CString +CMSWindowsUtil::getErrorString(HINSTANCE hinstance, DWORD error, DWORD id) +{ + char* buffer; + if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | + FORMAT_MESSAGE_IGNORE_INSERTS | + FORMAT_MESSAGE_FROM_SYSTEM, + 0, + error, + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), + (LPTSTR)&buffer, + 0, + NULL) == 0) { + CString errorString = CStringUtil::print("%d", error); + return CStringUtil::format(getString(hinstance, id).c_str(), + errorString.c_str()); + } + else { + CString result(buffer); + LocalFree(buffer); + return result; + } +} diff --git a/lib/platform/CMSWindowsUtil.h b/lib/platform/CMSWindowsUtil.h new file mode 100644 index 00000000..5c4d14f5 --- /dev/null +++ b/lib/platform/CMSWindowsUtil.h @@ -0,0 +1,38 @@ +/* + * synergy -- mouse and keyboard sharing utility + * Copyright (C) 2004 Chris Schoeneman + * + * This package is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * found in the file COPYING that should have accompanied this file. + * + * This package is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#ifndef CMSWINDOWSUTIL_H +#define CMSWINDOWSUTIL_H + +#include "CString.h" +#define WINDOWS_LEAN_AND_MEAN +#include + +class CMSWindowsUtil { +public: + //! Get message string + /*! + Gets a string for \p id from the string table of \p instance. + */ + static CString getString(HINSTANCE instance, DWORD id); + + //! Get error string + /*! + Gets a system error message for \p error. If the error cannot be + found return the string for \p id, replacing ${1} with \p error. + */ + static CString getErrorString(HINSTANCE, DWORD error, DWORD id); +}; + +#endif