Hi Marek, On 29/01/2026 01:23, Marek Vasut wrote: > Currently, the LWIP wget command prints excessive amount of progress > indicator '#' for very long file downloads,
So true! ;-) > limit this to one line > that scales according to transfer size. > > The HTTP server does report the size of the entire file in protocol > headers, which are received before the actual data transfer. Cache > this information and use it to adaptively print progress indicator > '#' until it fills one entire line worth of '#', which indicates the > transfer has completed. This way, long transfers don't print pages of > '#', but every transfer will print exactly one line worth of '#'. The > algorithm for '#' printing is the same as TFTP tsize one. That's not one line strictly speaking, it is 50 characters. Like I suggested re. your TFTP patch, perhaps a percent-based format would be better? 0%....10%....20%... etc. In any case: Acked-by: Jerome Forissier <[email protected]> Thanks, -- Jerome > > Signed-off-by: Marek Vasut <[email protected]> > --- > Cc: Ilias Apalodimas <[email protected]> > Cc: Jerome Forissier <[email protected]> > Cc: Joe Hershberger <[email protected]> > Cc: Ramon Fried <[email protected]> > Cc: Sughosh Ganu <[email protected]> > Cc: Tim Harvey <[email protected]> > Cc: Tom Rini <[email protected]> > Cc: [email protected] > --- > net/lwip/wget.c | 27 +++++++++++++++++++++++---- > 1 file changed, 23 insertions(+), 4 deletions(-) > > diff --git a/net/lwip/wget.c b/net/lwip/wget.c > index 55bd2b72e26..008f3b395e7 100644 > --- a/net/lwip/wget.c > +++ b/net/lwip/wget.c > @@ -37,6 +37,8 @@ struct wget_ctx { > ulong size; > ulong prevsize; > ulong start_time; > + ulong content_len; > + ulong hash_count; > enum done_state done; > }; > > @@ -152,6 +154,7 @@ static int store_block(struct wget_ctx *ctx, void *src, > u16_t len) > { > ulong store_addr = ctx->daddr; > uchar *ptr; > + ulong pos; > > /* Avoid overflow */ > if (wget_info->buffer_size && wget_info->buffer_size < ctx->size + len) > @@ -174,10 +177,12 @@ static int store_block(struct wget_ctx *ctx, void *src, > u16_t len) > > ctx->daddr += len; > ctx->size += len; > - if (ctx->size - ctx->prevsize > PROGRESS_PRINT_STEP_BYTES) { > - if (!wget_info->silent) > - printf("#"); > - ctx->prevsize = ctx->size; > + > + pos = clamp(ctx->size, 0UL, ctx->content_len); > + > + while (ctx->hash_count < pos * 50 / ctx->content_len) { > + putc('#'); > + ctx->hash_count++; > } > > return 0; > @@ -234,6 +239,14 @@ static void httpc_result_cb(void *arg, httpc_result_t > httpc_result, > return; > } > > + /* Print hash marks for the last packet received */ > + while (ctx->hash_count < 49) { > + putc('#'); > + ctx->hash_count++; > + } > + puts(" "); > + print_size(ctx->content_len, ""); > + > elapsed = get_timer(ctx->start_time); > if (!elapsed) > elapsed = 1; > @@ -263,11 +276,15 @@ static void httpc_result_cb(void *arg, httpc_result_t > httpc_result, > static err_t httpc_headers_done_cb(httpc_state_t *connection, void *arg, > struct pbuf *hdr, > u16_t hdr_len, u32_t content_len) > { > + struct wget_ctx *ctx = arg; > + > wget_lwip_fill_info(hdr, hdr_len, content_len); > > if (wget_info->check_buffer_size && (ulong)content_len > > wget_info->buffer_size) > return ERR_BUF; > > + ctx->content_len = content_len; > + > return ERR_OK; > } > > @@ -294,6 +311,8 @@ int wget_do_request(ulong dst_addr, char *uri) > ctx.size = 0; > ctx.prevsize = 0; > ctx.start_time = 0; > + ctx.content_len = 0; > + ctx.hash_count = 0; > > if (parse_url(uri, ctx.server_name, &ctx.port, &path, &is_https)) > return CMD_RET_USAGE;

