summaryrefslogtreecommitdiff
path: root/builtin/stripspace.c
diff options
context:
space:
mode:
authorTobias Klauser <tklauser@distanz.ch>2015-10-16 15:16:42 (GMT)
committerJunio C Hamano <gitster@pobox.com>2015-10-16 16:45:15 (GMT)
commit63af4a8446a624ad0d83d9b766c0eb5fbf83be12 (patch)
treec9be56334b556212b1e5ef0bb82b9b590e31d4a1 /builtin/stripspace.c
parent22f698cb188243b313e024d618283e0293e37140 (diff)
downloadgit-63af4a8446a624ad0d83d9b766c0eb5fbf83be12.zip
git-63af4a8446a624ad0d83d9b766c0eb5fbf83be12.tar.gz
git-63af4a8446a624ad0d83d9b766c0eb5fbf83be12.tar.bz2
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.c69
1 files changed, 2 insertions, 67 deletions
diff --git a/builtin/stripspace.c b/builtin/stripspace.c
index 1259ed7..f677093 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);