mirror of
https://github.com/curl/curl.git
synced 2026-01-18 17:21:26 +01:00
bufref: add Curl_bufref_dup that returns a strdup()ed version
Cleans up a common pattern somewhat. Implemented as a macro. Closes #19834
This commit is contained in:
@@ -93,3 +93,12 @@ size_t Curl_bufref_len(const struct bufref *br);
|
||||
```
|
||||
|
||||
Returns the stored length of the referenced buffer.
|
||||
|
||||
## `dup`
|
||||
|
||||
```c
|
||||
char *Curl_bufref_dup(const struct bufref *br);
|
||||
```
|
||||
|
||||
Returns a strdup() version of the buffer. Note that this assumes that the
|
||||
bufref is null terminated.
|
||||
|
||||
@@ -45,4 +45,7 @@ size_t Curl_bufref_len(const struct bufref *br);
|
||||
CURLcode Curl_bufref_memdup0(struct bufref *br, const void *ptr, size_t len);
|
||||
void Curl_bufref_free(struct bufref *br);
|
||||
|
||||
/* return a strdup() version of the buffer */
|
||||
#define Curl_bufref_dup(x) curlx_strdup(Curl_bufref_ptr(x))
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1019,14 +1019,14 @@ CURL *curl_easy_duphandle(CURL *d)
|
||||
|
||||
if(Curl_bufref_ptr(&data->state.url)) {
|
||||
Curl_bufref_set(&outcurl->state.url,
|
||||
curlx_strdup(Curl_bufref_ptr(&data->state.url)), 0,
|
||||
Curl_bufref_dup(&data->state.url), 0,
|
||||
curl_free);
|
||||
if(!Curl_bufref_ptr(&outcurl->state.url))
|
||||
goto fail;
|
||||
}
|
||||
if(Curl_bufref_ptr(&data->state.referer)) {
|
||||
Curl_bufref_set(&outcurl->state.referer,
|
||||
curlx_strdup(Curl_bufref_ptr(&data->state.referer)), 0,
|
||||
Curl_bufref_dup(&data->state.referer), 0,
|
||||
curl_free);
|
||||
if(!Curl_bufref_ptr(&outcurl->state.referer))
|
||||
goto fail;
|
||||
|
||||
@@ -612,7 +612,7 @@ CURLcode Curl_http_auth_act(struct Curl_easy *data)
|
||||
out in bug #2284386 */
|
||||
curlx_free(data->req.newurl);
|
||||
/* clone URL */
|
||||
data->req.newurl = curlx_strdup(Curl_bufref_ptr(&data->state.url));
|
||||
data->req.newurl = Curl_bufref_dup(&data->state.url);
|
||||
if(!data->req.newurl)
|
||||
return CURLE_OUT_OF_MEMORY;
|
||||
}
|
||||
@@ -626,7 +626,7 @@ CURLcode Curl_http_auth_act(struct Curl_easy *data)
|
||||
if((data->state.httpreq != HTTPREQ_GET) &&
|
||||
(data->state.httpreq != HTTPREQ_HEAD)) {
|
||||
/* clone URL */
|
||||
data->req.newurl = curlx_strdup(Curl_bufref_ptr(&data->state.url));
|
||||
data->req.newurl = Curl_bufref_dup(&data->state.url);
|
||||
if(!data->req.newurl)
|
||||
return CURLE_OUT_OF_MEMORY;
|
||||
data->state.authhost.done = TRUE;
|
||||
@@ -912,7 +912,7 @@ static CURLcode auth_spnego(struct Curl_easy *data,
|
||||
&conn->http_negotiate_state;
|
||||
if(!result) {
|
||||
curlx_free(data->req.newurl);
|
||||
data->req.newurl = curlx_strdup(Curl_bufref_ptr(&data->state.url));
|
||||
data->req.newurl = Curl_bufref_dup(&data->state.url);
|
||||
if(!data->req.newurl)
|
||||
return CURLE_OUT_OF_MEMORY;
|
||||
data->state.authproblem = FALSE;
|
||||
@@ -4051,7 +4051,7 @@ static CURLcode http_on_response(struct Curl_easy *data,
|
||||
data->state.disableexpect = TRUE;
|
||||
Curl_req_abort_sending(data);
|
||||
DEBUGASSERT(!data->req.newurl);
|
||||
data->req.newurl = curlx_strdup(Curl_bufref_ptr(&data->state.url));
|
||||
data->req.newurl = Curl_bufref_dup(&data->state.url);
|
||||
if(!data->req.newurl) {
|
||||
result = CURLE_OUT_OF_MEMORY;
|
||||
goto out;
|
||||
|
||||
@@ -2011,7 +2011,7 @@ static CURLMcode state_performing(struct Curl_easy *data,
|
||||
data->state.errorbuf = FALSE;
|
||||
if(!newurl)
|
||||
/* typically for HTTP_1_1_REQUIRED error on first flight */
|
||||
newurl = curlx_strdup(Curl_bufref_ptr(&data->state.url));
|
||||
newurl = Curl_bufref_dup(&data->state.url);
|
||||
if(!newurl) {
|
||||
result = CURLE_OUT_OF_MEMORY;
|
||||
}
|
||||
|
||||
@@ -671,7 +671,7 @@ CURLcode Curl_retry_request(struct Curl_easy *data, char **url)
|
||||
}
|
||||
infof(data, "Connection died, retrying a fresh connect (retry count: %d)",
|
||||
data->state.retrycount);
|
||||
*url = curlx_strdup(Curl_bufref_ptr(&data->state.url));
|
||||
*url = Curl_bufref_dup(&data->state.url);
|
||||
if(!*url)
|
||||
return CURLE_OUT_OF_MEMORY;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user