diff options
| -rw-r--r-- | cgit.h | 1 | ||||
| -rw-r--r-- | shared.c | 36 | ||||
| -rw-r--r-- | ui-refs.c | 4 |
3 files changed, 41 insertions, 0 deletions
| @@ -304,6 +304,7 @@ extern char *strlpart(char *txt, int maxlen); | |||
| 304 | extern char *strrpart(char *txt, int maxlen); | 304 | extern char *strrpart(char *txt, int maxlen); |
| 305 | 305 | ||
| 306 | extern void cgit_add_ref(struct reflist *list, struct refinfo *ref); | 306 | extern void cgit_add_ref(struct reflist *list, struct refinfo *ref); |
| 307 | extern void cgit_free_reflist_inner(struct reflist *list); | ||
| 307 | extern int cgit_refs_cb(const char *refname, const unsigned char *sha1, | 308 | extern 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 | ||
| @@ -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 | ||
| 179 | static 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 | |||
| 190 | static 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 | |||
| 205 | void 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 | |||
| 179 | int cgit_refs_cb(const char *refname, const unsigned char *sha1, int flags, | 215 | int cgit_refs_cb(const char *refname, const unsigned char *sha1, int flags, |
| 180 | void *cb_data) | 216 | void *cb_data) |
| 181 | { | 217 | { |
| @@ -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 | ||
| 210 | void cgit_print_tags(int maxcount) | 212 | void 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 | ||
| 234 | void cgit_print_refs() | 238 | void cgit_print_refs() |
