; Fix build by reordering definitions
[emacs.git] / oldXMenu / insque.c
blobc044ff0141ab9b63065f0cab1f11a09531f49e15
1 /*
2 Copyright (C) 1993-1998, 2001-2016 Free Software Foundation, Inc.
4 This program is free software: you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation, either version 3 of the License, or (at
7 your option) any later version.
9 This program 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
12 GNU General Public License for more details.
14 You should have received a copy of the GNU General Public License
15 along with this program. If not, see <http://www.gnu.org/licenses/>. */
17 /* This file implements the emacs_insque and emacs_remque functions,
18 clones of the insque and remque functions of BSD. They and all
19 their callers have been renamed to emacs_mumble to allow us to
20 include this file in the menu library on all systems. */
22 #include "XMenuInt.h"
24 struct qelem {
25 struct qelem *q_forw;
26 struct qelem *q_back;
27 char q_data[1];
30 /* Insert ELEM into a doubly-linked list, after PREV. */
32 void
33 emacs_insque (void *velem, void *vprev)
35 struct qelem *elem = velem;
36 struct qelem *prev = vprev;
37 struct qelem *next = prev->q_forw;
38 prev->q_forw = elem;
39 if (next)
40 next->q_back = elem;
41 elem->q_forw = next;
42 elem->q_back = prev;
45 /* Unlink ELEM from the doubly-linked list that it is in. */
47 void
48 emacs_remque (void *velem)
50 struct qelem *elem = velem;
51 struct qelem *next = elem->q_forw;
52 struct qelem *prev = elem->q_back;
53 if (next)
54 next->q_back = prev;
55 if (prev)
56 prev->q_forw = next;