diff options
author | xengineering <me@xengineering.eu> | 2025-04-17 17:39:26 +0200 |
---|---|---|
committer | xengineering <me@xengineering.eu> | 2025-04-17 17:39:26 +0200 |
commit | d60dd348fd15cb0fbd797068d5e358ae183386f6 (patch) | |
tree | a91eeb49da46a2682b7a272869fee08b7ea3a154 /fw/app/src/settings.c | |
parent | 9a89b48c261c1793d07abdad63c04fcff40035be (diff) | |
download | iot-contact-d60dd348fd15cb0fbd797068d5e358ae183386f6.tar iot-contact-d60dd348fd15cb0fbd797068d5e358ae183386f6.tar.zst iot-contact-d60dd348fd15cb0fbd797068d5e358ae183386f6.zip |
fw: app: settings: Minimize changes for SEGFAULT fix
The core issue is that JSON_TOK_STRING as last argument to
JSON_OBJ_DESCR_PRIM issues the SEGFAULT.
Using JSON_TOK_NUMBER instead is the minimal change to avoid the
SEGFAULT temporarily. Obviously this leads to nonsense output since the
string is printed out as number.
Diffstat (limited to 'fw/app/src/settings.c')
-rw-r--r-- | fw/app/src/settings.c | 22 |
1 files changed, 10 insertions, 12 deletions
diff --git a/fw/app/src/settings.c b/fw/app/src/settings.c index 22e55fc..d867207 100644 --- a/fw/app/src/settings.c +++ b/fw/app/src/settings.c @@ -4,6 +4,7 @@ * obtain one at https://mozilla.org/MPL/2.0/. */ +#include <string.h> #include <zephyr/data/json.h> #include <zephyr/init.h> @@ -36,7 +37,7 @@ int init_settings(void) { SYS_INIT(init_settings, APPLICATION, 50); static const struct json_obj_descr settings_syslog_target_descr[] = { - JSON_OBJ_DESCR_PRIM(struct settings_syslog_target, ip, JSON_TOK_NUMBER), + JSON_OBJ_DESCR_PRIM(struct settings_syslog_target, ip, JSON_TOK_NUMBER), // FIXME should be string but this leads to segfault }; static const struct json_obj_descr settings_syslog_descr[] = { @@ -51,24 +52,21 @@ int settings_to_json(void *buffer, size_t len) { struct settings settings = {0,}; -// int ret = settings_runtime_get("syslog/target/ip", -// settings.syslog.target.ip, -// sizeof(settings.syslog.target.ip)); -// if (ret < 0) { -// LOG_ERR("Failed to get runtime setting syslog/target/ip (%d)", ret); -// return ret; -// } - - settings.syslog.target.ip = 42; + int ret = settings_runtime_get("syslog/target/ip", + settings.syslog.target.ip, + sizeof(settings.syslog.target.ip)); + if (ret < 0) { + LOG_ERR("Failed to get runtime setting syslog/target/ip (%d)", ret); + return ret; + } - int ret = json_obj_encode_buf( + ret = json_obj_encode_buf( settings_descr, ARRAY_SIZE(settings_descr), &settings, buffer, len ); - if (ret < 0) { LOG_ERR("Failed to serialize settings as JSON"); return ret; |