lkml.org 
[lkml]   [2007]   [Mar]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH] [RSDL 1/6] lists: add list splice tail
    Date
    Add a list_splice_tail variant of list_splice.

    Patch-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Signed-off-by: Con Kolivas <kernel@kolivas.org>

    ---
    include/linux/list.h | 42 ++++++++++++++++++++++++++++++++++++++++++
    1 file changed, 42 insertions(+)

    Index: linux-2.6.20-rsdl/include/linux/list.h
    ===================================================================
    --- linux-2.6.20-rsdl.orig/include/linux/list.h 2007-03-04 17:30:25.000000000 +1100
    +++ linux-2.6.20-rsdl/include/linux/list.h 2007-03-04 17:30:30.000000000 +1100
    @@ -332,6 +332,20 @@ static inline void __list_splice(struct
    at->prev = last;
    }

    +static inline void __list_splice_tail(struct list_head *list,
    + struct list_head *head)
    +{
    + struct list_head *first = list->next;
    + struct list_head *last = list->prev;
    + struct list_head *at = head->prev;
    +
    + first->prev = at;
    + at->next = first;
    +
    + last->next = head;
    + head->prev = last;
    +}
    +
    /**
    * list_splice - join two lists
    * @list: the new list to add.
    @@ -344,6 +358,18 @@ static inline void list_splice(struct li
    }

    /**
    + * list_splice_tail - join two lists at one's tail
    + * @list: the new list to add.
    + * @head: the place to add it in the first list.
    + */
    +static inline void list_splice_tail(struct list_head *list,
    + struct list_head *head)
    +{
    + if (!list_empty(list))
    + __list_splice_tail(list, head);
    +}
    +
    +/**
    * list_splice_init - join two lists and reinitialise the emptied list.
    * @list: the new list to add.
    * @head: the place to add it in the first list.
    @@ -360,6 +386,22 @@ static inline void list_splice_init(stru
    }

    /**
    + * list_splice_init - join two lists at one's tail and reinitialise emptied
    + * @list: the new list to add.
    + * @head: the place to add it in the first list.
    + *
    + * The list at @list is reinitialised
    + */
    +static inline void list_splice_tail_init(struct list_head *list,
    + struct list_head *head)
    +{
    + if (!list_empty(list)) {
    + __list_splice_tail(list, head);
    + INIT_LIST_HEAD(list);
    + }
    +}
    +
    +/**
    * list_entry - get the struct for this entry
    * @ptr: the &struct list_head pointer.
    * @type: the type of the struct this is embedded in.
    --
    -ck
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2007-03-04 08:05    [W:0.022 / U:0.400 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site