summaryrefslogtreecommitdiff
path: root/win32.c
diff options
context:
space:
mode:
authorDarkvater <Darkvater@openttd.org>2006-12-10 11:46:43 +0000
committerDarkvater <Darkvater@openttd.org>2006-12-10 11:46:43 +0000
commitbde8e9ee44b43199ff45a3ca0b7ae7eed6c81c24 (patch)
treeac5f23f336b156b726cc62421806f304bac903f4 /win32.c
parentf0e1f9842d62d36c2102fd1069ba6ccadaf485dd (diff)
downloadopenttd-bde8e9ee44b43199ff45a3ca0b7ae7eed6c81c24.tar.xz
(svn r7468) -Codechange: [win32] Add some comments to MB/WIDE_TO_WIDE/MB_[BUFFER] macros and
use them some more in win32 code. Also for the clipboard use the convert_from_fs function instead of calling Win32 API directly. Make the static buffers in OTTD2FS and FS2OTTD the same size (character-length wise)
Diffstat (limited to 'win32.c')
-rw-r--r--win32.c28
1 files changed, 14 insertions, 14 deletions
diff --git a/win32.c b/win32.c
index 6eb07dab7..b65fbc743 100644
--- a/win32.c
+++ b/win32.c
@@ -368,6 +368,8 @@ static INT_PTR CALLBACK CrashDialogFunc(HWND wnd,UINT msg,WPARAM wParam,LPARAM l
switch (msg) {
case WM_INITDIALOG: {
#if defined(UNICODE)
+ /* We need to put the crash-log in a seperate buffer because the default
+ * buffer in MB_TO_WIDE is not large enough (256 chars) */
wchar_t crash_msgW[8096];
#endif
SetDlgItemText(wnd, 10, _crash_desc);
@@ -863,16 +865,17 @@ int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
{
int argc;
char *argv[64]; // max 64 command line arguments
+ char *cmdline;
#if defined(UNICODE)
- /* We need to backup the command line (arguments) because the pointer
- * of FS2OTTD() is only temporary */
- char cmdline[MAX_PATH];
- ttd_strlcpy(cmdline, FS2OTTD(GetCommandLine()), sizeof(cmdline));
-#else
- char *cmdline = GetCommandLine();
+ /* For UNICODE we need to convert the commandline to char* _AND_
+ * save it because argv[] points into this buffer and thus needs to
+ * be available between subsequent calls to FS2OTTD() */
+ char cmdlinebuf[MAX_PATH];
#endif
+ cmdline = WIDE_TO_MB_BUFFER(GetCommandLine(), cmdlinebuf, lengthof(cmdlinebuf));
+
#if defined(_DEBUG)
CreateConsole();
#endif
@@ -954,20 +957,17 @@ bool InsertTextBufferClipboard(Textbuf *tb)
uint16 width, length;
if (IsClipboardFormatAvailable(CF_UNICODETEXT)) {
- int bytec;
+ const char *ret;
OpenClipboard(NULL);
cbuf = GetClipboardData(CF_UNICODETEXT);
ptr = GlobalLock(cbuf);
- bytec = WideCharToMultiByte(CP_UTF8, 0, (wchar_t*)ptr, -1, utf8_buf, lengthof(utf8_buf), NULL, NULL);
+ ret = convert_from_fs((wchar_t*)ptr, utf8_buf, lengthof(utf8_buf));
GlobalUnlock(cbuf);
CloseClipboard();
- if (bytec == 0) {
- DEBUG(misc, 0) ("[utf8] Error converting '%s'. Errno %d", ptr, GetLastError());
- return false;
- }
+ if (*ret == '\0') return false;
} else if (IsClipboardFormatAvailable(CF_TEXT)) {
OpenClipboard(NULL);
cbuf = GetClipboardData(CF_TEXT);
@@ -1056,7 +1056,7 @@ wchar_t *convert_to_fs(const char *name, wchar_t *utf16_buf, size_t buflen)
* @return pointer to the converted string; if failed string is of zero-length */
const wchar_t *OTTD2FS(const char *name)
{
- static wchar_t utf16_buf[MAX_PATH];
+ static wchar_t utf16_buf[512];
return convert_to_fs(name, utf16_buf, lengthof(utf16_buf));
}
@@ -1071,7 +1071,7 @@ char *convert_from_fs(const wchar_t *name, char *utf8_buf, size_t buflen)
{
int len = WideCharToMultiByte(CP_UTF8, 0, name, -1, utf8_buf, buflen, NULL, NULL);
if (len == 0) {
- DEBUG(misc, 0) ("[utf8] Error converting string. Errno %d", GetLastError());
+ DEBUG(misc, 0) ("[utf8] Error converting wide-string. Errno %d", GetLastError());
utf8_buf[0] = '\0';
}