diff --git a/sys/net/application_layer/nanocoap/link_format.c b/sys/net/application_layer/nanocoap/link_format.c index df3209f87f..6666f1fa63 100644 --- a/sys/net/application_layer/nanocoap/link_format.c +++ b/sys/net/application_layer/nanocoap/link_format.c @@ -58,16 +58,21 @@ static int _dirlist_cb(void *arg, size_t offset, uint8_t *buf, size_t len, int m } } - if (*c == ',' || ctx->cur == ctx->end) { - int res; + bool found_end = false; + if (*c == ',') { + found_end = true; + } + else { + *ctx->cur++ = *c; + } + + if (found_end || ctx->cur == ctx->end) { *ctx->cur = 0; - res = ctx->cb(ctx->buf, ctx->ctx); + int res = ctx->cb(ctx->buf, ctx->ctx); ctx->cur = ctx->buf; if (res < 0) { return res; } - } else { - *ctx->cur++ = *c; } } @@ -85,7 +90,7 @@ int nanocoap_link_format_get(nanocoap_sock_t *sock, const char *path, char buffer[CONFIG_NANOCOAP_QS_MAX]; struct dir_list_ctx ctx = { .buf = buffer, - .end = buffer + sizeof(buffer) - 1, + .end = buffer + sizeof(buffer), .cur = buffer, .cb = cb, .ctx = arg, diff --git a/sys/shell/cmds/nanocoap_vfs.c b/sys/shell/cmds/nanocoap_vfs.c index b35588a55c..592b7b2bd7 100644 --- a/sys/shell/cmds/nanocoap_vfs.c +++ b/sys/shell/cmds/nanocoap_vfs.c @@ -52,16 +52,31 @@ static bool _is_dir(const char *url) static int _resource_cb(char *entry, void *ctx) { - (void)ctx; + bool *too_long = ctx; + char *start, *end; - char *start = strchr(entry, '<'); - if (start) { - char *end = strchr(entry, '>'); - *end = '\0'; - entry = start + 1; + if (*too_long) { + goto find_end; + } + + start = strchr(entry, '<'); + if (start == NULL) { + return 0; + } + entry = start + 1; + +find_end: + end = strchr(entry, '>'); + if (end == NULL) { + *too_long = true; + printf("%s", entry); + } + else { + *too_long = false; + *end = '\0'; + puts(entry); } - puts(entry); return 0; } @@ -91,7 +106,8 @@ static int _nanocoap_get_handler(int argc, char **argv) } if (_is_dir(url) && argc < 3) { - res = nanocoap_link_format_get_url(url, _resource_cb, NULL); + bool _ctx = false; + res = nanocoap_link_format_get_url(url, _resource_cb, &_ctx); if (res) { printf("Request failed: %s\n", strerror(-res)); }