From 18ab74be0bd8b5b086ab54b96e1ab0a7e0c14a04 Mon Sep 17 00:00:00 2001 From: Andre Noll Date: Tue, 1 May 2018 14:04:57 +0200 Subject: [PATCH] com_ff(): Avoid "unsigned i". It's an act of violence. The change should have no visible effect in the common cases ff n and ff n- where n is a (small) non-negative integer. The behaviour of the command changes for negative values of n, but this case was never documented. After this patch negative arguments instruct the subcommand to jump backwards, which should meet the expected behaviour. --- command.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/command.c b/command.c index 6adb9455..45840755 100644 --- a/command.c +++ b/command.c @@ -663,8 +663,7 @@ EXPORT_SERVER_CMD_HANDLER(nomore); static int com_ff(struct command_context *cc, struct lls_parse_result *lpr) { long promille; - int ret, backwards = 0; - unsigned i; + int i, ret, backwards = 0; char c, *errctx; ret = lls(lls_check_arg_count(lpr, 1, 1, &errctx)); @@ -672,7 +671,7 @@ static int com_ff(struct command_context *cc, struct lls_parse_result *lpr) send_errctx(cc, errctx); return ret; } - if (!(ret = sscanf(lls_input(0, lpr), "%u%c", &i, &c))) + if (!(ret = sscanf(lls_input(0, lpr), "%i%c", &i, &c))) return -E_COMMAND_SYNTAX; if (ret > 1 && c == '-') backwards = 1; /* jmp backwards */ @@ -682,10 +681,14 @@ static int com_ff(struct command_context *cc, struct lls_parse_result *lpr) goto out; ret = 1; promille = (1000 * mmd->current_chunk) / mmd->afd.afhi.chunks_total; + /* + * We need these casts because without them the expression on the right + * hand side is of unsigned type. + */ if (backwards) - promille -= 1000 * i / mmd->afd.afhi.seconds_total; + promille -= 1000 * i / (int)mmd->afd.afhi.seconds_total; else - promille += 1000 * i / mmd->afd.afhi.seconds_total; + promille += 1000 * i / (int)mmd->afd.afhi.seconds_total; if (promille < 0) promille = 0; if (promille > 1000) { -- 2.39.5