Revert "mime: latch last read callback status."

This reverts commit 87869e38d7.

Fixes #5014
Closes #5015
Reopens #4833
This commit is contained in:
Daniel Stenberg 2020-03-02 07:42:55 +01:00
parent d7242f4757
commit 8cd4e6d81f
No known key found for this signature in database
GPG key ID: 5CC908FDB71E12C2
13 changed files with 12 additions and 616 deletions

View file

@ -983,14 +983,6 @@ CURLcode curl_easy_pause(struct Curl_easy *data, int action)
newstate |= ((action & CURLPAUSE_RECV)?KEEP_RECV_PAUSE:0) |
((action & CURLPAUSE_SEND)?KEEP_SEND_PAUSE:0);
/* Unpause parts in active mime tree. */
if((k->keepon & ~newstate & KEEP_SEND_PAUSE) &&
(data->mstate == CURLM_STATE_PERFORM ||
data->mstate == CURLM_STATE_TOOFAST) &&
data->state.fread_func == (curl_read_callback) Curl_mime_read) {
Curl_mime_unpause(data->state.in);
}
/* put it back in the keepon */
k->keepon = newstate;

View file

@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
* Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
* Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@ -730,15 +730,11 @@ int curl_formget(struct curl_httppost *form, void *arg,
switch(nread) {
default:
if(append(arg, buffer, nread) == nread)
break;
/* FALLTHROUGH */
case CURL_READFUNC_ABORT:
result = CURLE_ABORTED_BY_CALLBACK;
if(append(arg, buffer, nread) != nread)
result = CURLE_READ_ERROR;
break;
case (size_t) -1: /* Read error. */
case CURL_READFUNC_PAUSE: /* Should not be paused. */
result = CURLE_READ_ERROR;
case CURL_READFUNC_ABORT:
case CURL_READFUNC_PAUSE:
break;
}
}

View file

@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
* Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
* Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@ -740,19 +740,9 @@ static size_t read_part_content(curl_mimepart *part,
{
size_t sz = 0;
switch(part->lastreadstatus) {
case 0:
case CURL_READFUNC_ABORT:
case CURL_READFUNC_PAUSE:
case READ_ERROR:
break;
default:
if(part->readfunc)
sz = part->readfunc(buffer, 1, bufsize, part->arg);
part->lastreadstatus = sz;
break;
}
return part->lastreadstatus;
if(part->readfunc)
sz = part->readfunc(buffer, 1, bufsize, part->arg);
return sz;
}
/* Read and encode part content. */
@ -1041,7 +1031,6 @@ static int mime_part_rewind(curl_mimepart *part)
if(res == CURL_SEEKFUNC_OK)
mimesetstate(&part->state, targetstate, NULL);
part->lastreadstatus = 1; /* Successful read status. */
return res;
}
@ -1084,7 +1073,6 @@ static void cleanup_part_content(curl_mimepart *part)
part->datasize = (curl_off_t) 0; /* No size yet. */
cleanup_encoder_state(&part->encstate);
part->kind = MIMEKIND_NONE;
part->lastreadstatus = 1; /* Successful read status. */
}
static void mime_subparts_free(void *ptr)
@ -1250,7 +1238,6 @@ void Curl_mime_initpart(curl_mimepart *part, struct Curl_easy *easy)
{
memset((char *) part, 0, sizeof(*part));
part->easy = easy;
part->lastreadstatus = 1; /* Successful read status. */
mimesetstate(&part->state, MIMESTATE_BEGIN, NULL);
}
@ -1818,26 +1805,6 @@ CURLcode Curl_mime_prepare_headers(curl_mimepart *part,
return ret;
}
/* Recursively reset paused status in the given part. */
void Curl_mime_unpause(curl_mimepart *part)
{
if(part) {
if(part->lastreadstatus == CURL_READFUNC_PAUSE)
part->lastreadstatus = 1; /* Successful read status. */
if(part->kind == MIMEKIND_MULTIPART) {
curl_mime *mime = (curl_mime *) part->arg;
if(mime) {
curl_mimepart *subpart;
for(subpart = mime->firstpart; subpart; subpart = subpart->nextpart)
Curl_mime_unpause(subpart);
}
}
}
}
#else /* !CURL_DISABLE_HTTP || !CURL_DISABLE_SMTP || !CURL_DISABLE_IMAP */
/* Mime not compiled in: define stubs for externally-referenced functions. */

View file

@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
* Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
* Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@ -125,7 +125,6 @@ struct curl_mimepart_s {
mime_state state; /* Current readback state. */
const mime_encoder *encoder; /* Content data encoder. */
mime_encoder_state encstate; /* Data encoder state. */
size_t lastreadstatus; /* Last read callback returned status. */
};
CURLcode Curl_mime_add_header(struct curl_slist **slp, const char *fmt, ...);
@ -148,7 +147,6 @@ size_t Curl_mime_read(char *buffer, size_t size, size_t nitems,
void *instream);
CURLcode Curl_mime_rewind(curl_mimepart *part);
const char *Curl_mime_contenttype(const char *filename);
void Curl_mime_unpause(curl_mimepart *part);
#else
/* if disabled */
@ -160,7 +158,6 @@ void Curl_mime_unpause(curl_mimepart *part);
#define Curl_mime_size(x) (curl_off_t) -1
#define Curl_mime_read NULL
#define Curl_mime_rewind(x) ((void)x, CURLE_NOT_BUILT_IN)
#define Curl_mime_unpause(x)
#endif