mirror of
https://github.com/moparisthebest/curl
synced 2024-10-31 15:45:12 -04:00
slist.c, slist.h, cookie.c: new internal procedure Curl_slist_append_nodup()
This commit is contained in:
parent
9c15325d34
commit
964a7600b9
@ -89,6 +89,7 @@ Example set of cookies:
|
|||||||
#include "strequal.h"
|
#include "strequal.h"
|
||||||
#include "strtok.h"
|
#include "strtok.h"
|
||||||
#include "sendf.h"
|
#include "sendf.h"
|
||||||
|
#include "slist.h"
|
||||||
#include "curl_memory.h"
|
#include "curl_memory.h"
|
||||||
#include "share.h"
|
#include "share.h"
|
||||||
#include "strtoofft.h"
|
#include "strtoofft.h"
|
||||||
@ -1232,9 +1233,9 @@ struct curl_slist *Curl_cookie_list(struct SessionHandle *data)
|
|||||||
curl_slist_free_all(list);
|
curl_slist_free_all(list);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
beg = curl_slist_append(list, line);
|
beg = Curl_slist_append_nodup(list, line);
|
||||||
free(line);
|
|
||||||
if(!beg) {
|
if(!beg) {
|
||||||
|
free(line);
|
||||||
curl_slist_free_all(list);
|
curl_slist_free_all(list);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
63
lib/slist.c
63
lib/slist.c
@ -5,7 +5,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@ -45,6 +45,39 @@ static struct curl_slist *slist_get_last(struct curl_slist *list)
|
|||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Curl_slist_append_nodup() appends a string to the linked list. Rather than
|
||||||
|
* copying the string in dynamic storage, it takes its ownership. The string
|
||||||
|
* should have been malloc()ated. Curl_slist_append_nodup always returns
|
||||||
|
* the address of the first record, so that you can use this function as an
|
||||||
|
* initialization function as well as an append function.
|
||||||
|
* If an error occurs, NULL is returned and the string argument is NOT
|
||||||
|
* released.
|
||||||
|
*/
|
||||||
|
struct curl_slist *Curl_slist_append_nodup(struct curl_slist *list, char *data)
|
||||||
|
{
|
||||||
|
struct curl_slist *last;
|
||||||
|
struct curl_slist *new_item;
|
||||||
|
|
||||||
|
if(!data)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
new_item = malloc(sizeof(struct curl_slist));
|
||||||
|
if(!new_item)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
new_item->next = NULL;
|
||||||
|
new_item->data = data;
|
||||||
|
|
||||||
|
/* if this is the first item, then new_item *is* the list */
|
||||||
|
if(!list)
|
||||||
|
return new_item;
|
||||||
|
|
||||||
|
last = slist_get_last(list);
|
||||||
|
last->next = new_item;
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* curl_slist_append() appends a string to the linked list. It always returns
|
* curl_slist_append() appends a string to the linked list. It always returns
|
||||||
* the address of the first record, so that you can use this function as an
|
* the address of the first record, so that you can use this function as an
|
||||||
@ -55,32 +88,16 @@ static struct curl_slist *slist_get_last(struct curl_slist *list)
|
|||||||
struct curl_slist *curl_slist_append(struct curl_slist *list,
|
struct curl_slist *curl_slist_append(struct curl_slist *list,
|
||||||
const char *data)
|
const char *data)
|
||||||
{
|
{
|
||||||
struct curl_slist *last;
|
|
||||||
struct curl_slist *new_item;
|
|
||||||
|
|
||||||
new_item = malloc(sizeof(struct curl_slist));
|
|
||||||
if(new_item) {
|
|
||||||
char *dupdata = strdup(data);
|
char *dupdata = strdup(data);
|
||||||
if(dupdata) {
|
|
||||||
new_item->next = NULL;
|
if(!data)
|
||||||
new_item->data = dupdata;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
free(new_item);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if(list) {
|
list = Curl_slist_append_nodup(list, dupdata);
|
||||||
last = slist_get_last(list);
|
if(!list)
|
||||||
last->next = new_item;
|
free(dupdata);
|
||||||
|
|
||||||
return list;
|
return list;
|
||||||
}
|
|
||||||
|
|
||||||
/* if this is the first item, then new_item *is* the list */
|
|
||||||
return new_item;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@ -29,5 +29,12 @@
|
|||||||
*/
|
*/
|
||||||
struct curl_slist *Curl_slist_duplicate(struct curl_slist *inlist);
|
struct curl_slist *Curl_slist_duplicate(struct curl_slist *inlist);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Curl_slist_append_nodup() takes ownership of the given string and appends
|
||||||
|
* it to the list.
|
||||||
|
*/
|
||||||
|
struct curl_slist *Curl_slist_append_nodup(struct curl_slist *list,
|
||||||
|
char *data);
|
||||||
|
|
||||||
#endif /* HEADER_CURL_SLIST_H */
|
#endif /* HEADER_CURL_SLIST_H */
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user