Mercurial > vim
comparison src/strings.c @ 26264:ce6490cd6282 v8.2.3663
patch 8.2.3663: using %S in printf() does not work correctly
Commit: https://github.com/vim/vim/commit/1f2453fec6f8f0f315f00ca7b562a02090cb1e37
Author: presuku <presuku@users.noreply.github.com>
Date: Wed Nov 24 15:32:57 2021 +0000
patch 8.2.3663: using %S in printf() does not work correctly
Problem: Using %S in printf() does not work correctly.
Solution: Fix the problem and add more tests. (closes https://github.com/vim/vim/issues/9208)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Wed, 24 Nov 2021 16:45:03 +0100 |
parents | 2093cc976da8 |
children | 2126feddeda6 |
comparison
equal
deleted
inserted
replaced
26263:96a2fb08d98a | 26264:ce6490cd6282 |
---|---|
2141 str_arg_l = (q == NULL) ? precision | 2141 str_arg_l = (q == NULL) ? precision |
2142 : (size_t)(q - str_arg); | 2142 : (size_t)(q - str_arg); |
2143 } | 2143 } |
2144 if (fmt_spec == 'S') | 2144 if (fmt_spec == 'S') |
2145 { | 2145 { |
2146 size_t base_width = min_field_width; | 2146 char_u *p1; |
2147 size_t pad_cell = 0; | 2147 size_t i; |
2148 | 2148 int cell; |
2149 if (precision) | 2149 |
2150 for (i = 0, p1 = (char_u *)str_arg; *p1; | |
2151 p1 += mb_ptr2len(p1)) | |
2150 { | 2152 { |
2151 char_u *p1; | 2153 cell = mb_ptr2cells(p1); |
2152 size_t i = 0; | 2154 if (precision_specified && i + cell > precision) |
2153 | 2155 break; |
2154 for (p1 = (char_u *)str_arg; *p1; | 2156 i += cell; |
2155 p1 += mb_ptr2len(p1)) | |
2156 { | |
2157 i += (size_t)mb_ptr2cells(p1); | |
2158 if (i > precision) | |
2159 break; | |
2160 } | |
2161 pad_cell = min_field_width - precision; | |
2162 base_width = str_arg_l = precision = | |
2163 p1 - (char_u *)str_arg; | |
2164 } | 2157 } |
2158 | |
2159 str_arg_l = p1 - (char_u *)str_arg; | |
2165 if (min_field_width != 0) | 2160 if (min_field_width != 0) |
2166 min_field_width = base_width + pad_cell; | 2161 min_field_width += str_arg_l - i; |
2167 } | 2162 } |
2168 break; | 2163 break; |
2169 | 2164 |
2170 default: | 2165 default: |
2171 break; | 2166 break; |