about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--cgit.h1
-rw-r--r--shared.c36
-rw-r--r--ui-refs.c4
3 files changed, 41 insertions, 0 deletions
diff --git a/cgit.h b/cgit.h index c655bd8..ed5cf14 100644 --- a/cgit.h +++ b/cgit.h
@@ -304,6 +304,7 @@ extern char *strlpart(char *txt, int maxlen);
304extern char *strrpart(char *txt, int maxlen); 304extern char *strrpart(char *txt, int maxlen);
305 305
306extern void cgit_add_ref(struct reflist *list, struct refinfo *ref); 306extern void cgit_add_ref(struct reflist *list, struct refinfo *ref);
307extern void cgit_free_reflist_inner(struct reflist *list);
307extern int cgit_refs_cb(const char *refname, const unsigned char *sha1, 308extern int cgit_refs_cb(const char *refname, const unsigned char *sha1,
308 int flags, void *cb_data); 309 int flags, void *cb_data);
309 310
diff --git a/shared.c b/shared.c index 124d079..cc06930 100644 --- a/shared.c +++ b/shared.c
@@ -176,6 +176,42 @@ static struct refinfo *cgit_mk_refinfo(const char *refname, const unsigned char
176 return ref; 176 return ref;
177} 177}
178 178
179static void cgit_free_taginfo(struct taginfo *tag)
180{
181 if (tag->tagger)
182 free(tag->tagger);
183 if (tag->tagger_email)
184 free(tag->tagger_email);
185 if (tag->msg)
186 free(tag->msg);
187 free(tag);
188}
189
190static void cgit_free_refinfo(struct refinfo *ref)
191{
192 if (ref->refname)
193 free((char *)ref->refname);
194 switch (ref->object->type) {
195 case OBJ_TAG:
196 cgit_free_taginfo(ref->tag);
197 break;
198 case OBJ_COMMIT:
199 cgit_free_commitinfo(ref->commit);
200 break;
201 }
202 free(ref);
203}
204
205void cgit_free_reflist_inner(struct reflist *list)
206{
207 int i;
208
209 for (i = 0; i < list->count; i++) {
210 cgit_free_refinfo(list->refs[i]);
211 }
212 free(list->refs);
213}
214
179int cgit_refs_cb(const char *refname, const unsigned char *sha1, int flags, 215int cgit_refs_cb(const char *refname, const unsigned char *sha1, int flags,
180 void *cb_data) 216 void *cb_data)
181{ 217{
diff --git a/ui-refs.c b/ui-refs.c index ce06b08..4a9b8d3 100644 --- a/ui-refs.c +++ b/ui-refs.c
@@ -205,6 +205,8 @@ void cgit_print_branches(int maxcount)
205 205
206 if (maxcount < list.count) 206 if (maxcount < list.count)
207 print_refs_link("heads"); 207 print_refs_link("heads");
208
209 cgit_free_reflist_inner(&list);
208} 210}
209 211
210void cgit_print_tags(int maxcount) 212void cgit_print_tags(int maxcount)
@@ -229,6 +231,8 @@ void cgit_print_tags(int maxcount)
229 231
230 if (maxcount < list.count) 232 if (maxcount < list.count)
231 print_refs_link("tags"); 233 print_refs_link("tags");
234
235 cgit_free_reflist_inner(&list);
232} 236}
233 237
234void cgit_print_refs() 238void cgit_print_refs()