I have code that's attempting to use CURLFORM_STREAM with curl_formadd, and it is getting a CURLE_SEND_FAIL_REWIND error from the library.
Looking at the libcurl code, it looks like it might be a bug, but it's hard for me to tell for sure. A full example of how the library is being used would take a while to construct. curl_formadd(&download->m_postMulti, &download->m_lastMulti, CURLFORM_COPYNAME, uploadName, CURLFORM_FILENAME, uploadFilename, CURLFORM_CONTENTTYPE, uploadContentType, CURLFORM_STREAM, download, CURLFORM_CONTENTSLENGTH, static_cast<long>(download->m_uploadSize), CURLFORM_END); I expected my read callbacks to get called, but instead, the transfer fails with CURLE_SEND_FAIL_REWIND. I have a seek callback set in addition to a read callback. Tracing through the code, I find that it's because curl_mimepart::seekfunc is set to null. In formdata.c there is this: else if(post->flags & HTTPPOST_CALLBACK) { /* the contents should be read with the callback and the size is set with the contentslength */ if(!clen) clen = -1; result = curl_mime_data_cb(part, clen, fread_func, NULL, NULL, post->userp); } There is no seek function being given to curl_mime_data_cb in Curl_getformdata, resulting in mime_part_rewind failing, finally causing a CURLE_SEND_FAIL_REWIND. Is this a bug in libcurl? My code is fairly old at this point, and wasn't written to use curl_mime_*. Using curl_mime_data_cb solves the problem, because I can provide the seek callback. Thanks~
-- Unsubscribe: https://lists.haxx.se/mailman/listinfo/curl-library Etiquette: https://curl.se/mail/etiquette.html