Detlef Riekenberg : serialui: Fix return type for CommConfigDialog.
Alexandre Julliard
julliard at wine.codeweavers.com
Tue Mar 6 06:04:00 CST 2007
Module: wine
Branch: master
Commit: 20a329831249f76205877512243bb59c308b69c0
URL: http://source.winehq.org/git/wine.git/?a=commit;h=20a329831249f76205877512243bb59c308b69c0
Author: Detlef Riekenberg <wine.dev at 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;
More information about the wine-cvs
mailing list