/*
* ion/ioncore/grouppholder.c
*
- * Copyright (c) Tuomo Valkonen 2005-2007.
+ * Copyright (c) Tuomo Valkonen 2005-2008.
*
* See the included file LICENSE for details.
*/
if(group!=NULL){
UNLINK_ITEM(group->phs, ph, next, prev);
- }else{
+ }else if(ph->prev!=NULL){
WGroupPHolder *next=ph->next;
- if(ph->prev!=NULL)
- ph->prev->next=next;
+ ph->prev->next=next;
if(next==NULL){
next=get_head(ph);
assert(next->prev==ph);
}
next->prev=ph->prev;
+ }else{
+ /* ph should not be on a list, if prev pointer is NULL (whereas
+ * next alone can be NULL in our semi-doubly-linked lists).
+ */
+ assert(ph->next==NULL);
}
ph->group=NULL;
bool grouppholder_do_goto(WGroupPHolder *ph)
{
- WGroup *ws=ph->group;
-
- if(ws!=NULL)
- return region_goto((WRegion*)ws);
-
- return FALSE;
+ return (ph->group!=NULL
+ ? region_goto((WRegion*)ph->group)
+ : (ph->recreate_pholder!=NULL
+ ? pholder_do_goto(ph->recreate_pholder)
+ : FALSE));
}
WRegion *grouppholder_do_target(WGroupPHolder *ph)
{
- return (WRegion*)ph->group;
+ return (ph->group!=NULL
+ ? (WRegion*)ph->group
+ : (ph->recreate_pholder!=NULL
+ ? pholder_do_target(ph->recreate_pholder)
+ : NULL));
}