- if (swag->head == swag->tail) { /* special case */
- if (swag->head != obj) /* Trying to remove an object that was not in this swag */
- return NULL;
- swag->head = NULL;
- swag->tail = NULL;
- xbt_swag_getNext(obj, offset) = xbt_swag_getPrev(obj, offset) = NULL;
- } else if (obj == swag->head) { /* It's the head */
- swag->head = xbt_swag_getNext(obj, offset);
- xbt_swag_getPrev(swag->head, offset) = NULL;
- xbt_swag_getNext(obj, offset) = NULL;
- } else if (obj == swag->tail) { /* It's the tail */
- swag->tail = xbt_swag_getPrev(obj, offset);
- xbt_swag_getNext(swag->tail, offset) = NULL;
+ size_t offset = swag->offset;
+ void* prev = xbt_swag_getPrev(obj, offset);
+ void* next = xbt_swag_getNext(obj, offset);
+
+ if (prev) {
+ xbt_swag_getNext(prev, offset) = next;