Module: wine Branch: master Commit: 20a329831249f76205877512243bb59c308b69c0 URL: http://source.winehq.org/git/wine.git/?a=commit;h=20a329831249f7620587751224...
Author: Detlef Riekenberg wine.dev@web.de Date: Tue Mar 6 05:40:56 2007 +0100
serialui: Fix return type for CommConfigDialog.
---
dlls/kernel32/comm.c | 48 +++++++++++++++++++++------------------------- dlls/serialui/confdlg.c | 38 +++++++++++++++++++++--------------- 2 files changed, 44 insertions(+), 42 deletions(-)
diff --git a/dlls/kernel32/comm.c b/dlls/kernel32/comm.c index 8fc1033..076b761 100644 --- a/dlls/kernel32/comm.c +++ b/dlls/kernel32/comm.c @@ -1194,23 +1194,20 @@ BOOL WINAPI CommConfigDialogA( HWND hWnd, /* [in] parent window for the dialog */ LPCOMMCONFIG lpCommConfig) /* [out] pointer to struct to fill */ { - FARPROC lpfnCommDialog; - HMODULE hConfigModule; - BOOL r = FALSE; + LPWSTR lpDeviceW = NULL; + DWORD len; + BOOL r;
TRACE("(%s, %p, %p)\n", debugstr_a(lpszDevice), hWnd, lpCommConfig);
- hConfigModule = LoadLibraryW(lpszSerialUI); - if(!hConfigModule) - return FALSE; - - lpfnCommDialog = GetProcAddress(hConfigModule, "drvCommConfigDialogA"); - - if(lpfnCommDialog) - r = lpfnCommDialog(lpszDevice,hWnd,lpCommConfig); - - FreeLibrary(hConfigModule); - + if (lpszDevice) + { + len = MultiByteToWideChar( CP_ACP, 0, lpszDevice, -1, NULL, 0 ); + lpDeviceW = HeapAlloc( GetProcessHeap(), 0, len * sizeof(WCHAR) ); + MultiByteToWideChar( CP_ACP, 0, lpszDevice, -1, lpDeviceW, len ); + } + r = CommConfigDialogW(lpDeviceW, hWnd, lpCommConfig); + HeapFree( GetProcessHeap(), 0, lpDeviceW ); return r; }
@@ -1224,24 +1221,23 @@ BOOL WINAPI CommConfigDialogW( HWND hWnd, /* [in] parent window for the dialog */ LPCOMMCONFIG lpCommConfig) /* [out] pointer to struct to fill */ { - FARPROC lpfnCommDialog; + FARPROC pCommConfigDialog; HMODULE hConfigModule; - BOOL r = FALSE; + DWORD res = ERROR_INVALID_PARAMETER;
TRACE("(%s, %p, %p)\n", debugstr_w(lpszDevice), hWnd, lpCommConfig); - hConfigModule = LoadLibraryW(lpszSerialUI); - if(!hConfigModule) - return FALSE; - - lpfnCommDialog = GetProcAddress(hConfigModule, "drvCommConfigDialogW");
- if(lpfnCommDialog) - r = lpfnCommDialog(lpszDevice,hWnd,lpCommConfig); - - FreeLibrary(hConfigModule); + if (hConfigModule) { + pCommConfigDialog = GetProcAddress(hConfigModule, "drvCommConfigDialogW"); + if (pCommConfigDialog) { + res = pCommConfigDialog(lpszDevice, hWnd, lpCommConfig); + } + FreeLibrary(hConfigModule); + }
- return r; + if (res) SetLastError(res); + return (res == ERROR_SUCCESS); }
/*********************************************************************** diff --git a/dlls/serialui/confdlg.c b/dlls/serialui/confdlg.c index 4de730d..6b5dbe2 100644 --- a/dlls/serialui/confdlg.c +++ b/dlls/serialui/confdlg.c @@ -376,10 +376,10 @@ static INT_PTR CALLBACK SERIALUI_ConfigDialogProc(HWND hWnd, UINT uMsg, WPARAM w { case IDOK: SERIALUI_DialogInfoToDCB(hWnd,info); - EndDialog(hWnd,1); + EndDialog(hWnd, ERROR_SUCCESS); return TRUE; case IDCANCEL: - EndDialog(hWnd,0); + EndDialog(hWnd, ERROR_CANCELLED); return TRUE; /* test code for Get/SetDefaultCommConfig begins */ case ID_GETDEFAULT: @@ -431,38 +431,44 @@ static VOID SERIALUI_strfree( LPWSTR strW ) /*********************************************************************** * drvCommConfigDialogW (SERIALUI.@) * - * Used by Win9x KERNEL to show a dialog for configuring a COMM port. + * Show a dialog for configuring a Serial Port. + * */ -BOOL WINAPI drvCommConfigDialogW( - LPCWSTR lpszName, - HWND hWndParent, - LPCOMMCONFIG lpCommConfig -) { +DWORD WINAPI drvCommConfigDialogW(LPCWSTR lpszName, HWND hWndParent, LPCOMMCONFIG lpCommConfig) +{ SERIALUI_DialogInfo info; + INT res;
info.lpCommConfig = lpCommConfig; info.lpszDevice = lpszName; info.bConvert = FALSE; info.dwFlowControl = 0;
- if(!lpCommConfig) - return FALSE; + if ((!lpCommConfig) || (!lpszName)) + return ERROR_INVALID_PARAMETER;
- return DialogBoxParamW(SERIALUI_hModule, + if (lpCommConfig->dwSize < sizeof(COMMCONFIG)) + return ERROR_INSUFFICIENT_BUFFER; + + if (!lpszName[0]) + return ERROR_BADKEY; + + res = DialogBoxParamW( SERIALUI_hModule, MAKEINTRESOURCEW(IDD_SERIALUICONFIG), hWndParent, SERIALUI_ConfigDialogProc, (LPARAM)&info); + + return (res == -1) ? GetLastError() : res ; }
/*********************************************************************** * drvCommConfigDialogA (SERIALUI.@) */ -BOOL WINAPI drvCommConfigDialogA( - LPCSTR lpszName, HWND hWndParent, LPCOMMCONFIG lpCommConfig ) +DWORD WINAPI drvCommConfigDialogA(LPCSTR lpszName, HWND hWndParent, LPCOMMCONFIG lpCommConfig) { LPWSTR strW = SERIALUI_strdup( lpszName ); - BOOL r = drvCommConfigDialogW( strW, hWndParent, lpCommConfig ); + DWORD r = drvCommConfigDialogW( strW, hWndParent, lpCommConfig ); SERIALUI_strfree( strW ); return r; } @@ -560,7 +566,8 @@ DWORD WINAPI drvGetDefaultCommConfigW( r = sizeof(comW) / sizeof(WCHAR); /* len of "com\0" */ lstrcpynW(szKeyName, lpszDevice, r); /* simulate a lstrcmpnW */ r--; - if( lstrcmpW(szKeyName, comW) || + + if( lstrcmpiW(szKeyName, comW) || (lpszDevice[r] < '1') || (lpszDevice[r] > '9') || lpszDevice[r+1]) { return ERROR_BADKEY; } @@ -593,7 +600,6 @@ DWORD WINAPI drvGetDefaultCommConfigW( else { /* FIXME: default to a hardcoded commconfig */ - lpCommConfig->dcb.DCBlength = sizeof(DCB); lpCommConfig->dcb.BaudRate = 9600; lpCommConfig->dcb.fBinary = TRUE;