]> git.ipfire.org Git - thirdparty/git.git/commitdiff
http-push: simplify deleting a list item
authorRené Scharfe <l.s.r@web.de>
Sun, 13 Oct 2019 12:49:17 +0000 (14:49 +0200)
committerJunio C Hamano <gitster@pobox.com>
Tue, 15 Oct 2019 01:53:50 +0000 (10:53 +0900)
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>
http-push.c

index 0353f9f5143d7fff3a2b4b11d02375255258319b..822f32659936d68de9bb7ee979a113fc12de2b65 100644 (file)
@@ -501,10 +501,10 @@ static void release_request(struct transfer_request *request)
        if (request == request_queue_head) {
                request_queue_head = request->next;
        } else {
-               while (entry->next != NULL && entry->next != request)
+               while (entry && entry->next != request)
                        entry = entry->next;
-               if (entry->next == request)
-                       entry->next = entry->next->next;
+               if (entry)
+                       entry->next = request->next;
        }
 
        free(request->url);
@@ -981,7 +981,7 @@ static int unlock_remote(struct remote_lock *lock)
                while (prev && prev->next != lock)
                        prev = prev->next;
                if (prev)
-                       prev->next = prev->next->next;
+                       prev->next = lock->next;
        }
 
        free(lock->owner);