From 0e006e31fe14ee400242b8d60db0b57ecf62a0e7 Mon Sep 17 00:00:00 2001 From: Armin Novak Date: Wed, 12 Feb 2025 11:39:35 +0100 Subject: [PATCH 1/2] [warnings] fix sign conversion --- channels/rdpecam/client/v4l/uvc_h264.c | 4 +++- channels/urbdrc/client/libusb/libusb_udevman.c | 8 ++++++-- client/X11/xf_monitor.c | 2 +- libfreerdp/core/orders.c | 2 +- libfreerdp/core/server.c | 16 +++++++++------- 5 files changed, 20 insertions(+), 12 deletions(-) diff --git a/channels/rdpecam/client/v4l/uvc_h264.c b/channels/rdpecam/client/v4l/uvc_h264.c index 0cfcedc36..26d9423cd 100644 --- a/channels/rdpecam/client/v4l/uvc_h264.c +++ b/channels/rdpecam/client/v4l/uvc_h264.c @@ -389,7 +389,9 @@ static uint8_t get_guid_unit_id_from_device(libusb_device* device, const uint8_t "For camera %04" PRIx16 ":%04" PRIx16 " found UVCX H264 UnitID %" PRId8, ddesc.idVendor, ddesc.idProduct, unit_id); - return unit_id; + if (unit_id < 0) + return 0; + return WINPR_CXX_COMPAT_CAST(uint8_t, unit_id); } ptr += desc->bLength; } diff --git a/channels/urbdrc/client/libusb/libusb_udevman.c b/channels/urbdrc/client/libusb/libusb_udevman.c index 554620fd4..25660cdee 100644 --- a/channels/urbdrc/client/libusb/libusb_udevman.c +++ b/channels/urbdrc/client/libusb/libusb_udevman.c @@ -791,10 +791,14 @@ static UINT udevman_listener_created_callback(IUDEVMAN* iudevman) WINPR_ASSERT(udevman); if (udevman->devices_vid_pid) - return urbdrc_udevman_register_devices(udevman, udevman->devices_vid_pid, FALSE); + return urbdrc_udevman_register_devices(udevman, udevman->devices_vid_pid, FALSE) + ? CHANNEL_RC_OK + : CHANNEL_RC_INITIALIZATION_ERROR; if (udevman->devices_addr) - return urbdrc_udevman_register_devices(udevman, udevman->devices_addr, TRUE); + return urbdrc_udevman_register_devices(udevman, udevman->devices_addr, TRUE) + ? CHANNEL_RC_OK + : CHANNEL_RC_INITIALIZATION_ERROR; return CHANNEL_RC_OK; } diff --git a/client/X11/xf_monitor.c b/client/X11/xf_monitor.c index 7ea0adda4..f93973fa2 100644 --- a/client/X11/xf_monitor.c +++ b/client/X11/xf_monitor.c @@ -574,7 +574,7 @@ BOOL xf_detect_monitors(xfContext* xfc, UINT32* pMaxWidth, UINT32* pMaxHeight) if (freerdp_settings_get_bool(settings, FreeRDP_Workarea)) { - INT64 bottom = xfc->workArea.height + xfc->workArea.y - 1; + INT64 bottom = 1LL * xfc->workArea.height + xfc->workArea.y - 1LL; vscreen->area.top = WINPR_ASSERTING_INT_CAST(UINT16, xfc->workArea.y); vscreen->area.bottom = WINPR_ASSERTING_INT_CAST(UINT16, bottom); } diff --git a/libfreerdp/core/orders.c b/libfreerdp/core/orders.c index 20d9e6fc3..bb2d3dc1c 100644 --- a/libfreerdp/core/orders.c +++ b/libfreerdp/core/orders.c @@ -866,7 +866,7 @@ static INLINE BOOL update_read_delta(wStream* s, INT32* value) Stream_Read_UINT8(s, byte); if (byte & 0x40) - uvalue = (byte | ~0x3F) & UINT32_MAX; + uvalue = WINPR_CXX_COMPAT_CAST(UINT32, (byte | ~0x3F)); else uvalue = (byte & 0x3F); diff --git a/libfreerdp/core/server.c b/libfreerdp/core/server.c index fe307b98d..7e664c393 100644 --- a/libfreerdp/core/server.c +++ b/libfreerdp/core/server.c @@ -63,6 +63,8 @@ typedef struct UINT32 offset; } wtsChannelMessage; +static const DWORD g_err_oom = WINPR_CXX_COMPAT_CAST(DWORD, E_OUTOFMEMORY); + static DWORD g_SessionId = 1; static wHashTable* g_ServerHandles = NULL; @@ -1153,7 +1155,7 @@ BOOL WINAPI FreeRDP_WTSQuerySessionInformationA(HANDLE hServer, DWORD SessionId, if (!pBuffer) { - SetLastError(E_OUTOFMEMORY); + SetLastError(g_err_oom); return FALSE; } @@ -1569,7 +1571,7 @@ BOOL WINAPI FreeRDP_WTSVirtualChannelWrite(HANDLE hChannelHandle, PCHAR Buffer, if (!buffer) { - SetLastError(E_OUTOFMEMORY); + SetLastError(g_err_oom); goto fail; } @@ -1598,7 +1600,7 @@ BOOL WINAPI FreeRDP_WTSVirtualChannelWrite(HANDLE hChannelHandle, PCHAR Buffer, if (!s) { WLog_ERR(TAG, "Stream_New failed!"); - SetLastError(E_OUTOFMEMORY); + SetLastError(g_err_oom); goto fail; } @@ -1683,7 +1685,7 @@ BOOL WINAPI FreeRDP_WTSVirtualChannelQuery(HANDLE hChannelHandle, WTS_VIRTUAL_CL if (!*ppBuffer) { - SetLastError(E_OUTOFMEMORY); + SetLastError(g_err_oom); } else { @@ -1701,7 +1703,7 @@ BOOL WINAPI FreeRDP_WTSVirtualChannelQuery(HANDLE hChannelHandle, WTS_VIRTUAL_CL if (!*ppBuffer) { - SetLastError(E_OUTOFMEMORY); + SetLastError(g_err_oom); } else { @@ -1743,7 +1745,7 @@ BOOL WINAPI FreeRDP_WTSVirtualChannelQuery(HANDLE hChannelHandle, WTS_VIRTUAL_CL if (!*ppBuffer) { - SetLastError(E_OUTOFMEMORY); + SetLastError(g_err_oom); status = FALSE; } else @@ -1761,7 +1763,7 @@ BOOL WINAPI FreeRDP_WTSVirtualChannelQuery(HANDLE hChannelHandle, WTS_VIRTUAL_CL *ppBuffer = malloc(sizeof(value)); if (!*ppBuffer) { - SetLastError(E_OUTOFMEMORY); + SetLastError(g_err_oom); status = FALSE; } else From ac1599333ef5b649bdd5862c8ba3ce34c5db8861 Mon Sep 17 00:00:00 2001 From: Armin Novak Date: Wed, 12 Feb 2025 12:53:51 +0100 Subject: [PATCH 2/2] [common,settings] drop MonitorLocalShiftX|Y compat --- libfreerdp/common/settings_getters.c | 20 +++----- libfreerdp/common/settings_str.h | 2 - .../core/test/settings_property_lists.h | 2 - tools/update-settings-tests | 48 ++++++++++++------- 4 files changed, 36 insertions(+), 36 deletions(-) diff --git a/libfreerdp/common/settings_getters.c b/libfreerdp/common/settings_getters.c index ddde63489..2638c4ac8 100644 --- a/libfreerdp/common/settings_getters.c +++ b/libfreerdp/common/settings_getters.c @@ -1812,12 +1812,6 @@ UINT32 freerdp_settings_get_uint32(const rdpSettings* settings, FreeRDP_Settings case FreeRDP_MonitorFlags: return settings->MonitorFlags; - case FreeRDP_MonitorLocalShiftX: - return settings->MonitorLocalShiftX; - - case FreeRDP_MonitorLocalShiftY: - return settings->MonitorLocalShiftY; - case FreeRDP_MultifragMaxRequestSize: return settings->MultifragMaxRequestSize; @@ -2001,6 +1995,12 @@ UINT32 freerdp_settings_get_uint32(const rdpSettings* settings, FreeRDP_Settings case FreeRDP_VCFlags: return settings->VCFlags; + case (FreeRDP_Settings_Keys_UInt32)FreeRDP_MonitorLocalShiftX: + return (UINT32)settings->MonitorLocalShiftX; + + case (FreeRDP_Settings_Keys_UInt32)FreeRDP_MonitorLocalShiftY: + return (UINT32)settings->MonitorLocalShiftY; + default: WLog_ERR(TAG, "Invalid key index %" PRIuz " [%s|%s]", id, freerdp_settings_get_name_for_key(id), @@ -2277,14 +2277,6 @@ BOOL freerdp_settings_set_uint32(rdpSettings* settings, FreeRDP_Settings_Keys_UI settings->MonitorFlags = cnv.c; break; - case FreeRDP_MonitorLocalShiftX: - settings->MonitorLocalShiftX = cnv.c; - break; - - case FreeRDP_MonitorLocalShiftY: - settings->MonitorLocalShiftY = cnv.c; - break; - case FreeRDP_MultifragMaxRequestSize: settings->MultifragMaxRequestSize = cnv.c; break; diff --git a/libfreerdp/common/settings_str.h b/libfreerdp/common/settings_str.h index 9691e7e89..30769e3d2 100644 --- a/libfreerdp/common/settings_str.h +++ b/libfreerdp/common/settings_str.h @@ -362,8 +362,6 @@ static const struct settings_str_entry settings_map[] = { { FreeRDP_MonitorCount, FREERDP_SETTINGS_TYPE_UINT32, "FreeRDP_MonitorCount" }, { FreeRDP_MonitorDefArraySize, FREERDP_SETTINGS_TYPE_UINT32, "FreeRDP_MonitorDefArraySize" }, { FreeRDP_MonitorFlags, FREERDP_SETTINGS_TYPE_UINT32, "FreeRDP_MonitorFlags" }, - { FreeRDP_MonitorLocalShiftX, FREERDP_SETTINGS_TYPE_UINT32, "FreeRDP_MonitorLocalShiftX" }, - { FreeRDP_MonitorLocalShiftY, FREERDP_SETTINGS_TYPE_UINT32, "FreeRDP_MonitorLocalShiftY" }, { FreeRDP_MultifragMaxRequestSize, FREERDP_SETTINGS_TYPE_UINT32, "FreeRDP_MultifragMaxRequestSize" }, { FreeRDP_MultitransportFlags, FREERDP_SETTINGS_TYPE_UINT32, "FreeRDP_MultitransportFlags" }, diff --git a/libfreerdp/core/test/settings_property_lists.h b/libfreerdp/core/test/settings_property_lists.h index f9df959df..244da35ed 100644 --- a/libfreerdp/core/test/settings_property_lists.h +++ b/libfreerdp/core/test/settings_property_lists.h @@ -281,8 +281,6 @@ static const size_t uint32_list_indices[] = { FreeRDP_MonitorCount, FreeRDP_MonitorDefArraySize, FreeRDP_MonitorFlags, - FreeRDP_MonitorLocalShiftX, - FreeRDP_MonitorLocalShiftY, FreeRDP_MultifragMaxRequestSize, FreeRDP_MultitransportFlags, FreeRDP_NSCodecColorLossLevel, diff --git a/tools/update-settings-tests b/tools/update-settings-tests index 582c88e40..4ef774f68 100755 --- a/tools/update-settings-tests +++ b/tools/update-settings-tests @@ -79,11 +79,14 @@ def write_str(f, entry_dict): f.write('};\n\n') f.write('\n') -def write_getter_case(f, val, cast): - f.write('\t\tcase FreeRDP_' + val + ':\n') +def write_getter_case(f, val, cast, typestr): + f.write('\t\tcase ') + if typestr: + f.write('(' + typestr + ')') + f.write('FreeRDP_' + val + ':\n') f.write('\t\t\treturn ' + cast + 'settings->' + val + ';\n\n') -def write_getter_body(f, values, ret, keys, isPointer): +def write_getter_body(f, values, ret, keys, isPointer, compat_values, typestr, entry_type): f.write('{\n') f.write('\tWINPR_ASSERT(settings);\n\n') f.write('\tswitch (id)\n') @@ -96,7 +99,12 @@ def write_getter_body(f, values, ret, keys, isPointer): key = keys[i] if key != 'void*': cast = '(void*)' - write_getter_case(f, val, cast) + write_getter_case(f, val, cast, None) + if compat_values: + for i in range(len(compat_values)): + val = compat_values[i] + cast = '(' + entry_type + ')' + write_getter_case(f, val, cast, typestr) f.write('\t\tdefault:\n') f.write('\t\t\tWLog_ERR(TAG, "Invalid key index %" PRIuz " [%s|%s]", id, freerdp_settings_get_name_for_key(id), freerdp_settings_get_type_name_for_key(id));\n') f.write('\t\t\tWINPR_ASSERT(FALSE);\n') @@ -104,11 +112,12 @@ def write_getter_body(f, values, ret, keys, isPointer): f.write('\t}\n') f.write('}\n\n') -def write_getter(f, entry_dict, entry_type, entry_name, postfix): +def write_getter(f, entry_dict, entry_type, entry_name, postfix, compat_dict): isString = 'string' in entry_name isPointer = 'pointer' in entry_name copy = dict(entry_dict) values = get_values(entry_dict, entry_type) + compat_values = get_values(compat_dict, entry_type) keys = get_keys(copy, entry_type, values) typestr = 'FreeRDP_Settings_Keys_' + entry_name.capitalize() @@ -132,11 +141,11 @@ def write_getter(f, entry_dict, entry_type, entry_name, postfix): else: ret = '0'; - write_getter_body(f, values, ret, keys, isPointer) + write_getter_body(f, values, ret, keys, isPointer, compat_values, typestr, entry_type) if isString: f.write('char* freerdp_settings_get_' + entry_name.lower() + '_writable(rdpSettings* settings, ' + typestr + ' id)\n') - write_getter_body(f, values, ret, keys, isPointer) + write_getter_body(f, values, ret, keys, isPointer, compat_values, typestr, entry_type) def write_setter_case(f, val, postfix, isPointer, cast): f.write('\t\tcase FreeRDP_' + val + ':\n') @@ -325,26 +334,29 @@ try: setter_list = dict(type_list) setter_list2 = dict(type_list) # Compatibility with older 3.x releases where the value was wrongly an unsigned type - getter_list['UINT32'].append('MonitorLocalShiftX') - getter_list['UINT32'].append('MonitorLocalShiftY') - write_getter(f, getter_list, 'BOOL', 'bool', '') + compat_getter_list = dict() + compat_getter_list['UINT32'] = list() + compat_getter_list['UINT32'].append('MonitorLocalShiftX') + compat_getter_list['UINT32'].append('MonitorLocalShiftY') + + write_getter(f, getter_list, 'BOOL', 'bool', '', compat_getter_list) write_setter(f, setter_list, 'BOOL', 'bool', '') - write_getter(f, getter_list, 'UINT16', 'uint16', '') + write_getter(f, getter_list, 'UINT16', 'uint16', '', compat_getter_list) write_setter(f, setter_list, 'UINT16', 'uint16', '') - write_getter(f, getter_list, 'INT16', 'int16', '') + write_getter(f, getter_list, 'INT16', 'int16', '', compat_getter_list) write_setter(f, setter_list, 'INT16', 'int16', '') - write_getter(f, getter_list, 'UINT32', 'uint32', '') + write_getter(f, getter_list, 'UINT32', 'uint32', '', compat_getter_list) write_setter(f, setter_list, 'UINT32', 'uint32', '') - write_getter(f, getter_list, 'INT32', 'int32', '') + write_getter(f, getter_list, 'INT32', 'int32', '', compat_getter_list) write_setter(f, setter_list, 'INT32', 'int32', '') - write_getter(f, getter_list, 'UINT64', 'uint64', '') + write_getter(f, getter_list, 'UINT64', 'uint64', '', compat_getter_list) write_setter(f, setter_list, 'UINT64', 'uint64', '') - write_getter(f, getter_list, 'INT64', 'int64', '') + write_getter(f, getter_list, 'INT64', 'int64', '', compat_getter_list) write_setter(f, setter_list, 'INT64', 'int64', '') - write_getter(f, getter_list, 'char*', 'string', '_') + write_getter(f, getter_list, 'char*', 'string', '_', compat_getter_list) write_setter(f, setter_list, 'char*', 'string', '_') write_setter(f, setter_list2, 'char*', 'string', '_copy_') - write_getter(f, getter_list, '*', 'pointer', '') + write_getter(f, getter_list, '*', 'pointer', '', compat_getter_list) write_setter(f, setter_list, '*', 'pointer', '') f.write('\n')