curl / Mailing Lists / curl-library / Single Mail


CURLINFO_CONTENT_LENGTH_DOWNLOAD can't get remote file in mips-linux

From: ڰâ via curl-library <>
Date: Wed, 1 Nov 2017 14:56:41 +0800

Hi all:
    I want to use libcurl to to make ftp upload and resume function. I have to get remote file in ftp server to realize resume function. I used
ftpgetinfo.c to test. However it works in x86 pc, not work ini mips-linux. the CURLINFO_CONTENT_LENGTH_DOWNLOAD always return 0 which
mean the remote file size is zero.
1. The fllowing is the code:
long file_easy_getfilesize(const char *url, const char *username, const char *passward)
    CURL *curl;
    CURLcode res;
    double filesize = 0.0;
    curl = curl_easy_init();
    if (NULL == curl) {
        return CURLE_OUT_OF_MEMORY;
    curl_easy_setopt(curl, CURLOPT_URL, url);
    curl_easy_setopt(curl, CURLOPT_USERNAME , username);
    curl_easy_setopt(curl, CURLOPT_PASSWORD , passward);

    curl_easy_setopt(curl, CURLOPT_NOBODY, 1L) ;
    curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, throw_away);
    curl_easy_setopt(curl, CURLOPT_HEADER, 0L);

    if (curl_easy_perform(curl) == CURLE_OK) {
        res = curl_easy_getinfo(curl, CURLINFO_CONTENT_LENGTH_DOWNLOAD,
        if (res == CURLE_OK) {
            if (filesize > 0.0) {
                printf("remote filesize : %0.0f bytes\n", filesize);
            } else {
                filesize = 0;
        } else {
            filesize = 0;

    return filesize;

2.And I dig into libcurl. The function ftp_state_size_resp in ftp.c
  filesize = (ftpcode == 213)?curlx_strtoofft(buf+4, NULL, 0):-1;
Here filesize is ok.
But when I use CURLINFO_CONTENT_LENGTH_DOWNLOAD to get it. i't zero.
3.dig into getinfo_double in getinfo.c
    *param_doublep = (data->progress.flags & PGRS_DL_SIZE_KNOWN)?

Here *param_doublep is zero.
4. I think data->progress.size value is given by Curl_pgrsSetDownloadSize in functionftp_state_size_resp
  if(instate == FTP_SIZE) {
    if(-1 != filesize) {
      snprintf(buf, sizeof(data->state.buffer),
               "Content-Length: %" CURL_FORMAT_CURL_OFF_T "\r\n", filesize);
      result = Curl_client_write(conn, CLIENTWRITE_BOTH, buf, 0);
        return result;
    Curl_pgrsSetDownloadSize(data, filesize);

However Curl_client_write get CURLE_RECV_ERROR, and return
5. I dig into function Curl_client_write in sendf.c It return here
 if(data->req.keepon & KEEP_RECV_PAUSE) {
    size_t newlen;
    char *newptr;
    if(type != data->state.tempwritetype)
      /* major internal confusion */
      return CURLE_RECV_ERROR;


Received on 2017-11-01