Merge branch 'js/maint-apply-tab-in-indent-fix' into HEAD
[gitweb.git] / ws.c
diff --git a/ws.c b/ws.c
index d7b8c33f14195ba7ebe86bdbca2fea8f1b22ad37..e3504360dab46231298eda0c3ffadfb69e79c609 100644 (file)
--- a/ws.c
+++ b/ws.c
@@ -174,8 +174,11 @@ static unsigned ws_check_emit_1(const char *line, int len, unsigned ws_rule,
                }
        }
 
+       if (trailing_whitespace == -1)
+               trailing_whitespace = len;
+
        /* Check indentation */
-       for (i = 0; i < len; i++) {
+       for (i = 0; i < trailing_whitespace; i++) {
                if (line[i] == ' ')
                        continue;
                if (line[i] != '\t')
@@ -218,8 +221,6 @@ static unsigned ws_check_emit_1(const char *line, int len, unsigned ws_rule,
                 * Now the rest of the line starts at "written".
                 * The non-highlighted part ends at "trailing_whitespace".
                 */
-               if (trailing_whitespace == -1)
-                       trailing_whitespace = len;
 
                /* Emit non-highlighted (middle) segment. */
                if (trailing_whitespace - written > 0) {
@@ -362,12 +363,13 @@ void ws_fix_copy(struct strbuf *dst, const char *src, int len, unsigned ws_rule,
                fixed = 1;
        } else if ((ws_rule & WS_TAB_IN_INDENT) && last_tab_in_indent >= 0) {
                /* Expand tabs into spaces */
+               int start = dst->len;
                int last = last_tab_in_indent + 1;
                for (i = 0; i < last; i++) {
                        if (src[i] == '\t')
                                do {
                                        strbuf_addch(dst, ' ');
-                               } while (dst->len % 8);
+                               } while ((dst->len - start) % 8);
                        else
                                strbuf_addch(dst, src[i]);
                }