]> asedeno.scripts.mit.edu Git - git.git/blobdiff - ws.c
Improve use of lockfile API
[git.git] / ws.c
diff --git a/ws.c b/ws.c
index 1b32e452044d96e5a74e458fa4b1a884f067ad97..d09b9df89a7e19367640d4c6ad64ff828d01d26f 100644 (file)
--- a/ws.c
+++ b/ws.c
@@ -146,30 +146,36 @@ unsigned check_and_emit_line(const char *line, int len, unsigned ws_rule,
 
        /* Check for space before tab in initial indent. */
        for (i = 0; i < len; i++) {
-               if (line[i] == ' ') {
-                       written = i + 1;
+               if (line[i] == ' ')
                        continue;
-               }
                if (line[i] != '\t')
                        break;
-               if ((ws_rule & WS_SPACE_BEFORE_TAB) && (written != 0))
+               if ((ws_rule & WS_SPACE_BEFORE_TAB) && written < i) {
                        result |= WS_SPACE_BEFORE_TAB;
-               break;
+                       if (stream) {
+                               fputs(ws, stream);
+                               fwrite(line + written, i - written, 1, stream);
+                               fputs(reset, stream);
+                       }
+               } else if (stream)
+                       fwrite(line + written, i - written, 1, stream);
+               if (stream)
+                       fwrite(line + i, 1, 1, stream);
+               written = i + 1;
        }
 
        /* Check for indent using non-tab. */
-       if ((ws_rule & WS_INDENT_WITH_NON_TAB) && written >= 8)
+       if ((ws_rule & WS_INDENT_WITH_NON_TAB) && i - written >= 8) {
                result |= WS_INDENT_WITH_NON_TAB;
-
-       if (stream) {
-               /* Highlight errors in leading whitespace. */
-               if ((result & WS_SPACE_BEFORE_TAB) ||
-                   (result & WS_INDENT_WITH_NON_TAB)) {
+               if (stream) {
                        fputs(ws, stream);
-                       fwrite(line, written, 1, stream);
+                       fwrite(line + written, i - written, 1, stream);
                        fputs(reset, stream);
                }
+               written = i;
+       }
 
+       if (stream) {
                /* Now the rest of the line starts at written.
                 * The non-highlighted part ends at trailing_whitespace. */
                if (trailing_whitespace == -1)