Skip to content

Commit 5cc6a4b

Browse files
rscharfegitster
authored andcommitted
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 <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 5fa0f52 commit 5cc6a4b

File tree

1 file changed

+4
-4
lines changed

1 file changed

+4
-4
lines changed

http-push.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -501,10 +501,10 @@ static void release_request(struct transfer_request *request)
501501
if (request == request_queue_head) {
502502
request_queue_head = request->next;
503503
} else {
504-
while (entry->next != NULL && entry->next != request)
504+
while (entry && entry->next != request)
505505
entry = entry->next;
506-
if (entry->next == request)
507-
entry->next = entry->next->next;
506+
if (entry)
507+
entry->next = request->next;
508508
}
509509

510510
free(request->url);
@@ -981,7 +981,7 @@ static int unlock_remote(struct remote_lock *lock)
981981
while (prev && prev->next != lock)
982982
prev = prev->next;
983983
if (prev)
984-
prev->next = prev->next->next;
984+
prev->next = lock->next;
985985
}
986986

987987
free(lock->owner);

0 commit comments

Comments
 (0)