From 8c7b86632c2e54ed98abf922101ee177de75e0eb Mon Sep 17 00:00:00 2001 From: Linus Torvalds Date: Sat, 30 Apr 2005 10:58:41 -0700 Subject: [PATCH] Add "stripspace" program to clean up email commentary Remove multiple empty lines, and empty lines at beginning and end. --- Makefile | 2 +- applypatch | 2 +- dotest | 3 ++- stripspace.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 52 insertions(+), 3 deletions(-) create mode 100644 stripspace.c diff --git a/Makefile b/Makefile index eca3a5d52..b5be0c94e 100644 --- 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) diff --git a/applypatch b/applypatch index 6e2140968..97274a158 100755 --- a/applypatch +++ b/applypatch @@ -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 a3e3d35ae..ccc1f0304 100755 --- 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 index 000000000..96cd0a88f --- /dev/null +++ b/stripspace.c @@ -0,0 +1,48 @@ +#include +#include +#include + +/* + * 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; +} -- 2.30.2