1 /* GNU Mailutils -- a suite of utilities for electronic mail
2    Copyright (C) 1999-2021 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 Lesser General Public
6    License as published by the Free Software Foundation; either
7    version 3 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    Lesser General Public License for more details.
13 
14    You should have received a copy of the GNU Lesser General
15    Public License along with this library.  If not, see
16    <http://www.gnu.org/licenses/>. */
17 
18 #ifdef HAVE_CONFIG_H
19 # include <config.h>
20 #endif
21 
22 #include <stdlib.h>
23 #include <mailutils/sys/list.h>
24 #include <mailutils/errno.h>
25 
26 int
mu_list_prepend(mu_list_t list,void * item)27 mu_list_prepend (mu_list_t list, void *item)
28 {
29   struct list_data *ldata;
30   struct list_data *first;
31 
32   if (list == NULL)
33     return EINVAL;
34   first = list->head.next;
35   ldata = calloc (sizeof (*ldata), 1);
36   if (ldata == NULL)
37     return ENOMEM;
38   ldata->item = item;
39   mu_monitor_wrlock (list->monitor);
40   ldata->prev = &list->head;
41   ldata->next = list->head.next;
42   first->prev = ldata;
43   list->head.next = ldata;
44   list->count++;
45   mu_monitor_unlock (list->monitor);
46   return 0;
47 }
48