diff options
Diffstat (limited to 'ui-tree.c')
-rw-r--r-- | ui-tree.c | 33 |
1 files changed, 17 insertions, 16 deletions
@@ -129,14 +129,14 @@ static int ls_item(const unsigned char *sha1, const char *base, int baselen, | |||
129 | { | 129 | { |
130 | struct walk_tree_context *walk_tree_ctx = cbdata; | 130 | struct walk_tree_context *walk_tree_ctx = cbdata; |
131 | char *name; | 131 | char *name; |
132 | char *fullpath; | 132 | struct strbuf fullpath = STRBUF_INIT; |
133 | char *class; | 133 | struct strbuf class = STRBUF_INIT; |
134 | enum object_type type; | 134 | enum object_type type; |
135 | unsigned long size = 0; | 135 | unsigned long size = 0; |
136 | 136 | ||
137 | name = xstrdup(pathname); | 137 | name = xstrdup(pathname); |
138 | fullpath = fmt("%s%s%s", ctx.qry.path ? ctx.qry.path : "", | 138 | strbuf_addf(&fullpath, "%s%s%s", ctx.qry.path ? ctx.qry.path : "", |
139 | ctx.qry.path ? "/" : "", name); | 139 | ctx.qry.path ? "/" : "", name); |
140 | 140 | ||
141 | if (!S_ISGITLINK(mode)) { | 141 | if (!S_ISGITLINK(mode)) { |
142 | type = sha1_object_info(sha1, &size); | 142 | type = sha1_object_info(sha1, &size); |
@@ -152,33 +152,34 @@ static int ls_item(const unsigned char *sha1, const char *base, int baselen, | |||
152 | cgit_print_filemode(mode); | 152 | cgit_print_filemode(mode); |
153 | html("</td><td>"); | 153 | html("</td><td>"); |
154 | if (S_ISGITLINK(mode)) { | 154 | if (S_ISGITLINK(mode)) { |
155 | cgit_submodule_link("ls-mod", fullpath, sha1_to_hex(sha1)); | 155 | cgit_submodule_link("ls-mod", fullpath.buf, sha1_to_hex(sha1)); |
156 | } else if (S_ISDIR(mode)) { | 156 | } else if (S_ISDIR(mode)) { |
157 | cgit_tree_link(name, NULL, "ls-dir", ctx.qry.head, | 157 | cgit_tree_link(name, NULL, "ls-dir", ctx.qry.head, |
158 | walk_tree_ctx->curr_rev, fullpath); | 158 | walk_tree_ctx->curr_rev, fullpath.buf); |
159 | } else { | 159 | } else { |
160 | class = strrchr(name, '.'); | 160 | char *ext = strrchr(name, '.'); |
161 | if (class != NULL) { | 161 | strbuf_addstr(&class, "ls-blob"); |
162 | class = fmt("ls-blob %s", class + 1); | 162 | if (ext) |
163 | } else | 163 | strbuf_addf(&class, " %s", ext + 1); |
164 | class = "ls-blob"; | 164 | cgit_tree_link(name, NULL, class.buf, ctx.qry.head, |
165 | cgit_tree_link(name, NULL, class, ctx.qry.head, | 165 | walk_tree_ctx->curr_rev, fullpath.buf); |
166 | walk_tree_ctx->curr_rev, fullpath); | ||
167 | } | 166 | } |
168 | htmlf("</td><td class='ls-size'>%li</td>", size); | 167 | htmlf("</td><td class='ls-size'>%li</td>", size); |
169 | 168 | ||
170 | html("<td>"); | 169 | html("<td>"); |
171 | cgit_log_link("log", NULL, "button", ctx.qry.head, | 170 | cgit_log_link("log", NULL, "button", ctx.qry.head, |
172 | walk_tree_ctx->curr_rev, fullpath, 0, NULL, NULL, | 171 | walk_tree_ctx->curr_rev, fullpath.buf, 0, NULL, NULL, |
173 | ctx.qry.showmsg); | 172 | ctx.qry.showmsg); |
174 | if (ctx.repo->max_stats) | 173 | if (ctx.repo->max_stats) |
175 | cgit_stats_link("stats", NULL, "button", ctx.qry.head, | 174 | cgit_stats_link("stats", NULL, "button", ctx.qry.head, |
176 | fullpath); | 175 | fullpath.buf); |
177 | if (!S_ISGITLINK(mode)) | 176 | if (!S_ISGITLINK(mode)) |
178 | cgit_plain_link("plain", NULL, "button", ctx.qry.head, | 177 | cgit_plain_link("plain", NULL, "button", ctx.qry.head, |
179 | walk_tree_ctx->curr_rev, fullpath); | 178 | walk_tree_ctx->curr_rev, fullpath.buf); |
180 | html("</td></tr>\n"); | 179 | html("</td></tr>\n"); |
181 | free(name); | 180 | free(name); |
181 | strbuf_release(&fullpath); | ||
182 | strbuf_release(&class); | ||
182 | return 0; | 183 | return 0; |
183 | } | 184 | } |
184 | 185 | ||