strbuf: export strbuf_addchars()
[gitweb.git] / commit.c
index e5862f6d7c813b4bcc5dd672383e56152ceb6f80..57ebea2aee30b00e86a620f7efc793420f214185 100644 (file)
--- a/commit.c
+++ b/commit.c
@@ -196,19 +196,19 @@ struct commit_graft *read_graft_line(char *buf, int len)
 static int read_graft_file(const char *graft_file)
 {
        FILE *fp = fopen(graft_file, "r");
-       char buf[1024];
+       struct strbuf buf = STRBUF_INIT;
        if (!fp)
                return -1;
-       while (fgets(buf, sizeof(buf), fp)) {
+       while (!strbuf_getwholeline(&buf, fp, '\n')) {
                /* The format is just "Commit Parent1 Parent2 ...\n" */
-               int len = strlen(buf);
-               struct commit_graft *graft = read_graft_line(buf, len);
+               struct commit_graft *graft = read_graft_line(buf.buf, buf.len);
                if (!graft)
                        continue;
                if (register_commit_graft(graft, 1))
-                       error("duplicate graft data: %s", buf);
+                       error("duplicate graft data: %s", buf.buf);
        }
        fclose(fp);
+       strbuf_release(&buf);
        return 0;
 }
 
@@ -377,6 +377,22 @@ unsigned commit_list_count(const struct commit_list *l)
        return c;
 }
 
+struct commit_list *copy_commit_list(struct commit_list *list)
+{
+       struct commit_list *head = NULL;
+       struct commit_list **pp = &head;
+       while (list) {
+               struct commit_list *new;
+               new = xmalloc(sizeof(struct commit_list));
+               new->item = list->item;
+               new->next = NULL;
+               *pp = new;
+               pp = &new->next;
+               list = list->next;
+       }
+       return head;
+}
+
 void free_commit_list(struct commit_list *list)
 {
        while (list) {
@@ -1416,7 +1432,7 @@ static int find_invalid_utf8(const char *buf, int len)
                if ((codepoint & 0x1ff800) == 0xd800)
                        return bad_offset;
                /* U+xxFFFE and U+xxFFFF are guaranteed non-characters. */
-               if ((codepoint & 0xffffe) == 0xfffe)
+               if ((codepoint & 0xfffe) == 0xfffe)
                        return bad_offset;
                /* So are anything in the range U+FDD0..U+FDEF. */
                if (codepoint >= 0xfdd0 && codepoint <= 0xfdef)