From a96672c0fc53c190480e3d656993d7e2608e26dd Mon Sep 17 00:00:00 2001 From: Jamiras Date: Wed, 22 Jan 2020 17:42:55 -0700 Subject: [PATCH] improve accuracy of progress for smaller payloads; prevent divide by zero for very small payloads --- tasks/task_http.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/tasks/task_http.c b/tasks/task_http.c index 78d2f81ccc..17f7335709 100644 --- a/tasks/task_http.c +++ b/tasks/task_http.c @@ -126,7 +126,14 @@ static int task_http_iterate_transfer(retro_task_t *task) if (!net_http_update(http->handle, &pos, &tot)) { - task_set_progress(task, (tot == 0) ? -1 : (signed)pos / (tot / 100)); + if (tot == 0) + task_set_progress(task, -1); + else if (pos < (((size_t)-1) / 100)) + /* prefer multiply then divide for more accurate results */ + task_set_progress(task, (signed)(pos * 100 / tot)); + else + /* but invert the logic if it would cause an overflow */ + task_set_progress(task, MAX((signed)pos / (tot / 100), 100)); return -1; }