| 50 | } |
| 51 | |
| 52 | static void format_subst(const struct commit *commit, |
| 53 | const char *src, size_t len, |
| 54 | struct strbuf *buf, struct pretty_print_context *ctx) |
| 55 | { |
| 56 | char *to_free = NULL; |
| 57 | struct strbuf fmt = STRBUF_INIT; |
| 58 | |
| 59 | if (src == buf->buf) |
| 60 | to_free = strbuf_detach(buf, NULL); |
| 61 | for (;;) { |
| 62 | const char *b, *c; |
| 63 | |
| 64 | b = memmem(src, len, "$Format:", 8); |
| 65 | if (!b) |
| 66 | break; |
| 67 | c = memchr(b + 8, '$', (src + len) - b - 8); |
| 68 | if (!c) |
| 69 | break; |
| 70 | |
| 71 | strbuf_reset(&fmt); |
| 72 | strbuf_add(&fmt, b + 8, c - b - 8); |
| 73 | |
| 74 | strbuf_add(buf, src, b - src); |
| 75 | repo_format_commit_message(the_repository, commit, fmt.buf, |
| 76 | buf, ctx); |
| 77 | len -= c + 1 - src; |
| 78 | src = c + 1; |
| 79 | } |
| 80 | strbuf_add(buf, src, len); |
| 81 | strbuf_release(&fmt); |
| 82 | free(to_free); |
| 83 | } |
| 84 | |
| 85 | static void *object_file_to_archive(const struct archiver_args *args, |
| 86 | const char *path, |
no test coverage detected