summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--builtin/blame.c2
-rw-r--r--commit.c23
-rw-r--r--commit.h2
3 files changed, 13 insertions, 14 deletions
diff --git a/builtin/blame.c b/builtin/blame.c
index bda1a78..d4472e9 100644
--- a/builtin/blame.c
+++ b/builtin/blame.c
@@ -488,7 +488,7 @@ static int read_ancestry(const char *graft_file)
return -1;
while (!strbuf_getwholeline(&buf, fp, '\n')) {
/* The format is just "Commit Parent1 Parent2 ...\n" */
- struct commit_graft *graft = read_graft_line(buf.buf, buf.len);
+ struct commit_graft *graft = read_graft_line(&buf);
if (graft)
register_commit_graft(graft, 0);
}
diff --git a/commit.c b/commit.c
index 8b28415..1a0a9f2 100644
--- a/commit.c
+++ b/commit.c
@@ -134,34 +134,33 @@ int register_commit_graft(struct commit_graft *graft, int ignore_dups)
return 0;
}
-struct commit_graft *read_graft_line(char *buf, int len)
+struct commit_graft *read_graft_line(struct strbuf *line)
{
/* The format is just "Commit Parent1 Parent2 ...\n" */
int i;
struct commit_graft *graft = NULL;
const int entry_size = GIT_SHA1_HEXSZ + 1;
- while (len && isspace(buf[len-1]))
- buf[--len] = '\0';
- if (buf[0] == '#' || buf[0] == '\0')
+ strbuf_rtrim(line);
+ if (!line->len || line->buf[0] == '#')
return NULL;
- if ((len + 1) % entry_size)
+ if ((line->len + 1) % entry_size)
goto bad_graft_data;
- i = (len + 1) / entry_size - 1;
+ i = (line->len + 1) / entry_size - 1;
graft = xmalloc(st_add(sizeof(*graft), st_mult(GIT_SHA1_RAWSZ, i)));
graft->nr_parent = i;
- if (get_oid_hex(buf, &graft->oid))
+ if (get_oid_hex(line->buf, &graft->oid))
goto bad_graft_data;
- for (i = GIT_SHA1_HEXSZ; i < len; i += entry_size) {
- if (buf[i] != ' ')
+ for (i = GIT_SHA1_HEXSZ; i < line->len; i += entry_size) {
+ if (line->buf[i] != ' ')
goto bad_graft_data;
- if (get_sha1_hex(buf + i + 1, graft->parent[i/entry_size].hash))
+ if (get_sha1_hex(line->buf + i + 1, graft->parent[i/entry_size].hash))
goto bad_graft_data;
}
return graft;
bad_graft_data:
- error("bad graft data: %s", buf);
+ error("bad graft data: %s", line->buf);
free(graft);
return NULL;
}
@@ -174,7 +173,7 @@ static int read_graft_file(const char *graft_file)
return -1;
while (!strbuf_getwholeline(&buf, fp, '\n')) {
/* The format is just "Commit Parent1 Parent2 ...\n" */
- struct commit_graft *graft = read_graft_line(buf.buf, buf.len);
+ struct commit_graft *graft = read_graft_line(&buf);
if (!graft)
continue;
if (register_commit_graft(graft, 1))
diff --git a/commit.h b/commit.h
index 6d857f0..baecc0a 100644
--- a/commit.h
+++ b/commit.h
@@ -247,7 +247,7 @@ struct commit_graft {
};
typedef int (*each_commit_graft_fn)(const struct commit_graft *, void *);
-struct commit_graft *read_graft_line(char *buf, int len);
+struct commit_graft *read_graft_line(struct strbuf *line);
int register_commit_graft(struct commit_graft *, int);
struct commit_graft *lookup_commit_graft(const struct object_id *oid);