http-push: simplify deleting a list item

The first step for deleting an item from a linked list is to locate the item preceding it. Be more careful in release_request() and handle an empty list. This only has consequences for invalid delete requests (removing the same item twice, or deleting an item that was never added to the list), but simplifies the loop condition as well as the check after the loop. Once we found the item's predecessor in the list, update its next pointer to skip over the item, which removes it from the list. In other words: Make the item's successor the successor of its predecessor. (At this point entry->next == request and prev->next == lock, respectively.) This is a bit simpler and saves a pointer dereference. Signed-off-by: René Scharfe <l.s.r@web.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>

René Scharfe committed Oct 13, 2019 at 14:49 UTC 5cc6a4be11644f3d302eee2e735261ace4cd1c4c
1 file changed +4 -4
http-push.c
+4 -4
@@ -501,10 +501,10 @@ static void release_request(struct transfer_request *request)
501 if (request == request_queue_head) {
502 request_queue_head = request->next;
503 } else {
504 - while (entry->next != NULL && entry->next != request)
504 + while (entry && entry->next != request)
505 entry = entry->next;
506 - if (entry->next == request)
507 - entry->next = entry->next->next;
506 + if (entry)
507 + entry->next = request->next;
508 }
509
510 free(request->url);
@@ -981,7 +981,7 @@ static int unlock_remote(struct remote_lock *lock)
981 while (prev && prev->next != lock)
982 prev = prev->next;
983 if (prev)
984 - prev->next = prev->next->next;
984 + prev->next = lock->next;
985 }
986
987 free(lock->owner);