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.
static int com_ff(struct command_context *cc, struct lls_parse_result *lpr)
{
long promille;
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));
char c, *errctx;
ret = lls(lls_check_arg_count(lpr, 1, 1, &errctx));
send_errctx(cc, errctx);
return ret;
}
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 */
return -E_COMMAND_SYNTAX;
if (ret > 1 && c == '-')
backwards = 1; /* jmp backwards */
goto out;
ret = 1;
promille = (1000 * mmd->current_chunk) / mmd->afd.afhi.chunks_total;
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.
+ */
- promille -= 1000 * i / mmd->afd.afhi.seconds_total;
+ promille -= 1000 * i / (int)mmd->afd.afhi.seconds_total;
- 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) {
if (promille < 0)
promille = 0;
if (promille > 1000) {