From 105f3530d45906ff3789447182bd0d8853eff800 Mon Sep 17 00:00:00 2001 From: Linus Torvalds Date: Fri, 10 Dec 2004 10:47:01 -0700 Subject: [PATCH] When removing/replacing pointer list entries, return the final count. The caller want to know how many got removed if they didn't specify an exact count to begin with. --- lib.c | 9 ++++++--- lib.h | 4 ++-- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/lib.c b/lib.c index bae3d0b2..21994f8a 100644 --- a/lib.c +++ b/lib.c @@ -204,7 +204,7 @@ void **__add_ptr_list(struct ptr_list **listp, void *ptr, unsigned long tag) return ret; } -void delete_ptr_list_entry(struct ptr_list **list, void *entry, int count) +int delete_ptr_list_entry(struct ptr_list **list, void *entry, int count) { void *ptr; @@ -218,9 +218,10 @@ void delete_ptr_list_entry(struct ptr_list **list, void *entry, int count) assert(count <= 0); out: pack_ptr_list(list); + return count; } -void replace_ptr_list_entry(struct ptr_list **list, void *old_ptr, void *new_ptr, int count) +int replace_ptr_list_entry(struct ptr_list **list, void *old_ptr, void *new_ptr, int count) { void *ptr; @@ -228,10 +229,12 @@ void replace_ptr_list_entry(struct ptr_list **list, void *old_ptr, void *new_ptr if (ptr==old_ptr) { REPLACE_CURRENT_PTR(ptr, new_ptr); if (!--count) - return; + goto out; } }END_FOR_EACH_PTR(ptr); assert(count <= 0); +out: + return count; } void * delete_ptr_list_last(struct ptr_list **head) diff --git a/lib.h b/lib.h index c27dfb64..aafd1263 100644 --- a/lib.h +++ b/lib.h @@ -87,8 +87,8 @@ struct ptr_list { #define ptr_list_empty(x) ((x) == NULL) void * delete_ptr_list_last(struct ptr_list **head); -void delete_ptr_list_entry(struct ptr_list **, void *, int); -void replace_ptr_list_entry(struct ptr_list **, void *old, void *new, int); +int delete_ptr_list_entry(struct ptr_list **, void *, int); +int replace_ptr_list_entry(struct ptr_list **, void *old, void *new, int); extern void sort_list(struct ptr_list **, int (*)(const void *, const void *)); extern void **__add_ptr_list(struct ptr_list **, void *, unsigned long tag); -- 2.11.4.GIT