我是靠谱客的博主 隐形摩托,最近开发中收集的这篇文章主要介绍一个由uint64_t引起的libcurl中curl_formadd返回CURL_FORMADD_UNKNOWN_OPTION,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
详细描述就是,一个基于libcurl写的程序在电脑上支持正常,在嵌入式系统中运行不正常,报如上错误。我需要进一步追查问题所在。
关键代码如下:
/**
*/
int upload(char* data, uint64_t len, char* name) {
CURL *curl;
CURLcode res;
curl = curl_easy_init();
//
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
//
curl_easy_setopt(curl, CURLOPT_WRITEDATA, fd);
struct curl_httppost *formpost = 0;
struct curl_httppost *lastptr
= 0;
int ret = curl_formadd(&formpost, &lastptr,
CURLFORM_COPYNAME, "file",
CURLFORM_BUFFER, name,
CURLFORM_BUFFERPTR, data,
CURLFORM_BUFFERLENGTH, len,
CURLFORM_END);
if(ret != CURLE_OK) {
fprintf(stderr, "%dn", ret);
}
...
}
查到curl.h
中的代码是:
* CURL_FORMADD_UNKNOWN_OPTION if an unknown option was used
再查,经查curl_formadd
是由formdata.c
实现的,添加打印寻找原因。最终确定出现CURL_FORMADD_UNKNOWN_OPTION
的值始终等于传递进来的len
的值。len
是value
而不是option
为什么会把一个value
当成option
呢?我将len
转换成uint32_t
就没有问题了。这个问题很奇怪,以后还是少用uint64_t
。在嵌入式系统中会导致一些奇怪的错误。
/**
*/
int upload(char* data, uint64_t len, char* name) {
CURL *curl;
CURLcode res;
uint32_t len2 = (uint32_t) len;
curl = curl_easy_init();
//
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
//
curl_easy_setopt(curl, CURLOPT_WRITEDATA, fd);
struct curl_httppost *formpost = 0;
struct curl_httppost *lastptr
= 0;
int ret = curl_formadd(&formpost, &lastptr,
CURLFORM_COPYNAME, "file",
CURLFORM_BUFFER, name,
CURLFORM_BUFFERPTR, data,
CURLFORM_BUFFERLENGTH, len2,
CURLFORM_END);
if(ret != CURLE_OK) {
fprintf(stderr, "%dn", ret);
}
...
}
最后
以上就是隐形摩托为你收集整理的一个由uint64_t引起的libcurl中curl_formadd返回CURL_FORMADD_UNKNOWN_OPTION的全部内容,希望文章能够帮你解决一个由uint64_t引起的libcurl中curl_formadd返回CURL_FORMADD_UNKNOWN_OPTION所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复