Cleanup: Refactor getdigits().

Problem  : getdigits() currently returns a long, but at most places,
           return value is casted (unsafely) into an int. Making casts
           safe would introduce a lot of fuss in the form of assertions
           checking for limits.
Note     : We cannot just change return type to int, because, at some
           places, legitimate long values are used. For example, in
           diff.c, for line numbers.
Solution : Introduce new functions:
           - get_digits()      : Gets an intmax_t from a string.
           - get_int_digits()  : Wrapper for ints.
           - get_long_digits() : Wrapper for longs.
           And replace getdigits() invocations by the appropiate
           wrapper invocations.
This commit is contained in:
Eliseo Martínez
2015-01-11 12:55:38 +01:00
parent 28e75d4c45
commit 04c0658024
23 changed files with 105 additions and 106 deletions

View File

@@ -4900,7 +4900,7 @@ static char_u *get_syn_pattern(char_u *arg, synpat_T *ci)
ci->sp_off_flags |= (1 << idx);
if (idx == SPO_LC_OFF) { /* lc=99 */
end += 3;
*p = getdigits(&end);
*p = get_int_digits(&end);
/* "lc=" offset automatically sets "ms=" offset */
if (!(ci->sp_off_flags & (1 << SPO_MS_OFF))) {
@@ -4911,10 +4911,10 @@ static char_u *get_syn_pattern(char_u *arg, synpat_T *ci)
end += 4;
if (*end == '+') {
++end;
*p = getdigits(&end); /* positive offset */
*p = get_int_digits(&end); /* positive offset */
} else if (*end == '-') {
++end;
*p = -getdigits(&end); /* negative offset */
*p = -get_int_digits(&end); /* negative offset */
}
}
if (*end != ',')
@@ -4980,7 +4980,7 @@ static void syn_cmd_sync(exarg_T *eap, int syncing)
illegal = TRUE;
break;
}
n = getdigits(&arg_end);
n = get_long_digits(&arg_end);
if (!eap->skip) {
if (key[4] == 'B')
curwin->w_s->b_syn_sync_linebreaks = n;