]> git.ipfire.org Git - thirdparty/git.git/blob - builtin-stripspace.c
Fix installation of templates on ancient systems.
[thirdparty/git.git] / builtin-stripspace.c
1 #include <stdio.h>
2 #include <string.h>
3 #include <ctype.h>
4 #include "builtin.h"
5
6 /*
7 * Remove empty lines from the beginning and end.
8 *
9 * Turn multiple consecutive empty lines into just one
10 * empty line. Return true if it is an incomplete line.
11 */
12 static int cleanup(char *line)
13 {
14 int len = strlen(line);
15
16 if (len && line[len-1] == '\n') {
17 if (len == 1)
18 return 0;
19 do {
20 unsigned char c = line[len-2];
21 if (!isspace(c))
22 break;
23 line[len-2] = '\n';
24 len--;
25 line[len] = 0;
26 } while (len > 1);
27 return 0;
28 }
29 return 1;
30 }
31
32 void stripspace(FILE *in, FILE *out)
33 {
34 int empties = -1;
35 int incomplete = 0;
36 char line[1024];
37
38 while (fgets(line, sizeof(line), in)) {
39 incomplete = cleanup(line);
40
41 /* Not just an empty line? */
42 if (line[0] != '\n') {
43 if (empties > 0)
44 fputc('\n', out);
45 empties = 0;
46 fputs(line, out);
47 continue;
48 }
49 if (empties < 0)
50 continue;
51 empties++;
52 }
53 if (incomplete)
54 fputc('\n', out);
55 }
56
57 int cmd_stripspace(int argc, const char **argv, const char *prefix)
58 {
59 stripspace(stdin, stdout);
60 return 0;
61 }