aboutsummaryrefslogtreecommitdiffstats
path: root/ui-refs.c
diff options
context:
space:
mode:
authorGravatar John Keeping <john@keeping.me.uk>2013-04-06 18:28:57 (JST)
committerGravatar Jason A. Donenfeld <Jason@zx2c4.com>2013-04-08 23:12:52 (JST)
commitfb3655df3bf85bd405c5921bbd4b3a54c705c839 (patch)
tree419a962a0b82f5ba3023791549044ff462229250 /ui-refs.c
parent42d5476f258e7909682f1b611da00d64507d45c6 (diff)
downloadcgit-fb3655df3bf85bd405c5921bbd4b3a54c705c839.zip
cgit-fb3655df3bf85bd405c5921bbd4b3a54c705c839.tar.gz
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>
Diffstat (limited to 'ui-refs.c')
-rw-r--r--ui-refs.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/ui-refs.c b/ui-refs.c
index 7406478..3fbaad0 100644
--- a/ui-refs.c
+++ b/ui-refs.c
@@ -99,7 +99,7 @@ static void print_tag_header()
99static void print_tag_downloads(const struct cgit_repo *repo, const char *ref) 99static void print_tag_downloads(const struct cgit_repo *repo, const char *ref)
100{ 100{
101 const struct cgit_snapshot_format* f; 101 const struct cgit_snapshot_format* f;
102 char *filename; 102 struct strbuf filename = STRBUF_INIT;
103 const char *basename; 103 const char *basename;
104 int free_ref = 0; 104 int free_ref = 0;
105 105
@@ -111,7 +111,7 @@ static void print_tag_downloads(const struct cgit_repo *repo, const char *ref)
111 if ((ref[0] == 'v' || ref[0] == 'V') && isdigit(ref[1])) 111 if ((ref[0] == 'v' || ref[0] == 'V') && isdigit(ref[1]))
112 ref++; 112 ref++;
113 if (isdigit(ref[0])) { 113 if (isdigit(ref[0])) {
114 ref = xstrdup(fmt("%s-%s", basename, ref)); 114 ref = fmtalloc("%s-%s", basename, ref);
115 free_ref = 1; 115 free_ref = 1;
116 } 116 }
117 } 117 }
@@ -119,13 +119,15 @@ static void print_tag_downloads(const struct cgit_repo *repo, const char *ref)
119 for (f = cgit_snapshot_formats; f->suffix; f++) { 119 for (f = cgit_snapshot_formats; f->suffix; f++) {
120 if (!(repo->snapshots & f->bit)) 120 if (!(repo->snapshots & f->bit))
121 continue; 121 continue;
122 filename = fmt("%s%s", ref, f->suffix); 122 strbuf_reset(&filename);
123 cgit_snapshot_link(filename, NULL, NULL, NULL, NULL, filename); 123 strbuf_addf(&filename, "%s%s", ref, f->suffix);
124 cgit_snapshot_link(filename.buf, NULL, NULL, NULL, NULL, filename.buf);
124 html("&nbsp;&nbsp;"); 125 html("&nbsp;&nbsp;");
125 } 126 }
126 127
127 if (free_ref) 128 if (free_ref)
128 free((char *)ref); 129 free((char *)ref);
130 strbuf_release(&filename);
129} 131}
130 132
131static int print_tag(struct refinfo *ref) 133static int print_tag(struct refinfo *ref)