Signed-off-by: Lukas Sandström <lukass@etek.chalmers.se> Signed-off-by: Junio C Hamano <junkio@cox.net>
		
			
				
	
	
		
			62 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
#include <stdio.h>
 | 
						|
#include <string.h>
 | 
						|
#include <ctype.h>
 | 
						|
#include "builtin.h"
 | 
						|
 | 
						|
/*
 | 
						|
 * Remove empty lines from the beginning and end.
 | 
						|
 *
 | 
						|
 * Turn multiple consecutive empty lines into just one
 | 
						|
 * empty line.  Return true if it is an incomplete line.
 | 
						|
 */
 | 
						|
static int cleanup(char *line)
 | 
						|
{
 | 
						|
	int len = strlen(line);
 | 
						|
 | 
						|
	if (len && line[len-1] == '\n') {
 | 
						|
		if (len == 1)
 | 
						|
			return 0;
 | 
						|
		do {
 | 
						|
			unsigned char c = line[len-2];
 | 
						|
			if (!isspace(c))
 | 
						|
				break;
 | 
						|
			line[len-2] = '\n';
 | 
						|
			len--;
 | 
						|
			line[len] = 0;
 | 
						|
		} while (len > 1);
 | 
						|
		return 0;
 | 
						|
	}
 | 
						|
	return 1;
 | 
						|
}
 | 
						|
 | 
						|
void stripspace(FILE *in, FILE *out)
 | 
						|
{
 | 
						|
	int empties = -1;
 | 
						|
	int incomplete = 0;
 | 
						|
	char line[1024];
 | 
						|
 | 
						|
	while (fgets(line, sizeof(line), in)) {
 | 
						|
		incomplete = cleanup(line);
 | 
						|
 | 
						|
		/* Not just an empty line? */
 | 
						|
		if (line[0] != '\n') {
 | 
						|
			if (empties > 0)
 | 
						|
				fputc('\n', out);
 | 
						|
			empties = 0;
 | 
						|
			fputs(line, out);
 | 
						|
			continue;
 | 
						|
		}
 | 
						|
		if (empties < 0)
 | 
						|
			continue;
 | 
						|
		empties++;
 | 
						|
	}
 | 
						|
	if (incomplete)
 | 
						|
		fputc('\n', out);
 | 
						|
}
 | 
						|
 | 
						|
int cmd_stripspace(int argc, const char **argv, char **envp)
 | 
						|
{
 | 
						|
	stripspace(stdin, stdout);
 | 
						|
	return 0;
 | 
						|
}
 |