Add "stripspace" program to clean up email commentary
authorLinus Torvalds <torvalds@ppc970.osdl.org>
Sat, 30 Apr 2005 17:58:41 +0000 (10:58 -0700)
committerLinus Torvalds <torvalds@ppc970.osdl.org>
Sat, 30 Apr 2005 17:58:41 +0000 (10:58 -0700)
Remove multiple empty lines, and empty lines at beginning and end.

Makefile
applypatch
dotest
stripspace.c [new file with mode: 0644]

index eca3a5d5256cca06d86ebb85ec9d3218752ffcd2..b5be0c94ef1a3a569955f21b3ce438b7b3621421 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -2,7 +2,7 @@ CC=gcc
 CFLAGS=-Wall -O2
 HOME=$(shell echo $$HOME)
 
-PROGRAMS=mailsplit mailinfo
+PROGRAMS=mailsplit mailinfo stripspace
 SCRIPTS=dotest applypatch
 
 all: $(PROGRAMS)
index 6e21409682bd858a3f63bdbaeacce29138be56a6..97274a158ef9ae7ead580ac7811f44221256d8fa 100755 (executable)
@@ -32,7 +32,7 @@ if [ -n "$signoff" -a -f "$signoff" ]; then
        cat $signoff >> $MSGFILE
 fi
 
-(echo "[PATCH] $SUBJECT" ; echo ; cat $MSGFILE ) > $final
+(echo "[PATCH] $SUBJECT" ; if [ -s $MSGFILE ]; then echo ; cat $MSGFILE; fi ) > $final
 
 f=0
 [ -f $query_apply ] || f=1
diff --git a/dotest b/dotest
index a3e3d35ae0afa358f01b49eecb358d64c616c3e4..ccc1f0304f10b58975705de256d8e23df82ec535 100755 (executable)
--- a/dotest
+++ b/dotest
@@ -20,7 +20,8 @@ mailsplit $1 .dotest || exit 1
 for i in .dotest/*
 do
        mailinfo .dotest/msg .dotest/patch .dotest/file < $i > .dotest/info || exit 1
-       applypatch .dotest/msg .dotest/patch .dotest/file .dotest/info "$2"
+       stripspace < .dotest/msg > .dotest/msg-clean
+       applypatch .dotest/msg-clean .dotest/patch .dotest/file .dotest/info "$2"
        ret=$?
        if [ $ret -ne 0 ]; then
                # 2 is a special exit code from applypatch to indicate that
diff --git a/stripspace.c b/stripspace.c
new file mode 100644 (file)
index 0000000..96cd0a8
--- /dev/null
@@ -0,0 +1,48 @@
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+
+/*
+ * Remove empty lines from the beginning and end.
+ *
+ * Turn multiple consecutive empty lines into just one
+ * empty line.
+ */
+static void cleanup(char *line)
+{
+       int len = strlen(line);
+
+       if (len > 1 && line[len-1] == '\n') {
+               do {
+                       unsigned char c = line[len-2];
+                       if (!isspace(c))
+                               break;
+                       line[len-2] = '\n';
+                       len--;
+                       line[len] = 0;
+               } while (len > 1);
+       }
+}
+
+int main(int argc, char **argv)
+{
+       int empties = -1;
+       char line[1024];
+
+       while (fgets(line, sizeof(line), stdin)) {
+               cleanup(line);
+
+               /* Not just an empty line? */
+               if (line[0] != '\n') {
+                       if (empties > 0)
+                               putchar('\n');
+                       empties = 0;
+                       fputs(line, stdout);
+                       continue;
+               }
+               if (empties < 0)
+                       continue;
+               empties++;
+       }
+       return 0;
+}