(root)/
glibc-2.38/
misc/
insremque.c
       1  /* Copyright (C) 1992-2023 Free Software Foundation, Inc.
       2     This file is part of the GNU C Library.
       3  
       4     The GNU C Library is free software; you can redistribute it and/or
       5     modify it under the terms of the GNU Lesser General Public
       6     License as published by the Free Software Foundation; either
       7     version 2.1 of the License, or (at your option) any later version.
       8  
       9     The GNU C Library is distributed in the hope that it will be useful,
      10     but WITHOUT ANY WARRANTY; without even the implied warranty of
      11     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      12     Lesser General Public License for more details.
      13  
      14     You should have received a copy of the GNU Lesser General Public
      15     License along with the GNU C Library; if not, see
      16     <https://www.gnu.org/licenses/>.  */
      17  
      18  #include <stddef.h>
      19  #include <search.h>
      20  
      21  /* Insert ELEM into a doubly-linked list, after PREV.  */
      22  
      23  void
      24  insque (void *elem, void *prev)
      25  {
      26    if (prev == NULL)
      27      {
      28        ((struct qelem *) elem)->q_forw = NULL;
      29        ((struct qelem *) elem)->q_back = NULL;
      30      }
      31    else
      32      {
      33        struct qelem *next = ((struct qelem *) prev)->q_forw;
      34        ((struct qelem *) prev)->q_forw = (struct qelem *) elem;
      35        if (next != NULL)
      36  	next->q_back = (struct qelem *) elem;
      37        ((struct qelem *) elem)->q_forw = next;
      38        ((struct qelem *) elem)->q_back = (struct qelem *) prev;
      39      }
      40  }
      41  
      42  /* Unlink ELEM from the doubly-linked list that it is in.  */
      43  
      44  void
      45  remque (void *elem)
      46  {
      47    struct qelem *next = ((struct qelem *) elem)->q_forw;
      48    struct qelem *prev = ((struct qelem *) elem)->q_back;
      49    if (next != NULL)
      50      next->q_back = prev;
      51    if (prev != NULL)
      52      prev->q_forw = (struct qelem *) next;
      53  }