Zhiyi Zhang zzhang@codeweavers.com writes:
- SERVER_START_REQ( get_monitor_info )
- {
req->handle = wine_server_user_handle( handle );
wine_server_set_reply( req, adapter_name, sizeof(adapter_name) );
if (!wine_server_call( req ))
{
SetRect( &info->rcMonitor, reply->monitor_rect.left, reply->monitor_rect.top,
reply->monitor_rect.right, reply->monitor_rect.bottom );
SetRect( &info->rcWork, reply->work_rect.left, reply->work_rect.top,
reply->work_rect.right, reply->work_rect.bottom );
if (!IsRectEmpty( &info->rcMonitor ) && !info->rcMonitor.top && !info->rcMonitor.left)
info->dwFlags = MONITORINFOF_PRIMARY;
else
info->dwFlags = 0;
if (info->cbSize >= sizeof(MONITORINFOEXW))
lstrcpyW( ((MONITORINFOEXW *)info)->szDevice, adapter_name );
return TRUE;
Strings in server requests should not be null-terminated. Also please don't return out of a request block.
SERVER_START_REQ(create_monitor)
{
req->monitor_rect.top = monitor->rc_monitor.top;
req->monitor_rect.left = monitor->rc_monitor.left;
req->monitor_rect.right = monitor->rc_monitor.right;
req->monitor_rect.bottom = monitor->rc_monitor.bottom;
req->work_rect.top = monitor->rc_work.top;
req->work_rect.left = monitor->rc_work.left;
req->work_rect.right = monitor->rc_work.right;
req->work_rect.bottom = monitor->rc_work.bottom;
wine_server_add_data(req, bufferW, size);
if (wine_server_call(req))
goto done;
Same issues here.
+failed:
- if (monitor)
- {
if (monitor->adapter_name)
free( monitor->adapter_name );
free( monitor );
- }
- set_error( STATUS_UNSUCCESSFUL );
Don't use such generic errors. You should simply return the error already set by the various allocation functions.