Do a cross-project merge of Paul Mackerras' gitk visualizer
[git/git.git] / stripspace.c
1 #include <stdio.h>
2 #include <string.h>
3 #include <ctype.h>
4
5 /*
6 * Remove empty lines from the beginning and end.
7 *
8 * Turn multiple consecutive empty lines into just one
9 * empty line.
10 */
11 static void cleanup(char *line)
12 {
13 int len = strlen(line);
14
15 if (len > 1 && line[len-1] == '\n') {
16 do {
17 unsigned char c = line[len-2];
18 if (!isspace(c))
19 break;
20 line[len-2] = '\n';
21 len--;
22 line[len] = 0;
23 } while (len > 1);
24 }
25 }
26
27 int main(int argc, char **argv)
28 {
29 int empties = -1;
30 char line[1024];
31
32 while (fgets(line, sizeof(line), stdin)) {
33 cleanup(line);
34
35 /* Not just an empty line? */
36 if (line[0] != '\n') {
37 if (empties > 0)
38 putchar('\n');
39 empties = 0;
40 fputs(line, stdout);
41 continue;
42 }
43 if (empties < 0)
44 continue;
45 empties++;
46 }
47 return 0;
48 }