[BACK]Return to line.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / less

Diff for /src/usr.bin/less/line.c between version 1.31 and 1.32

version 1.31, 2019/05/15 19:06:01 version 1.32, 2019/08/31 13:44:29
Line 437 
Line 437 
         wchar_t  ch, prev_ch;          wchar_t  ch, prev_ch;
         int      i, len, width;          int      i, len, width;
   
         i = curr - 1;          if ((len = mbtowc_left(&ch, linebuf + curr, curr)) <= 0)
         if (utf_mode) {  
                 while (i >= lmargin && IS_UTF8_TRAIL(linebuf[i]))  
                         i--;  
         }  
         if (i < lmargin)  
                 return (0);                  return (0);
         if (utf_mode) {          curr -= len;
                 len = mbtowc(&ch, linebuf + i, curr - i);  
                 if (len == -1 || i + len < curr) {  
                         (void)mbtowc(NULL, NULL, MB_CUR_MAX);  
                         return (0);  
                 }  
         } else  
                 ch = linebuf[i];  
   
         /* This assumes that there is no '\b' in linebuf.  */          /* This assumes that there is no '\b' in linebuf.  */
         while (curr > lmargin && column > lmargin &&          while (curr >= lmargin && column > lmargin &&
             (!(attr[curr - 1] & (AT_ANSI|AT_BINARY)))) {              !(attr[curr] & (AT_ANSI|AT_BINARY))) {
                 curr = i--;                  if ((len = mbtowc_left(&prev_ch, linebuf + curr, curr)) <= 0)
                 if (utf_mode) {  
                         while (i >= lmargin && IS_UTF8_TRAIL(linebuf[i]))  
                                 i--;  
                 }  
                 if (i < lmargin)  
                         prev_ch = L'\0';                          prev_ch = L'\0';
                 else if (utf_mode) {  
                         len = mbtowc(&prev_ch, linebuf + i, curr - i);  
                         if (len == -1 || i + len < curr) {  
                                 (void)mbtowc(NULL, NULL, MB_CUR_MAX);  
                                 prev_ch = L'\0';  
                         }  
                 } else  
                         prev_ch = linebuf[i];  
                 width = pwidth(ch, attr[curr], prev_ch);                  width = pwidth(ch, attr[curr], prev_ch);
                 column -= width;                  column -= width;
                 if (width > 0)                  if (width > 0)
                         return (1);                          return (1);
                   curr -= len;
                 if (prev_ch == L'\0')                  if (prev_ch == L'\0')
                         return (0);                          return (0);
                 ch = prev_ch;                  ch = prev_ch;
Line 554 
Line 530 
         }          }
         if (w == -1) {          if (w == -1) {
                 wchar_t prev_ch;                  wchar_t prev_ch;
                   if (mbtowc_left(&prev_ch, linebuf + curr, curr) <= 0)
                 if (utf_mode) {                          prev_ch = L' ';
                         for (i = curr - 1; i >= 0; i--)  
                                 if (!IS_UTF8_TRAIL(linebuf[i]))  
                                         break;  
                         if (i >= 0) {  
                                 w = mbtowc(&prev_ch, linebuf + i, curr - i);  
                                 if (w == -1 || i + w < curr) {  
                                         (void)mbtowc(NULL, NULL, MB_CUR_MAX);  
                                         prev_ch = L' ';  
                                 }  
                         } else  
                                 prev_ch = L' ';  
                 } else  
                         prev_ch = curr > 0 ? linebuf[curr - 1] : L' ';  
                 w = pwidth(ch, a, prev_ch);                  w = pwidth(ch, a, prev_ch);
         }          }
   

Legend:
Removed from v.1.31  
changed lines
  Added in v.1.32