use struct strbuf instead of static buffers

Use "struct strbuf" from Git to remove the limit on file path length.

Notes on scan-tree:
This is slightly involved since I decided to pass the strbuf into
add_repo() and modify if whenever a new file name is required, which
should avoid any extra allocations within that function.  The pattern
there is to append the filename, use it and then reset the buffer to its
original length (retaining a trailing '/').

Notes on ui-snapshot:
Since write_archive modifies the argv array passed to it we
copy the argv_array values into a new array of char* and then free the
original argv_array structure and the new array without worrying about
what the values now look like.

Signed-off-by: John Keeping <john@keeping.me.uk>
This commit is contained in:
John Keeping
2013-04-06 10:28:57 +01:00
committed by Jason A. Donenfeld
父節點 42d5476f25
當前提交 fb3655df3b
共有 12 個文件被更改,包括 306 次插入244 次删除

查看文件

@ -41,6 +41,7 @@ static void print_download_links(char *revname)
void cgit_print_tag(char *revname)
{
struct strbuf fullref = STRBUF_INIT;
unsigned char sha1[20];
struct object *obj;
struct tag *tag;
@ -49,20 +50,21 @@ void cgit_print_tag(char *revname)
if (!revname)
revname = ctx.qry.head;
if (get_sha1(fmt("refs/tags/%s", revname), sha1)) {
strbuf_addf(&fullref, "refs/tags/%s", revname);
if (get_sha1(fullref.buf, sha1)) {
cgit_print_error("Bad tag reference: %s", revname);
return;
goto cleanup;
}
obj = parse_object(sha1);
if (!obj) {
cgit_print_error("Bad object id: %s", sha1_to_hex(sha1));
return;
goto cleanup;
}
if (obj->type == OBJ_TAG) {
tag = lookup_tag(sha1);
if (!tag || parse_tag(tag) || !(info = cgit_parse_tag(tag))) {
cgit_print_error("Bad tag object: %s", revname);
return;
goto cleanup;
}
html("<table class='commit-info'>\n");
htmlf("<tr><td>tag name</td><td>");
@ -101,5 +103,7 @@ void cgit_print_tag(char *revname)
print_download_links(revname);
html("</table>\n");
}
return;
cleanup:
strbuf_release(&fullref);
}