63 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C
		
	
	
			
		
		
	
	
			63 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C
		
	
	
| #include "test-tool.h"
 | |
| #include "gpg-interface.h"
 | |
| #include "strbuf.h"
 | |
| 
 | |
| 
 | |
| int cmd__delete_gpgsig(int argc, const char **argv)
 | |
| {
 | |
| 	struct strbuf buf = STRBUF_INIT;
 | |
| 	const char *pattern = "gpgsig";
 | |
| 	const char *bufptr, *tail, *eol;
 | |
| 	int deleting = 0;
 | |
| 	size_t plen;
 | |
| 
 | |
| 	if (argc >= 2) {
 | |
| 		pattern = argv[1];
 | |
| 		argv++;
 | |
| 		argc--;
 | |
| 	}
 | |
| 
 | |
| 	plen = strlen(pattern);
 | |
| 	strbuf_read(&buf, 0, 0);
 | |
| 
 | |
| 	if (!strcmp(pattern, "trailer")) {
 | |
| 		size_t payload_size = parse_signed_buffer(buf.buf, buf.len);
 | |
| 		fwrite(buf.buf, 1, payload_size, stdout);
 | |
| 		fflush(stdout);
 | |
| 		return 0;
 | |
| 	}
 | |
| 
 | |
| 	bufptr = buf.buf;
 | |
| 	tail = bufptr + buf.len;
 | |
| 
 | |
| 	while (bufptr < tail) {
 | |
| 		/* Find the end of the line */
 | |
| 		eol = memchr(bufptr, '\n', tail - bufptr);
 | |
| 		if (!eol)
 | |
| 			eol = tail;
 | |
| 
 | |
| 		/* Drop continuation lines */
 | |
| 		if (deleting && (bufptr < eol) && (bufptr[0] == ' ')) {
 | |
| 			bufptr = eol + 1;
 | |
| 			continue;
 | |
| 		}
 | |
| 		deleting = 0;
 | |
| 
 | |
| 		/* Does the line match the prefix? */
 | |
| 		if (((bufptr + plen) < eol) &&
 | |
| 		    !memcmp(bufptr, pattern, plen) &&
 | |
| 		    (bufptr[plen] == ' ')) {
 | |
| 			deleting = 1;
 | |
| 			bufptr = eol + 1;
 | |
| 			continue;
 | |
| 		}
 | |
| 
 | |
| 		/* Print all other lines */
 | |
| 		fwrite(bufptr, 1, (eol - bufptr) + 1, stdout);
 | |
| 		bufptr = eol + 1;
 | |
| 	}
 | |
| 	fflush(stdout);
 | |
| 
 | |
| 	return 0;
 | |
| }
 |