| #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; |
| } |