aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJurica Bradaric <jbradaric@gmail.com>2017-03-21 22:48:01 +0100
committerJurica Bradaric <jbradaric@gmail.com>2017-03-21 22:56:05 +0100
commit3e33025133e1e77c7ad3b8670e06175b9757cf30 (patch)
tree4ba1041a8582244d496b599d884dc0044d1e6b48
parentc6c8e1e8cc4ea6fc98187c0bce8875cf82278ba5 (diff)
downloadrneovim-3e33025133e1e77c7ad3b8670e06175b9757cf30.tar.gz
rneovim-3e33025133e1e77c7ad3b8670e06175b9757cf30.tar.bz2
rneovim-3e33025133e1e77c7ad3b8670e06175b9757cf30.zip
strings: Fix problems found during code review
-rw-r--r--src/nvim/strings.c71
1 files changed, 33 insertions, 38 deletions
diff --git a/src/nvim/strings.c b/src/nvim/strings.c
index a2052423e2..7ec2ea13f7 100644
--- a/src/nvim/strings.c
+++ b/src/nvim/strings.c
@@ -1224,49 +1224,44 @@ int vim_vsnprintf(char *str, size_t str_m, const char *fmt, va_list ap,
remove_trailing_zeroes = true;
}
- if ((fmt_spec == 'f' || fmt_spec == 'F') && abs_f > 1.0e307) {
- STRCPY(tmp, infinity_str(f > 0.0, fmt_spec,
- force_sign, space_for_positive));
- str_arg_l = STRLEN(tmp);
+ if (isinf(f)
+ || (strchr("fF", fmt_spec) != NULL && abs_f > 1.0e307)) {
+ xstrlcpy(tmp, infinity_str(f > 0.0, fmt_spec,
+ force_sign, space_for_positive),
+ sizeof(tmp));
+ str_arg_l = strlen(tmp);
+ zero_padding = 0;
+ } else if (isnan(f)) {
+ // Not a number: nan or NAN
+ memmove(tmp, ASCII_ISUPPER(fmt_spec) ? "NAN" : "nan", 4);
+ str_arg_l = 3;
zero_padding = 0;
} else {
- if (isnan(f)) {
- // Not a number: nan or NAN
- STRCPY(tmp, ASCII_ISUPPER(fmt_spec) ? "NAN" : "nan");
- str_arg_l = 3;
- zero_padding = 0;
- } else if (isinf(f)) {
- STRCPY(tmp, infinity_str(f > 0.0, fmt_spec,
- force_sign, space_for_positive));
- str_arg_l = STRLEN(tmp);
- zero_padding = 0;
- } else {
- format[0] = '%';
- int l = 1;
- if (force_sign) {
- format[l++] = space_for_positive ? ' ' : '+';
- }
- if (precision_specified) {
- size_t max_prec = TMP_LEN - 10;
+ format[0] = '%';
+ size_t l = 1;
+ if (force_sign) {
+ format[l++] = space_for_positive ? ' ' : '+';
+ }
+ if (precision_specified) {
+ size_t max_prec = TMP_LEN - 10;
- // make sure we don't get more digits than we have room for
- if ((fmt_spec == 'f' || fmt_spec == 'F') && abs_f > 1.0) {
- max_prec -= (size_t)log10(abs_f);
- }
- if (precision > max_prec) {
- precision = max_prec;
- }
- l += snprintf(format + l, sizeof(format) - 1, ".%d",
- (int)precision);
+ // make sure we don't get more digits than we have room for
+ if ((fmt_spec == 'f' || fmt_spec == 'F') && abs_f > 1.0) {
+ max_prec -= (size_t)log10(abs_f);
}
- format[l] = (char)(fmt_spec == 'F' ? 'f' : fmt_spec);
- format[l + 1] = NUL;
-
- // Regular float number
- assert(l + 1 < (int)sizeof(format));
- str_arg_l = (size_t)snprintf(tmp, sizeof(tmp), format, f);
- assert(str_arg_l < sizeof(tmp));
+ if (precision > max_prec) {
+ precision = max_prec;
+ }
+ l += (size_t)snprintf(format + l, sizeof(format) - l, ".%d",
+ (int)precision);
}
+ format[l] = fmt_spec == 'F' ? 'f' : fmt_spec;
+ format[l + 1] = NUL;
+
+ // Regular float number
+ assert(l + 1 < sizeof(format));
+ str_arg_l = (size_t)snprintf(tmp, sizeof(tmp), format, f);
+ assert(str_arg_l < sizeof(tmp));
if (remove_trailing_zeroes) {
int i;