Move backwards from the end of the string (more efficient for lines which do not have trailing spaces or have just a couple). Slightly more rare occurrences of 'text \ ' with a backslash in between spaces are handled correctly. Namely, the code in 8ba87adad6 does not reset 'last_space' when a backslash is encountered and the above line stays intact as a result --- How about trailing tabs? dir.c | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/dir.c b/dir.c index eb6f581..3315eea 100644 --- a/dir.c +++ b/dir.c @@ -508,21 +508,18 @@ void clear_exclude_list(struct exclude_list *el) static void trim_trailing_spaces(char *buf) { - int i, last_space = -1, nr_spaces, len = strlen(buf); - for (i = 0; i < len; i++) - if (buf[i] == '\\') - i++; - else if (buf[i] == ' ') { - if (last_space == -1) { - last_space = i; - nr_spaces = 1; - } else - nr_spaces++; - } else - last_space = -1; - - if (last_space != -1 && last_space + nr_spaces == len) + int i, last_space, bslash = 0, len = strlen(buf); + + if (len == 0 || buf[len - 1] != ' ') + return; + for (i = len - 2; i >= 0 && buf[i] == ' '; i--) ; + last_space = i + 1; + for ( ; i >=0 && buf[i] == '\\'; i--) bslash ^= 1; + + if (!bslash) buf[last_space] = '\0'; + else if (bslash && last_space < len - 1) + buf[last_space + 1] = '\0'; } int add_excludes_from_file_to_list(const char *fname, -- 1.9.1 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html