1
/***************************************************************************
3
* Project ___| | | | _ \| |
5
* | (__| |_| | _ <| |___
6
* \___|\___/|_| \_\_____|
8
* Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al.
10
* This software is licensed as described in the file COPYING, which
11
* you should have received as part of this distribution. The terms
12
* are also available at http://curl.haxx.se/docs/copyright.html.
14
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
15
* copies of the Software, and permit persons to whom the Software is
16
* furnished to do so, under the terms of the COPYING file.
18
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
19
* KIND, either express or implied.
21
* $Id: slist.c,v 1.2 2009-04-21 11:46:17 yangtse Exp $
22
***************************************************************************/
31
#include "curl_memory.h"
34
/* The last #include file should be: */
37
/* returns last node in linked list */
38
static struct curl_slist *slist_get_last(struct curl_slist *list)
40
struct curl_slist *item;
42
/* if caller passed us a NULL, return now */
46
/* loop through to find the last item */
55
* curl_slist_append() appends a string to the linked list. It always returns
56
* the address of the first record, so that you can use this function as an
57
* initialization function as well as an append function. If you find this
58
* bothersome, then simply create a separate _init function and call it
59
* appropriately from within the program.
61
struct curl_slist *curl_slist_append(struct curl_slist *list,
64
struct curl_slist *last;
65
struct curl_slist *new_item;
67
new_item = malloc(sizeof(struct curl_slist));
69
char *dupdata = strdup(data);
71
new_item->next = NULL;
72
new_item->data = dupdata;
83
last = slist_get_last(list);
84
last->next = new_item;
88
/* if this is the first item, then new_item *is* the list */
93
* Curl_slist_duplicate() duplicates a linked list. It always returns the
94
* address of the first record of the cloned list or NULL in case of an
95
* error (or if the input list was NULL).
97
struct curl_slist *Curl_slist_duplicate(struct curl_slist *inlist)
99
struct curl_slist *outlist = NULL;
100
struct curl_slist *tmp;
103
tmp = curl_slist_append(outlist, inlist->data);
106
curl_slist_free_all(outlist);
111
inlist = inlist->next;
116
/* be nice and clean up resources */
117
void curl_slist_free_all(struct curl_slist *list)
119
struct curl_slist *next;
120
struct curl_slist *item;