static struct llist * llist_copy(struct llist *list) { struct llist *ret; struct llist_item *new_item, *old_item, *prev; llist_init(&ret); if ((ret->size = list->size) == 0) return ret; new_item = ret->front = llist_item_get(); new_item->oid = list->front->oid; old_item = list->front->next; while (old_item) { prev = new_item; new_item = llist_item_get(); prev->next = new_item; new_item->oid = old_item->oid; old_item = old_item->next; } new_item->next = NULL; ret->back = new_item; return ret; }
static inline struct llist_item *llist_insert(struct llist *list, struct llist_item *after, const struct object_id *oid) { struct llist_item *new_item = llist_item_get(); new_item->oid = oid; new_item->next = NULL; if (after != NULL) { new_item->next = after->next; after->next = new_item; if (after == list->back) list->back = new_item; } else {/* insert in front */ if (list->size == 0) list->back = new_item; else new_item->next = list->front; list->front = new_item; } list->size++; return new_item; }
static inline struct llist_item *llist_insert(struct llist *list, struct llist_item *after, const unsigned char *sha1) { struct llist_item *new_item = llist_item_get(); new_item->sha1 = sha1; new_item->next = NULL; if (after != NULL) { new_item->next = after->next; after->next = new_item; if (after == list->back) list->back = new_item; } else {/* insert in front */ if (list->size == 0) list->back = new_item; else new_item->next = list->front; list->front = new_item; } list->size++; return new_item; }