diff options
author | Tobias Klauser <tklauser@distanz.ch> | 2015-10-16 17:16:42 +0200 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2015-10-16 09:45:15 -0700 |
commit | 63af4a8446a624ad0d83d9b766c0eb5fbf83be12 (patch) | |
tree | c9be56334b556212b1e5ef0bb82b9b590e31d4a1 /builtin/stripspace.c | |
parent | Git 2.6.1 (diff) | |
download | tgif-63af4a8446a624ad0d83d9b766c0eb5fbf83be12.tar.xz |
strbuf: make stripspace() part of strbuf
This function is also used in other builtins than stripspace, so it
makes sense to have it in a more generic place. Since it operates
on an strbuf and the function is declared in strbuf.h, move it to
strbuf.c and add the corresponding prefix to its name, just like
other API functions in the strbuf_* family.
Also switch all current users of stripspace() to the new function
name and keep a temporary wrapper inline function for any topic
branches still using stripspace().
Reviewed-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'builtin/stripspace.c')
-rw-r--r-- | builtin/stripspace.c | 69 |
1 files changed, 2 insertions, 67 deletions
diff --git a/builtin/stripspace.c b/builtin/stripspace.c index 1259ed708b..f6770937bb 100644 --- a/builtin/stripspace.c +++ b/builtin/stripspace.c @@ -1,71 +1,6 @@ #include "builtin.h" #include "cache.h" - -/* - * Returns the length of a line, without trailing spaces. - * - * If the line ends with newline, it will be removed too. - */ -static size_t cleanup(char *line, size_t len) -{ - while (len) { - unsigned char c = line[len - 1]; - if (!isspace(c)) - break; - len--; - } - - return len; -} - -/* - * Remove empty lines from the beginning and end - * and also trailing spaces from every line. - * - * Turn multiple consecutive empty lines between paragraphs - * into just one empty line. - * - * If the input has only empty lines and spaces, - * no output will be produced. - * - * If last line does not have a newline at the end, one is added. - * - * Enable skip_comments to skip every line starting with comment - * character. - */ -void stripspace(struct strbuf *sb, int skip_comments) -{ - int empties = 0; - size_t i, j, len, newlen; - char *eol; - - /* We may have to add a newline. */ - strbuf_grow(sb, 1); - - for (i = j = 0; i < sb->len; i += len, j += newlen) { - eol = memchr(sb->buf + i, '\n', sb->len - i); - len = eol ? eol - (sb->buf + i) + 1 : sb->len - i; - - if (skip_comments && len && sb->buf[i] == comment_line_char) { - newlen = 0; - continue; - } - newlen = cleanup(sb->buf + i, len); - - /* Not just an empty line? */ - if (newlen) { - if (empties > 0 && j > 0) - sb->buf[j++] = '\n'; - empties = 0; - memmove(sb->buf + j, sb->buf + i, newlen); - sb->buf[newlen + j++] = '\n'; - } else { - empties++; - } - } - - strbuf_setlen(sb, j); -} +#include "strbuf.h" static void comment_lines(struct strbuf *buf) { @@ -111,7 +46,7 @@ int cmd_stripspace(int argc, const char **argv, const char *prefix) die_errno("could not read the input"); if (mode == STRIP_SPACE) - stripspace(&buf, strip_comments); + strbuf_stripspace(&buf, strip_comments); else comment_lines(&buf); |