From 4cbba6a263a6eda8e685d28bcae938788115067f Mon Sep 17 00:00:00 2001 From: Khairul Azhar Kasmiran Date: Sun, 23 Nov 2025 02:04:35 +0800 Subject: [PATCH] rz_str_trim_tail: Declare `RZ_INOUT` on both parameter and return value (#5546) --- DEVELOPERS.md | 2 +- librz/include/rz_types.h | 2 +- librz/include/rz_util/rz_str.h | 2 +- librz/util/str_trim.c | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/DEVELOPERS.md b/DEVELOPERS.md index 45b4aa2c7b..f28e5fffe5 100644 --- a/DEVELOPERS.md +++ b/DEVELOPERS.md @@ -376,7 +376,7 @@ In Rizin code, there are some conventions to help developers use pointers more s ```c #define RZ_IN /* do not use, implicit */ #define RZ_OUT /* parameter is written, not read */ -#define RZ_INOUT /* parameter is read and written */ +#define RZ_INOUT /* parameter is read and written / return value is copy of RZ_INOUT parameter */ #define RZ_OWN /* pointer ownership is transferred */ #define RZ_BORROW /* pointer ownership is not transferred, it must not be freed by the receiver */ #define RZ_NONNULL /* pointer cannot be null */ diff --git a/librz/include/rz_types.h b/librz/include/rz_types.h index 5e5d55a791..214f4d3f8d 100644 --- a/librz/include/rz_types.h +++ b/librz/include/rz_types.h @@ -35,7 +35,7 @@ extern "C" { #define RZ_IN /* do not use, implicit */ #define RZ_OUT /* parameter is written, not read */ -#define RZ_INOUT /* parameter is read and written */ +#define RZ_INOUT /* parameter is read and written / return value is copy of RZ_INOUT parameter */ #ifdef RZ_BINDINGS #define RZ_OWN __attribute__((annotate("RZ_OWN"))) diff --git a/librz/include/rz_util/rz_str.h b/librz/include/rz_util/rz_str.h index d34df0d208..843e9d6d14 100644 --- a/librz/include/rz_util/rz_str.h +++ b/librz/include/rz_util/rz_str.h @@ -181,7 +181,7 @@ RZ_API void rz_str_trim_head(RZ_NONNULL RZ_INOUT char *str); RZ_API void rz_str_trim_head_char(RZ_NONNULL RZ_INOUT char *str, const char c); RZ_API const char *rz_str_trim_head_ro(RZ_NONNULL const char *str); RZ_API const char *rz_str_trim_head_wp(RZ_NONNULL const char *str); -RZ_API RZ_BORROW char *rz_str_trim_tail(RZ_NONNULL char *str); +RZ_API RZ_INOUT char *rz_str_trim_tail(RZ_NONNULL RZ_INOUT char *str); RZ_API void rz_str_trim_tail_char(RZ_NONNULL RZ_INOUT char *str, const char c); RZ_API ut64 rz_str_djb2_hash(const char *str); RZ_API char *rz_str_trim_nc(char *str); diff --git a/librz/util/str_trim.c b/librz/util/str_trim.c index 8028e1a329..829333bbe0 100644 --- a/librz/util/str_trim.c +++ b/librz/util/str_trim.c @@ -126,9 +126,9 @@ RZ_API void rz_str_trim_head(RZ_NONNULL RZ_INOUT char *str) { * The string is changed in place. * * \param str The string to trim. - * \return The edited string. + * \return The `str` pointer. */ -RZ_API RZ_BORROW char *rz_str_trim_tail(RZ_NONNULL char *str) { +RZ_API RZ_INOUT char *rz_str_trim_tail(RZ_NONNULL RZ_INOUT char *str) { rz_return_val_if_fail(str, NULL); size_t length = strlen(str); while (length-- > 0) {