summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRené Scharfe <l.s.r@web.de>2019-10-13 12:49:17 (GMT)
committerJunio C Hamano <gitster@pobox.com>2019-10-15 01:53:50 (GMT)
commit5cc6a4be11644f3d302eee2e735261ace4cd1c4c (patch)
treeddccf37f6580d27971d2cc6229d4f39e2d53414b
parent5fa0f5238b0cd46cfe7f6fa76c3f526ea98148d9 (diff)
downloadgit-5cc6a4be11644f3d302eee2e735261ace4cd1c4c.zip
git-5cc6a4be11644f3d302eee2e735261ace4cd1c4c.tar.gz
git-5cc6a4be11644f3d302eee2e735261ace4cd1c4c.tar.bz2
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>
-rw-r--r--http-push.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/http-push.c b/http-push.c
index 0353f9f..822f326 100644
--- a/http-push.c
+++ b/http-push.c
@@ -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);