From 3170a21418f266964dab2af7d7373f101640946c Mon Sep 17 00:00:00 2001 From: akallabeth Date: Mon, 26 Jan 2026 12:22:22 +0100 Subject: [PATCH 01/10] [utils] add WINPR_ATTR_NODISCARD * Add WINPR_ATTR_NODISCARD to functions returning a value * Add some missing WINPR_ATTR_MALLOC --- include/freerdp/utils/aad.h | 7 +++ include/freerdp/utils/cliprdr_utils.h | 6 +++ include/freerdp/utils/drdynvc.h | 1 + include/freerdp/utils/encoded_types.h | 5 ++ include/freerdp/utils/gfx.h | 3 ++ include/freerdp/utils/helpers.h | 2 + include/freerdp/utils/http.h | 3 ++ include/freerdp/utils/passphrase.h | 3 ++ include/freerdp/utils/pcap.h | 10 +++- include/freerdp/utils/pod_arrays.h | 7 +++ include/freerdp/utils/profiler.h | 5 +- include/freerdp/utils/proxy_utils.h | 1 + include/freerdp/utils/ringbuffer.h | 7 +++ include/freerdp/utils/signal.h | 1 + include/freerdp/utils/smartcard_call.h | 9 ++++ include/freerdp/utils/smartcard_operations.h | 2 + include/freerdp/utils/smartcard_pack.h | 52 ++++++++++++++++++++ include/freerdp/utils/smartcardlogon.h | 4 ++ include/freerdp/utils/stopwatch.h | 6 ++- include/freerdp/utils/string.h | 3 ++ 20 files changed, 134 insertions(+), 3 deletions(-) diff --git a/include/freerdp/utils/aad.h b/include/freerdp/utils/aad.h index c6d53e600..c8caef626 100644 --- a/include/freerdp/utils/aad.h +++ b/include/freerdp/utils/aad.h @@ -77,6 +77,7 @@ extern "C" * @return The token string or \b NULL */ WINPR_ATTR_MALLOC(free, 1) + WINPR_ATTR_NODISCARD FREERDP_API char* freerdp_utils_aad_get_access_token(wLog* log, const char* data, size_t length); @@ -87,6 +88,7 @@ extern "C" * @return The string representation of the enum value * @since version 3.10.0 */ + WINPR_ATTR_NODISCARD FREERDP_API const char* freerdp_utils_aad_wellknwon_value_name(AAD_WELLKNOWN_VALUES which); /** Helper to extract a string from AAD::wellknown JSON @@ -97,6 +99,7 @@ extern "C" * * @since version 3.10.0 */ + WINPR_ATTR_NODISCARD FREERDP_API const char* freerdp_utils_aad_get_wellknown_string(rdpContext* context, AAD_WELLKNOWN_VALUES which); @@ -108,6 +111,7 @@ extern "C" * * @since version 3.10.0 */ + WINPR_ATTR_NODISCARD FREERDP_API const char* freerdp_utils_aad_get_wellknown_custom_string(rdpContext* context, const char* which); @@ -119,6 +123,7 @@ extern "C" * * @since version 3.10.0 */ + WINPR_ATTR_NODISCARD FREERDP_API WINPR_JSON* freerdp_utils_aad_get_wellknown_object(rdpContext* context, AAD_WELLKNOWN_VALUES which); @@ -130,6 +135,7 @@ extern "C" * * @since version 3.10.0 */ + WINPR_ATTR_NODISCARD FREERDP_API WINPR_JSON* freerdp_utils_aad_get_wellknown_custom_object(rdpContext* context, const char* which); @@ -143,6 +149,7 @@ extern "C" * @since version 3.10.0 */ WINPR_ATTR_MALLOC(WINPR_JSON_Delete, 1) + WINPR_ATTR_NODISCARD FREERDP_API WINPR_JSON* freerdp_utils_aad_get_wellknown(wLog* log, const char* base, const char* tenantid); diff --git a/include/freerdp/utils/cliprdr_utils.h b/include/freerdp/utils/cliprdr_utils.h index 0b3295bd2..f38bdfa87 100644 --- a/include/freerdp/utils/cliprdr_utils.h +++ b/include/freerdp/utils/cliprdr_utils.h @@ -22,6 +22,7 @@ #define FREERDP_UTILS_CLIPRDR_H #include +#include #include #include @@ -30,15 +31,20 @@ extern "C" { #endif + WINPR_ATTR_NODISCARD FREERDP_API BOOL cliprdr_read_filedescriptor(wStream* s, FILEDESCRIPTORW* descriptor); + WINPR_ATTR_NODISCARD FREERDP_API BOOL cliprdr_write_filedescriptor(wStream* s, const FILEDESCRIPTORW* descriptor); + WINPR_ATTR_NODISCARD FREERDP_API UINT cliprdr_parse_file_list(const BYTE* format_data, UINT32 format_data_length, FILEDESCRIPTORW** file_descriptor_array, UINT32* file_descriptor_count); + WINPR_ATTR_NODISCARD FREERDP_API UINT cliprdr_serialize_file_list(const FILEDESCRIPTORW* file_descriptor_array, UINT32 file_descriptor_count, BYTE** format_data, UINT32* format_data_length); + WINPR_ATTR_NODISCARD FREERDP_API UINT cliprdr_serialize_file_list_ex(UINT32 flags, const FILEDESCRIPTORW* file_descriptor_array, UINT32 file_descriptor_count, diff --git a/include/freerdp/utils/drdynvc.h b/include/freerdp/utils/drdynvc.h index cc96d95ab..12e9ae1c3 100644 --- a/include/freerdp/utils/drdynvc.h +++ b/include/freerdp/utils/drdynvc.h @@ -30,6 +30,7 @@ extern "C" { #endif + WINPR_ATTR_NODISCARD FREERDP_API const char* drdynvc_get_packet_type(BYTE cmd); #ifdef __cplusplus diff --git a/include/freerdp/utils/encoded_types.h b/include/freerdp/utils/encoded_types.h index d2b35de6c..ffdce8c74 100644 --- a/include/freerdp/utils/encoded_types.h +++ b/include/freerdp/utils/encoded_types.h @@ -62,6 +62,7 @@ extern "C" * * @return \b TRUE for successful reading, \b FALSE otherwise */ + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_read_four_byte_signed_integer(wStream* s, INT32* value); /** Write a 4 byte signed integer to a stream @@ -73,6 +74,7 @@ extern "C" * * @return \b TRUE for successful writing, \b FALSE otherwise */ + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_write_four_byte_signed_integer(wStream* s, INT32 value); /** Read a 4 byte float from a stream and store the decoded value @@ -84,6 +86,7 @@ extern "C" * * @return \b TRUE for successful reading, \b FALSE otherwise */ + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_read_four_byte_float(wStream* s, double* value); /** Read a 4 byte float from a stream and store the decoded value and exponent @@ -96,6 +99,7 @@ extern "C" * * @return \b TRUE for successful reading, \b FALSE otherwise */ + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_read_four_byte_float_exp(wStream* s, double* value, BYTE* exp); /** Write a 4 byte float to a stream @@ -107,6 +111,7 @@ extern "C" * * @return \b TRUE for successful writing, \b FALSE otherwise */ + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_write_four_byte_float(wStream* s, double value); #ifdef __cplusplus diff --git a/include/freerdp/utils/gfx.h b/include/freerdp/utils/gfx.h index 9f25242fd..d478aa484 100644 --- a/include/freerdp/utils/gfx.h +++ b/include/freerdp/utils/gfx.h @@ -36,10 +36,13 @@ extern "C" * @return The string representation of the capabilities * @since version 3.9.0 */ + WINPR_ATTR_NODISCARD FREERDP_API const char* rdpgfx_caps_version_str(UINT32 capsVersion); + WINPR_ATTR_NODISCARD FREERDP_API const char* rdpgfx_get_cmd_id_string(UINT16 cmdId); + WINPR_ATTR_NODISCARD FREERDP_API const char* rdpgfx_get_codec_id_string(UINT16 codecId); #ifdef __cplusplus diff --git a/include/freerdp/utils/helpers.h b/include/freerdp/utils/helpers.h index 52db2aa8d..f0a2bbcff 100644 --- a/include/freerdp/utils/helpers.h +++ b/include/freerdp/utils/helpers.h @@ -44,6 +44,7 @@ extern "C" * @since version 3.9.0 */ WINPR_ATTR_MALLOC(free, 1) + WINPR_ATTR_NODISCARD FREERDP_API char* freerdp_GetConfigFilePath(BOOL system, const char* filename); /** @brief return a parsed JSON for a given config file name. @@ -56,6 +57,7 @@ extern "C" * @since version 3.16.0 */ WINPR_ATTR_MALLOC(WINPR_JSON_Delete, 1) + WINPR_ATTR_NODISCARD FREERDP_API WINPR_JSON* freerdp_GetJSONConfigFile(BOOL system, const char* filename); #ifdef __cplusplus diff --git a/include/freerdp/utils/http.h b/include/freerdp/utils/http.h index cc2f02750..a3a263e9a 100644 --- a/include/freerdp/utils/http.h +++ b/include/freerdp/utils/http.h @@ -71,10 +71,13 @@ extern "C" { #endif + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_http_request(const char* url, const char* body, long* status_code, BYTE** response, size_t* response_length); + WINPR_ATTR_NODISCARD FREERDP_API const char* freerdp_http_status_string(long status); + WINPR_ATTR_NODISCARD FREERDP_API const char* freerdp_http_status_string_format(long status, char* buffer, size_t size); diff --git a/include/freerdp/utils/passphrase.h b/include/freerdp/utils/passphrase.h index 861bc475e..48d79509c 100644 --- a/include/freerdp/utils/passphrase.h +++ b/include/freerdp/utils/passphrase.h @@ -43,6 +43,7 @@ extern "C" * * @return The character read or \ref EOF in case of any failures */ + WINPR_ATTR_NODISCARD FREERDP_API int freerdp_interruptible_getc(rdpContext* context, FILE* stream); /** @brief read a line from \ref stream with (optinal) default value that can be manipulated. @@ -58,6 +59,7 @@ extern "C" * * @return \b -1 in case of failure, otherwise \ref strlen of the result */ + WINPR_ATTR_NODISCARD FREERDP_API SSIZE_T freerdp_interruptible_get_line(rdpContext* context, char** lineptr, size_t* size, FILE* stream); @@ -71,6 +73,7 @@ extern "C" * * @return A pointer to \ref buf containing the password or \ref NULL in case of an error. */ + WINPR_ATTR_NODISCARD FREERDP_API const char* freerdp_passphrase_read(rdpContext* context, const char* prompt, char* buf, size_t bufsiz, int from_stdin); diff --git a/include/freerdp/utils/pcap.h b/include/freerdp/utils/pcap.h index 5178f3802..a45be4b87 100644 --- a/include/freerdp/utils/pcap.h +++ b/include/freerdp/utils/pcap.h @@ -63,13 +63,21 @@ extern "C" typedef struct rdp_pcap rdpPcap; - FREERDP_API rdpPcap* pcap_open(const char* name, BOOL write); FREERDP_API void pcap_close(rdpPcap* pcap); + WINPR_ATTR_MALLOC(pcap_close, 1) + WINPR_ATTR_NODISCARD + FREERDP_API rdpPcap* pcap_open(const char* name, BOOL write); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL pcap_add_record(rdpPcap* pcap, const void* data, size_t length); + WINPR_ATTR_NODISCARD FREERDP_API BOOL pcap_has_next_record(const rdpPcap* pcap); + WINPR_ATTR_NODISCARD FREERDP_API BOOL pcap_get_next_record(rdpPcap* pcap, pcap_record* record); + WINPR_ATTR_NODISCARD FREERDP_API BOOL pcap_get_next_record_header(rdpPcap* pcap, pcap_record* record); + WINPR_ATTR_NODISCARD FREERDP_API BOOL pcap_get_next_record_content(rdpPcap* pcap, pcap_record* record); FREERDP_API void pcap_flush(rdpPcap* pcap); diff --git a/include/freerdp/utils/pod_arrays.h b/include/freerdp/utils/pod_arrays.h index b70889ef1..cf4122667 100644 --- a/include/freerdp/utils/pod_arrays.h +++ b/include/freerdp/utils/pod_arrays.h @@ -42,24 +42,28 @@ extern "C" a->nvalues = 0; \ } \ \ + WINPR_ATTR_NODISCARD \ static inline size_t array_##TLOWER##_size(const Array##T* a) \ { \ WINPR_ASSERT(a); \ return a->nvalues; \ } \ \ + WINPR_ATTR_NODISCARD \ static inline T* array_##TLOWER##_data(const Array##T* a) \ { \ WINPR_ASSERT(a); \ return a->values; \ } \ \ + WINPR_ATTR_NODISCARD \ static inline const T* array_##TLOWER##_cdata(const Array##T* a) \ { \ WINPR_ASSERT(a); \ return (const T*)a->values; \ } \ \ + WINPR_ATTR_NODISCARD \ static inline T array_##TLOWER##_get(const Array##T* a, size_t idx) \ { \ WINPR_ASSERT(a); \ @@ -74,6 +78,7 @@ extern "C" a->values[idx] = v; \ } \ \ + WINPR_ATTR_NODISCARD \ static inline BOOL array_##TLOWER##_append(Array##T* a, T v) \ { \ WINPR_ASSERT(a); \ @@ -87,6 +92,7 @@ extern "C" return TRUE; \ } \ \ + WINPR_ATTR_NODISCARD \ static inline BOOL array_##TLOWER##_contains(const Array##T* a, T v) \ { \ WINPR_ASSERT(a); \ @@ -100,6 +106,7 @@ extern "C" return FALSE; \ } \ \ + WINPR_ATTR_NODISCARD \ static inline BOOL array_##TLOWER##_foreach(Array##T* a, Array##T##Cb cb, void* data) \ { \ WINPR_ASSERT(a); \ diff --git a/include/freerdp/utils/profiler.h b/include/freerdp/utils/profiler.h index 29b9e32f0..4bbcc63f0 100644 --- a/include/freerdp/utils/profiler.h +++ b/include/freerdp/utils/profiler.h @@ -30,9 +30,12 @@ extern "C" typedef struct S_PROFILER PROFILER; - FREERDP_API PROFILER* profiler_create(const char* name); FREERDP_API void profiler_free(PROFILER* profiler); + WINPR_ATTR_MALLOC(profiler_free, 1) + WINPR_ATTR_NODISCARD + FREERDP_API PROFILER* profiler_create(const char* name); + FREERDP_API void profiler_enter(PROFILER* profiler); FREERDP_API void profiler_exit(PROFILER* profiler); diff --git a/include/freerdp/utils/proxy_utils.h b/include/freerdp/utils/proxy_utils.h index 57b0ba540..bfb032e07 100644 --- a/include/freerdp/utils/proxy_utils.h +++ b/include/freerdp/utils/proxy_utils.h @@ -36,6 +36,7 @@ extern "C" * * @return \b TRUE if parsed successfully */ + WINPR_ATTR_NODISCARD FREERDP_API BOOL proxy_parse_uri(rdpSettings* settings, const char* uri_in); #ifdef __cplusplus diff --git a/include/freerdp/utils/ringbuffer.h b/include/freerdp/utils/ringbuffer.h index 3de191c81..970e355c6 100644 --- a/include/freerdp/utils/ringbuffer.h +++ b/include/freerdp/utils/ringbuffer.h @@ -52,6 +52,7 @@ extern "C" * @param initialSize the initial capacity of the ringBuffer * @return if the initialisation was successful */ + WINPR_ATTR_NODISCARD FREERDP_API BOOL ringbuffer_init(RingBuffer* rb, size_t initialSize); /** @@ -67,6 +68,7 @@ extern "C" * @param ringbuffer A pointer to the ringbuffer * @return the number of bytes stored in that ringbuffer */ + WINPR_ATTR_NODISCARD FREERDP_API size_t ringbuffer_used(const RingBuffer* ringbuffer); /** returns the capacity of the ring buffer @@ -74,6 +76,7 @@ extern "C" * @param ringbuffer A pointer to the ringbuffer * @return the capacity of this ring buffer */ + WINPR_ATTR_NODISCARD FREERDP_API size_t ringbuffer_capacity(const RingBuffer* ringbuffer); /** writes some bytes in the ringbuffer, if the data doesn't fit, the ringbuffer @@ -84,6 +87,7 @@ extern "C" * @param sz the size of the data to add * @return if the operation was successful, it could fail in case of OOM during realloc() */ + WINPR_ATTR_NODISCARD FREERDP_API BOOL ringbuffer_write(RingBuffer* rb, const BYTE* ptr, size_t sz); /** ensures that we have sz bytes available at the write head, and return a pointer @@ -93,6 +97,7 @@ extern "C" * @param sz the size to ensure * @return a pointer on the write head, or NULL in case of OOM */ + WINPR_ATTR_NODISCARD FREERDP_API BYTE* ringbuffer_ensure_linear_write(RingBuffer* rb, size_t sz); /** move ahead the write head in case some byte were written directly by using @@ -104,6 +109,7 @@ extern "C" * @param sz the number of bytes that have been written * @return if the operation was successful, FALSE is sz is too big */ + WINPR_ATTR_NODISCARD FREERDP_API BOOL ringbuffer_commit_written_bytes(RingBuffer* rb, size_t sz); /** peeks the buffer chunks for sz bytes and returns how many chunks are filled. @@ -114,6 +120,7 @@ extern "C" * @param sz the requested size * @return the number of chunks used for reading sz bytes */ + WINPR_ATTR_NODISCARD FREERDP_API int ringbuffer_peek(const RingBuffer* rb, DataChunk chunks[2], size_t sz); /** move ahead the read head in case some byte were read using ringbuffer_peek() diff --git a/include/freerdp/utils/signal.h b/include/freerdp/utils/signal.h index 8a74b81f5..ccf67d194 100644 --- a/include/freerdp/utils/signal.h +++ b/include/freerdp/utils/signal.h @@ -30,6 +30,7 @@ extern "C" typedef void (*freerdp_signal_handler_t)(int signum, const char* signame, void* context); + WINPR_ATTR_NODISCARD FREERDP_API int freerdp_handle_signals(void); /** \brief registers a cleanup handler for non fatal signals. diff --git a/include/freerdp/utils/smartcard_call.h b/include/freerdp/utils/smartcard_call.h index 61b41d45a..d8d2a0597 100644 --- a/include/freerdp/utils/smartcard_call.h +++ b/include/freerdp/utils/smartcard_call.h @@ -41,20 +41,29 @@ extern "C" FREERDP_API void smartcard_call_context_free(scard_call_context* ctx); WINPR_ATTR_MALLOC(smartcard_call_context_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API scard_call_context* smartcard_call_context_new(const rdpSettings* settings); FREERDP_API BOOL smartcard_call_context_signal_stop(scard_call_context* ctx, BOOL reset); + WINPR_ATTR_NODISCARD FREERDP_API BOOL smartcard_call_context_add(scard_call_context* ctx, const char* name); + FREERDP_API BOOL smartcard_call_cancel_context(scard_call_context* ctx, SCARDCONTEXT context); + FREERDP_API BOOL smartcard_call_cancel_all_context(scard_call_context* ctx); + FREERDP_API BOOL smartcard_call_release_context(scard_call_context* ctx, SCARDCONTEXT context); + WINPR_ATTR_NODISCARD FREERDP_API BOOL smartcard_call_is_configured(scard_call_context* ctx); + WINPR_ATTR_NODISCARD FREERDP_API BOOL smarcard_call_set_callbacks(scard_call_context* ctx, void* userdata, void* (*fn_new)(void*, SCARDCONTEXT), void (*fn_free)(void*)); + WINPR_ATTR_NODISCARD FREERDP_API void* smartcard_call_get_context(scard_call_context* ctx, SCARDCONTEXT hContext); + WINPR_ATTR_NODISCARD FREERDP_API LONG smartcard_irp_device_control_call(scard_call_context* context, wStream* out, NTSTATUS* pIoStatus, SMARTCARD_OPERATION* operation); diff --git a/include/freerdp/utils/smartcard_operations.h b/include/freerdp/utils/smartcard_operations.h index 22a43ac2e..90c71baf7 100644 --- a/include/freerdp/utils/smartcard_operations.h +++ b/include/freerdp/utils/smartcard_operations.h @@ -86,9 +86,11 @@ extern "C" UINT32 outputBufferLength; /** @since version 3.13.0 */ } SMARTCARD_OPERATION; + WINPR_ATTR_NODISCARD FREERDP_API LONG smartcard_irp_device_control_decode(wStream* s, UINT32 CompletionId, UINT32 FileId, SMARTCARD_OPERATION* operation); + FREERDP_API void smartcard_operation_free(SMARTCARD_OPERATION* op, BOOL allocated); #ifdef __cplusplus diff --git a/include/freerdp/utils/smartcard_pack.h b/include/freerdp/utils/smartcard_pack.h index 42a4f02e6..cb413002c 100644 --- a/include/freerdp/utils/smartcard_pack.h +++ b/include/freerdp/utils/smartcard_pack.h @@ -42,140 +42,192 @@ extern "C" FREERDP_API LONG smartcard_pack_write_size_align(wStream* s, size_t size, UINT32 alignment); FREERDP_API LONG smartcard_unpack_read_size_align(wStream* s, size_t size, UINT32 alignment); + WINPR_ATTR_NODISCARD FREERDP_API SCARDCONTEXT smartcard_scard_context_native_from_redir(REDIR_SCARDCONTEXT* context); FREERDP_API void smartcard_scard_context_native_to_redir(REDIR_SCARDCONTEXT* context, SCARDCONTEXT hContext); + WINPR_ATTR_NODISCARD FREERDP_API SCARDHANDLE smartcard_scard_handle_native_from_redir(REDIR_SCARDHANDLE* handle); FREERDP_API void smartcard_scard_handle_native_to_redir(REDIR_SCARDHANDLE* handle, SCARDHANDLE hCard); + WINPR_ATTR_NODISCARD FREERDP_API LONG smartcard_unpack_common_type_header(wStream* s); FREERDP_API void smartcard_pack_common_type_header(wStream* s); + WINPR_ATTR_NODISCARD FREERDP_API LONG smartcard_unpack_private_type_header(wStream* s); FREERDP_API void smartcard_pack_private_type_header(wStream* s, UINT32 objectBufferLength); + WINPR_ATTR_NODISCARD FREERDP_API LONG smartcard_unpack_establish_context_call(wStream* s, EstablishContext_Call* call); + WINPR_ATTR_NODISCARD FREERDP_API LONG smartcard_pack_establish_context_return(wStream* s, const EstablishContext_Return* ret); + WINPR_ATTR_NODISCARD FREERDP_API LONG smartcard_unpack_context_call(wStream* s, Context_Call* call, const char* name); FREERDP_API void smartcard_trace_long_return(const Long_Return* ret, const char* name); + WINPR_ATTR_NODISCARD FREERDP_API LONG smartcard_unpack_list_reader_groups_call(wStream* s, ListReaderGroups_Call* call, BOOL unicode); + WINPR_ATTR_NODISCARD FREERDP_API LONG smartcard_pack_list_reader_groups_return(wStream* s, const ListReaderGroups_Return* ret, BOOL unicode); + WINPR_ATTR_NODISCARD FREERDP_API LONG smartcard_unpack_list_readers_call(wStream* s, ListReaders_Call* call, BOOL unicode); + WINPR_ATTR_NODISCARD FREERDP_API LONG smartcard_pack_list_readers_return(wStream* s, const ListReaders_Return* ret, BOOL unicode); + WINPR_ATTR_NODISCARD FREERDP_API LONG smartcard_unpack_context_and_two_strings_a_call(wStream* s, ContextAndTwoStringA_Call* call); + WINPR_ATTR_NODISCARD FREERDP_API LONG smartcard_unpack_context_and_two_strings_w_call(wStream* s, ContextAndTwoStringW_Call* call); + WINPR_ATTR_NODISCARD FREERDP_API LONG smartcard_unpack_context_and_string_a_call(wStream* s, ContextAndStringA_Call* call); + WINPR_ATTR_NODISCARD FREERDP_API LONG smartcard_unpack_context_and_string_w_call(wStream* s, ContextAndStringW_Call* call); + WINPR_ATTR_NODISCARD FREERDP_API LONG smartcard_unpack_locate_cards_a_call(wStream* s, LocateCardsA_Call* call); + WINPR_ATTR_NODISCARD FREERDP_API LONG smartcard_pack_locate_cards_return(wStream* s, const LocateCards_Return* ret); + WINPR_ATTR_NODISCARD FREERDP_API LONG smartcard_unpack_locate_cards_w_call(wStream* s, LocateCardsW_Call* call); + WINPR_ATTR_NODISCARD FREERDP_API LONG smartcard_pack_locate_cards_w_return(wStream* s, const LocateCardsW_Call* ret); + WINPR_ATTR_NODISCARD FREERDP_API LONG smartcard_unpack_connect_a_call(wStream* s, ConnectA_Call* call); + WINPR_ATTR_NODISCARD FREERDP_API LONG smartcard_unpack_connect_w_call(wStream* s, ConnectW_Call* call); + WINPR_ATTR_NODISCARD FREERDP_API LONG smartcard_pack_connect_return(wStream* s, const Connect_Return* ret); + WINPR_ATTR_NODISCARD FREERDP_API LONG smartcard_unpack_reconnect_call(wStream* s, Reconnect_Call* call); + WINPR_ATTR_NODISCARD FREERDP_API LONG smartcard_pack_reconnect_return(wStream* s, const Reconnect_Return* ret); + WINPR_ATTR_NODISCARD FREERDP_API LONG smartcard_unpack_hcard_and_disposition_call(wStream* s, HCardAndDisposition_Call* call, const char* name); + WINPR_ATTR_NODISCARD FREERDP_API LONG smartcard_unpack_get_status_change_a_call(wStream* s, GetStatusChangeA_Call* call); + WINPR_ATTR_NODISCARD FREERDP_API LONG smartcard_unpack_get_status_change_w_call(wStream* s, GetStatusChangeW_Call* call); + WINPR_ATTR_NODISCARD FREERDP_API LONG smartcard_pack_get_status_change_return(wStream* s, const GetStatusChange_Return* ret, BOOL unicode); + WINPR_ATTR_NODISCARD FREERDP_API LONG smartcard_unpack_state_call(wStream* s, State_Call* call); + WINPR_ATTR_NODISCARD FREERDP_API LONG smartcard_pack_state_return(wStream* s, const State_Return* ret); + WINPR_ATTR_NODISCARD FREERDP_API LONG smartcard_unpack_status_call(wStream* s, Status_Call* call, BOOL unicode); + WINPR_ATTR_NODISCARD FREERDP_API LONG smartcard_pack_status_return(wStream* s, const Status_Return* ret, BOOL unicode); + WINPR_ATTR_NODISCARD FREERDP_API LONG smartcard_unpack_get_attrib_call(wStream* s, GetAttrib_Call* call); + WINPR_ATTR_NODISCARD FREERDP_API LONG smartcard_pack_get_attrib_return(wStream* s, const GetAttrib_Return* ret, DWORD dwAttrId, DWORD cbAttrCallLen); + WINPR_ATTR_NODISCARD FREERDP_API LONG smartcard_unpack_set_attrib_call(wStream* s, SetAttrib_Call* call); + WINPR_ATTR_NODISCARD FREERDP_API LONG smartcard_unpack_control_call(wStream* s, Control_Call* call); + WINPR_ATTR_NODISCARD FREERDP_API LONG smartcard_pack_control_return(wStream* s, const Control_Return* ret); + WINPR_ATTR_NODISCARD FREERDP_API LONG smartcard_unpack_transmit_call(wStream* s, Transmit_Call* call); + WINPR_ATTR_NODISCARD FREERDP_API LONG smartcard_pack_transmit_return(wStream* s, const Transmit_Return* ret); + WINPR_ATTR_NODISCARD FREERDP_API LONG smartcard_unpack_locate_cards_by_atr_a_call(wStream* s, LocateCardsByATRA_Call* call); + WINPR_ATTR_NODISCARD FREERDP_API LONG smartcard_unpack_locate_cards_by_atr_w_call(wStream* s, LocateCardsByATRW_Call* call); + WINPR_ATTR_NODISCARD FREERDP_API LONG smartcard_unpack_read_cache_a_call(wStream* s, ReadCacheA_Call* call); + WINPR_ATTR_NODISCARD FREERDP_API LONG smartcard_unpack_read_cache_w_call(wStream* s, ReadCacheW_Call* call); + WINPR_ATTR_NODISCARD FREERDP_API LONG smartcard_pack_read_cache_return(wStream* s, const ReadCache_Return* ret); + WINPR_ATTR_NODISCARD FREERDP_API LONG smartcard_unpack_write_cache_a_call(wStream* s, WriteCacheA_Call* call); + WINPR_ATTR_NODISCARD FREERDP_API LONG smartcard_unpack_write_cache_w_call(wStream* s, WriteCacheW_Call* call); + WINPR_ATTR_NODISCARD FREERDP_API LONG smartcard_unpack_get_transmit_count_call(wStream* s, GetTransmitCount_Call* call); + WINPR_ATTR_NODISCARD FREERDP_API LONG smartcard_pack_get_transmit_count_return(wStream* s, const GetTransmitCount_Return* call); + WINPR_ATTR_NODISCARD FREERDP_API LONG smartcard_unpack_get_reader_icon_call(wStream* s, GetReaderIcon_Call* call); + WINPR_ATTR_NODISCARD FREERDP_API LONG smartcard_pack_get_reader_icon_return(wStream* s, const GetReaderIcon_Return* ret); + WINPR_ATTR_NODISCARD FREERDP_API LONG smartcard_unpack_get_device_type_id_call(wStream* s, GetDeviceTypeId_Call* call); + WINPR_ATTR_NODISCARD FREERDP_API LONG smartcard_pack_device_type_id_return(wStream* s, const GetDeviceTypeId_Return* ret); diff --git a/include/freerdp/utils/smartcardlogon.h b/include/freerdp/utils/smartcardlogon.h index 66e1097b3..17912175e 100644 --- a/include/freerdp/utils/smartcardlogon.h +++ b/include/freerdp/utils/smartcardlogon.h @@ -48,12 +48,16 @@ extern "C" SmartcardKeyInfo* key_info; } SmartcardCertInfo; + WINPR_ATTR_NODISCARD FREERDP_API BOOL smartcard_enumerateCerts(const rdpSettings* settings, SmartcardCertInfo*** scCerts, size_t* retCount, BOOL gateway); + WINPR_ATTR_NODISCARD FREERDP_API BOOL smartcard_getCert(const rdpContext* context, SmartcardCertInfo** cert, BOOL gateway); + FREERDP_API void smartcardCertInfo_Free(SmartcardCertInfo* pscCert); + FREERDP_API void smartcardCertList_Free(SmartcardCertInfo** pscCert, size_t count); #ifdef __cplusplus diff --git a/include/freerdp/utils/stopwatch.h b/include/freerdp/utils/stopwatch.h index c26725063..3fd865706 100644 --- a/include/freerdp/utils/stopwatch.h +++ b/include/freerdp/utils/stopwatch.h @@ -36,13 +36,17 @@ extern "C" UINT32 count; } STOPWATCH; - FREERDP_API STOPWATCH* stopwatch_create(void); FREERDP_API void stopwatch_free(STOPWATCH* stopwatch); + WINPR_ATTR_MALLOC(stopwatch_free, 1) + WINPR_ATTR_NODISCARD + FREERDP_API STOPWATCH* stopwatch_create(void); + FREERDP_API void stopwatch_start(STOPWATCH* stopwatch); FREERDP_API void stopwatch_stop(STOPWATCH* stopwatch); FREERDP_API void stopwatch_reset(STOPWATCH* stopwatch); + WINPR_ATTR_NODISCARD FREERDP_API double stopwatch_get_elapsed_time_in_seconds(STOPWATCH* stopwatch); FREERDP_API void stopwatch_get_elapsed_time_in_useconds(STOPWATCH* stopwatch, UINT32* sec, UINT32* usec); diff --git a/include/freerdp/utils/string.h b/include/freerdp/utils/string.h index 7ca4551ed..c6a252b51 100644 --- a/include/freerdp/utils/string.h +++ b/include/freerdp/utils/string.h @@ -30,8 +30,10 @@ extern "C" { #endif + WINPR_ATTR_NODISCARD FREERDP_API const char* rdp_redirection_flags_to_string(UINT32 flags, char* buffer, size_t size); + WINPR_ATTR_NODISCARD FREERDP_API const char* rdp_cluster_info_flags_to_string(UINT32 flags, char* buffer, size_t size); @@ -45,6 +47,7 @@ extern "C" * * @since version 3.9.0 */ + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_extract_key_value(const char* str, UINT32* pkey, UINT32* pvalue); /** @brief Convert \ref FreeRDP_DesktopRotationFlags to string From 3f163cee9cb19d21232e7dd86eaa19797d6bb1cf Mon Sep 17 00:00:00 2001 From: akallabeth Date: Mon, 26 Jan 2026 12:31:30 +0100 Subject: [PATCH 02/10] [warnings] fix unused result warnings --- channels/smartcard/client/smartcard_main.c | 3 ++- libfreerdp/core/freerdp.c | 6 ++++-- libfreerdp/core/surface.c | 3 ++- server/Sample/sfreerdp.c | 3 ++- 4 files changed, 10 insertions(+), 5 deletions(-) diff --git a/channels/smartcard/client/smartcard_main.c b/channels/smartcard/client/smartcard_main.c index fb9f4928d..3acad1286 100644 --- a/channels/smartcard/client/smartcard_main.c +++ b/channels/smartcard/client/smartcard_main.c @@ -713,7 +713,8 @@ FREERDP_ENTRY_POINT(UINT VCAPITYPE DeviceServiceEntry(PDEVICE_SERVICE_ENTRY_POIN if (pEntryPoints->device->Name) { - smartcard_call_context_add(smartcard->callctx, pEntryPoints->device->Name); + if (!smartcard_call_context_add(smartcard->callctx, pEntryPoints->device->Name)) + goto fail; } sSmartcard = smartcard; diff --git a/libfreerdp/core/freerdp.c b/libfreerdp/core/freerdp.c index 02d8d33aa..c1a90f991 100644 --- a/libfreerdp/core/freerdp.c +++ b/libfreerdp/core/freerdp.c @@ -257,14 +257,16 @@ BOOL freerdp_connect(freerdp* instance) while (pcap_has_next_record(update->pcap_rfx) && status) { - pcap_get_next_record_header(update->pcap_rfx, &record); + if (!pcap_get_next_record_header(update->pcap_rfx, &record)) + break; s = transport_take_from_pool(rdp->transport, record.length); if (!s) break; record.data = Stream_Buffer(s); - pcap_get_next_record_content(update->pcap_rfx, &record); + if (!pcap_get_next_record_content(update->pcap_rfx, &record)) + break; Stream_SetLength(s, record.length); Stream_SetPosition(s, 0); diff --git a/libfreerdp/core/surface.c b/libfreerdp/core/surface.c index 6447815a5..f8354f983 100644 --- a/libfreerdp/core/surface.c +++ b/libfreerdp/core/surface.c @@ -234,7 +234,8 @@ int update_recv_surfcmds(rdpUpdate* update, wStream* s) { const size_t size = Stream_GetPosition(s) - start; /* TODO: treat return values */ - pcap_add_record(up->pcap_rfx, mark, size); + if (!pcap_add_record(up->pcap_rfx, mark, size)) + return -1; pcap_flush(up->pcap_rfx); } } diff --git a/server/Sample/sfreerdp.c b/server/Sample/sfreerdp.c index 07193f9d7..598588bf6 100644 --- a/server/Sample/sfreerdp.c +++ b/server/Sample/sfreerdp.c @@ -565,7 +565,8 @@ static BOOL tf_peer_dump_rfx(freerdp_peer* client) break; record.data = Stream_Buffer(s); - pcap_get_next_record_content(pcap_rfx, &record); + if (!pcap_get_next_record_content(pcap_rfx, &record)) + break; Stream_SetPosition(s, Stream_Capacity(s)); if (info->test_dump_rfx_realtime && From 7bbf3be7e66bfcf0a78a44443fe3252a604c8f10 Mon Sep 17 00:00:00 2001 From: akallabeth Date: Mon, 26 Jan 2026 12:33:40 +0100 Subject: [PATCH 03/10] [streamdump] mark WINPR_ATTR_NODISCARD --- include/freerdp/streamdump.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/include/freerdp/streamdump.h b/include/freerdp/streamdump.h index 14bd5fde3..db78c56ec 100644 --- a/include/freerdp/streamdump.h +++ b/include/freerdp/streamdump.h @@ -40,17 +40,21 @@ extern "C" STREAM_MSG_SRV_TX = 2 } StreamDumpDirection; + WINPR_ATTR_NODISCARD FREERDP_API SSIZE_T stream_dump_append(const rdpContext* context, UINT32 flags, wStream* s, size_t* offset); + WINPR_ATTR_NODISCARD FREERDP_API SSIZE_T stream_dump_get(const rdpContext* context, UINT32* flags, wStream* s, size_t* offset, UINT64* pts); + WINPR_ATTR_NODISCARD FREERDP_API BOOL stream_dump_register_handlers(rdpContext* context, CONNECTION_STATE state, BOOL isServer); FREERDP_API void stream_dump_free(rdpStreamDumpContext* dump); WINPR_ATTR_MALLOC(stream_dump_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API rdpStreamDumpContext* stream_dump_new(void); #ifdef __cplusplus From 538620e1bbfd2e1d6cedda6c69570a9b5362acad Mon Sep 17 00:00:00 2001 From: akallabeth Date: Mon, 26 Jan 2026 13:06:29 +0100 Subject: [PATCH 04/10] [channels] mark all WINPR_ATTR_MALLOC also nodiscard --- channels/printer/client/printer_main.c | 2 ++ channels/rdpear/common/rdpear-common/ndr.h | 3 +++ channels/rdpear/common/rdpear-common/rdpear_common.h | 1 + channels/rdpecam/client/camera.h | 1 + channels/urbdrc/common/msusb.h | 2 ++ 5 files changed, 9 insertions(+) diff --git a/channels/printer/client/printer_main.c b/channels/printer/client/printer_main.c index 2240e594c..40e78dd6a 100644 --- a/channels/printer/client/printer_main.c +++ b/channels/printer/client/printer_main.c @@ -79,6 +79,7 @@ static const char* filemap[] = { "PortDosName", "PnPName", "DriverName", "CachedPrinterConfigData" }; WINPR_ATTR_MALLOC(free, 1) +WINPR_ATTR_NODISCARD static char* get_printer_hash(const WCHAR* name, size_t length) { BYTE hash[WINPR_SHA256_DIGEST_LENGTH] = { 0 }; @@ -90,6 +91,7 @@ static char* get_printer_hash(const WCHAR* name, size_t length) } WINPR_ATTR_MALLOC(free, 1) +WINPR_ATTR_NODISCARD static char* get_printer_config_path(const rdpSettings* settings, const WCHAR* name, size_t length) { char* config = NULL; diff --git a/channels/rdpear/common/rdpear-common/ndr.h b/channels/rdpear/common/rdpear-common/ndr.h index cec5121c0..f1ab443e7 100644 --- a/channels/rdpear/common/rdpear-common/ndr.h +++ b/channels/rdpear/common/rdpear-common/ndr.h @@ -130,14 +130,17 @@ extern "C" } WINPR_ATTR_MALLOC(ndr_context_free, 1) + WINPR_ATTR_NODISCARD NdrContext* ndr_context_new(BOOL bigEndianDrep, BYTE version); void ndr_context_reset(NdrContext* context); WINPR_ATTR_MALLOC(ndr_context_free, 1) + WINPR_ATTR_NODISCARD NdrContext* ndr_context_copy(const NdrContext* src); WINPR_ATTR_MALLOC(ndr_context_free, 1) + WINPR_ATTR_NODISCARD NdrContext* ndr_read_header(wStream* s); BOOL ndr_write_header(NdrContext* context, wStream* s); diff --git a/channels/rdpear/common/rdpear-common/rdpear_common.h b/channels/rdpear/common/rdpear-common/rdpear_common.h index e1b06b178..e3a6a102a 100644 --- a/channels/rdpear/common/rdpear-common/rdpear_common.h +++ b/channels/rdpear/common/rdpear-common/rdpear_common.h @@ -81,6 +81,7 @@ typedef enum FREERDP_LOCAL RdpEarPackageType rdpear_packageType_from_name(const WinPrAsn1_OctetString* package); WINPR_ATTR_MALLOC(Stream_Free, 1) +WINPR_ATTR_NODISCARD FREERDP_LOCAL wStream* rdpear_encodePayload(BOOL isKerb, wStream* payload); #define RDPEAR_COMMON_MESSAGE_DECL(V) \ diff --git a/channels/rdpecam/client/camera.h b/channels/rdpecam/client/camera.h index f0f4f9d9a..9ec4c0555 100644 --- a/channels/rdpecam/client/camera.h +++ b/channels/rdpecam/client/camera.h @@ -265,6 +265,7 @@ UINT ecam_channel_write(CameraPlugin* ecam, GENERIC_CHANNEL_CALLBACK* hchannel, void ecam_dev_destroy(CameraDevice* dev); WINPR_ATTR_MALLOC(ecam_dev_destroy, 1) +WINPR_ATTR_NODISCARD CameraDevice* ecam_dev_create(CameraPlugin* ecam, const char* deviceId, const char* deviceName); /* video encoding interface */ diff --git a/channels/urbdrc/common/msusb.h b/channels/urbdrc/common/msusb.h index 4c426130f..8bc60af84 100644 --- a/channels/urbdrc/common/msusb.h +++ b/channels/urbdrc/common/msusb.h @@ -85,9 +85,11 @@ extern "C" FREERDP_API void msusb_msconfig_free(MSUSB_CONFIG_DESCRIPTOR* MsConfig); WINPR_ATTR_MALLOC(msusb_msconfig_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API MSUSB_CONFIG_DESCRIPTOR* msusb_msconfig_new(void); WINPR_ATTR_MALLOC(msusb_msconfig_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API MSUSB_CONFIG_DESCRIPTOR* msusb_msconfig_read(wStream* s, UINT32 NumInterfaces); FREERDP_API BOOL msusb_msconfig_write(const MSUSB_CONFIG_DESCRIPTOR* MsConfg, wStream* out); FREERDP_API void msusb_msconfig_dump(const MSUSB_CONFIG_DESCRIPTOR* MsConfg); From 495a82c463efc6e7de4cb6c0a3296498ca0f7b46 Mon Sep 17 00:00:00 2001 From: akallabeth Date: Mon, 26 Jan 2026 13:07:08 +0100 Subject: [PATCH 05/10] [client] mark all WINPR_ATTR_MALLOC also nodiscard --- client/X11/xf_cliprdr.h | 1 + client/X11/xf_disp.h | 1 + client/X11/xf_floatbar.h | 1 + client/X11/xf_video.h | 1 + client/common/client.c | 1 + client/common/client_cliprdr_file.c | 1 + client/common/sso_mib_tokens.h | 1 + 7 files changed, 7 insertions(+) diff --git a/client/X11/xf_cliprdr.h b/client/X11/xf_cliprdr.h index 33d75c822..b57779132 100644 --- a/client/X11/xf_cliprdr.h +++ b/client/X11/xf_cliprdr.h @@ -28,6 +28,7 @@ void xf_clipboard_free(xfClipboard* clipboard); WINPR_ATTR_MALLOC(xf_clipboard_free, 1) +WINPR_ATTR_NODISCARD xfClipboard* xf_clipboard_new(xfContext* xfc, BOOL relieveFilenameRestriction); void xf_cliprdr_init(xfContext* xfc, CliprdrClientContext* cliprdr); diff --git a/client/X11/xf_disp.h b/client/X11/xf_disp.h index c3c87926a..8c971596c 100644 --- a/client/X11/xf_disp.h +++ b/client/X11/xf_disp.h @@ -31,6 +31,7 @@ FREERDP_API BOOL xf_disp_uninit(xfDispContext* xfDisp, DispClientContext* disp); void xf_disp_free(xfDispContext* disp); WINPR_ATTR_MALLOC(xf_disp_free, 1) +WINPR_ATTR_NODISCARD xfDispContext* xf_disp_new(xfContext* xfc); BOOL xf_disp_handle_xevent(xfContext* xfc, const XEvent* event); diff --git a/client/X11/xf_floatbar.h b/client/X11/xf_floatbar.h index 2208eb2f0..1e15ae17f 100644 --- a/client/X11/xf_floatbar.h +++ b/client/X11/xf_floatbar.h @@ -25,6 +25,7 @@ typedef struct xf_floatbar xfFloatbar; void xf_floatbar_free(xfFloatbar* floatbar); WINPR_ATTR_MALLOC(xf_floatbar_free, 1) +WINPR_ATTR_NODISCARD xfFloatbar* xf_floatbar_new(xfContext* xfc, Window window, const char* title, DWORD flags); BOOL xf_floatbar_is_window(xfFloatbar* floatbar, Window window); diff --git a/client/X11/xf_video.h b/client/X11/xf_video.h index 385b4eae7..d14e7d42a 100644 --- a/client/X11/xf_video.h +++ b/client/X11/xf_video.h @@ -30,6 +30,7 @@ void xf_video_control_uninit(xfContext* xfc, VideoClientContext* video); void xf_video_free(xfVideoContext* context); WINPR_ATTR_MALLOC(xf_video_free, 1) +WINPR_ATTR_NODISCARD xfVideoContext* xf_video_new(xfContext* xfc); #endif /* CLIENT_X11_XF_VIDEO_H_ */ diff --git a/client/common/client.c b/client/common/client.c index 07b3324b8..487554dd9 100644 --- a/client/common/client.c +++ b/client/common/client.c @@ -2389,6 +2389,7 @@ BOOL freerdp_client_use_relative_mouse_events(rdpClientContext* ccontext) #if defined(WITH_AAD) WINPR_ATTR_MALLOC(free, 1) +WINPR_ATTR_NODISCARD static char* get_redirect_uri(const rdpSettings* settings) { char* redirect_uri = NULL; diff --git a/client/common/client_cliprdr_file.c b/client/common/client_cliprdr_file.c index 677d4e6f7..841ed1c77 100644 --- a/client/common/client_cliprdr_file.c +++ b/client/common/client_cliprdr_file.c @@ -214,6 +214,7 @@ static void fuse_file_free(void* data) WINPR_ATTR_FORMAT_ARG(1, 2) WINPR_ATTR_MALLOC(fuse_file_free, 1) +WINPR_ATTR_NODISCARD static CliprdrFuseFile* fuse_file_new(WINPR_FORMAT_ARG const char* fmt, ...) { CliprdrFuseFile* file = calloc(1, sizeof(CliprdrFuseFile)); diff --git a/client/common/sso_mib_tokens.h b/client/common/sso_mib_tokens.h index 196dfd38d..28fca4810 100644 --- a/client/common/sso_mib_tokens.h +++ b/client/common/sso_mib_tokens.h @@ -11,6 +11,7 @@ void sso_mib_free(MIBClientWrapper* sso); WINPR_ATTR_MALLOC(sso_mib_free, 1) +WINPR_ATTR_NODISCARD MIBClientWrapper* sso_mib_new(rdpContext* context); #endif /* FREERDP_CLIENT_COMMON_SSO_MIB_TOKENS_H */ From 3a8eeaa24adcf02f0618b573c7017d7be32e7371 Mon Sep 17 00:00:00 2001 From: akallabeth Date: Mon, 26 Jan 2026 13:07:44 +0100 Subject: [PATCH 06/10] [rdtk] mark all WINPR_ATTR_MALLOC also nodiscard --- rdtk/include/rdtk/rdtk.h | 1 + rdtk/librdtk/rdtk_font.c | 1 + 2 files changed, 2 insertions(+) diff --git a/rdtk/include/rdtk/rdtk.h b/rdtk/include/rdtk/rdtk.h index 4897ff9e3..7932d26e9 100644 --- a/rdtk/include/rdtk/rdtk.h +++ b/rdtk/include/rdtk/rdtk.h @@ -44,6 +44,7 @@ extern "C" RDTK_EXPORT void rdtk_engine_free(rdtkEngine* engine); WINPR_ATTR_MALLOC(rdtk_engine_free, 1) + WINPR_ATTR_NODISCARD RDTK_EXPORT rdtkEngine* rdtk_engine_new(void); /* Surface */ diff --git a/rdtk/librdtk/rdtk_font.c b/rdtk/librdtk/rdtk_font.c index 52fb277cd..bdbe76e49 100644 --- a/rdtk/librdtk/rdtk_font.c +++ b/rdtk/librdtk/rdtk_font.c @@ -148,6 +148,7 @@ int rdtk_font_text_draw_size(rdtkFont* font, uint16_t* width, uint16_t* height, } WINPR_ATTR_MALLOC(free, 1) +WINPR_ATTR_NODISCARD static char* rdtk_font_load_descriptor_file(const char* filename, size_t* pSize) { WINPR_ASSERT(filename); From 460ca149f2fadfdf7eff1f2b811cbbf5339f9c0b Mon Sep 17 00:00:00 2001 From: akallabeth Date: Mon, 26 Jan 2026 13:08:14 +0100 Subject: [PATCH 07/10] [server] mark all WINPR_ATTR_MALLOC also nodiscard --- server/proxy/pf_channel.h | 1 + server/proxy/pf_config.c | 1 + server/shadow/shadow_capture.h | 1 + server/shadow/shadow_encoder.h | 1 + server/shadow/shadow_mcevent.h | 1 + server/shadow/shadow_screen.h | 1 + server/shadow/shadow_subsystem.h | 1 + server/shadow/shadow_surface.h | 1 + 8 files changed, 8 insertions(+) diff --git a/server/proxy/pf_channel.h b/server/proxy/pf_channel.h index 1f0b35613..eb4ea37e3 100644 --- a/server/proxy/pf_channel.h +++ b/server/proxy/pf_channel.h @@ -36,6 +36,7 @@ typedef PfChannelResult (*ChannelTrackerPeekFn)(ChannelStateTracker* tracker, BO void channelTracker_free(ChannelStateTracker* t); WINPR_ATTR_MALLOC(channelTracker_free, 1) +WINPR_ATTR_NODISCARD ChannelStateTracker* channelTracker_new(pServerStaticChannelContext* channel, ChannelTrackerPeekFn fn, void* data); diff --git a/server/proxy/pf_config.c b/server/proxy/pf_config.c index e3cd4eb47..9c3039424 100644 --- a/server/proxy/pf_config.c +++ b/server/proxy/pf_config.c @@ -114,6 +114,7 @@ static const char* key_cert_file = "CertificateFile"; static const char* key_cert_content = "CertificateContent"; WINPR_ATTR_MALLOC(CommandLineParserFree, 1) +WINPR_ATTR_NODISCARD static char** pf_config_parse_comma_separated_list(const char* list, size_t* count) { if (!list || !count) diff --git a/server/shadow/shadow_capture.h b/server/shadow/shadow_capture.h index 31de5505d..3d892ff7f 100644 --- a/server/shadow/shadow_capture.h +++ b/server/shadow/shadow_capture.h @@ -43,6 +43,7 @@ extern "C" void shadow_capture_free(rdpShadowCapture* capture); WINPR_ATTR_MALLOC(shadow_capture_free, 1) + WINPR_ATTR_NODISCARD rdpShadowCapture* shadow_capture_new(rdpShadowServer* server); #ifdef __cplusplus diff --git a/server/shadow/shadow_encoder.h b/server/shadow/shadow_encoder.h index dfe00f3ba..23aa80b0d 100644 --- a/server/shadow/shadow_encoder.h +++ b/server/shadow/shadow_encoder.h @@ -72,6 +72,7 @@ extern "C" void shadow_encoder_free(rdpShadowEncoder* encoder); WINPR_ATTR_MALLOC(shadow_encoder_free, 1) + WINPR_ATTR_NODISCARD rdpShadowEncoder* shadow_encoder_new(rdpShadowClient* client); #ifdef __cplusplus diff --git a/server/shadow/shadow_mcevent.h b/server/shadow/shadow_mcevent.h index c78b9206f..b13a89284 100644 --- a/server/shadow/shadow_mcevent.h +++ b/server/shadow/shadow_mcevent.h @@ -39,6 +39,7 @@ extern "C" void shadow_multiclient_free(rdpShadowMultiClientEvent* event); WINPR_ATTR_MALLOC(shadow_multiclient_free, 1) + WINPR_ATTR_NODISCARD rdpShadowMultiClientEvent* shadow_multiclient_new(void); void shadow_multiclient_publish(rdpShadowMultiClientEvent* event); diff --git a/server/shadow/shadow_screen.h b/server/shadow/shadow_screen.h index a7bf7894b..ca7973a45 100644 --- a/server/shadow/shadow_screen.h +++ b/server/shadow/shadow_screen.h @@ -46,6 +46,7 @@ extern "C" void shadow_screen_free(rdpShadowScreen* screen); WINPR_ATTR_MALLOC(shadow_screen_free, 1) + WINPR_ATTR_NODISCARD rdpShadowScreen* shadow_screen_new(rdpShadowServer* server); #ifdef __cplusplus diff --git a/server/shadow/shadow_subsystem.h b/server/shadow/shadow_subsystem.h index 206dfddb6..e62192ed8 100644 --- a/server/shadow/shadow_subsystem.h +++ b/server/shadow/shadow_subsystem.h @@ -32,6 +32,7 @@ extern "C" void shadow_subsystem_free(rdpShadowSubsystem* subsystem); WINPR_ATTR_MALLOC(shadow_subsystem_free, 1) + WINPR_ATTR_NODISCARD rdpShadowSubsystem* shadow_subsystem_new(void); int shadow_subsystem_init(rdpShadowSubsystem* subsystem, rdpShadowServer* server); diff --git a/server/shadow/shadow_surface.h b/server/shadow/shadow_surface.h index 277df0a2c..01260e94b 100644 --- a/server/shadow/shadow_surface.h +++ b/server/shadow/shadow_surface.h @@ -32,6 +32,7 @@ extern "C" void shadow_surface_free(rdpShadowSurface* surface); WINPR_ATTR_MALLOC(shadow_surface_free, 1) + WINPR_ATTR_NODISCARD rdpShadowSurface* shadow_surface_new(rdpShadowServer* server, UINT16 x, UINT16 y, UINT32 width, UINT32 height); From 7990eec166ddb072b6101c4a60e96c8dbcd3b4ac Mon Sep 17 00:00:00 2001 From: akallabeth Date: Mon, 26 Jan 2026 13:08:35 +0100 Subject: [PATCH 08/10] [freerdp] mark all WINPR_ATTR_MALLOC also nodiscard --- include/freerdp/assistance.h | 6 ++++++ include/freerdp/cache/persistent.h | 1 + include/freerdp/client.h | 2 ++ include/freerdp/client/client_cliprdr_file.h | 1 + include/freerdp/client/file.h | 2 ++ include/freerdp/client/rdpgfx.h | 1 + include/freerdp/codec/audio.h | 2 ++ include/freerdp/codec/clear.h | 1 + include/freerdp/codec/color.h | 3 ++- include/freerdp/codec/dsp.h | 1 + include/freerdp/codec/h264.h | 1 + include/freerdp/codec/interleaved.h | 1 + include/freerdp/codec/nsc.h | 1 + include/freerdp/codec/planar.h | 1 + include/freerdp/codec/progressive.h | 2 ++ include/freerdp/codec/rfx.h | 9 +++++++- include/freerdp/codec/yuv.h | 1 + include/freerdp/codec/zgfx.h | 1 + include/freerdp/codecs.h | 8 ++++--- include/freerdp/crypto/certificate.h | 19 +++++++++++++++++ include/freerdp/crypto/certificate_data.h | 5 +++++ include/freerdp/crypto/certificate_store.h | 4 ++++ include/freerdp/crypto/privatekey.h | 6 ++++++ .../freerdp/emulate/scard/smartcard_emulate.h | 1 + include/freerdp/freerdp.h | 1 + include/freerdp/gdi/video.h | 1 + include/freerdp/graphics.h | 1 + include/freerdp/listener.h | 1 + include/freerdp/locale/keyboard.h | 3 +++ include/freerdp/metrics.h | 1 + include/freerdp/peer.h | 1 + include/freerdp/redirection.h | 1 + include/freerdp/server/ainput.h | 1 + include/freerdp/server/audin.h | 1 + include/freerdp/server/cliprdr.h | 1 + include/freerdp/server/disp.h | 1 + include/freerdp/server/drdynvc.h | 1 + include/freerdp/server/echo.h | 1 + include/freerdp/server/encomsp.h | 1 + include/freerdp/server/gfxredir.h | 1 + include/freerdp/server/location.h | 1 + include/freerdp/server/proxy/proxy_config.h | 3 +++ include/freerdp/server/proxy/proxy_context.h | 3 +++ include/freerdp/server/proxy/proxy_server.h | 1 + include/freerdp/server/rail.h | 1 + include/freerdp/server/rdpdr.h | 1 + include/freerdp/server/rdpecam-enumerator.h | 1 + include/freerdp/server/rdpecam.h | 1 + include/freerdp/server/rdpei.h | 1 + include/freerdp/server/rdpemsc.h | 1 + include/freerdp/server/rdpgfx.h | 1 + include/freerdp/server/rdpsnd.h | 1 + include/freerdp/server/remdesk.h | 1 + include/freerdp/server/shadow.h | 1 + include/freerdp/server/telemetry.h | 1 + include/freerdp/settings.h | 9 ++++++++ include/freerdp/transport_io.h | 1 + libfreerdp/cache/bitmap.h | 5 +++++ libfreerdp/cache/brush.h | 2 ++ libfreerdp/cache/cache.h | 3 +++ libfreerdp/cache/glyph.h | 13 +++++++++--- libfreerdp/cache/nine_grid.h | 1 + libfreerdp/cache/offscreen.h | 2 ++ libfreerdp/cache/palette.h | 2 ++ libfreerdp/cache/pointer.h | 7 +++++++ libfreerdp/codec/bulk.h | 1 + libfreerdp/codec/dsp_ffmpeg.h | 2 ++ libfreerdp/codec/region.c | 1 + libfreerdp/core/aad.c | 1 + libfreerdp/core/aad.h | 1 + libfreerdp/core/autodetect.h | 1 + libfreerdp/core/client.h | 1 + libfreerdp/core/credssp_auth.h | 1 + libfreerdp/core/fastpath.h | 2 ++ libfreerdp/core/gateway/http.h | 4 ++++ libfreerdp/core/gateway/rdg.h | 1 + libfreerdp/core/gateway/rpc.h | 2 ++ libfreerdp/core/gateway/rpc_client.h | 2 ++ libfreerdp/core/gateway/rts.c | 1 + libfreerdp/core/gateway/tsg.h | 1 + libfreerdp/core/gateway/websocket.h | 2 ++ libfreerdp/core/gateway/wst.h | 1 + libfreerdp/core/heartbeat.h | 1 + libfreerdp/core/input.h | 1 + libfreerdp/core/license.h | 1 + libfreerdp/core/mcs.h | 1 + libfreerdp/core/message.h | 1 + libfreerdp/core/multitransport.h | 1 + libfreerdp/core/nego.h | 1 + libfreerdp/core/nla.c | 1 + libfreerdp/core/nla.h | 1 + libfreerdp/core/orders.c | 4 ++++ libfreerdp/core/rdp.h | 21 +++++++++++++++---- libfreerdp/core/rdstls.h | 1 + libfreerdp/core/server.h | 1 + libfreerdp/core/settings.c | 1 + libfreerdp/core/timer.h | 1 + libfreerdp/core/transport.h | 6 ++++++ libfreerdp/core/update.h | 9 ++++++++ libfreerdp/crypto/certificate.h | 2 ++ libfreerdp/crypto/tls.h | 1 + libfreerdp/utils/helpers.c | 1 + 102 files changed, 232 insertions(+), 12 deletions(-) diff --git a/include/freerdp/assistance.h b/include/freerdp/assistance.h index e38e58b77..8034d782a 100644 --- a/include/freerdp/assistance.h +++ b/include/freerdp/assistance.h @@ -32,18 +32,23 @@ extern "C" typedef struct rdp_assistance_file rdpAssistanceFile; WINPR_ATTR_MALLOC(free, 1) + WINPR_ATTR_NODISCARD FREERDP_API BYTE* freerdp_assistance_hex_string_to_bin(const void* str, size_t* size); WINPR_ATTR_MALLOC(free, 1) + WINPR_ATTR_NODISCARD FREERDP_API char* freerdp_assistance_bin_to_hex_string(const void* data, size_t size); WINPR_ATTR_MALLOC(free, 1) + WINPR_ATTR_NODISCARD FREERDP_API char* freerdp_assistance_generate_pass_stub(DWORD flags); WINPR_ATTR_MALLOC(free, 1) + WINPR_ATTR_NODISCARD FREERDP_API char* freerdp_assistance_construct_expert_blob(const char* name, const char* pass); WINPR_ATTR_MALLOC(free, 1) + WINPR_ATTR_NODISCARD FREERDP_API BYTE* freerdp_assistance_encrypt_pass_stub(const char* password, const char* passStub, size_t* pEncryptedSize); @@ -66,6 +71,7 @@ extern "C" FREERDP_API void freerdp_assistance_file_free(rdpAssistanceFile* file); WINPR_ATTR_MALLOC(freerdp_assistance_file_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API rdpAssistanceFile* freerdp_assistance_file_new(void); FREERDP_API void freerdp_assistance_print_file(rdpAssistanceFile* file, wLog* log, DWORD level); diff --git a/include/freerdp/cache/persistent.h b/include/freerdp/cache/persistent.h index a36595b81..bc31ec3f3 100644 --- a/include/freerdp/cache/persistent.h +++ b/include/freerdp/cache/persistent.h @@ -91,6 +91,7 @@ extern "C" FREERDP_API void persistent_cache_free(rdpPersistentCache* persistent); WINPR_ATTR_MALLOC(persistent_cache_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API rdpPersistentCache* persistent_cache_new(void); #ifdef __cplusplus diff --git a/include/freerdp/client.h b/include/freerdp/client.h index ca8908c79..c0338cae0 100644 --- a/include/freerdp/client.h +++ b/include/freerdp/client.h @@ -153,6 +153,7 @@ extern "C" FREERDP_API void freerdp_client_context_free(rdpContext* context); WINPR_ATTR_MALLOC(freerdp_client_context_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API rdpContext* freerdp_client_context_new(const RDP_CLIENT_ENTRY_POINTS* pEntryPoints); FREERDP_API int freerdp_client_start(rdpContext* context); @@ -338,6 +339,7 @@ extern "C" * @since version 3.16.0 */ WINPR_ATTR_MALLOC(free, 1) + WINPR_ATTR_NODISCARD FREERDP_API char* freerdp_client_get_aad_url(rdpClientContext* cctx, freerdp_client_aad_type type, ...); diff --git a/include/freerdp/client/client_cliprdr_file.h b/include/freerdp/client/client_cliprdr_file.h index 6dca587f4..526b52e19 100644 --- a/include/freerdp/client/client_cliprdr_file.h +++ b/include/freerdp/client/client_cliprdr_file.h @@ -35,6 +35,7 @@ extern "C" FREERDP_API void cliprdr_file_context_free(CliprdrFileContext* file); WINPR_ATTR_MALLOC(cliprdr_file_context_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API CliprdrFileContext* cliprdr_file_context_new(void* context); /**! \brief returns if the implementation supports pasting files in a client file browser. diff --git a/include/freerdp/client/file.h b/include/freerdp/client/file.h index 3368682bf..d22e2af5b 100644 --- a/include/freerdp/client/file.h +++ b/include/freerdp/client/file.h @@ -90,9 +90,11 @@ extern "C" FREERDP_API void freerdp_client_rdp_file_free(rdpFile* file); WINPR_ATTR_MALLOC(freerdp_client_rdp_file_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API rdpFile* freerdp_client_rdp_file_new(void); WINPR_ATTR_MALLOC(freerdp_client_rdp_file_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API rdpFile* freerdp_client_rdp_file_new_ex(DWORD flags); #ifdef __cplusplus diff --git a/include/freerdp/client/rdpgfx.h b/include/freerdp/client/rdpgfx.h index df9e2a7a5..fa0afb56b 100644 --- a/include/freerdp/client/rdpgfx.h +++ b/include/freerdp/client/rdpgfx.h @@ -180,6 +180,7 @@ extern "C" FREERDP_API void rdpgfx_client_context_free(RdpgfxClientContext* context); WINPR_ATTR_MALLOC(rdpgfx_client_context_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API RdpgfxClientContext* rdpgfx_client_context_new(rdpContext* context); #ifdef __cplusplus diff --git a/include/freerdp/codec/audio.h b/include/freerdp/codec/audio.h index fd4b1f9bb..7c824ed83 100644 --- a/include/freerdp/codec/audio.h +++ b/include/freerdp/codec/audio.h @@ -221,9 +221,11 @@ extern "C" FREERDP_API void audio_formats_free(AUDIO_FORMAT* formats, size_t count); WINPR_ATTR_MALLOC(audio_formats_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API AUDIO_FORMAT* audio_format_new(void); WINPR_ATTR_MALLOC(audio_formats_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API AUDIO_FORMAT* audio_formats_new(size_t count); #ifdef __cplusplus diff --git a/include/freerdp/codec/clear.h b/include/freerdp/codec/clear.h index 631838c05..8e6fa87e7 100644 --- a/include/freerdp/codec/clear.h +++ b/include/freerdp/codec/clear.h @@ -50,6 +50,7 @@ extern "C" FREERDP_API void clear_context_free(CLEAR_CONTEXT* WINPR_RESTRICT clear); WINPR_ATTR_MALLOC(clear_context_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API CLEAR_CONTEXT* clear_context_new(BOOL Compressor); #ifdef __cplusplus diff --git a/include/freerdp/codec/color.h b/include/freerdp/codec/color.h index c7e6cca3f..4d41c3c9c 100644 --- a/include/freerdp/codec/color.h +++ b/include/freerdp/codec/color.h @@ -301,7 +301,7 @@ typedef struct gdi_palette gdiPalette; WINPR_DEPRECATED_VAR("[since 3.21.0] use freerdp_glyph_convert_ex instead", WINPR_ATTR_MALLOC(winpr_aligned_free, 1) - FREERDP_API BYTE* freerdp_glyph_convert( + WINPR_ATTR_NODISCARD FREERDP_API BYTE* freerdp_glyph_convert( UINT32 width, UINT32 height, const BYTE* WINPR_RESTRICT data)); #endif @@ -317,6 +317,7 @@ typedef struct gdi_palette gdiPalette; * @since version 3.21.0 */ WINPR_ATTR_MALLOC(winpr_aligned_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API BYTE* freerdp_glyph_convert_ex(UINT32 width, UINT32 height, const BYTE* WINPR_RESTRICT data, size_t len); diff --git a/include/freerdp/codec/dsp.h b/include/freerdp/codec/dsp.h index ff6c08ad3..c23857c26 100644 --- a/include/freerdp/codec/dsp.h +++ b/include/freerdp/codec/dsp.h @@ -35,6 +35,7 @@ extern "C" FREERDP_API void freerdp_dsp_context_free(FREERDP_DSP_CONTEXT* context); WINPR_ATTR_MALLOC(freerdp_dsp_context_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API FREERDP_DSP_CONTEXT* freerdp_dsp_context_new(BOOL encoder); FREERDP_API BOOL freerdp_dsp_supports_format(const AUDIO_FORMAT* WINPR_RESTRICT format, diff --git a/include/freerdp/codec/h264.h b/include/freerdp/codec/h264.h index 77fcc0c6f..4974c1a75 100644 --- a/include/freerdp/codec/h264.h +++ b/include/freerdp/codec/h264.h @@ -126,6 +126,7 @@ extern "C" FREERDP_API void h264_context_free(H264_CONTEXT* h264); WINPR_ATTR_MALLOC(h264_context_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API H264_CONTEXT* h264_context_new(BOOL Compressor); #ifdef __cplusplus diff --git a/include/freerdp/codec/interleaved.h b/include/freerdp/codec/interleaved.h index 9bc8b96fc..16b8f92f8 100644 --- a/include/freerdp/codec/interleaved.h +++ b/include/freerdp/codec/interleaved.h @@ -56,6 +56,7 @@ extern "C" bitmap_interleaved_context_free(BITMAP_INTERLEAVED_CONTEXT* WINPR_RESTRICT interleaved); WINPR_ATTR_MALLOC(bitmap_interleaved_context_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API BITMAP_INTERLEAVED_CONTEXT* bitmap_interleaved_context_new(BOOL Compressor); #ifdef __cplusplus diff --git a/include/freerdp/codec/nsc.h b/include/freerdp/codec/nsc.h index dad891237..fdf79c17a 100644 --- a/include/freerdp/codec/nsc.h +++ b/include/freerdp/codec/nsc.h @@ -73,6 +73,7 @@ extern "C" FREERDP_API void nsc_context_free(NSC_CONTEXT* context); WINPR_ATTR_MALLOC(nsc_context_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API NSC_CONTEXT* nsc_context_new(void); #ifdef __cplusplus diff --git a/include/freerdp/codec/planar.h b/include/freerdp/codec/planar.h index ba58b08f3..4fc75e26c 100644 --- a/include/freerdp/codec/planar.h +++ b/include/freerdp/codec/planar.h @@ -53,6 +53,7 @@ extern "C" FREERDP_API void freerdp_bitmap_planar_context_free(BITMAP_PLANAR_CONTEXT* context); WINPR_ATTR_MALLOC(freerdp_bitmap_planar_context_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API BITMAP_PLANAR_CONTEXT* freerdp_bitmap_planar_context_new(DWORD flags, UINT32 width, UINT32 height); diff --git a/include/freerdp/codec/progressive.h b/include/freerdp/codec/progressive.h index c1d4597ea..95c25f445 100644 --- a/include/freerdp/codec/progressive.h +++ b/include/freerdp/codec/progressive.h @@ -64,9 +64,11 @@ extern "C" FREERDP_API void progressive_context_free(PROGRESSIVE_CONTEXT* progressive); WINPR_ATTR_MALLOC(progressive_context_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API PROGRESSIVE_CONTEXT* progressive_context_new(BOOL Compressor); WINPR_ATTR_MALLOC(progressive_context_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API PROGRESSIVE_CONTEXT* progressive_context_new_ex(BOOL Compressor, UINT32 ThreadingFlags); diff --git a/include/freerdp/codec/rfx.h b/include/freerdp/codec/rfx.h index 81d00d55f..671960e4b 100644 --- a/include/freerdp/codec/rfx.h +++ b/include/freerdp/codec/rfx.h @@ -102,17 +102,22 @@ extern "C" const BYTE* WINPR_RESTRICT image_data, UINT32 width, UINT32 height, UINT32 rowstride); + WINPR_ATTR_MALLOC(rfx_message_free, 2) + WINPR_ATTR_NODISCARD FREERDP_API RFX_MESSAGE* rfx_encode_message(RFX_CONTEXT* WINPR_RESTRICT context, const RFX_RECT* WINPR_RESTRICT rects, size_t numRects, const BYTE* WINPR_RESTRICT data, UINT32 width, UINT32 height, size_t scanline); + FREERDP_API void rfx_message_list_free(RFX_MESSAGE_LIST* messages); + + WINPR_ATTR_MALLOC(rfx_message_list_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API RFX_MESSAGE_LIST* rfx_encode_messages(RFX_CONTEXT* WINPR_RESTRICT context, const RFX_RECT* WINPR_RESTRICT rects, size_t numRects, const BYTE* WINPR_RESTRICT data, UINT32 width, UINT32 height, UINT32 scanline, size_t* WINPR_RESTRICT numMessages, size_t maxDataSize); - FREERDP_API void rfx_message_list_free(RFX_MESSAGE_LIST* messages); FREERDP_API const RFX_MESSAGE* rfx_message_list_get(const RFX_MESSAGE_LIST* WINPR_RESTRICT messages, size_t idx); @@ -124,9 +129,11 @@ extern "C" FREERDP_API void rfx_context_free(RFX_CONTEXT* context); WINPR_ATTR_MALLOC(rfx_context_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API RFX_CONTEXT* rfx_context_new_ex(BOOL encoder, UINT32 ThreadingFlags); WINPR_ATTR_MALLOC(rfx_context_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API RFX_CONTEXT* rfx_context_new(BOOL encoder); FREERDP_API BOOL rfx_context_reset(RFX_CONTEXT* WINPR_RESTRICT context, UINT32 width, diff --git a/include/freerdp/codec/yuv.h b/include/freerdp/codec/yuv.h index 07efe481d..dddf553e9 100644 --- a/include/freerdp/codec/yuv.h +++ b/include/freerdp/codec/yuv.h @@ -61,6 +61,7 @@ extern "C" FREERDP_API void yuv_context_free(YUV_CONTEXT* context); WINPR_ATTR_MALLOC(yuv_context_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API YUV_CONTEXT* yuv_context_new(BOOL encoder, UINT32 ThreadingFlags); #ifdef __cplusplus diff --git a/include/freerdp/codec/zgfx.h b/include/freerdp/codec/zgfx.h index 0a0d43613..cf822a065 100644 --- a/include/freerdp/codec/zgfx.h +++ b/include/freerdp/codec/zgfx.h @@ -57,6 +57,7 @@ extern "C" FREERDP_API void zgfx_context_free(ZGFX_CONTEXT* zgfx); WINPR_ATTR_MALLOC(zgfx_context_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API ZGFX_CONTEXT* zgfx_context_new(BOOL Compressor); #ifdef __cplusplus diff --git a/include/freerdp/codecs.h b/include/freerdp/codecs.h index 7b03f950a..61cb80e26 100644 --- a/include/freerdp/codecs.h +++ b/include/freerdp/codecs.h @@ -84,15 +84,17 @@ extern "C" * @since version 3.6.0 */ WINPR_ATTR_MALLOC(freerdp_client_codecs_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API rdpCodecs* freerdp_client_codecs_new(UINT32 TheadingFlags); #if !defined(WITHOUT_FREERDP_3x_DEPRECATED) WINPR_DEPRECATED_VAR("[since 3.6.0] Use freerdp_client_codecs_free", FREERDP_API void codecs_free(rdpCodecs* codecs)); - WINPR_DEPRECATED_VAR("[since 3.6.0] Use freerdp_client_codecs_new", - WINPR_ATTR_MALLOC(codecs_free, 1) - FREERDP_API rdpCodecs* codecs_new(rdpContext* context)); + WINPR_DEPRECATED_VAR( + "[since 3.6.0] Use freerdp_client_codecs_new", + WINPR_ATTR_MALLOC(codecs_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API rdpCodecs* codecs_new(rdpContext* context)); #endif /** @brief return a string representation of the given codecid diff --git a/include/freerdp/crypto/certificate.h b/include/freerdp/crypto/certificate.h index d632d3957..41bf97327 100644 --- a/include/freerdp/crypto/certificate.h +++ b/include/freerdp/crypto/certificate.h @@ -41,36 +41,45 @@ extern "C" FREERDP_API void freerdp_certificate_free(rdpCertificate* certificate); WINPR_ATTR_MALLOC(freerdp_certificate_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API rdpCertificate* freerdp_certificate_new(void); WINPR_ATTR_MALLOC(freerdp_certificate_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API rdpCertificate* freerdp_certificate_new_from_file(const char* file); WINPR_ATTR_MALLOC(freerdp_certificate_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API rdpCertificate* freerdp_certificate_new_from_pem(const char* pem); WINPR_ATTR_MALLOC(freerdp_certificate_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API rdpCertificate* freerdp_certificate_new_from_der(const BYTE* data, size_t length); FREERDP_API BOOL freerdp_certificate_is_rsa(const rdpCertificate* certificate); WINPR_ATTR_MALLOC(free, 1) + WINPR_ATTR_NODISCARD FREERDP_API char* freerdp_certificate_get_hash(const rdpCertificate* certificate, const char* hash, size_t* plength); WINPR_ATTR_MALLOC(free, 1) + WINPR_ATTR_NODISCARD FREERDP_API char* freerdp_certificate_get_fingerprint_by_hash(const rdpCertificate* certificate, const char* hash); WINPR_ATTR_MALLOC(free, 1) + WINPR_ATTR_NODISCARD FREERDP_API char* freerdp_certificate_get_fingerprint_by_hash_ex(const rdpCertificate* certificate, const char* hash, BOOL separator); WINPR_ATTR_MALLOC(free, 1) + WINPR_ATTR_NODISCARD FREERDP_API char* freerdp_certificate_get_fingerprint(const rdpCertificate* certificate); WINPR_ATTR_MALLOC(free, 1) + WINPR_ATTR_NODISCARD FREERDP_API char* freerdp_certificate_get_pem(const rdpCertificate* certificate, size_t* pLength); @@ -84,23 +93,29 @@ extern "C" * @since version 3.8.0 */ WINPR_ATTR_MALLOC(free, 1) + WINPR_ATTR_NODISCARD FREERDP_API char* freerdp_certificate_get_pem_ex(const rdpCertificate* certificate, size_t* pLength, BOOL withCertChain); WINPR_ATTR_MALLOC(free, 1) + WINPR_ATTR_NODISCARD FREERDP_API BYTE* freerdp_certificate_get_der(const rdpCertificate* certificate, size_t* pLength); WINPR_ATTR_MALLOC(free, 1) + WINPR_ATTR_NODISCARD FREERDP_API char* freerdp_certificate_get_subject(const rdpCertificate* certificate); WINPR_ATTR_MALLOC(free, 1) + WINPR_ATTR_NODISCARD FREERDP_API char* freerdp_certificate_get_issuer(const rdpCertificate* certificate); WINPR_ATTR_MALLOC(free, 1) + WINPR_ATTR_NODISCARD FREERDP_API char* freerdp_certificate_get_upn(const rdpCertificate* certificate); WINPR_ATTR_MALLOC(free, 1) + WINPR_ATTR_NODISCARD FREERDP_API char* freerdp_certificate_get_email(const rdpCertificate* certificate); /** @@ -111,16 +126,19 @@ extern "C" * @since version 3.8.0 */ WINPR_ATTR_MALLOC(free, 1) + WINPR_ATTR_NODISCARD FREERDP_API char* freerdp_certificate_get_validity(const rdpCertificate* certificate, BOOL startDate); FREERDP_API WINPR_MD_TYPE freerdp_certificate_get_signature_alg(const rdpCertificate* cert); WINPR_ATTR_MALLOC(free, 1) + WINPR_ATTR_NODISCARD FREERDP_API char* freerdp_certificate_get_common_name(const rdpCertificate* cert, size_t* plength); WINPR_ATTR_MALLOC(free, 1) + WINPR_ATTR_NODISCARD FREERDP_API char** freerdp_certificate_get_dns_names(const rdpCertificate* cert, size_t* pcount, size_t** pplengths); FREERDP_API void freerdp_certificate_free_dns_names(size_t count, size_t* lengths, @@ -137,6 +155,7 @@ extern "C" FREERDP_API BOOL freerdp_certificate_is_rdp_security_compatible(const rdpCertificate* cert); WINPR_ATTR_MALLOC(free, 1) + WINPR_ATTR_NODISCARD FREERDP_API char* freerdp_certificate_get_param(const rdpCertificate* cert, enum FREERDP_CERT_PARAM what, size_t* psize); diff --git a/include/freerdp/crypto/certificate_data.h b/include/freerdp/crypto/certificate_data.h index 96a620dc8..0aa1996ca 100644 --- a/include/freerdp/crypto/certificate_data.h +++ b/include/freerdp/crypto/certificate_data.h @@ -33,21 +33,26 @@ extern "C" typedef struct rdp_certificate_data rdpCertificateData; + WINPR_ATTR_MALLOC(free, 1) + WINPR_ATTR_NODISCARD FREERDP_API char* freerdp_certificate_data_hash(const char* hostname, UINT16 port); FREERDP_API void freerdp_certificate_data_free(rdpCertificateData* data); WINPR_ATTR_MALLOC(freerdp_certificate_data_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API rdpCertificateData* freerdp_certificate_data_new(const char* hostname, UINT16 port, const rdpCertificate* xcert); WINPR_ATTR_MALLOC(freerdp_certificate_data_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API rdpCertificateData* freerdp_certificate_data_new_from_pem(const char* hostname, UINT16 port, const char* pem, size_t length); WINPR_ATTR_MALLOC(freerdp_certificate_data_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API rdpCertificateData* freerdp_certificate_data_new_from_file(const char* hostname, UINT16 port, const char* file); diff --git a/include/freerdp/crypto/certificate_store.h b/include/freerdp/crypto/certificate_store.h index fc84da105..d3ec0b2c0 100644 --- a/include/freerdp/crypto/certificate_store.h +++ b/include/freerdp/crypto/certificate_store.h @@ -43,12 +43,14 @@ extern "C" FREERDP_API void freerdp_certificate_store_free(rdpCertificateStore* store); WINPR_ATTR_MALLOC(freerdp_certificate_store_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API rdpCertificateStore* freerdp_certificate_store_new(const rdpSettings* settings); FREERDP_API freerdp_certificate_store_result freerdp_certificate_store_contains_data( rdpCertificateStore* store, const rdpCertificateData* data); WINPR_ATTR_MALLOC(freerdp_certificate_data_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API rdpCertificateData* freerdp_certificate_store_load_data(rdpCertificateStore* store, const char* host, UINT16 port); @@ -72,6 +74,8 @@ extern "C" * * @return The certificate store file path or \b NULL */ + WINPR_ATTR_MALLOC(free, 1) + WINPR_ATTR_NODISCARD FREERDP_API char* freerdp_certificate_store_get_cert_path(const rdpCertificateStore* store, const char* host, UINT16 port); diff --git a/include/freerdp/crypto/privatekey.h b/include/freerdp/crypto/privatekey.h index 23e1c3f68..1f6247d9e 100644 --- a/include/freerdp/crypto/privatekey.h +++ b/include/freerdp/crypto/privatekey.h @@ -33,11 +33,13 @@ extern "C" FREERDP_API void freerdp_key_free(rdpPrivateKey* key); WINPR_ATTR_MALLOC(freerdp_key_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API rdpPrivateKey* freerdp_key_new(void); FREERDP_API rdpPrivateKey* freerdp_key_new_from_file(const char* keyfile); WINPR_ATTR_MALLOC(freerdp_key_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API rdpPrivateKey* freerdp_key_new_from_pem(const char* pem); /** @brief Create a private key from file \b keyfile with optional password \b password @@ -47,6 +49,8 @@ extern "C" * @return An allocated private key, \b NULL in case of failure. * @since version 3.16.0 */ + WINPR_ATTR_MALLOC(freerdp_key_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API rdpPrivateKey* freerdp_key_new_from_file_enc(const char* keyfile, const char* password); @@ -58,6 +62,7 @@ extern "C" * @since version 3.16.0 */ WINPR_ATTR_MALLOC(freerdp_key_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API rdpPrivateKey* freerdp_key_new_from_pem_enc(const char* pem, const char* password); FREERDP_API BOOL freerdp_key_is_rsa(const rdpPrivateKey* key); @@ -74,6 +79,7 @@ extern "C" * @since version 3.16.0 */ WINPR_ATTR_MALLOC(free, 1) + WINPR_ATTR_NODISCARD FREERDP_API char* freerdp_key_get_pem(const rdpPrivateKey* key, size_t* plen, const char* password); diff --git a/include/freerdp/emulate/scard/smartcard_emulate.h b/include/freerdp/emulate/scard/smartcard_emulate.h index c2865b485..7a12c1304 100644 --- a/include/freerdp/emulate/scard/smartcard_emulate.h +++ b/include/freerdp/emulate/scard/smartcard_emulate.h @@ -37,6 +37,7 @@ extern "C" FREERDP_API void Emulate_Free(SmartcardEmulationContext* context); WINPR_ATTR_MALLOC(Emulate_Free, 1) + WINPR_ATTR_NODISCARD FREERDP_API SmartcardEmulationContext* Emulate_New(const rdpSettings* settings); FREERDP_API BOOL Emulate_IsConfigured(SmartcardEmulationContext* context); diff --git a/include/freerdp/freerdp.h b/include/freerdp/freerdp.h index 30b6ebb62..9e7f70819 100644 --- a/include/freerdp/freerdp.h +++ b/include/freerdp/freerdp.h @@ -691,6 +691,7 @@ owned by rdpRdp */ FREERDP_API void freerdp_free(freerdp* instance); WINPR_ATTR_MALLOC(freerdp_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API freerdp* freerdp_new(void); FREERDP_API BOOL freerdp_focus_required(freerdp* instance); diff --git a/include/freerdp/gdi/video.h b/include/freerdp/gdi/video.h index a9e50f81c..816d3105e 100644 --- a/include/freerdp/gdi/video.h +++ b/include/freerdp/gdi/video.h @@ -44,6 +44,7 @@ extern "C" FREERDP_API void gdi_video_free(gdiVideoContext* context); WINPR_ATTR_MALLOC(gdi_video_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API gdiVideoContext* gdi_video_new(rdpGdi* gdi); #ifdef __cplusplus diff --git a/include/freerdp/graphics.h b/include/freerdp/graphics.h index 1b98635b2..7dc4e8dda 100644 --- a/include/freerdp/graphics.h +++ b/include/freerdp/graphics.h @@ -166,6 +166,7 @@ extern "C" FREERDP_API void graphics_free(rdpGraphics* graphics); WINPR_ATTR_MALLOC(graphics_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API rdpGraphics* graphics_new(rdpContext* context); #ifdef __cplusplus diff --git a/include/freerdp/listener.h b/include/freerdp/listener.h index 56ede560a..28d6002cf 100644 --- a/include/freerdp/listener.h +++ b/include/freerdp/listener.h @@ -77,6 +77,7 @@ extern "C" FREERDP_API void freerdp_listener_free(freerdp_listener* instance); WINPR_ATTR_MALLOC(freerdp_listener_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API freerdp_listener* freerdp_listener_new(void); #ifdef __cplusplus diff --git a/include/freerdp/locale/keyboard.h b/include/freerdp/locale/keyboard.h index be4530503..1530b342e 100644 --- a/include/freerdp/locale/keyboard.h +++ b/include/freerdp/locale/keyboard.h @@ -243,6 +243,7 @@ FREERDP_API void freerdp_keyboard_layouts_free(RDP_KEYBOARD_LAYOUT* layouts, siz * @return An allocated array of keyboard layouts, free with \b freerdp_keyboard_layouts_free */ WINPR_ATTR_MALLOC(freerdp_keyboard_layouts_free, 1) +WINPR_ATTR_NODISCARD FREERDP_API RDP_KEYBOARD_LAYOUT* freerdp_keyboard_get_layouts(DWORD types, size_t* count); /** @brief Get a string representation of a keyboard layout. @@ -298,6 +299,7 @@ FREERDP_API void freerdp_keyboard_remap_free(FREERDP_REMAP_TABLE* table); * @since version 3.11.0 */ WINPR_ATTR_MALLOC(freerdp_keyboard_remap_free, 1) +WINPR_ATTR_NODISCARD FREERDP_API FREERDP_REMAP_TABLE* freerdp_keyboard_remap_string_to_list(const char* list); /** @brief does remap a RDP scancode according to the remap table provided. @@ -336,6 +338,7 @@ FREERDP_API void freerdp_codepages_free(RDP_CODEPAGE* codepages); * freed by \ref freerdp_codepages_free */ WINPR_ATTR_MALLOC(freerdp_codepages_free, 1) +WINPR_ATTR_NODISCARD FREERDP_API RDP_CODEPAGE* freerdp_keyboard_get_matching_codepages(DWORD column, const char* filter, size_t* count); diff --git a/include/freerdp/metrics.h b/include/freerdp/metrics.h index 6d00bfd62..306899475 100644 --- a/include/freerdp/metrics.h +++ b/include/freerdp/metrics.h @@ -43,6 +43,7 @@ extern "C" FREERDP_API void metrics_free(rdpMetrics* metrics); WINPR_ATTR_MALLOC(metrics_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API rdpMetrics* metrics_new(rdpContext* context); #ifdef __cplusplus diff --git a/include/freerdp/peer.h b/include/freerdp/peer.h index 7b3ebf4d6..369b6ad95 100644 --- a/include/freerdp/peer.h +++ b/include/freerdp/peer.h @@ -216,6 +216,7 @@ extern "C" FREERDP_API void freerdp_peer_free(freerdp_peer* client); WINPR_ATTR_MALLOC(freerdp_peer_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API freerdp_peer* freerdp_peer_new(int sockfd); FREERDP_API BOOL freerdp_peer_set_local_and_hostname(freerdp_peer* client, diff --git a/include/freerdp/redirection.h b/include/freerdp/redirection.h index 2f40e1010..8e82272f0 100644 --- a/include/freerdp/redirection.h +++ b/include/freerdp/redirection.h @@ -55,6 +55,7 @@ extern "C" FREERDP_API void redirection_free(rdpRedirection* redirection); WINPR_ATTR_MALLOC(redirection_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API rdpRedirection* redirection_new(void); /** \brief This function checks if all necessary settings for a given \b rdpRedirection are diff --git a/include/freerdp/server/ainput.h b/include/freerdp/server/ainput.h index 21c47d64b..c3f7a9ad2 100644 --- a/include/freerdp/server/ainput.h +++ b/include/freerdp/server/ainput.h @@ -115,6 +115,7 @@ extern "C" FREERDP_API void ainput_server_context_free(ainput_server_context* context); WINPR_ATTR_MALLOC(ainput_server_context_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API ainput_server_context* ainput_server_context_new(HANDLE vcm); #ifdef __cplusplus diff --git a/include/freerdp/server/audin.h b/include/freerdp/server/audin.h index 51d83fe12..dcbfb03ae 100644 --- a/include/freerdp/server/audin.h +++ b/include/freerdp/server/audin.h @@ -156,6 +156,7 @@ extern "C" FREERDP_API void audin_server_context_free(audin_server_context* context); WINPR_ATTR_MALLOC(audin_server_context_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API audin_server_context* audin_server_context_new(HANDLE vcm); /** \brief sets the supported audio formats for AUDIN server channel context. diff --git a/include/freerdp/server/cliprdr.h b/include/freerdp/server/cliprdr.h index 77ebb008f..94b33ddb1 100644 --- a/include/freerdp/server/cliprdr.h +++ b/include/freerdp/server/cliprdr.h @@ -137,6 +137,7 @@ extern "C" FREERDP_API void cliprdr_server_context_free(CliprdrServerContext* context); WINPR_ATTR_MALLOC(cliprdr_server_context_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API CliprdrServerContext* cliprdr_server_context_new(HANDLE vcm); #ifdef __cplusplus diff --git a/include/freerdp/server/disp.h b/include/freerdp/server/disp.h index d17c3c299..e53f2bcef 100644 --- a/include/freerdp/server/disp.h +++ b/include/freerdp/server/disp.h @@ -69,6 +69,7 @@ extern "C" FREERDP_API void disp_server_context_free(DispServerContext* context); WINPR_ATTR_MALLOC(disp_server_context_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API DispServerContext* disp_server_context_new(HANDLE vcm); #ifdef __cplusplus diff --git a/include/freerdp/server/drdynvc.h b/include/freerdp/server/drdynvc.h index 09453f4c9..b81ca06bc 100644 --- a/include/freerdp/server/drdynvc.h +++ b/include/freerdp/server/drdynvc.h @@ -54,6 +54,7 @@ extern "C" FREERDP_API void drdynvc_server_context_free(DrdynvcServerContext* context); WINPR_ATTR_MALLOC(drdynvc_server_context_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API DrdynvcServerContext* drdynvc_server_context_new(HANDLE vcm); #ifdef __cplusplus diff --git a/include/freerdp/server/echo.h b/include/freerdp/server/echo.h index 609d8c30d..ffc637770 100644 --- a/include/freerdp/server/echo.h +++ b/include/freerdp/server/echo.h @@ -93,6 +93,7 @@ extern "C" FREERDP_API void echo_server_context_free(echo_server_context* context); WINPR_ATTR_MALLOC(echo_server_context_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API echo_server_context* echo_server_context_new(HANDLE vcm); #ifdef __cplusplus diff --git a/include/freerdp/server/encomsp.h b/include/freerdp/server/encomsp.h index 534fd3e18..ab263e453 100644 --- a/include/freerdp/server/encomsp.h +++ b/include/freerdp/server/encomsp.h @@ -95,6 +95,7 @@ extern "C" FREERDP_API void encomsp_server_context_free(EncomspServerContext* context); WINPR_ATTR_MALLOC(encomsp_server_context_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API EncomspServerContext* encomsp_server_context_new(HANDLE vcm); #ifdef __cplusplus diff --git a/include/freerdp/server/gfxredir.h b/include/freerdp/server/gfxredir.h index 4bd7480f9..b8f7a9605 100644 --- a/include/freerdp/server/gfxredir.h +++ b/include/freerdp/server/gfxredir.h @@ -95,6 +95,7 @@ extern "C" FREERDP_API void gfxredir_server_context_free(GfxRedirServerContext* context); WINPR_ATTR_MALLOC(gfxredir_server_context_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API GfxRedirServerContext* gfxredir_server_context_new(HANDLE vcm); #ifdef __cplusplus diff --git a/include/freerdp/server/location.h b/include/freerdp/server/location.h index 8078878f9..ed2baa323 100644 --- a/include/freerdp/server/location.h +++ b/include/freerdp/server/location.h @@ -133,6 +133,7 @@ extern "C" FREERDP_API void location_server_context_free(LocationServerContext* context); WINPR_ATTR_MALLOC(location_server_context_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API LocationServerContext* location_server_context_new(HANDLE vcm); #ifdef __cplusplus diff --git a/include/freerdp/server/proxy/proxy_config.h b/include/freerdp/server/proxy/proxy_config.h index da190b96b..79ea068c5 100644 --- a/include/freerdp/server/proxy/proxy_config.h +++ b/include/freerdp/server/proxy/proxy_config.h @@ -144,6 +144,7 @@ extern "C" * @return A proxyConfig or NULL in case of failure. */ WINPR_ATTR_MALLOC(pf_server_config_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API proxyConfig* server_config_load_ini(wIniFile* ini); /** * @brief pf_server_config_load_file Create a proxyConfig from a INI file found at path. @@ -153,6 +154,7 @@ extern "C" * @return A proxyConfig or NULL in case of failure. */ WINPR_ATTR_MALLOC(pf_server_config_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API proxyConfig* pf_server_config_load_file(const char* path); /** @@ -164,6 +166,7 @@ extern "C" * @return A proxyConfig or NULL in case of failure. */ WINPR_ATTR_MALLOC(pf_server_config_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API proxyConfig* pf_server_config_load_buffer(const char* buffer); /** diff --git a/include/freerdp/server/proxy/proxy_context.h b/include/freerdp/server/proxy/proxy_context.h index 0132c666a..b958e7cf9 100644 --- a/include/freerdp/server/proxy/proxy_context.h +++ b/include/freerdp/server/proxy/proxy_context.h @@ -90,6 +90,7 @@ extern "C" typedef struct p_server_context pServerContext; WINPR_ATTR_MALLOC(StaticChannelContext_free, 1) + WINPR_ATTR_NODISCARD pServerStaticChannelContext* StaticChannelContext_new(pServerContext* ps, const char* name, UINT32 id); @@ -167,11 +168,13 @@ extern "C" FREERDP_API BOOL pf_context_init_server_context(freerdp_peer* client); WINPR_ATTR_MALLOC(freerdp_client_context_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API pClientContext* pf_context_create_client_context(const rdpSettings* clientSettings); FREERDP_API void proxy_data_free(proxyData* pdata); WINPR_ATTR_MALLOC(proxy_data_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API proxyData* proxy_data_new(void); FREERDP_API void proxy_data_set_client_context(proxyData* pdata, pClientContext* context); FREERDP_API void proxy_data_set_server_context(proxyData* pdata, pServerContext* context); diff --git a/include/freerdp/server/proxy/proxy_server.h b/include/freerdp/server/proxy/proxy_server.h index 702b3268d..30a6e0610 100644 --- a/include/freerdp/server/proxy/proxy_server.h +++ b/include/freerdp/server/proxy/proxy_server.h @@ -46,6 +46,7 @@ extern "C" * @return A new proxy server instance or NULL on failure. */ WINPR_ATTR_MALLOC(pf_server_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API proxyServer* pf_server_new(const proxyConfig* config); /** diff --git a/include/freerdp/server/rail.h b/include/freerdp/server/rail.h index 0fdd1a3c1..985baf3ed 100644 --- a/include/freerdp/server/rail.h +++ b/include/freerdp/server/rail.h @@ -145,6 +145,7 @@ extern "C" FREERDP_API void rail_server_context_free(RailServerContext* context); WINPR_ATTR_MALLOC(rail_server_context_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API RailServerContext* rail_server_context_new(HANDLE vcm); FREERDP_API UINT rail_server_handle_messages(RailServerContext* context); diff --git a/include/freerdp/server/rdpdr.h b/include/freerdp/server/rdpdr.h index c4ddc5ba5..4b564e079 100644 --- a/include/freerdp/server/rdpdr.h +++ b/include/freerdp/server/rdpdr.h @@ -223,6 +223,7 @@ struct s_rdpdr_server_context FREERDP_API void rdpdr_server_context_free(RdpdrServerContext* context); WINPR_ATTR_MALLOC(rdpdr_server_context_free, 1) +WINPR_ATTR_NODISCARD FREERDP_API RdpdrServerContext* rdpdr_server_context_new(HANDLE vcm); #ifdef __cplusplus diff --git a/include/freerdp/server/rdpecam-enumerator.h b/include/freerdp/server/rdpecam-enumerator.h index 800caf8a1..ca93ae5cb 100644 --- a/include/freerdp/server/rdpecam-enumerator.h +++ b/include/freerdp/server/rdpecam-enumerator.h @@ -128,6 +128,7 @@ extern "C" FREERDP_API void cam_dev_enum_server_context_free(CamDevEnumServerContext* context); WINPR_ATTR_MALLOC(cam_dev_enum_server_context_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API CamDevEnumServerContext* cam_dev_enum_server_context_new(HANDLE vcm); #ifdef __cplusplus diff --git a/include/freerdp/server/rdpecam.h b/include/freerdp/server/rdpecam.h index dd1849478..e409b0d13 100644 --- a/include/freerdp/server/rdpecam.h +++ b/include/freerdp/server/rdpecam.h @@ -275,6 +275,7 @@ extern "C" FREERDP_API void camera_device_server_context_free(CameraDeviceServerContext* context); WINPR_ATTR_MALLOC(camera_device_server_context_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API CameraDeviceServerContext* camera_device_server_context_new(HANDLE vcm); #ifdef __cplusplus diff --git a/include/freerdp/server/rdpei.h b/include/freerdp/server/rdpei.h index 812532e62..74f448f01 100644 --- a/include/freerdp/server/rdpei.h +++ b/include/freerdp/server/rdpei.h @@ -78,6 +78,7 @@ extern "C" FREERDP_API void rdpei_server_context_free(RdpeiServerContext* context); WINPR_ATTR_MALLOC(rdpei_server_context_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API RdpeiServerContext* rdpei_server_context_new(HANDLE vcm); FREERDP_API void rdpei_server_context_reset(RdpeiServerContext* context); diff --git a/include/freerdp/server/rdpemsc.h b/include/freerdp/server/rdpemsc.h index f1ce98a1e..f9947ba53 100644 --- a/include/freerdp/server/rdpemsc.h +++ b/include/freerdp/server/rdpemsc.h @@ -123,6 +123,7 @@ extern "C" FREERDP_API void mouse_cursor_server_context_free(MouseCursorServerContext* context); WINPR_ATTR_MALLOC(mouse_cursor_server_context_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API MouseCursorServerContext* mouse_cursor_server_context_new(HANDLE vcm); #ifdef __cplusplus diff --git a/include/freerdp/server/rdpgfx.h b/include/freerdp/server/rdpgfx.h index 262bb386c..933853dc3 100644 --- a/include/freerdp/server/rdpgfx.h +++ b/include/freerdp/server/rdpgfx.h @@ -142,6 +142,7 @@ extern "C" FREERDP_API void rdpgfx_server_context_free(RdpgfxServerContext* context); WINPR_ATTR_MALLOC(rdpgfx_server_context_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API RdpgfxServerContext* rdpgfx_server_context_new(HANDLE vcm); FREERDP_API BOOL rdpgfx_server_set_own_thread(RdpgfxServerContext* context, diff --git a/include/freerdp/server/rdpsnd.h b/include/freerdp/server/rdpsnd.h index 20fd5fd82..627e157f3 100644 --- a/include/freerdp/server/rdpsnd.h +++ b/include/freerdp/server/rdpsnd.h @@ -185,6 +185,7 @@ extern "C" FREERDP_API void rdpsnd_server_context_free(RdpsndServerContext* context); WINPR_ATTR_MALLOC(rdpsnd_server_context_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API RdpsndServerContext* rdpsnd_server_context_new(HANDLE vcm); FREERDP_API void rdpsnd_server_context_reset(RdpsndServerContext*); diff --git a/include/freerdp/server/remdesk.h b/include/freerdp/server/remdesk.h index ef4503220..f4baa1f02 100644 --- a/include/freerdp/server/remdesk.h +++ b/include/freerdp/server/remdesk.h @@ -58,6 +58,7 @@ extern "C" FREERDP_API void remdesk_server_context_free(RemdeskServerContext* context); WINPR_ATTR_MALLOC(remdesk_server_context_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API RemdeskServerContext* remdesk_server_context_new(HANDLE vcm); #ifdef __cplusplus diff --git a/include/freerdp/server/shadow.h b/include/freerdp/server/shadow.h index e6d8cf2e5..7d71edee8 100644 --- a/include/freerdp/server/shadow.h +++ b/include/freerdp/server/shadow.h @@ -352,6 +352,7 @@ extern "C" FREERDP_API void shadow_server_free(rdpShadowServer* server); WINPR_ATTR_MALLOC(shadow_server_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API rdpShadowServer* shadow_server_new(void); FREERDP_API int shadow_capture_align_clip_rect(RECTANGLE_16* rect, const RECTANGLE_16* clip); diff --git a/include/freerdp/server/telemetry.h b/include/freerdp/server/telemetry.h index 0697e7008..d61642587 100644 --- a/include/freerdp/server/telemetry.h +++ b/include/freerdp/server/telemetry.h @@ -102,6 +102,7 @@ extern "C" FREERDP_API void telemetry_server_context_free(TelemetryServerContext* context); WINPR_ATTR_MALLOC(telemetry_server_context_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API TelemetryServerContext* telemetry_server_context_new(HANDLE vcm); #ifdef __cplusplus diff --git a/include/freerdp/settings.h b/include/freerdp/settings.h index 2c0ce8c7a..224b11502 100644 --- a/include/freerdp/settings.h +++ b/include/freerdp/settings.h @@ -94,6 +94,7 @@ extern "C" * \return A newly allocated settings struct or NULL */ WINPR_ATTR_MALLOC(freerdp_settings_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API rdpSettings* freerdp_settings_new(DWORD flags); /** \brief Creates a deep copy of settings @@ -103,6 +104,7 @@ extern "C" * \return A newly allocated copy of \b settings or NULL */ WINPR_ATTR_MALLOC(freerdp_settings_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API rdpSettings* freerdp_settings_clone(const rdpSettings* settings); /** \brief Deep copies settings from \b src to \b dst @@ -153,9 +155,11 @@ extern "C" FREERDP_API void freerdp_addin_argv_free(ADDIN_ARGV* args); WINPR_ATTR_MALLOC(freerdp_addin_argv_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API ADDIN_ARGV* freerdp_addin_argv_new(size_t argc, const char* const argv[]); WINPR_ATTR_MALLOC(freerdp_addin_argv_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API ADDIN_ARGV* freerdp_addin_argv_clone(const ADDIN_ARGV* args); FREERDP_API BOOL freerdp_addin_argv_add_argument(ADDIN_ARGV* args, const char* argument); @@ -193,10 +197,12 @@ extern "C" FREERDP_API void freerdp_device_free(RDPDR_DEVICE* device); WINPR_ATTR_MALLOC(freerdp_device_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API RDPDR_DEVICE* freerdp_device_new(UINT32 Type, size_t count, const char* const args[]); WINPR_ATTR_MALLOC(freerdp_device_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API RDPDR_DEVICE* freerdp_device_clone(const RDPDR_DEVICE* device); FREERDP_API BOOL freerdp_device_equal(const RDPDR_DEVICE* one, const RDPDR_DEVICE* other); @@ -754,6 +760,7 @@ extern "C" * @note Since 3.17.1 this is a wrapper for \b freerdp_GetConfigFilePath(FALSE, "") */ WINPR_ATTR_MALLOC(free, 1) + WINPR_ATTR_NODISCARD FREERDP_API char* freerdp_settings_get_config_path(void); /** @brief Sort monitor array according to: @@ -787,6 +794,7 @@ extern "C" * @since version 3.16.0 */ WINPR_ATTR_MALLOC(free, 1) + WINPR_ATTR_NODISCARD FREERDP_API char* freerdp_settings_serialize(const rdpSettings* settings, BOOL pretty, size_t* plength); @@ -798,6 +806,7 @@ extern "C" * @since version 3.16.0 */ WINPR_ATTR_MALLOC(freerdp_settings_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API rdpSettings* freerdp_settings_deserialize(const char* json, size_t length); #ifdef __cplusplus diff --git a/include/freerdp/transport_io.h b/include/freerdp/transport_io.h index 93b509f9d..6b2499c6c 100644 --- a/include/freerdp/transport_io.h +++ b/include/freerdp/transport_io.h @@ -164,6 +164,7 @@ extern "C" * @since version 3.9.0 */ WINPR_ATTR_MALLOC(transport_layer_free, 1) + WINPR_ATTR_NODISCARD FREERDP_API rdpTransportLayer* transport_layer_new(rdpTransport* transport, size_t contextSize); #ifdef __cplusplus diff --git a/libfreerdp/cache/bitmap.h b/libfreerdp/cache/bitmap.h index 4e45170f9..64194b7db 100644 --- a/libfreerdp/cache/bitmap.h +++ b/libfreerdp/cache/bitmap.h @@ -60,17 +60,20 @@ extern "C" FREERDP_LOCAL void bitmap_cache_free(rdpBitmapCache* bitmap_cache); WINPR_ATTR_MALLOC(bitmap_cache_free, 1) + WINPR_ATTR_NODISCARD FREERDP_LOCAL rdpBitmapCache* bitmap_cache_new(rdpContext* context); FREERDP_LOCAL void free_bitmap_update(rdpContext* context, BITMAP_UPDATE* pointer); WINPR_ATTR_MALLOC(free_bitmap_update, 2) + WINPR_ATTR_NODISCARD FREERDP_LOCAL BITMAP_UPDATE* copy_bitmap_update(rdpContext* context, const BITMAP_UPDATE* pointer); FREERDP_LOCAL void free_cache_bitmap_order(rdpContext* context, CACHE_BITMAP_ORDER* order); WINPR_ATTR_MALLOC(free_cache_bitmap_order, 2) + WINPR_ATTR_NODISCARD FREERDP_LOCAL CACHE_BITMAP_ORDER* copy_cache_bitmap_order(rdpContext* context, const CACHE_BITMAP_ORDER* order); @@ -78,6 +81,7 @@ extern "C" CACHE_BITMAP_V2_ORDER* order); WINPR_ATTR_MALLOC(free_cache_bitmap_v2_order, 2) + WINPR_ATTR_NODISCARD FREERDP_LOCAL CACHE_BITMAP_V2_ORDER* copy_cache_bitmap_v2_order(rdpContext* context, const CACHE_BITMAP_V2_ORDER* order); @@ -85,6 +89,7 @@ extern "C" CACHE_BITMAP_V3_ORDER* order); WINPR_ATTR_MALLOC(free_cache_bitmap_v3_order, 2) + WINPR_ATTR_NODISCARD FREERDP_LOCAL CACHE_BITMAP_V3_ORDER* copy_cache_bitmap_v3_order(rdpContext* context, const CACHE_BITMAP_V3_ORDER* order); diff --git a/libfreerdp/cache/brush.h b/libfreerdp/cache/brush.h index 101c2374f..73ee3bf14 100644 --- a/libfreerdp/cache/brush.h +++ b/libfreerdp/cache/brush.h @@ -42,11 +42,13 @@ extern "C" FREERDP_LOCAL void brush_cache_free(rdpBrushCache* brush); WINPR_ATTR_MALLOC(brush_cache_free, 1) + WINPR_ATTR_NODISCARD FREERDP_LOCAL rdpBrushCache* brush_cache_new(rdpContext* context); FREERDP_LOCAL void free_cache_brush_order(rdpContext* context, CACHE_BRUSH_ORDER* order); WINPR_ATTR_MALLOC(free_cache_brush_order, 1) + WINPR_ATTR_NODISCARD FREERDP_LOCAL CACHE_BRUSH_ORDER* copy_cache_brush_order(rdpContext* context, const CACHE_BRUSH_ORDER* order); diff --git a/libfreerdp/cache/cache.h b/libfreerdp/cache/cache.h index 614f1a9af..21625cdce 100644 --- a/libfreerdp/cache/cache.h +++ b/libfreerdp/cache/cache.h @@ -51,18 +51,21 @@ extern "C" FREERDP_LOCAL void cache_free(rdpCache* cache); WINPR_ATTR_MALLOC(cache_free, 1) + WINPR_ATTR_NODISCARD FREERDP_LOCAL rdpCache* cache_new(rdpContext* context); FREERDP_LOCAL void free_cache_color_table_order(rdpContext* context, CACHE_COLOR_TABLE_ORDER* order); WINPR_ATTR_MALLOC(free_cache_color_table_order, 2) + WINPR_ATTR_NODISCARD FREERDP_LOCAL CACHE_COLOR_TABLE_ORDER* copy_cache_color_table_order(rdpContext* context, const CACHE_COLOR_TABLE_ORDER* order); FREERDP_LOCAL void free_surface_bits_command(rdpContext* context, SURFACE_BITS_COMMAND* order); WINPR_ATTR_MALLOC(free_surface_bits_command, 2) + WINPR_ATTR_NODISCARD FREERDP_LOCAL SURFACE_BITS_COMMAND* copy_surface_bits_command(rdpContext* context, const SURFACE_BITS_COMMAND* order); diff --git a/libfreerdp/cache/glyph.h b/libfreerdp/cache/glyph.h index 50e57aa37..f232c0195 100644 --- a/libfreerdp/cache/glyph.h +++ b/libfreerdp/cache/glyph.h @@ -61,15 +61,22 @@ extern "C" FREERDP_LOCAL void glyph_cache_free(rdpGlyphCache* glyph); WINPR_ATTR_MALLOC(glyph_cache_free, 1) + WINPR_ATTR_NODISCARD FREERDP_LOCAL rdpGlyphCache* glyph_cache_new(rdpContext* context); - FREERDP_LOCAL CACHE_GLYPH_ORDER* copy_cache_glyph_order(rdpContext* context, - const CACHE_GLYPH_ORDER* glyph); FREERDP_LOCAL void free_cache_glyph_order(rdpContext* context, CACHE_GLYPH_ORDER* glyph); + WINPR_ATTR_MALLOC(free_cache_glyph_order, 1) + WINPR_ATTR_NODISCARD + FREERDP_LOCAL CACHE_GLYPH_ORDER* copy_cache_glyph_order(rdpContext* context, + const CACHE_GLYPH_ORDER* glyph); + + FREERDP_LOCAL void free_cache_glyph_v2_order(rdpContext* context, CACHE_GLYPH_V2_ORDER* glyph); + + WINPR_ATTR_MALLOC(free_cache_glyph_v2_order, 1) + WINPR_ATTR_NODISCARD FREERDP_LOCAL CACHE_GLYPH_V2_ORDER* copy_cache_glyph_v2_order(rdpContext* context, const CACHE_GLYPH_V2_ORDER* glyph); - FREERDP_LOCAL void free_cache_glyph_v2_order(rdpContext* context, CACHE_GLYPH_V2_ORDER* glyph); #ifdef __cplusplus } diff --git a/libfreerdp/cache/nine_grid.h b/libfreerdp/cache/nine_grid.h index 4f0ce0290..e8847f928 100644 --- a/libfreerdp/cache/nine_grid.h +++ b/libfreerdp/cache/nine_grid.h @@ -41,6 +41,7 @@ extern "C" FREERDP_LOCAL void nine_grid_cache_free(rdpNineGridCache* nine_grid); WINPR_ATTR_MALLOC(nine_grid_cache_free, 1) + WINPR_ATTR_NODISCARD FREERDP_LOCAL rdpNineGridCache* nine_grid_cache_new(rdpContext* context); #ifdef __cplusplus diff --git a/libfreerdp/cache/offscreen.h b/libfreerdp/cache/offscreen.h index bdc89cce9..e176412a2 100644 --- a/libfreerdp/cache/offscreen.h +++ b/libfreerdp/cache/offscreen.h @@ -34,6 +34,7 @@ extern "C" { #endif + WINPR_ATTR_NODISCARD FREERDP_LOCAL rdpBitmap* offscreen_cache_get(rdpOffscreenCache* offscreen_cache, UINT32 index); FREERDP_LOCAL void offscreen_cache_register_callbacks(rdpUpdate* update); @@ -41,6 +42,7 @@ extern "C" FREERDP_LOCAL void offscreen_cache_free(rdpOffscreenCache* offscreen); WINPR_ATTR_MALLOC(offscreen_cache_free, 1) + WINPR_ATTR_NODISCARD FREERDP_LOCAL rdpOffscreenCache* offscreen_cache_new(rdpContext* context); #ifdef __cplusplus diff --git a/libfreerdp/cache/palette.h b/libfreerdp/cache/palette.h index fb5be6a75..87715d14c 100644 --- a/libfreerdp/cache/palette.h +++ b/libfreerdp/cache/palette.h @@ -50,11 +50,13 @@ extern "C" FREERDP_LOCAL void palette_cache_free(rdpPaletteCache* palette_cache); WINPR_ATTR_MALLOC(palette_cache_free, 1) + WINPR_ATTR_NODISCARD FREERDP_LOCAL rdpPaletteCache* palette_cache_new(rdpContext* context); FREERDP_LOCAL void free_palette_update(rdpContext* context, PALETTE_UPDATE* pointer); WINPR_ATTR_MALLOC(free_palette_update, 2) + WINPR_ATTR_NODISCARD FREERDP_LOCAL PALETTE_UPDATE* copy_palette_update(rdpContext* context, const PALETTE_UPDATE* pointer); diff --git a/libfreerdp/cache/pointer.h b/libfreerdp/cache/pointer.h index c54e4f66c..425270618 100644 --- a/libfreerdp/cache/pointer.h +++ b/libfreerdp/cache/pointer.h @@ -45,12 +45,14 @@ extern "C" FREERDP_LOCAL void pointer_cache_free(rdpPointerCache* pointer_cache); WINPR_ATTR_MALLOC(pointer_cache_free, 1) + WINPR_ATTR_NODISCARD FREERDP_LOCAL rdpPointerCache* pointer_cache_new(rdpContext* context); FREERDP_LOCAL void free_pointer_color_update(rdpContext* context, POINTER_COLOR_UPDATE* pointer); WINPR_ATTR_MALLOC(free_pointer_color_update, 1) + WINPR_ATTR_NODISCARD FREERDP_LOCAL POINTER_COLOR_UPDATE* copy_pointer_color_update(rdpContext* context, const POINTER_COLOR_UPDATE* pointer); @@ -58,12 +60,14 @@ extern "C" POINTER_LARGE_UPDATE* pointer); WINPR_ATTR_MALLOC(free_pointer_large_update, 1) + WINPR_ATTR_NODISCARD FREERDP_LOCAL POINTER_LARGE_UPDATE* copy_pointer_large_update(rdpContext* context, const POINTER_LARGE_UPDATE* pointer); FREERDP_LOCAL void free_pointer_new_update(rdpContext* context, POINTER_NEW_UPDATE* pointer); WINPR_ATTR_MALLOC(free_pointer_new_update, 1) + WINPR_ATTR_NODISCARD FREERDP_LOCAL POINTER_NEW_UPDATE* copy_pointer_new_update(rdpContext* context, const POINTER_NEW_UPDATE* pointer); @@ -71,6 +75,7 @@ extern "C" POINTER_CACHED_UPDATE* pointer); WINPR_ATTR_MALLOC(free_pointer_cached_update, 1) + WINPR_ATTR_NODISCARD FREERDP_LOCAL POINTER_CACHED_UPDATE* copy_pointer_cached_update(rdpContext* context, const POINTER_CACHED_UPDATE* pointer); @@ -78,6 +83,7 @@ extern "C" POINTER_POSITION_UPDATE* pointer); WINPR_ATTR_MALLOC(free_pointer_position_update, 1) + WINPR_ATTR_NODISCARD FREERDP_LOCAL POINTER_POSITION_UPDATE* copy_pointer_position_update(rdpContext* context, const POINTER_POSITION_UPDATE* pointer); @@ -85,6 +91,7 @@ extern "C" POINTER_SYSTEM_UPDATE* pointer); WINPR_ATTR_MALLOC(free_pointer_system_update, 1) + WINPR_ATTR_NODISCARD FREERDP_LOCAL POINTER_SYSTEM_UPDATE* copy_pointer_system_update(rdpContext* context, const POINTER_SYSTEM_UPDATE* pointer); diff --git a/libfreerdp/codec/bulk.h b/libfreerdp/codec/bulk.h index fece0d669..fd229e97e 100644 --- a/libfreerdp/codec/bulk.h +++ b/libfreerdp/codec/bulk.h @@ -42,6 +42,7 @@ FREERDP_LOCAL void bulk_reset(rdpBulk* WINPR_RESTRICT bulk); FREERDP_LOCAL void bulk_free(rdpBulk* bulk); WINPR_ATTR_MALLOC(bulk_free, 1) +WINPR_ATTR_NODISCARD FREERDP_LOCAL rdpBulk* bulk_new(rdpContext* context); #endif /* FREERDP_LIB_CORE_BULK_H */ diff --git a/libfreerdp/codec/dsp_ffmpeg.h b/libfreerdp/codec/dsp_ffmpeg.h index 973e3716e..20c584c20 100644 --- a/libfreerdp/codec/dsp_ffmpeg.h +++ b/libfreerdp/codec/dsp_ffmpeg.h @@ -35,7 +35,9 @@ void freerdp_dsp_ffmpeg_context_free(FREERDP_DSP_CONTEXT* context); WINPR_ATTR_MALLOC(freerdp_dsp_ffmpeg_context_free, 1) +WINPR_ATTR_NODISCARD FREERDP_DSP_CONTEXT* freerdp_dsp_ffmpeg_context_new(BOOL encode); + BOOL freerdp_dsp_ffmpeg_supports_format(const AUDIO_FORMAT* format, BOOL encode); BOOL freerdp_dsp_ffmpeg_encode(FREERDP_DSP_CONTEXT* context, const AUDIO_FORMAT* srcFormat, const BYTE* data, size_t length, wStream* out); diff --git a/libfreerdp/codec/region.c b/libfreerdp/codec/region.c index d2d3353be..69a9f94a6 100644 --- a/libfreerdp/codec/region.c +++ b/libfreerdp/codec/region.c @@ -204,6 +204,7 @@ void region16_clear(REGION16* region) } WINPR_ATTR_MALLOC(freeRegion, 1) +WINPR_ATTR_NODISCARD static REGION16_DATA* allocateRegion(size_t nbItems) { REGION16_DATA* data = calloc(1, sizeof(REGION16_DATA)); diff --git a/libfreerdp/core/aad.c b/libfreerdp/core/aad.c index 6b052b057..8ac26874d 100644 --- a/libfreerdp/core/aad.c +++ b/libfreerdp/core/aad.c @@ -1013,6 +1013,7 @@ WINPR_JSON* freerdp_utils_aad_get_wellknown_custom_object(rdpContext* context, c } WINPR_ATTR_MALLOC(WINPR_JSON_Delete, 1) +WINPR_ATTR_NODISCARD WINPR_JSON* freerdp_utils_aad_get_wellknown(wLog* log, const char* base, const char* tenantid) { WINPR_ASSERT(base); diff --git a/libfreerdp/core/aad.h b/libfreerdp/core/aad.h index 38e843d43..fc1f21b2d 100644 --- a/libfreerdp/core/aad.h +++ b/libfreerdp/core/aad.h @@ -42,6 +42,7 @@ FREERDP_LOCAL AAD_STATE aad_get_state(rdpAad* aad); FREERDP_LOCAL void aad_free(rdpAad* aad); WINPR_ATTR_MALLOC(aad_free, 1) +WINPR_ATTR_NODISCARD FREERDP_LOCAL rdpAad* aad_new(rdpContext* context); #endif /* FREERDP_LIB_CORE_AAD_H */ diff --git a/libfreerdp/core/autodetect.h b/libfreerdp/core/autodetect.h index 77da5ac8b..367cd9fe7 100644 --- a/libfreerdp/core/autodetect.h +++ b/libfreerdp/core/autodetect.h @@ -35,6 +35,7 @@ FREERDP_LOCAL void autodetect_free(rdpAutoDetect* autodetect); WINPR_ATTR_MALLOC(autodetect_free, 1) +WINPR_ATTR_NODISCARD FREERDP_LOCAL rdpAutoDetect* autodetect_new(rdpContext* context); FREERDP_LOCAL state_run_t autodetect_recv_request_packet(rdpAutoDetect* autodetect, diff --git a/libfreerdp/core/client.h b/libfreerdp/core/client.h index be69e5692..8361bf914 100644 --- a/libfreerdp/core/client.h +++ b/libfreerdp/core/client.h @@ -114,6 +114,7 @@ struct rdp_channels FREERDP_LOCAL void freerdp_channels_free(rdpChannels* channels); WINPR_ATTR_MALLOC(freerdp_channels_free, 1) +WINPR_ATTR_NODISCARD FREERDP_LOCAL rdpChannels* freerdp_channels_new(freerdp* instance); FREERDP_LOCAL UINT freerdp_channels_disconnect(rdpChannels* channels, freerdp* instance); diff --git a/libfreerdp/core/credssp_auth.h b/libfreerdp/core/credssp_auth.h index 8d9fcbfe0..061acb040 100644 --- a/libfreerdp/core/credssp_auth.h +++ b/libfreerdp/core/credssp_auth.h @@ -35,6 +35,7 @@ typedef struct rdp_credssp_auth rdpCredsspAuth; FREERDP_LOCAL void credssp_auth_free(rdpCredsspAuth* auth); WINPR_ATTR_MALLOC(credssp_auth_free, 1) +WINPR_ATTR_NODISCARD FREERDP_LOCAL rdpCredsspAuth* credssp_auth_new(const rdpContext* context); FREERDP_LOCAL BOOL credssp_auth_init(rdpCredsspAuth* auth, TCHAR* pkg_name, diff --git a/libfreerdp/core/fastpath.h b/libfreerdp/core/fastpath.h index 9b34ce7c4..c4d9851e2 100644 --- a/libfreerdp/core/fastpath.h +++ b/libfreerdp/core/fastpath.h @@ -140,9 +140,11 @@ FREERDP_LOCAL BOOL fastpath_send_multiple_input_pdu(rdpFastPath* fastpath, wStre FREERDP_LOCAL BOOL fastpath_send_input_pdu(rdpFastPath* fastpath, wStream* s, UINT16 sec_flags); WINPR_ATTR_MALLOC(Stream_Release, 1) +WINPR_ATTR_NODISCARD FREERDP_LOCAL wStream* fastpath_update_pdu_init(rdpFastPath* fastpath); WINPR_ATTR_MALLOC(Stream_Free, 1) +WINPR_ATTR_NODISCARD FREERDP_LOCAL wStream* fastpath_update_pdu_init_new(rdpFastPath* fastpath); FREERDP_LOCAL BOOL fastpath_send_update_pdu(rdpFastPath* fastpath, BYTE updateCode, wStream* s, BOOL skipCompression); diff --git a/libfreerdp/core/gateway/http.h b/libfreerdp/core/gateway/http.h index 92ce114e7..6070f6200 100644 --- a/libfreerdp/core/gateway/http.h +++ b/libfreerdp/core/gateway/http.h @@ -56,6 +56,7 @@ typedef struct s_http_context HttpContext; FREERDP_LOCAL void http_context_free(HttpContext* context); WINPR_ATTR_MALLOC(http_context_free, 1) +WINPR_ATTR_NODISCARD FREERDP_LOCAL HttpContext* http_context_new(void); FREERDP_LOCAL BOOL http_context_set_method(HttpContext* context, const char* Method); @@ -96,6 +97,7 @@ typedef struct s_http_request HttpRequest; FREERDP_LOCAL void http_request_free(HttpRequest* request); WINPR_ATTR_MALLOC(http_request_free, 1) +WINPR_ATTR_NODISCARD FREERDP_LOCAL HttpRequest* http_request_new(void); FREERDP_LOCAL BOOL http_request_set_method(HttpRequest* request, const char* Method); @@ -121,9 +123,11 @@ typedef struct s_http_response HttpResponse; FREERDP_LOCAL void http_response_free(HttpResponse* response); WINPR_ATTR_MALLOC(http_response_free, 1) +WINPR_ATTR_NODISCARD FREERDP_LOCAL HttpResponse* http_response_new(void); WINPR_ATTR_MALLOC(http_response_free, 1) +WINPR_ATTR_NODISCARD FREERDP_LOCAL HttpResponse* http_response_recv(rdpTls* tls, BOOL readContentLength); FREERDP_LOCAL UINT16 http_response_get_status_code(const HttpResponse* response); diff --git a/libfreerdp/core/gateway/rdg.h b/libfreerdp/core/gateway/rdg.h index 29d1a220a..1d11b196c 100644 --- a/libfreerdp/core/gateway/rdg.h +++ b/libfreerdp/core/gateway/rdg.h @@ -32,6 +32,7 @@ typedef struct rdp_rdg rdpRdg; FREERDP_LOCAL void rdg_free(rdpRdg* rdg); WINPR_ATTR_MALLOC(rdg_free, 1) +WINPR_ATTR_NODISCARD FREERDP_LOCAL rdpRdg* rdg_new(rdpContext* context); FREERDP_LOCAL BIO* rdg_get_front_bio_and_take_ownership(rdpRdg* rdg); diff --git a/libfreerdp/core/gateway/rpc.h b/libfreerdp/core/gateway/rpc.h index a8912efab..152d482ab 100644 --- a/libfreerdp/core/gateway/rpc.h +++ b/libfreerdp/core/gateway/rpc.h @@ -783,6 +783,7 @@ FREERDP_LOCAL SSIZE_T rpc_channel_read(RpcChannel* channel, wStream* s, size_t l FREERDP_LOCAL void rpc_channel_free(RpcChannel* channel); WINPR_ATTR_MALLOC(rpc_channel_free, 1) +WINPR_ATTR_NODISCARD FREERDP_LOCAL RpcOutChannel* rpc_out_channel_new(rdpRpc* rpc, const GUID* guid); FREERDP_LOCAL int rpc_out_channel_replacement_connect(RpcOutChannel* outChannel, uint32_t timeout); @@ -800,6 +801,7 @@ FREERDP_LOCAL BOOL rpc_connect(rdpRpc* rpc, UINT32 timeout); FREERDP_LOCAL void rpc_free(rdpRpc* rpc); WINPR_ATTR_MALLOC(rpc_free, 1) +WINPR_ATTR_NODISCARD FREERDP_LOCAL rdpRpc* rpc_new(rdpTransport* transport); #endif /* FREERDP_LIB_CORE_GATEWAY_RPC_H */ diff --git a/libfreerdp/core/gateway/rpc_client.h b/libfreerdp/core/gateway/rpc_client.h index 4e075b8a7..d827be260 100644 --- a/libfreerdp/core/gateway/rpc_client.h +++ b/libfreerdp/core/gateway/rpc_client.h @@ -31,6 +31,7 @@ FREERDP_LOCAL RpcClientCall* rpc_client_call_find_by_id(RpcClient* client, UINT3 FREERDP_LOCAL void rpc_client_call_free(RpcClientCall* client_call); WINPR_ATTR_MALLOC(rpc_client_call_free, 1) +WINPR_ATTR_NODISCARD FREERDP_LOCAL RpcClientCall* rpc_client_call_new(UINT32 CallId, UINT32 OpNum); FREERDP_LOCAL int rpc_in_channel_send_pdu(RpcInChannel* inChannel, const BYTE* buffer, @@ -46,6 +47,7 @@ FREERDP_LOCAL BOOL rpc_client_write_call(rdpRpc* rpc, wStream* s, UINT16 opnum); FREERDP_LOCAL void rpc_client_free(RpcClient* client); WINPR_ATTR_MALLOC(rpc_client_free, 1) +WINPR_ATTR_NODISCARD FREERDP_LOCAL RpcClient* rpc_client_new(rdpContext* context, UINT32 max_recv_frag); #endif /* FREERDP_LIB_CORE_GATEWAY_RPC_CLIENT_H */ diff --git a/libfreerdp/core/gateway/rts.c b/libfreerdp/core/gateway/rts.c index 353a8403b..592348d27 100644 --- a/libfreerdp/core/gateway/rts.c +++ b/libfreerdp/core/gateway/rts.c @@ -600,6 +600,7 @@ static void rts_context_elem_free(p_cont_elem_t* ptr) } WINPR_ATTR_MALLOC(rts_context_elem_free, 1) +WINPR_ATTR_NODISCARD static p_cont_elem_t* rts_context_elem_new(size_t count) { p_cont_elem_t* ctx = calloc(count, sizeof(p_cont_elem_t)); diff --git a/libfreerdp/core/gateway/tsg.h b/libfreerdp/core/gateway/tsg.h index 81b50a7e5..6f01799f4 100644 --- a/libfreerdp/core/gateway/tsg.h +++ b/libfreerdp/core/gateway/tsg.h @@ -102,6 +102,7 @@ typedef enum FREERDP_LOCAL void tsg_free(rdpTsg* tsg); WINPR_ATTR_MALLOC(tsg_free, 1) +WINPR_ATTR_NODISCARD FREERDP_LOCAL rdpTsg* tsg_new(rdpTransport* transport); FREERDP_LOCAL BOOL tsg_proxy_begin(rdpTsg* tsg); diff --git a/libfreerdp/core/gateway/websocket.h b/libfreerdp/core/gateway/websocket.h index edaf152cd..463eace8b 100644 --- a/libfreerdp/core/gateway/websocket.h +++ b/libfreerdp/core/gateway/websocket.h @@ -55,6 +55,7 @@ typedef struct s_websocket_context websocket_context; FREERDP_LOCAL void websocket_context_free(websocket_context* context); WINPR_ATTR_MALLOC(websocket_context_free, 1) +WINPR_ATTR_NODISCARD FREERDP_LOCAL websocket_context* websocket_context_new(void); FREERDP_LOCAL BOOL websocket_context_reset(websocket_context* context); @@ -67,6 +68,7 @@ FREERDP_LOCAL int websocket_context_read(websocket_context* encodingContext, BIO BYTE* pBuffer, size_t size); WINPR_ATTR_MALLOC(Stream_Free, 1) +WINPR_ATTR_NODISCARD FREERDP_LOCAL wStream* websocket_context_packet_new(size_t len, WEBSOCKET_OPCODE opcode, UINT32* pMaskingKey); diff --git a/libfreerdp/core/gateway/wst.h b/libfreerdp/core/gateway/wst.h index e0f2f7aa2..cb1bfa6b8 100644 --- a/libfreerdp/core/gateway/wst.h +++ b/libfreerdp/core/gateway/wst.h @@ -32,6 +32,7 @@ typedef struct rdp_wst rdpWst; FREERDP_LOCAL void wst_free(rdpWst* wst); WINPR_ATTR_MALLOC(wst_free, 1) +WINPR_ATTR_NODISCARD FREERDP_LOCAL rdpWst* wst_new(rdpContext* context); FREERDP_LOCAL BIO* wst_get_front_bio_and_take_ownership(rdpWst* wst); diff --git a/libfreerdp/core/heartbeat.h b/libfreerdp/core/heartbeat.h index 5fc6a1200..afe5d39cf 100644 --- a/libfreerdp/core/heartbeat.h +++ b/libfreerdp/core/heartbeat.h @@ -36,6 +36,7 @@ FREERDP_LOCAL state_run_t rdp_recv_heartbeat_packet(rdpRdp* rdp, wStream* s); FREERDP_LOCAL void heartbeat_free(rdpHeartbeat* heartbeat); WINPR_ATTR_MALLOC(heartbeat_free, 1) +WINPR_ATTR_NODISCARD FREERDP_LOCAL rdpHeartbeat* heartbeat_new(void); #define HEARTBEAT_TAG FREERDP_TAG("core.heartbeat") diff --git a/libfreerdp/core/input.h b/libfreerdp/core/input.h index 62388a8bd..09dc98d84 100644 --- a/libfreerdp/core/input.h +++ b/libfreerdp/core/input.h @@ -65,6 +65,7 @@ FREERDP_LOCAL BOOL input_register_client_callbacks(rdpInput* input); FREERDP_LOCAL void input_free(rdpInput* input); WINPR_ATTR_MALLOC(input_free, 1) +WINPR_ATTR_NODISCARD FREERDP_LOCAL rdpInput* input_new(rdpRdp* rdp); #endif /* FREERDP_LIB_CORE_INPUT_H */ diff --git a/libfreerdp/core/license.h b/libfreerdp/core/license.h index f8770bd8b..1be41a21a 100644 --- a/libfreerdp/core/license.h +++ b/libfreerdp/core/license.h @@ -67,6 +67,7 @@ FREERDP_LOCAL BOOL license_server_send_request(rdpLicense* license); FREERDP_LOCAL void license_free(rdpLicense* license); WINPR_ATTR_MALLOC(license_free, 1) +WINPR_ATTR_NODISCARD FREERDP_LOCAL rdpLicense* license_new(rdpRdp* rdp); #define LICENSE_TAG FREERDP_TAG("core.license") diff --git a/libfreerdp/core/mcs.h b/libfreerdp/core/mcs.h index a52e2e52c..38393b486 100644 --- a/libfreerdp/core/mcs.h +++ b/libfreerdp/core/mcs.h @@ -185,6 +185,7 @@ FREERDP_LOCAL BOOL mcs_client_begin(rdpMcs* mcs); FREERDP_LOCAL void mcs_free(rdpMcs* mcs); WINPR_ATTR_MALLOC(mcs_free, 1) +WINPR_ATTR_NODISCARD FREERDP_LOCAL rdpMcs* mcs_new(rdpContext* context); #endif /* FREERDP_LIB_CORE_MCS_H */ diff --git a/libfreerdp/core/message.h b/libfreerdp/core/message.h index a29486594..ce29527ec 100644 --- a/libfreerdp/core/message.h +++ b/libfreerdp/core/message.h @@ -136,6 +136,7 @@ FREERDP_LOCAL int update_message_queue_process_pending_messages(rdpUpdate* updat FREERDP_LOCAL void update_message_proxy_free(rdpUpdateProxy* message); WINPR_ATTR_MALLOC(update_message_proxy_free, 1) +WINPR_ATTR_NODISCARD FREERDP_LOCAL rdpUpdateProxy* update_message_proxy_new(rdpUpdate* update); /** diff --git a/libfreerdp/core/multitransport.h b/libfreerdp/core/multitransport.h index 4d312384a..5cd35a07a 100644 --- a/libfreerdp/core/multitransport.h +++ b/libfreerdp/core/multitransport.h @@ -54,6 +54,7 @@ FREERDP_LOCAL BOOL multitransport_client_send_response(rdpMultitransport* multi, FREERDP_LOCAL void multitransport_free(rdpMultitransport* multi); WINPR_ATTR_MALLOC(multitransport_free, 1) +WINPR_ATTR_NODISCARD FREERDP_LOCAL rdpMultitransport* multitransport_new(rdpRdp* rdp, UINT16 protocol); #endif /* FREERDP_LIB_CORE_MULTITRANSPORT_H */ diff --git a/libfreerdp/core/nego.h b/libfreerdp/core/nego.h index ab29c2f4c..d3bd1fe6a 100644 --- a/libfreerdp/core/nego.h +++ b/libfreerdp/core/nego.h @@ -109,6 +109,7 @@ FREERDP_LOCAL BOOL nego_send_negotiation_response(rdpNego* nego); FREERDP_LOCAL void nego_free(rdpNego* nego); WINPR_ATTR_MALLOC(nego_free, 1) +WINPR_ATTR_NODISCARD FREERDP_LOCAL rdpNego* nego_new(rdpTransport* transport); FREERDP_LOCAL void nego_init(rdpNego* nego); diff --git a/libfreerdp/core/nla.c b/libfreerdp/core/nla.c index f768f88b0..17d398aa0 100644 --- a/libfreerdp/core/nla.c +++ b/libfreerdp/core/nla.c @@ -1250,6 +1250,7 @@ static BOOL nla_credentialTypeValid(UINT32 type) } WINPR_ATTR_MALLOC(free, 1) +WINPR_ATTR_NODISCARD static MSV1_0_REMOTE_SUPPLEMENTAL_CREDENTIAL* nla_read_NtlmCreds(WINPR_ATTR_UNUSED rdpNla* nla, wStream* s) { diff --git a/libfreerdp/core/nla.h b/libfreerdp/core/nla.h index e5a4541ba..4ad840a8f 100644 --- a/libfreerdp/core/nla.h +++ b/libfreerdp/core/nla.h @@ -72,6 +72,7 @@ FREERDP_LOCAL BOOL nla_revert_to_self(rdpNla* nla); FREERDP_LOCAL void nla_free(rdpNla* nla); WINPR_ATTR_MALLOC(nla_free, 1) +WINPR_ATTR_NODISCARD FREERDP_LOCAL rdpNla* nla_new(rdpContext* context, rdpTransport* transport); FREERDP_LOCAL void nla_set_early_user_auth(rdpNla* nla, BOOL earlyUserAuth); diff --git a/libfreerdp/core/orders.c b/libfreerdp/core/orders.c index 298dea74c..8eb6c4f2d 100644 --- a/libfreerdp/core/orders.c +++ b/libfreerdp/core/orders.c @@ -2329,6 +2329,7 @@ static BOOL update_read_ellipse_cb_order(const char* orderName, wStream* s, /* Secondary Drawing Orders */ WINPR_ATTR_MALLOC(free_cache_bitmap_order, 2) +WINPR_ATTR_NODISCARD static CACHE_BITMAP_ORDER* update_read_cache_bitmap_order(rdpUpdate* update, wStream* s, BOOL compressed, UINT16 flags) { @@ -2449,6 +2450,7 @@ BOOL update_write_cache_bitmap_order(wStream* s, const CACHE_BITMAP_ORDER* cache } WINPR_ATTR_MALLOC(free_cache_bitmap_v2_order, 2) +WINPR_ATTR_NODISCARD static CACHE_BITMAP_V2_ORDER* update_read_cache_bitmap_v2_order(rdpUpdate* update, wStream* s, BOOL compressed, UINT16 flags) { @@ -2634,6 +2636,7 @@ BOOL update_write_cache_bitmap_v2_order(wStream* s, CACHE_BITMAP_V2_ORDER* cache } WINPR_ATTR_MALLOC(free_cache_bitmap_v3_order, 2) +WINPR_ATTR_NODISCARD static CACHE_BITMAP_V3_ORDER* update_read_cache_bitmap_v3_order(rdpUpdate* update, wStream* s, UINT16 flags) { @@ -2742,6 +2745,7 @@ BOOL update_write_cache_bitmap_v3_order(wStream* s, CACHE_BITMAP_V3_ORDER* cache } WINPR_ATTR_MALLOC(free_cache_color_table_order, 2) +WINPR_ATTR_NODISCARD static CACHE_COLOR_TABLE_ORDER* update_read_cache_color_table_order(rdpUpdate* update, wStream* s, WINPR_ATTR_UNUSED UINT16 flags) { diff --git a/libfreerdp/core/rdp.h b/libfreerdp/core/rdp.h index e66d005b5..8a8a873a7 100644 --- a/libfreerdp/core/rdp.h +++ b/libfreerdp/core/rdp.h @@ -223,7 +223,14 @@ FREERDP_LOCAL BOOL rdp_read_share_data_header(rdpRdp* rdp, wStream* s, UINT16* l UINT32* share_id, BYTE* compressed_type, UINT16* compressed_len); +FREERDP_LOCAL BOOL rdp_send(rdpRdp* rdp, wStream* s, UINT16 channelId, UINT16 sec_flags); + +WINPR_ATTR_MALLOC(rdp_send, 2) +WINPR_ATTR_NODISCARD FREERDP_LOCAL wStream* rdp_send_stream_init(rdpRdp* rdp, UINT16* sec_flags); + +WINPR_ATTR_MALLOC(Stream_Release, 1) +WINPR_ATTR_NODISCARD FREERDP_LOCAL wStream* rdp_send_stream_pdu_init(rdpRdp* rdp, UINT16* sec_flags); FREERDP_LOCAL BOOL rdp_read_header(rdpRdp* rdp, wStream* s, UINT16* length, UINT16* channel_id); @@ -233,20 +240,26 @@ FREERDP_LOCAL BOOL rdp_write_header(rdpRdp* rdp, wStream* s, size_t length, UINT FREERDP_LOCAL BOOL rdp_send_pdu(rdpRdp* rdp, wStream* s, UINT16 type, UINT16 channel_id, UINT16 sec_flags); -FREERDP_LOCAL wStream* rdp_data_pdu_init(rdpRdp* rdp, UINT16* sec_flags); FREERDP_LOCAL BOOL rdp_send_data_pdu(rdpRdp* rdp, wStream* s, BYTE type, UINT16 channel_id, UINT16 sec_flags); -FREERDP_LOCAL state_run_t rdp_recv_data_pdu(rdpRdp* rdp, wStream* s); -FREERDP_LOCAL BOOL rdp_send(rdpRdp* rdp, wStream* s, UINT16 channelId, UINT16 sec_flags); +WINPR_ATTR_MALLOC(rdp_send_data_pdu, 2) +WINPR_ATTR_NODISCARD +FREERDP_LOCAL wStream* rdp_data_pdu_init(rdpRdp* rdp, UINT16* sec_flags); + +FREERDP_LOCAL state_run_t rdp_recv_data_pdu(rdpRdp* rdp, wStream* s); FREERDP_LOCAL BOOL rdp_send_channel_data(rdpRdp* rdp, UINT16 channelId, const BYTE* data, size_t size); FREERDP_LOCAL BOOL rdp_channel_send_packet(rdpRdp* rdp, UINT16 channelId, size_t totalSize, UINT32 flags, const BYTE* data, size_t chunkSize); -FREERDP_LOCAL wStream* rdp_message_channel_pdu_init(rdpRdp* rdp, UINT16* sec_flags); FREERDP_LOCAL BOOL rdp_send_message_channel_pdu(rdpRdp* rdp, wStream* s, UINT16 sec_flags); + +WINPR_ATTR_MALLOC(rdp_send_message_channel_pdu, 2) +WINPR_ATTR_NODISCARD +FREERDP_LOCAL wStream* rdp_message_channel_pdu_init(rdpRdp* rdp, UINT16* sec_flags); + FREERDP_LOCAL state_run_t rdp_recv_message_channel_pdu(rdpRdp* rdp, wStream* s, UINT16 securityFlags); diff --git a/libfreerdp/core/rdstls.h b/libfreerdp/core/rdstls.h index 952f469a1..5cf5574f0 100644 --- a/libfreerdp/core/rdstls.h +++ b/libfreerdp/core/rdstls.h @@ -29,6 +29,7 @@ FREERDP_LOCAL SSIZE_T rdstls_parse_pdu(wLog* log, wStream* s); FREERDP_LOCAL void rdstls_free(rdpRdstls* rdstls); WINPR_ATTR_MALLOC(rdstls_free, 1) +WINPR_ATTR_NODISCARD FREERDP_LOCAL rdpRdstls* rdstls_new(rdpContext* context, rdpTransport* transport); FREERDP_LOCAL int rdstls_authenticate(rdpRdstls* rdstls); diff --git a/libfreerdp/core/server.h b/libfreerdp/core/server.h index ccd4bd335..f9a6eb6ce 100644 --- a/libfreerdp/core/server.h +++ b/libfreerdp/core/server.h @@ -268,6 +268,7 @@ FREERDP_LOCAL BOOL WINAPI FreeRDP_WTSLogonUser(HANDLE hServer, LPCSTR username, FREERDP_LOCAL void server_channel_common_free(rdpPeerChannel*); WINPR_ATTR_MALLOC(server_channel_common_free, 1) +WINPR_ATTR_NODISCARD FREERDP_LOCAL rdpPeerChannel* server_channel_common_new(freerdp_peer* client, UINT16 index, UINT32 channelId, size_t chunkSize, const wObject* callback, const char* name); diff --git a/libfreerdp/core/settings.c b/libfreerdp/core/settings.c index ea1d986dc..993670e7b 100644 --- a/libfreerdp/core/settings.c +++ b/libfreerdp/core/settings.c @@ -421,6 +421,7 @@ static void alloc_free(UINT32** ptr) } WINPR_ATTR_MALLOC(alloc_free, 1) +WINPR_ATTR_NODISCARD static UINT32** alloc_array(size_t count) { // NOLINTNEXTLINE(clang-analyzer-unix.MallocSizeof) diff --git a/libfreerdp/core/timer.h b/libfreerdp/core/timer.h index 0234cd96d..85fc2a7a6 100644 --- a/libfreerdp/core/timer.h +++ b/libfreerdp/core/timer.h @@ -28,6 +28,7 @@ typedef struct freerdp_timer_s FreeRDPTimer; FREERDP_LOCAL void freerdp_timer_free(FreeRDPTimer* timer); WINPR_ATTR_MALLOC(freerdp_timer_free, 1) +WINPR_ATTR_NODISCARD FREERDP_LOCAL FreeRDPTimer* freerdp_timer_new(rdpRdp* rdp); FREERDP_LOCAL bool freerdp_timer_poll(FreeRDPTimer* timer); diff --git a/libfreerdp/core/transport.h b/libfreerdp/core/transport.h index 153600b0d..5f786ee67 100644 --- a/libfreerdp/core/transport.h +++ b/libfreerdp/core/transport.h @@ -54,7 +54,10 @@ typedef enum typedef state_run_t (*TransportRecv)(rdpTransport* transport, wStream* stream, void* extra); +WINPR_ATTR_MALLOC(Stream_Release, 1) +WINPR_ATTR_NODISCARD FREERDP_LOCAL wStream* transport_send_stream_init(rdpTransport* transport, size_t size); + FREERDP_LOCAL BOOL transport_connect(rdpTransport* transport, const char* hostname, UINT16 port, DWORD timeout); FREERDP_LOCAL BOOL transport_connect_childsession(rdpTransport* transport); @@ -140,6 +143,8 @@ FREERDP_LOCAL rdpTls* transport_get_tls(rdpTransport* transport); FREERDP_LOCAL BOOL transport_set_tsg(rdpTransport* transport, rdpTsg* tsg); FREERDP_LOCAL rdpTsg* transport_get_tsg(rdpTransport* transport); +WINPR_ATTR_MALLOC(Stream_Release, 1) +WINPR_ATTR_NODISCARD FREERDP_LOCAL wStream* transport_take_from_pool(rdpTransport* transport, size_t size); FREERDP_LOCAL UINT64 transport_get_bytes_sent(rdpTransport* transport, BOOL resetCount); @@ -166,6 +171,7 @@ transport_connect_layer(rdpTransport* transport, const char* hostname, int port, FREERDP_LOCAL void transport_free(rdpTransport* transport); WINPR_ATTR_MALLOC(transport_free, 1) +WINPR_ATTR_NODISCARD FREERDP_LOCAL rdpTransport* transport_new(rdpContext* context); FREERDP_LOCAL void transport_set_early_user_auth_mode(rdpTransport* transport, BOOL EUAMode); diff --git a/libfreerdp/core/update.h b/libfreerdp/core/update.h index 1c883fdc1..acd84e9ec 100644 --- a/libfreerdp/core/update.h +++ b/libfreerdp/core/update.h @@ -175,6 +175,7 @@ static inline rdp_secondary_update_internal* secondary_update_cast(rdpSecondaryU FREERDP_LOCAL void update_free(rdpUpdate* update); WINPR_ATTR_MALLOC(update_free, 1) +WINPR_ATTR_NODISCARD FREERDP_LOCAL rdpUpdate* update_new(rdpRdp* rdp); FREERDP_LOCAL void update_reset_state(rdpUpdate* update); @@ -186,28 +187,36 @@ FREERDP_LOCAL BOOL update_recv_pointer(rdpUpdate* update, wStream* s); FREERDP_LOCAL BOOL update_recv(rdpUpdate* update, wStream* s); WINPR_ATTR_MALLOC(free_bitmap_update, 2) +WINPR_ATTR_NODISCARD FREERDP_LOCAL BITMAP_UPDATE* update_read_bitmap_update(rdpUpdate* update, wStream* s); WINPR_ATTR_MALLOC(free_palette_update, 2) +WINPR_ATTR_NODISCARD FREERDP_LOCAL PALETTE_UPDATE* update_read_palette(rdpUpdate* update, wStream* s); WINPR_ATTR_MALLOC(free_pointer_system_update, 2) +WINPR_ATTR_NODISCARD FREERDP_LOCAL POINTER_SYSTEM_UPDATE* update_read_pointer_system(rdpUpdate* update, wStream* s); WINPR_ATTR_MALLOC(free_pointer_position_update, 2) +WINPR_ATTR_NODISCARD FREERDP_LOCAL POINTER_POSITION_UPDATE* update_read_pointer_position(rdpUpdate* update, wStream* s); WINPR_ATTR_MALLOC(free_pointer_color_update, 2) +WINPR_ATTR_NODISCARD FREERDP_LOCAL POINTER_COLOR_UPDATE* update_read_pointer_color(rdpUpdate* update, wStream* s, BYTE xorBpp); WINPR_ATTR_MALLOC(free_pointer_large_update, 2) +WINPR_ATTR_NODISCARD FREERDP_LOCAL POINTER_LARGE_UPDATE* update_read_pointer_large(rdpUpdate* update, wStream* s); WINPR_ATTR_MALLOC(free_pointer_new_update, 2) +WINPR_ATTR_NODISCARD FREERDP_LOCAL POINTER_NEW_UPDATE* update_read_pointer_new(rdpUpdate* update, wStream* s); WINPR_ATTR_MALLOC(free_pointer_cached_update, 2) +WINPR_ATTR_NODISCARD FREERDP_LOCAL POINTER_CACHED_UPDATE* update_read_pointer_cached(rdpUpdate* update, wStream* s); FREERDP_LOCAL BOOL update_read_refresh_rect(rdpUpdate* update, wStream* s); diff --git a/libfreerdp/crypto/certificate.h b/libfreerdp/crypto/certificate.h index 6cc656ce3..86c112ca1 100644 --- a/libfreerdp/crypto/certificate.h +++ b/libfreerdp/crypto/certificate.h @@ -41,6 +41,7 @@ #define BB_RSA_SIGNATURE_BLOB 8 WINPR_ATTR_MALLOC(freerdp_certificate_free, 1) +WINPR_ATTR_NODISCARD FREERDP_LOCAL rdpCertificate* freerdp_certificate_new_from_x509(const X509* xcert, const STACK_OF(X509) * chain); @@ -50,6 +51,7 @@ FREERDP_LOCAL SSIZE_T freerdp_certificate_write_server_cert(const rdpCertificate UINT32 dwVersion, wStream* s); WINPR_ATTR_MALLOC(freerdp_certificate_free, 1) +WINPR_ATTR_NODISCARD FREERDP_LOCAL rdpCertificate* freerdp_certificate_clone(const rdpCertificate* certificate); FREERDP_LOCAL const rdpCertInfo* freerdp_certificate_get_info(const rdpCertificate* certificate); diff --git a/libfreerdp/crypto/tls.h b/libfreerdp/crypto/tls.h index 99e5224b1..9ba0c85c9 100644 --- a/libfreerdp/crypto/tls.h +++ b/libfreerdp/crypto/tls.h @@ -122,6 +122,7 @@ extern "C" FREERDP_LOCAL void freerdp_tls_free(rdpTls* tls); WINPR_ATTR_MALLOC(freerdp_tls_free, 1) + WINPR_ATTR_NODISCARD FREERDP_LOCAL rdpTls* freerdp_tls_new(rdpContext* context); #ifdef __cplusplus diff --git a/libfreerdp/utils/helpers.c b/libfreerdp/utils/helpers.c index c2c001363..85faa747b 100644 --- a/libfreerdp/utils/helpers.c +++ b/libfreerdp/utils/helpers.c @@ -28,6 +28,7 @@ #if !defined(WITH_FULL_CONFIG_PATH) WINPR_ATTR_MALLOC(free, 1) +WINPR_ATTR_NODISCARD static char* freerdp_settings_get_legacy_config_path(const char* filename) { char product[sizeof(FREERDP_PRODUCT_STRING)] = { 0 }; From 1e4c1cd5265b4d6f9691883f38c4d95e903bcae4 Mon Sep 17 00:00:00 2001 From: akallabeth Date: Mon, 26 Jan 2026 13:08:59 +0100 Subject: [PATCH 09/10] [winpr] mark all WINPR_ATTR_MALLOC also nodiscard --- winpr/include/winpr/bitstream.h | 1 + winpr/include/winpr/cmdline.h | 4 +++ winpr/include/winpr/collections.h | 12 +++++++++ winpr/include/winpr/comm.h | 1 + winpr/include/winpr/crt.h | 7 +++++ winpr/include/winpr/custom-crypto.h | 12 ++++++--- winpr/include/winpr/debug.h | 2 ++ winpr/include/winpr/environment.h | 5 ++++ winpr/include/winpr/file.h | 9 +++++++ winpr/include/winpr/image.h | 2 ++ winpr/include/winpr/ini.h | 1 + winpr/include/winpr/io.h | 1 + winpr/include/winpr/json.h | 6 +++++ winpr/include/winpr/memory.h | 4 +++ winpr/include/winpr/path.h | 6 +++++ winpr/include/winpr/pipe.h | 2 ++ winpr/include/winpr/print.h | 1 + winpr/include/winpr/stream.h | 3 +++ winpr/include/winpr/string.h | 2 ++ winpr/include/winpr/synch.h | 26 +++++++++++++++++++ winpr/include/winpr/thread.h | 2 ++ winpr/include/winpr/tools/makecert.h | 1 + winpr/include/winpr/winsock.h | 1 + winpr/include/winpr/wtsapi.h | 6 +++++ winpr/libwinpr/crypto/rc4.h | 1 + winpr/libwinpr/file/generic.c | 1 + winpr/libwinpr/sspi/Kerberos/kerberos.c | 2 ++ .../libwinpr/sspi/Schannel/schannel_openssl.h | 1 + winpr/libwinpr/utils/image.c | 1 + winpr/libwinpr/utils/unwind/debug.h | 2 ++ winpr/libwinpr/utils/wlog/BinaryAppender.h | 1 + winpr/libwinpr/utils/wlog/CallbackAppender.h | 1 + winpr/libwinpr/utils/wlog/ConsoleAppender.h | 1 + winpr/libwinpr/utils/wlog/FileAppender.h | 1 + winpr/libwinpr/utils/wlog/Layout.h | 1 + winpr/libwinpr/utils/wlog/SyslogAppender.h | 1 + winpr/libwinpr/utils/wlog/UdpAppender.h | 1 + 37 files changed, 128 insertions(+), 4 deletions(-) diff --git a/winpr/include/winpr/bitstream.h b/winpr/include/winpr/bitstream.h index 32e19a9c2..491eb041b 100644 --- a/winpr/include/winpr/bitstream.h +++ b/winpr/include/winpr/bitstream.h @@ -182,6 +182,7 @@ extern "C" WINPR_API void BitStream_Free(wBitStream* bs); WINPR_ATTR_MALLOC(BitStream_Free, 1) + WINPR_ATTR_NODISCARD WINPR_API wBitStream* BitStream_New(void); #ifdef __cplusplus diff --git a/winpr/include/winpr/cmdline.h b/winpr/include/winpr/cmdline.h index 1421f60a6..24d22d46e 100644 --- a/winpr/include/winpr/cmdline.h +++ b/winpr/include/winpr/cmdline.h @@ -166,16 +166,20 @@ extern "C" WINPR_API void CommandLineParserFree(char** ptr); WINPR_ATTR_MALLOC(CommandLineParserFree, 1) + WINPR_ATTR_NODISCARD WINPR_API char** CommandLineParseCommaSeparatedValues(const char* list, size_t* count); WINPR_ATTR_MALLOC(CommandLineParserFree, 1) + WINPR_ATTR_NODISCARD WINPR_API char** CommandLineParseCommaSeparatedValuesEx(const char* name, const char* list, size_t* count); WINPR_ATTR_MALLOC(free, 1) + WINPR_ATTR_NODISCARD WINPR_API char* CommandLineToCommaSeparatedValues(int argc, char* argv[]); WINPR_ATTR_MALLOC(free, 1) + WINPR_ATTR_NODISCARD WINPR_API char* CommandLineToCommaSeparatedValuesEx(int argc, char* argv[], const char* filters[], size_t number); diff --git a/winpr/include/winpr/collections.h b/winpr/include/winpr/collections.h index 23f932287..3a7ee7b38 100644 --- a/winpr/include/winpr/collections.h +++ b/winpr/include/winpr/collections.h @@ -185,6 +185,7 @@ extern "C" * @return A newly allocated queue or \b NULL in case of failure */ WINPR_ATTR_MALLOC(Queue_Free, 1) + WINPR_ATTR_NODISCARD WINPR_API wQueue* Queue_New(BOOL synchronized, SSIZE_T capacity, SSIZE_T growthFactor); /* System.Collections.Stack */ @@ -207,6 +208,7 @@ extern "C" WINPR_API void Stack_Free(wStack* stack); WINPR_ATTR_MALLOC(Stack_Free, 1) + WINPR_ATTR_NODISCARD WINPR_API wStack* Stack_New(BOOL synchronized); /* System.Collections.ArrayList */ @@ -254,6 +256,7 @@ extern "C" WINPR_API void ArrayList_Free(wArrayList* arrayList); WINPR_ATTR_MALLOC(ArrayList_Free, 1) + WINPR_ATTR_NODISCARD WINPR_API wArrayList* ArrayList_New(BOOL synchronized); /* System.Collections.DictionaryBase */ @@ -399,6 +402,7 @@ extern "C" * @return A newly allocated dictionary or \b NULL in case of failure */ WINPR_ATTR_MALLOC(ListDictionary_Free, 1) + WINPR_ATTR_NODISCARD WINPR_API wListDictionary* ListDictionary_New(BOOL synchronized); /* System.Collections.Generic.LinkedList */ @@ -526,6 +530,7 @@ extern "C" * @return A pointer to the newly allocated linked list or \b NULL in case of failure */ WINPR_ATTR_MALLOC(LinkedList_Free, 1) + WINPR_ATTR_NODISCARD WINPR_API wLinkedList* LinkedList_New(void); /** @brief Return the \b wObject function pointers for list elements @@ -612,6 +617,7 @@ extern "C" * @return The newly allocated event or \b NULL in case of failure */ WINPR_ATTR_MALLOC(CountdownEvent_Free, 1) + WINPR_ATTR_NODISCARD WINPR_API wCountdownEvent* CountdownEvent_New(size_t initialCount); /* Hash Table */ @@ -651,6 +657,7 @@ extern "C" WINPR_API void HashTable_Free(wHashTable* table); WINPR_ATTR_MALLOC(HashTable_Free, 1) + WINPR_ATTR_NODISCARD WINPR_API wHashTable* HashTable_New(BOOL synchronized); WINPR_API void HashTable_Lock(wHashTable* table); @@ -678,6 +685,7 @@ extern "C" WINPR_API void BufferPool_Free(wBufferPool* pool); WINPR_ATTR_MALLOC(BufferPool_Free, 1) + WINPR_ATTR_NODISCARD WINPR_API wBufferPool* BufferPool_New(BOOL synchronized, SSIZE_T fixedSize, DWORD alignment); /* ObjectPool */ @@ -693,6 +701,7 @@ extern "C" WINPR_API void ObjectPool_Free(wObjectPool* pool); WINPR_ATTR_MALLOC(ObjectPool_Free, 1) + WINPR_ATTR_NODISCARD WINPR_API wObjectPool* ObjectPool_New(BOOL synchronized); /* Message Queue */ @@ -766,6 +775,7 @@ extern "C" * \return A pointer to a newly allocated MessageQueue or NULL. */ WINPR_ATTR_MALLOC(MessageQueue_Free, 1) + WINPR_ATTR_NODISCARD WINPR_API wMessageQueue* MessageQueue_New(const wObject* callback); /* Message Pipe */ @@ -781,6 +791,7 @@ extern "C" WINPR_API void MessagePipe_Free(wMessagePipe* pipe); WINPR_ATTR_MALLOC(MessagePipe_Free, 1) + WINPR_ATTR_NODISCARD WINPR_API wMessagePipe* MessagePipe_New(void); /* Publisher/Subscriber Pattern */ @@ -876,6 +887,7 @@ extern "C" WINPR_API void PubSub_Free(wPubSub* pubSub); WINPR_ATTR_MALLOC(PubSub_Free, 1) + WINPR_ATTR_NODISCARD WINPR_API wPubSub* PubSub_New(BOOL synchronized); #ifdef __cplusplus diff --git a/winpr/include/winpr/comm.h b/winpr/include/winpr/comm.h index 2fd35788f..8c49a01a4 100644 --- a/winpr/include/winpr/comm.h +++ b/winpr/include/winpr/comm.h @@ -391,6 +391,7 @@ extern "C" * RegisterHandleCreator(). */ WINPR_ATTR_MALLOC(CloseHandle, 1) + WINPR_ATTR_NODISCARD WINPR_API HANDLE CommCreateFileA(LPCSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, diff --git a/winpr/include/winpr/crt.h b/winpr/include/winpr/crt.h index c96f8cea8..521f77943 100644 --- a/winpr/include/winpr/crt.h +++ b/winpr/include/winpr/crt.h @@ -192,26 +192,33 @@ extern "C" WINPR_API void winpr_aligned_free(void* memblock); WINPR_ATTR_MALLOC(winpr_aligned_free, 1) + WINPR_ATTR_NODISCARD WINPR_API void* winpr_aligned_malloc(size_t size, size_t alignment); WINPR_ATTR_MALLOC(winpr_aligned_free, 1) + WINPR_ATTR_NODISCARD WINPR_API void* winpr_aligned_calloc(size_t count, size_t size, size_t alignment); WINPR_ATTR_MALLOC(winpr_aligned_free, 1) + WINPR_ATTR_NODISCARD WINPR_API void* winpr_aligned_realloc(void* memblock, size_t size, size_t alignment); WINPR_ATTR_MALLOC(winpr_aligned_free, 1) + WINPR_ATTR_NODISCARD WINPR_API void* winpr_aligned_recalloc(void* memblock, size_t num, size_t size, size_t alignment); WINPR_ATTR_MALLOC(winpr_aligned_free, 1) + WINPR_ATTR_NODISCARD WINPR_API void* winpr_aligned_offset_malloc(size_t size, size_t alignment, size_t offset); WINPR_ATTR_MALLOC(winpr_aligned_free, 1) + WINPR_ATTR_NODISCARD WINPR_API void* winpr_aligned_offset_realloc(void* memblock, size_t size, size_t alignment, size_t offset); WINPR_ATTR_MALLOC(winpr_aligned_free, 1) + WINPR_ATTR_NODISCARD WINPR_API void* winpr_aligned_offset_recalloc(void* memblock, size_t num, size_t size, size_t alignment, size_t offset); diff --git a/winpr/include/winpr/custom-crypto.h b/winpr/include/winpr/custom-crypto.h index 32043463a..aced0aa3a 100644 --- a/winpr/include/winpr/custom-crypto.h +++ b/winpr/include/winpr/custom-crypto.h @@ -80,6 +80,7 @@ extern "C" WINPR_API void winpr_HMAC_Free(WINPR_HMAC_CTX* ctx); WINPR_ATTR_MALLOC(winpr_HMAC_Free, 1) + WINPR_ATTR_NODISCARD WINPR_API WINPR_HMAC_CTX* winpr_HMAC_New(void); WINPR_API BOOL winpr_HMAC_Init(WINPR_HMAC_CTX* ctx, WINPR_MD_TYPE md, const void* key, size_t keylen); @@ -107,6 +108,7 @@ extern "C" WINPR_API void winpr_Digest_Free(WINPR_DIGEST_CTX* ctx); WINPR_ATTR_MALLOC(winpr_Digest_Free, 1) + WINPR_ATTR_NODISCARD WINPR_API WINPR_DIGEST_CTX* winpr_Digest_New(void); WINPR_API BOOL winpr_Digest_Init_Allow_FIPS(WINPR_DIGEST_CTX* ctx, WINPR_MD_TYPE md); WINPR_API BOOL winpr_Digest_Init(WINPR_DIGEST_CTX* ctx, WINPR_MD_TYPE md); @@ -156,9 +158,11 @@ extern "C" WINPR_API void winpr_RC4_Free(WINPR_RC4_CTX* ctx); WINPR_ATTR_MALLOC(winpr_RC4_Free, 1) + WINPR_ATTR_NODISCARD WINPR_API WINPR_RC4_CTX* winpr_RC4_New_Allow_FIPS(const void* key, size_t keylen); WINPR_ATTR_MALLOC(winpr_RC4_Free, 1) + WINPR_ATTR_NODISCARD WINPR_API WINPR_RC4_CTX* winpr_RC4_New(const void* key, size_t keylen); WINPR_API BOOL winpr_RC4_Update(WINPR_RC4_CTX* ctx, size_t length, const void* input, void* output); @@ -267,10 +271,9 @@ extern "C" #if !defined(WITHOUT_FREERDP_3x_DEPRECATED) WINPR_DEPRECATED_VAR("[since 3.10.0] use winpr_Cipher_NewEx", WINPR_ATTR_MALLOC(winpr_Cipher_Free, 1) - WINPR_API WINPR_CIPHER_CTX* winpr_Cipher_New(WINPR_CIPHER_TYPE cipher, - WINPR_CRYPTO_OPERATION op, - const void* key, - const void* iv)); + WINPR_ATTR_NODISCARD WINPR_API WINPR_CIPHER_CTX* winpr_Cipher_New( + WINPR_CIPHER_TYPE cipher, WINPR_CRYPTO_OPERATION op, + const void* key, const void* iv)); #endif /** @brief Create a new \b WINPR_CIPHER_CTX @@ -290,6 +293,7 @@ extern "C" * @since version 3.10.0 */ WINPR_ATTR_MALLOC(winpr_Cipher_Free, 1) + WINPR_ATTR_NODISCARD WINPR_API WINPR_CIPHER_CTX* winpr_Cipher_NewEx(WINPR_CIPHER_TYPE cipher, WINPR_CRYPTO_OPERATION op, const void* key, size_t keylen, const void* iv, size_t ivlen); diff --git a/winpr/include/winpr/debug.h b/winpr/include/winpr/debug.h index 334a57fb3..6010e9fbd 100644 --- a/winpr/include/winpr/debug.h +++ b/winpr/include/winpr/debug.h @@ -36,9 +36,11 @@ extern "C" WINPR_API void winpr_backtrace_free(void* buffer); WINPR_ATTR_MALLOC(winpr_backtrace_free, 1) + WINPR_ATTR_NODISCARD WINPR_API void* winpr_backtrace(DWORD size); WINPR_ATTR_MALLOC(free, 1) + WINPR_ATTR_NODISCARD WINPR_API char** winpr_backtrace_symbols(void* buffer, size_t* used); WINPR_API void winpr_backtrace_symbols_fd(void* buffer, int fd); diff --git a/winpr/include/winpr/environment.h b/winpr/include/winpr/environment.h index cd5c1e66e..93fb1f6e0 100644 --- a/winpr/include/winpr/environment.h +++ b/winpr/include/winpr/environment.h @@ -91,9 +91,11 @@ extern "C" WINPR_API BOOL FreeEnvironmentStringsW(LPWCH lpszEnvironmentBlock); WINPR_ATTR_MALLOC(FreeEnvironmentStringsA, 1) + WINPR_ATTR_NODISCARD WINPR_API LPCH GetEnvironmentStrings(VOID); WINPR_ATTR_MALLOC(FreeEnvironmentStringsW, 1) + WINPR_ATTR_NODISCARD WINPR_API LPWCH GetEnvironmentStringsW(VOID); WINPR_API BOOL SetEnvironmentStringsA(LPCH NewEnvironment); @@ -130,6 +132,7 @@ extern "C" #endif WINPR_ATTR_MALLOC(free, 1) + WINPR_ATTR_NODISCARD WINPR_API LPCH MergeEnvironmentStrings(PCSTR original, PCSTR merge); WINPR_API DWORD GetEnvironmentVariableEBA(LPCSTR envBlock, LPCSTR lpName, LPSTR lpBuffer, @@ -137,11 +140,13 @@ extern "C" WINPR_API BOOL SetEnvironmentVariableEBA(LPSTR* envBlock, LPCSTR lpName, LPCSTR lpValue); WINPR_ATTR_MALLOC(free, 1) + WINPR_ATTR_NODISCARD WINPR_API char** EnvironmentBlockToEnvpA(LPCH lpszEnvironmentBlock); WINPR_API DWORD GetEnvironmentVariableX(const char* lpName, char* lpBuffer, DWORD nSize); WINPR_ATTR_MALLOC(free, 1) + WINPR_ATTR_NODISCARD WINPR_API char* GetEnvAlloc(LPCSTR lpName); #ifdef __cplusplus diff --git a/winpr/include/winpr/file.h b/winpr/include/winpr/file.h index 1fa9b132c..2fde04075 100644 --- a/winpr/include/winpr/file.h +++ b/winpr/include/winpr/file.h @@ -566,8 +566,17 @@ extern "C" WINPR_API int UnixChangeFileMode(const char* filename, int flags); WINPR_API BOOL IsNamedPipeFileNameA(LPCSTR lpName); + + WINPR_ATTR_MALLOC(free, 1) + WINPR_ATTR_NODISCARD WINPR_API char* GetNamedPipeNameWithoutPrefixA(LPCSTR lpName); + + WINPR_ATTR_MALLOC(free, 1) + WINPR_ATTR_NODISCARD WINPR_API char* GetNamedPipeUnixDomainSocketBaseFilePathA(void); + + WINPR_ATTR_MALLOC(free, 1) + WINPR_ATTR_NODISCARD WINPR_API char* GetNamedPipeUnixDomainSocketFilePathA(LPCSTR lpName); WINPR_API int GetNamePipeFileDescriptor(HANDLE hNamedPipe); diff --git a/winpr/include/winpr/image.h b/winpr/include/winpr/image.h index 71cd6d0f5..a25801771 100644 --- a/winpr/include/winpr/image.h +++ b/winpr/include/winpr/image.h @@ -137,12 +137,14 @@ extern "C" * as deallocator */ WINPR_ATTR_MALLOC(free, 1) + WINPR_ATTR_NODISCARD WINPR_API void* winpr_image_write_buffer(wImage* image, UINT32 format, size_t* size); WINPR_API int winpr_image_read_buffer(wImage* image, const BYTE* buffer, size_t size); WINPR_API void winpr_image_free(wImage* image, BOOL bFreeBuffer); WINPR_ATTR_MALLOC(winpr_image_free, 1) + WINPR_ATTR_NODISCARD WINPR_API wImage* winpr_image_new(void); /** @brief Check if a image format is supported diff --git a/winpr/include/winpr/ini.h b/winpr/include/winpr/ini.h index 6deefaeed..b88a161dc 100644 --- a/winpr/include/winpr/ini.h +++ b/winpr/include/winpr/ini.h @@ -140,6 +140,7 @@ extern "C" * @return The newly allocated instance or \b NULL if failed. */ WINPR_ATTR_MALLOC(IniFile_Free, 1) + WINPR_ATTR_NODISCARD WINPR_API wIniFile* IniFile_New(void); /** @brief Clone a ini instance diff --git a/winpr/include/winpr/io.h b/winpr/include/winpr/io.h index 626b13cb4..e277062d6 100644 --- a/winpr/include/winpr/io.h +++ b/winpr/include/winpr/io.h @@ -76,6 +76,7 @@ extern "C" LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped); WINPR_ATTR_MALLOC(CloseHandle, 1) + WINPR_ATTR_NODISCARD WINPR_API HANDLE CreateIoCompletionPort(HANDLE FileHandle, HANDLE ExistingCompletionPort, ULONG_PTR CompletionKey, DWORD NumberOfConcurrentThreads); diff --git a/winpr/include/winpr/json.h b/winpr/include/winpr/json.h index eef4c7a66..bae406710 100644 --- a/winpr/include/winpr/json.h +++ b/winpr/include/winpr/json.h @@ -64,6 +64,7 @@ extern "C" * @since version 3.6.0 */ WINPR_ATTR_MALLOC(WINPR_JSON_Delete, 1) + WINPR_ATTR_NODISCARD WINPR_API WINPR_JSON* WINPR_JSON_Parse(const char* value); /** @@ -75,6 +76,7 @@ extern "C" * @since version 3.6.0 */ WINPR_ATTR_MALLOC(WINPR_JSON_Delete, 1) + WINPR_ATTR_NODISCARD WINPR_API WINPR_JSON* WINPR_JSON_ParseWithLength(const char* value, size_t buffer_length); /** @@ -85,6 +87,7 @@ extern "C" * @since version 3.16.0 */ WINPR_ATTR_MALLOC(WINPR_JSON_Delete, 1) + WINPR_ATTR_NODISCARD WINPR_API WINPR_JSON* WINPR_JSON_ParseFromFile(const char* filename); /** @@ -95,6 +98,7 @@ extern "C" * @since version 3.16.0 */ WINPR_ATTR_MALLOC(WINPR_JSON_Delete, 1) + WINPR_ATTR_NODISCARD WINPR_API WINPR_JSON* WINPR_JSON_ParseFromFileFP(FILE* fp); /** @@ -403,6 +407,7 @@ extern "C" * @since version 3.6.0 */ WINPR_ATTR_MALLOC(free, 1) + WINPR_ATTR_NODISCARD WINPR_API char* WINPR_JSON_Print(WINPR_JSON* item); /** @@ -414,6 +419,7 @@ extern "C" * @since version 3.6.0 */ WINPR_ATTR_MALLOC(free, 1) + WINPR_ATTR_NODISCARD WINPR_API char* WINPR_JSON_PrintUnformatted(WINPR_JSON* item); #ifdef __cplusplus diff --git a/winpr/include/winpr/memory.h b/winpr/include/winpr/memory.h index 431778aa9..2800c2d1c 100644 --- a/winpr/include/winpr/memory.h +++ b/winpr/include/winpr/memory.h @@ -38,19 +38,23 @@ extern "C" #endif WINPR_ATTR_MALLOC(CloseHandle, 1) + WINPR_ATTR_NODISCARD WINPR_API HANDLE CreateFileMappingA(HANDLE hFile, LPSECURITY_ATTRIBUTES lpAttributes, DWORD flProtect, DWORD dwMaximumSizeHigh, DWORD dwMaximumSizeLow, LPCSTR lpName); WINPR_ATTR_MALLOC(CloseHandle, 1) + WINPR_ATTR_NODISCARD WINPR_API HANDLE CreateFileMappingW(HANDLE hFile, LPSECURITY_ATTRIBUTES lpAttributes, DWORD flProtect, DWORD dwMaximumSizeHigh, DWORD dwMaximumSizeLow, LPCWSTR lpName); WINPR_ATTR_MALLOC(CloseHandle, 1) + WINPR_ATTR_NODISCARD WINPR_API HANDLE OpenFileMappingA(DWORD dwDesiredAccess, BOOL bInheritHandle, LPCSTR lpName); WINPR_ATTR_MALLOC(CloseHandle, 1) + WINPR_ATTR_NODISCARD WINPR_API HANDLE OpenFileMappingW(DWORD dwDesiredAccess, BOOL bInheritHandle, LPCWSTR lpName); WINPR_API LPVOID MapViewOfFile(HANDLE hFileMappingObject, DWORD dwDesiredAccess, diff --git a/winpr/include/winpr/path.h b/winpr/include/winpr/path.h index 8b8aa90e4..7d2878728 100644 --- a/winpr/include/winpr/path.h +++ b/winpr/include/winpr/path.h @@ -323,23 +323,29 @@ extern "C" * @since version 3.9.0 */ WINPR_ATTR_MALLOC(free, 1) + WINPR_ATTR_NODISCARD WINPR_API char* winpr_GetConfigFilePath(BOOL system, const char* filename); WINPR_API const char* GetKnownPathIdString(int id); WINPR_ATTR_MALLOC(free, 1) + WINPR_ATTR_NODISCARD WINPR_API char* GetKnownPath(eKnownPathTypes id); WINPR_ATTR_MALLOC(free, 1) + WINPR_ATTR_NODISCARD WINPR_API char* GetKnownSubPath(eKnownPathTypes id, const char* path); WINPR_ATTR_MALLOC(free, 1) + WINPR_ATTR_NODISCARD WINPR_API char* GetEnvironmentPath(char* name); WINPR_ATTR_MALLOC(free, 1) + WINPR_ATTR_NODISCARD WINPR_API char* GetEnvironmentSubPath(char* name, const char* path); WINPR_ATTR_MALLOC(free, 1) + WINPR_ATTR_NODISCARD WINPR_API char* GetCombinedPath(const char* basePath, const char* subPath); WINPR_API BOOL PathMakePathA(LPCSTR path, LPSECURITY_ATTRIBUTES lpAttributes); diff --git a/winpr/include/winpr/pipe.h b/winpr/include/winpr/pipe.h index a31d5ebd2..dfdf2e7a1 100644 --- a/winpr/include/winpr/pipe.h +++ b/winpr/include/winpr/pipe.h @@ -74,12 +74,14 @@ extern "C" */ WINPR_ATTR_MALLOC(CloseHandle, 1) + WINPR_ATTR_NODISCARD WINPR_API HANDLE CreateNamedPipeA(LPCSTR lpName, DWORD dwOpenMode, DWORD dwPipeMode, DWORD nMaxInstances, DWORD nOutBufferSize, DWORD nInBufferSize, DWORD nDefaultTimeOut, LPSECURITY_ATTRIBUTES lpSecurityAttributes); WINPR_ATTR_MALLOC(CloseHandle, 1) + WINPR_ATTR_NODISCARD WINPR_API HANDLE CreateNamedPipeW(LPCWSTR lpName, DWORD dwOpenMode, DWORD dwPipeMode, DWORD nMaxInstances, DWORD nOutBufferSize, DWORD nInBufferSize, DWORD nDefaultTimeOut, diff --git a/winpr/include/winpr/print.h b/winpr/include/winpr/print.h index ebe70d3cb..f4534acea 100644 --- a/winpr/include/winpr/print.h +++ b/winpr/include/winpr/print.h @@ -41,6 +41,7 @@ extern "C" size_t width); WINPR_ATTR_MALLOC(free, 1) + WINPR_ATTR_NODISCARD WINPR_API char* winpr_BinToHexString(const BYTE* data, size_t length, BOOL space); WINPR_API size_t winpr_BinToHexStringBuffer(const BYTE* data, size_t length, char* dstStr, size_t dstSize, BOOL space); diff --git a/winpr/include/winpr/stream.h b/winpr/include/winpr/stream.h index abfd45dca..b3cd0c55f 100644 --- a/winpr/include/winpr/stream.h +++ b/winpr/include/winpr/stream.h @@ -90,6 +90,7 @@ extern "C" WINPR_API void Stream_Free(wStream* s, BOOL bFreeBuffer); WINPR_ATTR_MALLOC(Stream_Free, 1) + WINPR_ATTR_NODISCARD WINPR_API wStream* Stream_New(BYTE* buffer, size_t size); WINPR_API wStream* Stream_StaticConstInit(wStream* s, const BYTE* buffer, size_t size); WINPR_API wStream* Stream_StaticInit(wStream* s, BYTE* buffer, size_t size); @@ -1385,6 +1386,7 @@ extern "C" WINPR_API void Stream_Release(wStream* s); WINPR_ATTR_MALLOC(Stream_Release, 1) + WINPR_ATTR_NODISCARD WINPR_API wStream* StreamPool_Take(wStreamPool* pool, size_t size); WINPR_API wStream* StreamPool_Find(wStreamPool* pool, const BYTE* ptr); @@ -1416,6 +1418,7 @@ extern "C" WINPR_API void StreamPool_Free(wStreamPool* pool); WINPR_ATTR_MALLOC(StreamPool_Free, 1) + WINPR_ATTR_NODISCARD WINPR_API wStreamPool* StreamPool_New(BOOL synchronized, size_t defaultSize); WINPR_API char* StreamPool_GetStatistics(wStreamPool* pool, char* buffer, size_t size); diff --git a/winpr/include/winpr/string.h b/winpr/include/winpr/string.h index 3d3659e63..d246ef224 100644 --- a/winpr/include/winpr/string.h +++ b/winpr/include/winpr/string.h @@ -432,6 +432,7 @@ extern "C" #if !defined(WINPR_HAVE_STRNDUP) WINPR_ATTR_MALLOC(free, 1) + WINPR_ATTR_NODISCARD WINPR_API char* strndup(const char* s, size_t n); #endif @@ -446,6 +447,7 @@ extern "C" * @since version 3.10.0 */ WINPR_ATTR_MALLOC(free, 1) + WINPR_ATTR_NODISCARD WINPR_API WCHAR* wcsndup(const WCHAR* s, size_t n); #ifdef __cplusplus diff --git a/winpr/include/winpr/synch.h b/winpr/include/winpr/synch.h index ea01c5339..be92ff229 100644 --- a/winpr/include/winpr/synch.h +++ b/winpr/include/winpr/synch.h @@ -45,25 +45,31 @@ extern "C" #define CREATE_MUTEX_INITIAL_OWNER 0x00000001 WINPR_ATTR_MALLOC(CloseHandle, 1) + WINPR_ATTR_NODISCARD WINPR_API HANDLE CreateMutexA(LPSECURITY_ATTRIBUTES lpMutexAttributes, BOOL bInitialOwner, LPCSTR lpName); WINPR_ATTR_MALLOC(CloseHandle, 1) + WINPR_ATTR_NODISCARD WINPR_API HANDLE CreateMutexW(LPSECURITY_ATTRIBUTES lpMutexAttributes, BOOL bInitialOwner, LPCWSTR lpName); WINPR_ATTR_MALLOC(CloseHandle, 1) + WINPR_ATTR_NODISCARD WINPR_API HANDLE CreateMutexExA(LPSECURITY_ATTRIBUTES lpMutexAttributes, LPCSTR lpName, DWORD dwFlags, DWORD dwDesiredAccess); WINPR_ATTR_MALLOC(CloseHandle, 1) + WINPR_ATTR_NODISCARD WINPR_API HANDLE CreateMutexExW(LPSECURITY_ATTRIBUTES lpMutexAttributes, LPCWSTR lpName, DWORD dwFlags, DWORD dwDesiredAccess); WINPR_ATTR_MALLOC(CloseHandle, 1) + WINPR_ATTR_NODISCARD WINPR_API HANDLE OpenMutexA(DWORD dwDesiredAccess, BOOL bInheritHandle, LPCSTR lpName); WINPR_ATTR_MALLOC(CloseHandle, 1) + WINPR_ATTR_NODISCARD WINPR_API HANDLE OpenMutexW(DWORD dwDesiredAccess, BOOL bInheritHandle, LPCWSTR lpName); WINPR_API BOOL ReleaseMutex(HANDLE hMutex); @@ -81,17 +87,21 @@ extern "C" /* Semaphore */ WINPR_ATTR_MALLOC(CloseHandle, 1) + WINPR_ATTR_NODISCARD WINPR_API HANDLE CreateSemaphoreA(LPSECURITY_ATTRIBUTES lpSemaphoreAttributes, LONG lInitialCount, LONG lMaximumCount, LPCSTR lpName); WINPR_ATTR_MALLOC(CloseHandle, 1) + WINPR_ATTR_NODISCARD WINPR_API HANDLE CreateSemaphoreW(LPSECURITY_ATTRIBUTES lpSemaphoreAttributes, LONG lInitialCount, LONG lMaximumCount, LPCWSTR lpName); WINPR_ATTR_MALLOC(CloseHandle, 1) + WINPR_ATTR_NODISCARD WINPR_API HANDLE OpenSemaphoreA(DWORD dwDesiredAccess, BOOL bInheritHandle, LPCSTR lpName); WINPR_ATTR_MALLOC(CloseHandle, 1) + WINPR_ATTR_NODISCARD WINPR_API HANDLE OpenSemaphoreW(DWORD dwDesiredAccess, BOOL bInheritHandle, LPCWSTR lpName); #ifdef UNICODE @@ -109,25 +119,31 @@ extern "C" #define CREATE_EVENT_INITIAL_SET 0x00000002 WINPR_ATTR_MALLOC(CloseHandle, 1) + WINPR_ATTR_NODISCARD WINPR_API HANDLE CreateEventA(LPSECURITY_ATTRIBUTES lpEventAttributes, BOOL bManualReset, BOOL bInitialState, LPCSTR lpName); WINPR_ATTR_MALLOC(CloseHandle, 1) + WINPR_ATTR_NODISCARD WINPR_API HANDLE CreateEventW(LPSECURITY_ATTRIBUTES lpEventAttributes, BOOL bManualReset, BOOL bInitialState, LPCWSTR lpName); WINPR_ATTR_MALLOC(CloseHandle, 1) + WINPR_ATTR_NODISCARD WINPR_API HANDLE CreateEventExA(LPSECURITY_ATTRIBUTES lpEventAttributes, LPCSTR lpName, DWORD dwFlags, DWORD dwDesiredAccess); WINPR_ATTR_MALLOC(CloseHandle, 1) + WINPR_ATTR_NODISCARD WINPR_API HANDLE CreateEventExW(LPSECURITY_ATTRIBUTES lpEventAttributes, LPCWSTR lpName, DWORD dwFlags, DWORD dwDesiredAccess); WINPR_ATTR_MALLOC(CloseHandle, 1) + WINPR_ATTR_NODISCARD WINPR_API HANDLE OpenEventA(DWORD dwDesiredAccess, BOOL bInheritHandle, LPCSTR lpName); WINPR_ATTR_MALLOC(CloseHandle, 1) + WINPR_ATTR_NODISCARD WINPR_API HANDLE OpenEventW(DWORD dwDesiredAccess, BOOL bInheritHandle, LPCWSTR lpName); WINPR_API BOOL SetEvent(HANDLE hEvent); @@ -250,19 +266,23 @@ extern "C" DWORD dwTimerHighValue); WINPR_ATTR_MALLOC(CloseHandle, 1) + WINPR_ATTR_NODISCARD WINPR_API HANDLE CreateWaitableTimerA(LPSECURITY_ATTRIBUTES lpTimerAttributes, BOOL bManualReset, LPCSTR lpTimerName); WINPR_ATTR_MALLOC(CloseHandle, 1) + WINPR_ATTR_NODISCARD WINPR_API HANDLE CreateWaitableTimerW(LPSECURITY_ATTRIBUTES lpTimerAttributes, BOOL bManualReset, LPCWSTR lpTimerName); WINPR_ATTR_MALLOC(CloseHandle, 1) + WINPR_ATTR_NODISCARD WINPR_API HANDLE CreateWaitableTimerExA(LPSECURITY_ATTRIBUTES lpTimerAttributes, LPCSTR lpTimerName, DWORD dwFlags, DWORD dwDesiredAccess); WINPR_ATTR_MALLOC(CloseHandle, 1) + WINPR_ATTR_NODISCARD WINPR_API HANDLE CreateWaitableTimerExW(LPSECURITY_ATTRIBUTES lpTimerAttributes, LPCWSTR lpTimerName, DWORD dwFlags, DWORD dwDesiredAccess); @@ -277,10 +297,12 @@ extern "C" ULONG TolerableDelay); WINPR_ATTR_MALLOC(CloseHandle, 1) + WINPR_ATTR_NODISCARD WINPR_API HANDLE OpenWaitableTimerA(DWORD dwDesiredAccess, BOOL bInheritHandle, LPCSTR lpTimerName); WINPR_ATTR_MALLOC(CloseHandle, 1) + WINPR_ATTR_NODISCARD WINPR_API HANDLE OpenWaitableTimerW(DWORD dwDesiredAccess, BOOL bInheritHandle, LPCWSTR lpTimerName); @@ -316,6 +338,7 @@ extern "C" typedef VOID (*WAITORTIMERCALLBACK)(PVOID lpParameter, BOOLEAN TimerOrWaitFired); WINPR_ATTR_MALLOC(CloseHandle, 1) + WINPR_ATTR_NODISCARD WINPR_API HANDLE CreateTimerQueue(void); WINPR_API BOOL DeleteTimerQueue(HANDLE TimerQueue); @@ -432,16 +455,19 @@ extern "C" WINPR_API VOID USleep(DWORD dwMicroseconds); WINPR_ATTR_MALLOC(CloseHandle, 1) + WINPR_ATTR_NODISCARD WINPR_API HANDLE CreateFileDescriptorEventW(LPSECURITY_ATTRIBUTES lpEventAttributes, BOOL bManualReset, BOOL bInitialState, int FileDescriptor, ULONG mode); WINPR_ATTR_MALLOC(CloseHandle, 1) + WINPR_ATTR_NODISCARD WINPR_API HANDLE CreateFileDescriptorEventA(LPSECURITY_ATTRIBUTES lpEventAttributes, BOOL bManualReset, BOOL bInitialState, int FileDescriptor, ULONG mode); WINPR_ATTR_MALLOC(CloseHandle, 1) + WINPR_ATTR_NODISCARD WINPR_API HANDLE CreateWaitObjectEvent(LPSECURITY_ATTRIBUTES lpEventAttributes, BOOL bManualReset, BOOL bInitialState, void* pObject); diff --git a/winpr/include/winpr/thread.h b/winpr/include/winpr/thread.h index debe7b948..e18153810 100644 --- a/winpr/include/winpr/thread.h +++ b/winpr/include/winpr/thread.h @@ -232,11 +232,13 @@ extern "C" #define STACK_SIZE_PARAM_IS_A_RESERVATION 0x00010000 WINPR_ATTR_MALLOC(CloseHandle, 1) + WINPR_ATTR_NODISCARD WINPR_API HANDLE CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes, size_t dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId); WINPR_ATTR_MALLOC(CloseHandle, 1) + WINPR_ATTR_NODISCARD WINPR_API HANDLE CreateRemoteThread(HANDLE hProcess, LPSECURITY_ATTRIBUTES lpThreadAttributes, size_t dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlags, diff --git a/winpr/include/winpr/tools/makecert.h b/winpr/include/winpr/tools/makecert.h index 8a6d30fdb..d091dbc4a 100644 --- a/winpr/include/winpr/tools/makecert.h +++ b/winpr/include/winpr/tools/makecert.h @@ -41,6 +41,7 @@ extern "C" WINPR_API void makecert_context_free(MAKECERT_CONTEXT* context); WINPR_ATTR_MALLOC(makecert_context_free, 1) + WINPR_ATTR_NODISCARD WINPR_API MAKECERT_CONTEXT* makecert_context_new(void); #ifdef __cplusplus diff --git a/winpr/include/winpr/winsock.h b/winpr/include/winpr/winsock.h index d9c42a66f..a653cf42d 100644 --- a/winpr/include/winpr/winsock.h +++ b/winpr/include/winpr/winsock.h @@ -305,6 +305,7 @@ extern "C" WINPR_API BOOL WSACloseEvent(HANDLE hEvent); WINPR_ATTR_MALLOC(WSACloseEvent, 1) + WINPR_ATTR_NODISCARD WINPR_API HANDLE WSACreateEvent(void); WINPR_API BOOL WSASetEvent(HANDLE hEvent); WINPR_API BOOL WSAResetEvent(HANDLE hEvent); diff --git a/winpr/include/winpr/wtsapi.h b/winpr/include/winpr/wtsapi.h index 6794bb020..fee7441de 100644 --- a/winpr/include/winpr/wtsapi.h +++ b/winpr/include/winpr/wtsapi.h @@ -1012,15 +1012,19 @@ extern "C" WINPR_API VOID WINAPI WTSCloseServer(HANDLE hServer); WINPR_ATTR_MALLOC(WTSCloseServer, 1) + WINPR_ATTR_NODISCARD WINPR_API HANDLE WINAPI WTSOpenServerW(LPWSTR pServerName); WINPR_ATTR_MALLOC(WTSCloseServer, 1) + WINPR_ATTR_NODISCARD WINPR_API HANDLE WINAPI WTSOpenServerA(LPSTR pServerName); WINPR_ATTR_MALLOC(WTSCloseServer, 1) + WINPR_ATTR_NODISCARD WINPR_API HANDLE WINAPI WTSOpenServerExW(LPWSTR pServerName); WINPR_ATTR_MALLOC(WTSCloseServer, 1) + WINPR_ATTR_NODISCARD WINPR_API HANDLE WINAPI WTSOpenServerExA(LPSTR pServerName); WINPR_API BOOL WINAPI WTSEnumerateSessionsW(HANDLE hServer, DWORD Reserved, DWORD Version, @@ -1081,10 +1085,12 @@ extern "C" WINPR_API BOOL WINAPI WTSVirtualChannelClose(HANDLE hChannelHandle); WINPR_ATTR_MALLOC(WTSVirtualChannelClose, 1) + WINPR_ATTR_NODISCARD WINPR_API HANDLE WINAPI WTSVirtualChannelOpen(HANDLE hServer, DWORD SessionId, LPSTR pVirtualName); WINPR_ATTR_MALLOC(WTSVirtualChannelClose, 1) + WINPR_ATTR_NODISCARD WINPR_API HANDLE WINAPI WTSVirtualChannelOpenEx(DWORD SessionId, LPSTR pVirtualName, DWORD flags); diff --git a/winpr/libwinpr/crypto/rc4.h b/winpr/libwinpr/crypto/rc4.h index 63c99544c..a387f48b5 100644 --- a/winpr/libwinpr/crypto/rc4.h +++ b/winpr/libwinpr/crypto/rc4.h @@ -28,6 +28,7 @@ typedef struct winpr_int_rc4_ctx winpr_int_RC4_CTX; void winpr_int_rc4_free(winpr_int_RC4_CTX* ctx); WINPR_ATTR_MALLOC(winpr_int_rc4_free, 1) +WINPR_ATTR_NODISCARD winpr_int_RC4_CTX* winpr_int_rc4_new(const BYTE* key, size_t keylength); BOOL winpr_int_rc4_update(winpr_int_RC4_CTX* ctx, size_t length, const BYTE* input, BYTE* output); diff --git a/winpr/libwinpr/file/generic.c b/winpr/libwinpr/file/generic.c index b24d89bd8..0f4b55ac9 100644 --- a/winpr/libwinpr/file/generic.c +++ b/winpr/libwinpr/file/generic.c @@ -872,6 +872,7 @@ typedef struct static const char file_search_magic[] = "file_srch_magic"; WINPR_ATTR_MALLOC(FindClose, 1) +WINPR_ATTR_NODISCARD static WIN32_FILE_SEARCH* file_search_new(const char* name, size_t namelen, const char* pattern, size_t patternlen) { diff --git a/winpr/libwinpr/sspi/Kerberos/kerberos.c b/winpr/libwinpr/sspi/Kerberos/kerberos.c index c61e14c9a..a146b0899 100644 --- a/winpr/libwinpr/sspi/Kerberos/kerberos.c +++ b/winpr/libwinpr/sspi/Kerberos/kerberos.c @@ -246,6 +246,7 @@ static BOOL isValidIP(const char* ipAddress) #if defined(WITH_KRB5_MIT) WINPR_ATTR_MALLOC(free, 1) +WINPR_ATTR_NODISCARD static char* get_realm_name(krb5_data realm, size_t* plen) { WINPR_ASSERT(plen); @@ -260,6 +261,7 @@ static char* get_realm_name(krb5_data realm, size_t* plen) } #elif defined(WITH_KRB5_HEIMDAL) WINPR_ATTR_MALLOC(free, 1) +WINPR_ATTR_NODISCARD static char* get_realm_name(Realm realm, size_t* plen) { WINPR_ASSERT(plen); diff --git a/winpr/libwinpr/sspi/Schannel/schannel_openssl.h b/winpr/libwinpr/sspi/Schannel/schannel_openssl.h index 31993e9ad..521228f02 100644 --- a/winpr/libwinpr/sspi/Schannel/schannel_openssl.h +++ b/winpr/libwinpr/sspi/Schannel/schannel_openssl.h @@ -47,6 +47,7 @@ SECURITY_STATUS schannel_openssl_decrypt_message(SCHANNEL_OPENSSL* context, void schannel_openssl_free(SCHANNEL_OPENSSL* context); WINPR_ATTR_MALLOC(schannel_openssl_free, 1) +WINPR_ATTR_NODISCARD SCHANNEL_OPENSSL* schannel_openssl_new(void); #endif /* WINPR_SSPI_SCHANNEL_OPENSSL_H */ diff --git a/winpr/libwinpr/utils/image.c b/winpr/libwinpr/utils/image.c index 20f6a34f7..94369861d 100644 --- a/winpr/libwinpr/utils/image.c +++ b/winpr/libwinpr/utils/image.c @@ -272,6 +272,7 @@ fail: */ WINPR_ATTR_MALLOC(free, 1) +WINPR_ATTR_NODISCARD static void* winpr_bitmap_write_buffer(const BYTE* data, WINPR_ATTR_UNUSED size_t size, UINT32 width, UINT32 height, UINT32 stride, UINT32 bpp, UINT32* pSize) diff --git a/winpr/libwinpr/utils/unwind/debug.h b/winpr/libwinpr/utils/unwind/debug.h index 25ea827c7..8bc99b0e1 100644 --- a/winpr/libwinpr/utils/unwind/debug.h +++ b/winpr/libwinpr/utils/unwind/debug.h @@ -33,9 +33,11 @@ extern "C" void winpr_unwind_backtrace_free(void* buffer); WINPR_ATTR_MALLOC(winpr_unwind_backtrace_free, 1) + WINPR_ATTR_NODISCARD void* winpr_unwind_backtrace(DWORD size); WINPR_ATTR_MALLOC(free, 1) + WINPR_ATTR_NODISCARD char** winpr_unwind_backtrace_symbols(void* buffer, size_t* used); #ifdef __cplusplus diff --git a/winpr/libwinpr/utils/wlog/BinaryAppender.h b/winpr/libwinpr/utils/wlog/BinaryAppender.h index bd5b4a9c9..16f52ebfb 100644 --- a/winpr/libwinpr/utils/wlog/BinaryAppender.h +++ b/winpr/libwinpr/utils/wlog/BinaryAppender.h @@ -23,6 +23,7 @@ #include "wlog.h" WINPR_ATTR_MALLOC(WLog_Appender_Free, 2) +WINPR_ATTR_NODISCARD WINPR_LOCAL wLogAppender* WLog_BinaryAppender_New(wLog* log); #endif /* WINPR_WLOG_BINARY_APPENDER_PRIVATE_H */ diff --git a/winpr/libwinpr/utils/wlog/CallbackAppender.h b/winpr/libwinpr/utils/wlog/CallbackAppender.h index ff1c4fcb6..230a723a4 100644 --- a/winpr/libwinpr/utils/wlog/CallbackAppender.h +++ b/winpr/libwinpr/utils/wlog/CallbackAppender.h @@ -23,6 +23,7 @@ #include "wlog.h" WINPR_ATTR_MALLOC(WLog_Appender_Free, 2) +WINPR_ATTR_NODISCARD WINPR_LOCAL wLogAppender* WLog_CallbackAppender_New(wLog* log); #endif /* WINPR_WLOG_CALLBACK_APPENDER_PRIVATE_H */ diff --git a/winpr/libwinpr/utils/wlog/ConsoleAppender.h b/winpr/libwinpr/utils/wlog/ConsoleAppender.h index 0c86d7a41..6083d89de 100644 --- a/winpr/libwinpr/utils/wlog/ConsoleAppender.h +++ b/winpr/libwinpr/utils/wlog/ConsoleAppender.h @@ -23,6 +23,7 @@ #include "wlog.h" WINPR_ATTR_MALLOC(WLog_Appender_Free, 2) +WINPR_ATTR_NODISCARD WINPR_LOCAL wLogAppender* WLog_ConsoleAppender_New(wLog* log); #endif /* WINPR_WLOG_CONSOLE_APPENDER_PRIVATE_H */ diff --git a/winpr/libwinpr/utils/wlog/FileAppender.h b/winpr/libwinpr/utils/wlog/FileAppender.h index 52c5fd879..5d27640d2 100644 --- a/winpr/libwinpr/utils/wlog/FileAppender.h +++ b/winpr/libwinpr/utils/wlog/FileAppender.h @@ -23,6 +23,7 @@ #include "wlog.h" WINPR_ATTR_MALLOC(WLog_Appender_Free, 2) +WINPR_ATTR_NODISCARD WINPR_LOCAL wLogAppender* WLog_FileAppender_New(wLog* log); #endif /* WINPR_WLOG_FILE_APPENDER_PRIVATE_H */ diff --git a/winpr/libwinpr/utils/wlog/Layout.h b/winpr/libwinpr/utils/wlog/Layout.h index 1fb4e7157..eb0494874 100644 --- a/winpr/libwinpr/utils/wlog/Layout.h +++ b/winpr/libwinpr/utils/wlog/Layout.h @@ -36,6 +36,7 @@ struct s_wLogLayout WINPR_LOCAL void WLog_Layout_Free(wLog* log, wLogLayout* layout); WINPR_ATTR_MALLOC(WLog_Layout_Free, 2) +WINPR_ATTR_NODISCARD WINPR_LOCAL wLogLayout* WLog_Layout_New(wLog* log); #endif /* WINPR_WLOG_LAYOUT_PRIVATE_H */ diff --git a/winpr/libwinpr/utils/wlog/SyslogAppender.h b/winpr/libwinpr/utils/wlog/SyslogAppender.h index c0a07c27d..fe4034986 100644 --- a/winpr/libwinpr/utils/wlog/SyslogAppender.h +++ b/winpr/libwinpr/utils/wlog/SyslogAppender.h @@ -27,6 +27,7 @@ #include "wlog.h" WINPR_ATTR_MALLOC(WLog_Appender_Free, 2) +WINPR_ATTR_NODISCARD WINPR_LOCAL wLogAppender* WLog_SyslogAppender_New(wLog* log); #endif /* WINPR_LIBWINPR_UTILS_WLOG_SYSLOGAPPENDER_H_ */ diff --git a/winpr/libwinpr/utils/wlog/UdpAppender.h b/winpr/libwinpr/utils/wlog/UdpAppender.h index 134570657..fbe7830d7 100644 --- a/winpr/libwinpr/utils/wlog/UdpAppender.h +++ b/winpr/libwinpr/utils/wlog/UdpAppender.h @@ -29,6 +29,7 @@ #include "wlog.h" WINPR_ATTR_MALLOC(WLog_Appender_Free, 2) +WINPR_ATTR_NODISCARD WINPR_LOCAL wLogAppender* WLog_UdpAppender_New(wLog* log); #endif /* WINPR_LIBWINPR_UTILS_WLOG_UDPAPPENDER_H_ */ From 08415bda4d3e7126de126ad35912359fa7b431d8 Mon Sep 17 00:00:00 2001 From: akallabeth Date: Mon, 26 Jan 2026 13:20:34 +0100 Subject: [PATCH 10/10] [settings] mark functions [[nodiscard]] * All getters marked (obviously only required to get the value) * Copy and parser functions marked (invalid state if they fail) --- include/freerdp/settings.h | 76 +++++++++++++++++++++++++++++++------- 1 file changed, 63 insertions(+), 13 deletions(-) diff --git a/include/freerdp/settings.h b/include/freerdp/settings.h index 224b11502..4481bbb54 100644 --- a/include/freerdp/settings.h +++ b/include/freerdp/settings.h @@ -116,6 +116,7 @@ extern "C" * * \return \b TRUE for success, \b FALSE for failure. */ + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_copy(rdpSettings* dst, const rdpSettings* src); /** \brief copies one setting identified by \b id from \b src to \b dst @@ -128,7 +129,7 @@ extern "C" * * \return \b TRUE for success, \b FALSE for failure. */ - + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_copy_item(rdpSettings* dst, const rdpSettings* src, SSIZE_T id); @@ -189,8 +190,10 @@ extern "C" */ FREERDP_API BOOL freerdp_device_collection_del(rdpSettings* settings, const RDPDR_DEVICE* device); + WINPR_ATTR_NODISCARD FREERDP_API RDPDR_DEVICE* freerdp_device_collection_find(rdpSettings* settings, const char* name); + WINPR_ATTR_NODISCARD FREERDP_API RDPDR_DEVICE* freerdp_device_collection_find_type(rdpSettings* settings, UINT32 type); @@ -205,6 +208,7 @@ extern "C" WINPR_ATTR_NODISCARD FREERDP_API RDPDR_DEVICE* freerdp_device_clone(const RDPDR_DEVICE* device); + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_device_equal(const RDPDR_DEVICE* one, const RDPDR_DEVICE* other); FREERDP_API void freerdp_device_collection_free(rdpSettings* settings); @@ -212,10 +216,13 @@ extern "C" FREERDP_API BOOL freerdp_static_channel_collection_add(rdpSettings* settings, ADDIN_ARGV* channel); FREERDP_API BOOL freerdp_static_channel_collection_del(rdpSettings* settings, const char* name); + + WINPR_ATTR_NODISCARD FREERDP_API ADDIN_ARGV* freerdp_static_channel_collection_find(rdpSettings* settings, const char* name); #if defined(WITH_FREERDP_DEPRECATED) - WINPR_DEPRECATED(FREERDP_API ADDIN_ARGV* freerdp_static_channel_clone(ADDIN_ARGV* channel)); + WINPR_DEPRECATED(FREERDP_API ADDIN_ARGV* WINPR_ATTR_MALLOC(freerdp_addin_argv_free, 1) + WINPR_ATTR_NODISCARD freerdp_static_channel_clone(ADDIN_ARGV* channel)); #endif FREERDP_API void freerdp_static_channel_collection_free(rdpSettings* settings); @@ -224,22 +231,31 @@ extern "C" ADDIN_ARGV* channel); FREERDP_API BOOL freerdp_dynamic_channel_collection_del(rdpSettings* settings, const char* name); + + WINPR_ATTR_NODISCARD FREERDP_API ADDIN_ARGV* freerdp_dynamic_channel_collection_find(const rdpSettings* settings, const char* name); #if defined(WITH_FREERDP_DEPRECATED) - WINPR_DEPRECATED(FREERDP_API ADDIN_ARGV* freerdp_dynamic_channel_clone(ADDIN_ARGV* channel)); + WINPR_DEPRECATED(FREERDP_API ADDIN_ARGV* WINPR_ATTR_MALLOC(freerdp_addin_argv_free, 1) + WINPR_ATTR_NODISCARD freerdp_dynamic_channel_clone(ADDIN_ARGV* channel)); #endif FREERDP_API void freerdp_dynamic_channel_collection_free(rdpSettings* settings); FREERDP_API void freerdp_capability_buffer_free(rdpSettings* settings); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_capability_buffer_copy(rdpSettings* settings, const rdpSettings* src); FREERDP_API void freerdp_server_license_issuers_free(rdpSettings* settings); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_server_license_issuers_copy(rdpSettings* settings, char** addresses, UINT32 count); FREERDP_API void freerdp_target_net_addresses_free(rdpSettings* settings); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_target_net_addresses_copy(rdpSettings* settings, char** addresses, UINT32 count); @@ -258,36 +274,36 @@ extern "C" */ #if defined(WITH_FREERDP_DEPRECATED) WINPR_DEPRECATED_VAR("Use freerdp_settings_get_bool instead", - FREERDP_API BOOL freerdp_get_param_bool(const rdpSettings* settings, - int id)); + WINPR_ATTR_NODISCARD FREERDP_API BOOL + freerdp_get_param_bool(const rdpSettings* settings, int id)); WINPR_DEPRECATED_VAR("Use freerdp_settings_set_bool instead", FREERDP_API int freerdp_set_param_bool(rdpSettings* settings, int id, BOOL param)); WINPR_DEPRECATED_VAR("Use freerdp_settings_get_int[16|32] instead", - FREERDP_API int freerdp_get_param_int(const rdpSettings* settings, - int id)); + WINPR_ATTR_NODISCARD FREERDP_API int freerdp_get_param_int( + const rdpSettings* settings, int id)); WINPR_DEPRECATED_VAR("Use freerdp_settings_set_int[16|32] instead", FREERDP_API int freerdp_set_param_int(rdpSettings* settings, int id, int param)); WINPR_DEPRECATED_VAR("Use freerdp_settings_set_uint32 instead", - FREERDP_API UINT32 freerdp_get_param_uint32(const rdpSettings* settings, - int id)); + WINPR_ATTR_NODISCARD FREERDP_API UINT32 + freerdp_get_param_uint32(const rdpSettings* settings, int id)); WINPR_DEPRECATED_VAR("Use freerdp_settings_set_uint32 instead", FREERDP_API int freerdp_set_param_uint32(rdpSettings* settings, int id, UINT32 param)); WINPR_DEPRECATED_VAR("Use freerdp_settings_get_uint64 instead", - FREERDP_API UINT64 freerdp_get_param_uint64(const rdpSettings* settings, - int id)); + WINPR_ATTR_NODISCARD FREERDP_API UINT64 + freerdp_get_param_uint64(const rdpSettings* settings, int id)); WINPR_DEPRECATED_VAR("Use freerdp_settings_set_uint64 instead", FREERDP_API int freerdp_set_param_uint64(rdpSettings* settings, int id, UINT64 param)); WINPR_DEPRECATED_VAR("Use freerdp_settings_get_string instead", - FREERDP_API char* freerdp_get_param_string(const rdpSettings* settings, - int id)); + WINPR_ATTR_NODISCARD FREERDP_API char* freerdp_get_param_string( + const rdpSettings* settings, int id)); WINPR_DEPRECATED_VAR("Use freerdp_settings_set_string instead", FREERDP_API int freerdp_set_param_string(rdpSettings* settings, int id, const char* param)); @@ -302,6 +318,7 @@ extern "C" * * \return \b TRUE if valid, \b FALSE otherwise */ + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_are_valid(const rdpSettings* settings); /** \brief Returns a boolean settings value @@ -311,6 +328,7 @@ extern "C" * * \return the value of the boolean key */ + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_get_bool(const rdpSettings* settings, FreeRDP_Settings_Keys_Bool id); @@ -332,6 +350,7 @@ extern "C" * * \return the value of the INT16 key */ + WINPR_ATTR_NODISCARD FREERDP_API INT16 freerdp_settings_get_int16(const rdpSettings* settings, FreeRDP_Settings_Keys_Int16 id); @@ -353,6 +372,7 @@ extern "C" * * \return the value of the UINT16 key */ + WINPR_ATTR_NODISCARD FREERDP_API UINT16 freerdp_settings_get_uint16(const rdpSettings* settings, FreeRDP_Settings_Keys_UInt16 id); @@ -374,6 +394,7 @@ extern "C" * * \return the value of the INT32 key */ + WINPR_ATTR_NODISCARD FREERDP_API INT32 freerdp_settings_get_int32(const rdpSettings* settings, FreeRDP_Settings_Keys_Int32 id); @@ -395,6 +416,7 @@ extern "C" * * \return the value of the UINT32 key */ + WINPR_ATTR_NODISCARD FREERDP_API UINT32 freerdp_settings_get_uint32(const rdpSettings* settings, FreeRDP_Settings_Keys_UInt32 id); @@ -416,6 +438,7 @@ extern "C" * * \return the value of the INT64 key */ + WINPR_ATTR_NODISCARD FREERDP_API INT64 freerdp_settings_get_int64(const rdpSettings* settings, FreeRDP_Settings_Keys_Int64 id); @@ -437,6 +460,7 @@ extern "C" * * \return the value of the UINT64 key */ + WINPR_ATTR_NODISCARD FREERDP_API UINT64 freerdp_settings_get_uint64(const rdpSettings* settings, FreeRDP_Settings_Keys_UInt64 id); @@ -458,6 +482,7 @@ extern "C" * * \return the immutable string pointer */ + WINPR_ATTR_NODISCARD FREERDP_API const char* freerdp_settings_get_string(const rdpSettings* settings, FreeRDP_Settings_Keys_String id); @@ -468,6 +493,7 @@ extern "C" * * \return the string pointer */ + WINPR_ATTR_NODISCARD FREERDP_API char* freerdp_settings_get_string_writable(rdpSettings* settings, FreeRDP_Settings_Keys_String id); @@ -542,6 +568,8 @@ extern "C" * * \return An allocated, '\0' terminated WCHAR string or NULL */ + WINPR_ATTR_MALLOC(free, 1) + WINPR_ATTR_NODISCARD FREERDP_API WCHAR* freerdp_settings_get_string_as_utf16(const rdpSettings* settings, FreeRDP_Settings_Keys_String id, size_t* pCharLen); @@ -553,6 +581,7 @@ extern "C" * * \return the immutable pointer value */ + WINPR_ATTR_NODISCARD FREERDP_API const void* freerdp_settings_get_pointer(const rdpSettings* settings, FreeRDP_Settings_Keys_Pointer id); @@ -563,6 +592,7 @@ extern "C" * * \return the mutable pointer value */ + WINPR_ATTR_NODISCARD FREERDP_API void* freerdp_settings_get_pointer_writable(rdpSettings* settings, FreeRDP_Settings_Keys_Pointer id); @@ -590,12 +620,16 @@ extern "C" FreeRDP_Settings_Keys_Pointer id, const void* data, size_t len); + WINPR_ATTR_NODISCARD FREERDP_API const void* freerdp_settings_get_pointer_array(const rdpSettings* settings, FreeRDP_Settings_Keys_Pointer id, size_t offset); + + WINPR_ATTR_NODISCARD FREERDP_API void* freerdp_settings_get_pointer_array_writable(const rdpSettings* settings, FreeRDP_Settings_Keys_Pointer id, size_t offset); + FREERDP_API BOOL freerdp_settings_set_pointer_array(rdpSettings* settings, FreeRDP_Settings_Keys_Pointer id, size_t offset, const void* data); @@ -629,6 +663,7 @@ extern "C" * * \return The key index or -1 in case of an error (e.g. name does not exist) */ + WINPR_ATTR_NODISCARD FREERDP_API SSIZE_T freerdp_settings_get_key_for_name(const char* value); /** \brief Get a key type for the name string of that key @@ -638,6 +673,7 @@ extern "C" * \return The key type (e.g. FREERDP_SETTINGS_TYPE_BOOL) or -1 in case of an error (e.g. name * does not exist) */ + WINPR_ATTR_NODISCARD FREERDP_API SSIZE_T freerdp_settings_get_type_for_name(const char* value); /** \brief Get a key type for the key index @@ -647,6 +683,7 @@ extern "C" * \return The key type (e.g. FREERDP_SETTINGS_TYPE_BOOL) or -1 in case of an error (e.g. name * does not exist) */ + WINPR_ATTR_NODISCARD FREERDP_API SSIZE_T freerdp_settings_get_type_for_key(SSIZE_T key); /** \brief Returns the type name for a \b key @@ -654,6 +691,7 @@ extern "C" * \param key the key number to stringify * \return the type name of the key or \b FREERDP_SETTINGS_TYPE_UNKNOWN */ + WINPR_ATTR_NODISCARD FREERDP_API const char* freerdp_settings_get_type_name_for_key(SSIZE_T key); /** \brief Returns the type name for a \b type @@ -661,6 +699,7 @@ extern "C" * \param type the type to stringify * \return the name of the key or \b FREERDP_SETTINGS_TYPE_UNKNOWN */ + WINPR_ATTR_NODISCARD FREERDP_API const char* freerdp_settings_get_type_name_for_type(SSIZE_T type); /** \brief Returns the type name for a \b key @@ -668,6 +707,7 @@ extern "C" * \param key the key number to stringify * \return the name of the key or \b NULL */ + WINPR_ATTR_NODISCARD FREERDP_API const char* freerdp_settings_get_name_for_key(SSIZE_T key); /** \brief helper function to get a mask of supported codec flags. @@ -679,6 +719,7 @@ extern "C" * * \return a mask of supported codecs */ + WINPR_ATTR_NODISCARD FREERDP_API UINT32 freerdp_settings_get_codecs_flags(const rdpSettings* settings); /** \brief Parse capability data and apply to settings @@ -696,6 +737,7 @@ extern "C" * * \return \b TRUE for success, \b FALSE in case of an error */ + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_update_from_caps(rdpSettings* settings, const BYTE* capsFlags, const BYTE** capsData, const UINT32* capsSizes, UINT32 capsCount, @@ -710,6 +752,7 @@ extern "C" * * \return A string pointer or NULL in case of failure. */ + WINPR_ATTR_NODISCARD FREERDP_API const char* freerdp_settings_get_server_name(const rdpSettings* settings); /** \brief Returns a stringified representation of RAIL support flags @@ -720,6 +763,7 @@ extern "C" * * \return A pointer to \b buffer for success, NULL otherwise */ + WINPR_ATTR_NODISCARD FREERDP_API const char* freerdp_rail_support_flags_to_string(UINT32 flags, char* buffer, size_t length); @@ -730,6 +774,7 @@ extern "C" * \return A string representation of the protocol version as "RDP_VERSION_10_11" or * "RDP_VERSION_UNKNOWN" for invalid/unknown versions */ + WINPR_ATTR_NODISCARD FREERDP_API const char* freerdp_rdp_version_string(UINT32 version); /** \brief Returns a string representation of \b RDPDR_DTYP_* @@ -738,9 +783,12 @@ extern "C" * * \return A string representation of the \b RDPDR_DTYP_* or "RDPDR_DTYP_UNKNOWN" */ + WINPR_ATTR_NODISCARD FREERDP_API const char* freerdp_rdpdr_dtyp_string(UINT32 type); + WINPR_ATTR_NODISCARD FREERDP_API const char* freerdp_encryption_level_string(UINT32 EncryptionLevel); + WINPR_ATTR_NODISCARD FREERDP_API const char* freerdp_encryption_methods_string(UINT32 EncryptionLevel, char* buffer, size_t size); @@ -751,6 +799,7 @@ extern "C" * * @return A string reprenentation of the bitmask. */ + WINPR_ATTR_NODISCARD FREERDP_API const char* freerdp_supported_color_depths_string(UINT16 mask, char* buffer, size_t size); @@ -780,6 +829,7 @@ extern "C" * * @version since 3.11.0 */ + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_set_monitor_def_array_sorted(rdpSettings* settings, const rdpMonitor* monitors, size_t count);