René Scharfe <[email protected]> writes:
> 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]>
> ---
> http-push.c | 8 ++++----
> 1 file changed, 4 insertions(+), 4 deletions(-)
Nice simplification. I wonder how much longer we should be
maintaining this program, though;-)
Will queue.
>
> diff --git a/http-push.c b/http-push.c
> index 0353f9f514..822f326599 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);
> --
> 2.23.0