Support added for building using a GNU toolchain on Win32,
[platform/upstream/glib.git] / gstack.c
1 /* GLIB - Library of useful routines for C programming
2  * Copyright (C) 1999 Free Software Foundation, Inc.
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Library General Public
6  * License as published by the Free Software Foundation; either
7  * version 2 of the License, or (at your option) any later version.
8  *
9  * This 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  * Library General Public License for more details.
13  *
14  * You should have received a copy of the GNU Library General Public
15  * License along with this library; if not, write to the
16  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17  * Boston, MA 02111-1307, USA.
18  */
19
20
21 #ifdef HAVE_CONFIG_H
22 #  include <config.h>
23 #endif
24 #include <glib.h>
25
26
27 GStack *
28 g_stack_new (void)
29 {
30   GStack *s;
31   
32   s = g_new (GStack, 1);
33   if (!s)
34     return NULL;
35
36   s->list = NULL;
37
38   return s;
39 }
40
41
42 void
43 g_stack_free (GStack *stack)
44 {
45   if (stack)
46     {
47       if (stack->list)
48         g_list_free (stack->list);
49
50       g_free (stack);
51     }
52 }
53
54
55 gpointer
56 g_stack_pop (GStack *stack)
57 {
58   gpointer data = NULL;
59
60   if ((stack) && (stack->list))
61     {
62       GList *node = stack->list;
63
64       stack->list = stack->list->next;
65
66       data = node->data;
67
68       g_list_free_1 (node);
69     }
70
71   return data;
72 }
73
74