Merged revisions 376630 via svnmerge from

file:///srv/subversion/repos/asterisk/trunk

................
  r376630 | rmudgett | 2012-11-27 11:54:25 -0600 (Tue, 27 Nov 2012) | 13 lines
  
  Made AST_LIST_REMOVE() simpler and use better names.
  
  * Update doxygen of AST_LIST_REMOVE().
  ........
  
  Merged revisions 376627 from http://svn.asterisk.org/svn/asterisk/branches/1.8
  ........
  
  Merged revisions 376628 from http://svn.asterisk.org/svn/asterisk/branches/10
  ........
  
  Merged revisions 376629 from http://svn.asterisk.org/svn/asterisk/branches/11
................


git-svn-id: https://origsvn.digium.com/svn/asterisk/team/mmichelson/threadpool@376637 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Automerge script 2012-11-27 18:20:18 +00:00
parent 37ae4ad43f
commit 8c84eb128f
1 changed files with 31 additions and 27 deletions

View File

@ -848,34 +848,38 @@ struct { \
* \param elm This is a pointer to the entry to be removed.
* \param field This is the name of the field (declared using AST_LIST_ENTRY())
* used to link entries of this list together.
* \warning The removed entry is \b not freed nor modified in any way.
* \retval elm if elm was in the list.
* \retval NULL if elm was not in the list or elm was NULL.
* \warning The removed entry is \b not freed.
*/
#define AST_LIST_REMOVE(head, elm, field) ({ \
__typeof(elm) __res = NULL; \
__typeof(elm) __tmp = elm; \
if (!__tmp) { \
__res = NULL; \
} else if ((head)->first == (elm)) { \
__res = (head)->first; \
(head)->first = (elm)->field.next; \
if ((head)->last == (elm)) \
(head)->last = NULL; \
} else { \
typeof(elm) curelm = (head)->first; \
while (curelm && (curelm->field.next != (elm))) \
curelm = curelm->field.next; \
if (curelm) { \
__res = (elm); \
curelm->field.next = (elm)->field.next; \
if ((head)->last == (elm)) \
(head)->last = curelm; \
} \
} \
if (__res) { \
(__res)->field.next = NULL; \
} \
(__res); \
})
#define AST_LIST_REMOVE(head, elm, field) \
({ \
__typeof(elm) __elm = (elm); \
if (__elm) { \
if ((head)->first == __elm) { \
(head)->first = __elm->field.next; \
__elm->field.next = NULL; \
if ((head)->last == __elm) { \
(head)->last = NULL; \
} \
} else { \
typeof(elm) __prev = (head)->first; \
while (__prev && __prev->field.next != __elm) { \
__prev = __prev->field.next; \
} \
if (__prev) { \
__prev->field.next = __elm->field.next; \
__elm->field.next = NULL; \
if ((head)->last == __elm) { \
(head)->last = __prev; \
} \
} else { \
__elm = NULL; \
} \
} \
} \
__elm; \
})
#define AST_RWLIST_REMOVE AST_LIST_REMOVE