From c0f9080d67390d1ff034a964f9a3ffc9c5267df5 Mon Sep 17 00:00:00 2001 From: Rich Stephens Date: Sun, 23 Nov 2025 08:50:14 -0500 Subject: [PATCH] Fix json query line endings coco/msdos --- coco/src/fn_network/network_json_query.c | 16 +++++++++++++++- msdos/src/fn_network/network_json_query.c | 16 +++++++++++++++- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/coco/src/fn_network/network_json_query.c b/coco/src/fn_network/network_json_query.c index 41d6a85..7320ca6 100644 --- a/coco/src/fn_network/network_json_query.c +++ b/coco/src/fn_network/network_json_query.c @@ -20,6 +20,8 @@ int16_t network_json_query(const char *devicespec, const char *query, char *s) uint16_t bw=0; uint8_t c=0, err=0; uint8_t unit = network_unit(devicespec); + char ch; + unsigned short offset = 0; jq.opcode = OP_NET; jq.unit = unit; @@ -35,5 +37,17 @@ int16_t network_json_query(const char *devicespec, const char *query, char *s) if (!bw) return 0; - return network_read(devicespec, (uint8_t *)s, bw); + if (network_read(devicespec, (uint8_t *)s, bw) > 0) + { + // if last char is 0x9b, 0x0A or 0x0D, then set that char to nul, else just null terminate + ch = s[bw - 1]; + if (ch == 0x9B || ch == 0x0A || ch == 0x0D) + { + offset = 1; + } + s[bw - offset] = '\0'; + } + + // return the string length (minus any trailing EOL char) + return bw - offset; } diff --git a/msdos/src/fn_network/network_json_query.c b/msdos/src/fn_network/network_json_query.c index 6d8bff9..9f4f2a2 100644 --- a/msdos/src/fn_network/network_json_query.c +++ b/msdos/src/fn_network/network_json_query.c @@ -9,6 +9,8 @@ int16_t network_json_query(const char *devicespec, const char *query, char *s) uint8_t ret = 0; uint8_t c=0, err=0; uint16_t bw=0; + char ch; + unsigned short offset = 0; // Perform query ret = int_f5_write(device,'Q',0x00,0x00,(void *)query,256); @@ -20,6 +22,18 @@ int16_t network_json_query(const char *devicespec, const char *query, char *s) if (!bw) return 0; + + if (network_read(devicespec, (uint8_t *)s, bw) > 0) + { + // if last char is 0x9b, 0x0A or 0x0D, then set that char to nul, else just null terminate + ch = s[bw - 1]; + if (ch == 0x9B || ch == 0x0A || ch == 0x0D) + { + offset = 1; + } + s[bw - offset] = '\0'; + } - return network_read(devicespec,(uint8_t *)s, bw); + // return the string length (minus any trailing EOL char) + return bw - offset; }