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

@@ -750,7 +750,7 @@ do_bufdel (
break;
arg = p;
} else
bnr = getdigits(&arg);
bnr = get_int_digits(&arg);
}
}
if (!got_int && do_current && do_buffer(command, DOBUF_FIRST,
@@ -2997,7 +2997,7 @@ build_stl_str_hl (
l = -1;
}
if (VIM_ISDIGIT(*s)) {
minwid = (int)getdigits(&s);
minwid = get_int_digits(&s);
if (minwid < 0) /* overflow */
minwid = 0;
}
@@ -3033,7 +3033,7 @@ build_stl_str_hl (
if (*s == '.') {
s++;
if (VIM_ISDIGIT(*s)) {
maxwid = (int)getdigits(&s);
maxwid = get_int_digits(&s);
if (maxwid <= 0) /* overflow */
maxwid = 50;
}
@@ -4077,7 +4077,7 @@ chk_modeline (
e = s + 4;
else
e = s + 3;
vers = getdigits(&e);
vers = get_int_digits(&e);
if (*e == ':'
&& (s[0] != 'V'
|| STRNCMP(skipwhite(e + 1), "set", 3) == 0)