From 4b0fd7822ec9d86d91325dc10ebc2cd1cd5743e9 Mon Sep 17 00:00:00 2001 From: "pavel.uhanov" <pavel.uhanov@demlabs.net> Date: Mon, 17 Mar 2025 07:28:38 +0000 Subject: [PATCH] backport-15029 --- core/include/dap_common.h | 4 ++++ core/include/dap_time.h | 2 +- core/src/dap_time.c | 17 +++++++++++++++++ global-db/dap_global_db.c | 2 +- net/server/cli_server/dap_cli_server.c | 3 ++- .../rpc_core/src/dap_json_rpc_response.c | 2 +- 6 files changed, 26 insertions(+), 4 deletions(-) diff --git a/core/include/dap_common.h b/core/include/dap_common.h index 3f631be7c..ba771572d 100755 --- a/core/include/dap_common.h +++ b/core/include/dap_common.h @@ -859,6 +859,10 @@ static const uint16_t s_ascii_table_data[256] = { #define dap_ascii_isprint(c) (s_ascii_table_data[(unsigned char) (c)] & DAP_ASCII_PRINT) #define dap_ascii_isxdigit(c) (s_ascii_table_data[(unsigned char) (c)] & DAP_ASCII_XDIGIT) +#define DAP_FLAG_ADD(a, flag) ((a) | (flag)) +#define DAP_FLAG_REMOVE(a, flag) ((a) & ~(flag)) +#define DAP_FLAG_CHECK(a, flag) ((a) & (flag)) + static void * ( *const volatile memset_safe ) (void*, int, size_t) = memset; DAP_STATIC_INLINE void DAP_AtomicLock( dap_spinlock_t *lock ) diff --git a/core/include/dap_time.h b/core/include/dap_time.h index 26a2878aa..a2ec6cdb0 100644 --- a/core/include/dap_time.h +++ b/core/include/dap_time.h @@ -57,4 +57,4 @@ int dap_nanotime_to_str_rfc822(char *a_out, size_t a_out_size_max, dap_nanotime_ int timespec_diff(struct timespec *a_start, struct timespec *a_stop, struct timespec *a_result); dap_time_t dap_time_from_str_simplified(const char *a_time_str); - +dap_time_t dap_time_from_str_custom(const char *a_time_str, const char *a_format_str); diff --git a/core/src/dap_time.c b/core/src/dap_time.c index fc1108c38..39141655e 100644 --- a/core/src/dap_time.c +++ b/core/src/dap_time.c @@ -207,3 +207,20 @@ int dap_nanotime_to_str_rfc822(char *a_out, size_t a_out_size_max, dap_nanotime_ time_t l_time = dap_nanotime_to_sec(a_chain_time); return dap_time_to_str_rfc822(a_out, a_out_size_max, l_time); } + +/** + * @brief Convert time str to dap_time_t by custom format + * @param a_time_str + * @param a_format_str + * @return time from string or 0 if bad time format + */ +dap_time_t dap_time_from_str_custom(const char *a_time_str, const char *a_format_str) +{ + dap_return_val_if_pass(!a_time_str || !a_format_str, 0); + struct tm l_tm = {}; + char *ret = strptime(a_time_str, a_format_str, &l_tm); + if ( !ret || *ret ) + return log_it(L_ERROR, "Invalid timestamp \"%s\" by format \"%s\"", a_time_str, a_format_str), 0; + time_t tmp = mktime(&l_tm); + return tmp > 0 ? (dap_time_t)tmp : 0; +} \ No newline at end of file diff --git a/global-db/dap_global_db.c b/global-db/dap_global_db.c index cb4dde542..09b0987aa 100644 --- a/global-db/dap_global_db.c +++ b/global-db/dap_global_db.c @@ -1387,7 +1387,7 @@ int dap_global_db_del_ex(const char * a_group, const char *a_key, const void * a l_msg->callback_arg = a_arg; l_msg->callback_result = a_callback; if (a_value_len) { - l_msg->value = DAP_DUP_SIZE(a_value, a_value_len); + l_msg->value = DAP_DUP_SIZE((void *)a_value, a_value_len); l_msg->value_length = a_value_len; } diff --git a/net/server/cli_server/dap_cli_server.c b/net/server/cli_server/dap_cli_server.c index 7a42efeab..1d2e9d691 100644 --- a/net/server/cli_server/dap_cli_server.c +++ b/net/server/cli_server/dap_cli_server.c @@ -262,7 +262,8 @@ int json_commands(const char * a_name) { "stats", "print_log", "stake_lock", - "exec_cmd" + "exec_cmd", + "policy" }; for (size_t i = 0; i < sizeof(long_cmd)/sizeof(long_cmd[0]); i++) { if (!strcmp(a_name, long_cmd[i])) { diff --git a/net/server/json_rpc/rpc_core/src/dap_json_rpc_response.c b/net/server/json_rpc/rpc_core/src/dap_json_rpc_response.c index d5769c9f3..d5ea2f6b3 100644 --- a/net/server/json_rpc/rpc_core/src/dap_json_rpc_response.c +++ b/net/server/json_rpc/rpc_core/src/dap_json_rpc_response.c @@ -212,7 +212,7 @@ void json_print_value(json_object *obj, const char *key, int indent_level, bool printf(print_separator ? "%s, " : "%s", json_object_get_string(obj)); break; case json_type_int: - printf("%d", json_object_get_int(obj)); + printf("%lld", json_object_get_int64(obj)); break; case json_type_double: printf("%lf", json_object_get_double(obj)); -- GitLab