diff options
| author | Junio C Hamano <gitster@pobox.com> | 2021-08-30 16:06:05 -0700 |
|---|---|---|
| committer | Johannes Schindelin <johannes.schindelin@gmx.de> | 2023-03-22 18:00:36 +0100 |
| commit | e4cb3693a45a74ac9fdd142ab6392832b0a895d3 (patch) | |
| tree | a3c25e7af4fcd16a68739e45c6a627881ea8117a | |
| parent | 3c7896e36202c09a5f124730b40f243ae94ffa62 (diff) | |
| parent | c025b4b2f1ee0cd9eed2e900c03780683294bb18 (diff) | |
| download | git-e4cb3693a45a74ac9fdd142ab6392832b0a895d3.tar.gz | |
Merge branch 'backport/jk/range-diff-fixes'
"git range-diff" code clean-up. Needed to pacify modern GCC versions.
* jk/range-diff-fixes:
range-diff: use ssize_t for parsed "len" in read_patches()
range-diff: handle unterminated lines in read_patches()
range-diff: drop useless "offset" variable from read_patches()
| -rw-r--r-- | range-diff.c | 29 |
1 files changed, 13 insertions, 16 deletions
diff --git a/range-diff.c b/range-diff.c index b9950f10c8..9e2b788cdf 100644 --- a/range-diff.c +++ b/range-diff.c @@ -25,17 +25,6 @@ struct patch_util { struct object_id oid; }; -static size_t find_end_of_line(char *buffer, unsigned long size) -{ - char *eol = memchr(buffer, '\n', size); - - if (!eol) - return size; - - *eol = '\0'; - return eol + 1 - buffer; -} - /* * Reads the patches into a string list, with the `util` field being populated * as struct object_id (will need to be free()d). @@ -48,7 +37,7 @@ static int read_patches(const char *range, struct string_list *list, struct patch_util *util = NULL; int in_header = 1; char *line, *current_filename = NULL; - int offset, len; + ssize_t len; size_t size; strvec_pushl(&cp.args, "log", "--no-color", "-p", "--no-merges", @@ -83,11 +72,18 @@ static int read_patches(const char *range, struct string_list *list, line = contents.buf; size = contents.len; - for (offset = 0; size > 0; offset += len, size -= len, line += len) { + for (; size > 0; size -= len, line += len) { const char *p; + char *eol; + + eol = memchr(line, '\n', size); + if (eol) { + *eol = '\0'; + len = eol + 1 - line; + } else { + len = size; + } - len = find_end_of_line(line, size); - line[len - 1] = '\0'; if (skip_prefix(line, "commit ", &p)) { if (util) { string_list_append(list, buf.buf)->util = util; @@ -129,7 +125,8 @@ static int read_patches(const char *range, struct string_list *list, strbuf_addch(&buf, '\n'); if (!util->diff_offset) util->diff_offset = buf.len; - line[len - 1] = '\n'; + if (eol) + *eol = '\n'; orig_len = len; len = parse_git_diff_header(&root, &linenr, 0, line, len, size, &patch); |
