Skip to content
Snippets Groups Projects
main.c 32.1 KiB
Newer Older
  • Learn to ignore specific revisions
  • Daniel Stenberg's avatar
    Daniel Stenberg committed
          /* open file for output: */
          outs.stream=(FILE *) fopen(config.outfile, config.resume_from?"ab":"wb");
          if (!outs.stream) {
            helpf("Can't open '%s'!\n", config.outfile);
            return URG_WRITE_ERROR;
          }
        }
        else {
          outs.filename = config.outfile;
          outs.stream = NULL; /* open when needed */
        }
      }
      if (config.infile) {
        /*
         * We have specified a file to upload
         */
        struct stat fileinfo;
    
        /* If no file name part is given in the URL, we add this file name */
        char *ptr=strstr(url, "://");
        if(ptr)
          ptr+=3;
        else
          ptr=url;
        ptr = strrchr(ptr, '/');
        if(!ptr || !strlen(++ptr)) {
          /* The URL has no file name part, add the local file name. In order
             to be able to do so, we have to create a new URL in another buffer.*/
          urlbuffer=(char *)malloc(strlen(url) + strlen(config.infile) + 3);
          if(!urlbuffer) {
            helpf("out of memory\n");
            return URG_OUT_OF_MEMORY;
          }
          if(ptr)
            /* there is a trailing slash on the URL */
            sprintf(urlbuffer, "%s%s", url, config.infile);
          else
            /* thers is no trailing slash on the URL */
            sprintf(urlbuffer, "%s/%s", url, config.infile);
    
          url = urlbuffer; /* use our new URL instead! */
        }
    
        infd=(FILE *) fopen(config.infile, "rb");
        if (!infd || stat(config.infile, &fileinfo)) {
          helpf("Can't open '%s'!\n", config.infile);
          return URG_READ_ERROR;
        }
        infilesize=fileinfo.st_size;
    
      }
      if((config.conf&CONF_UPLOAD) &&
         config.use_resume &&
         (0==config.resume_from)) {
        config.resume_from = -1; /* -1 will then force get-it-yourself */
      }
      if(config.headerfile) {
        /* open file for output: */
        if(strcmp(config.headerfile,"-"))
        {
          headerfilep=(FILE *) fopen(config.headerfile, "wb");
          if (!headerfilep) {
    	helpf("Can't open '%s'!\n", config.headerfile);
    	return URG_WRITE_ERROR;
          }
        }
        else
          headerfilep=stdout;
      }
    
      /* This was previously done in urlget, but that was wrong place to do it */
      if(outs.stream && isatty(fileno(outs.stream)))
        /* we send the output to a tty, and therefor we switch off the progress
           meter right away */
        config.conf |= CONF_NOPROGRESS;
    
    #ifdef GLOBURL
      if (urlnum > 1) {
        fprintf(stderr, "\n[%d/%d]: %s --> %s\n", i+1, urlnum, url, config.outfile ? config.outfile : "<stdout>");
        if (separator) {
    #ifdef CURL_SEPARATORS
          printf("%s%s\n", CURLseparator, url);
    #endif
    #ifdef MIME_SEPARATORS
          printf("--%s\n", MIMEseparator);
          printf("Content-ID: %s\n\n", url); 
    #endif
        }
      }
    #endif
    
      if(!config.errors)
        config.errors = stderr;
    
      res = curl_urlget(URGTAG_FILE, (FILE *)&outs,  /* where to store */
                        URGTAG_WRITEFUNCTION, my_fwrite, /* what call to write */
                        URGTAG_INFILE, infd, /* for uploads */
                        URGTAG_INFILESIZE, infilesize, /* size of uploaded file */
                        URGTAG_URL, url,     /* what to fetch */
                        URGTAG_PROXY, config.proxy, /* proxy to use */
                        URGTAG_FLAGS, config.conf, /* flags */
                        URGTAG_USERPWD, config.userpwd, /* user + passwd */
                        URGTAG_PROXYUSERPWD, config.proxyuserpwd, /* Proxy user + passwd */
                        URGTAG_RANGE, config.range, /* range of document */
                        URGTAG_ERRORBUFFER, errorbuffer,
                        URGTAG_TIMEOUT, config.timeout,
                        URGTAG_POSTFIELDS, config.postfields,
                        URGTAG_REFERER, config.referer,
                        URGTAG_USERAGENT, config.useragent,
                        URGTAG_FTPPORT, config.ftpport,
                        URGTAG_LOW_SPEED_LIMIT, config.low_speed_limit,
                        URGTAG_LOW_SPEED_TIME, config.low_speed_time,
                        URGTAG_RESUME_FROM, config.use_resume?config.resume_from:0,
                        URGTAG_COOKIE, config.cookie,
                        URGTAG_HTTPHEADER, config.headers,
                        URGTAG_HTTPPOST, config.httppost,
                        URGTAG_SSLCERT, config.cert,
                        URGTAG_SSLCERTPASSWD, config.cert_passwd,
                        URGTAG_CRLF, config.crlf,
                        URGTAG_QUOTE, config.quote,
    
    Daniel Stenberg's avatar
    Daniel Stenberg committed
                        URGTAG_POSTQUOTE, config.postquote,
    
    Daniel Stenberg's avatar
    Daniel Stenberg committed
                        URGTAG_WRITEHEADER, headerfilep,
                        URGTAG_COOKIEFILE, config.cookiefile,
                        URGTAG_SSLVERSION, config.ssl_version,
                        URGTAG_TIMECONDITION, config.timecond,
                        URGTAG_TIMEVALUE, config.condtime,
                        URGTAG_CUSTOMREQUEST, config.customrequest,
                        URGTAG_STDERR, config.errors,
                        URGTAG_DONE); /* always terminate the list of tags */
      if((res!=URG_OK) && config.showerror)
        fprintf(config.errors, "curl: (%d) %s\n", res, errorbuffer);
    
      if((config.errors != stderr) &&
         (config.errors != stdout))
        /* it wasn't directed to stdout or stderr so close the file! */
        fclose(config.errors);
    
      if(urlbuffer)
        free(urlbuffer);
      if (config.outfile && outs.stream)
        fclose(outs.stream);
      if (config.infile)
        fclose(infd);
      if(headerfilep)
        fclose(headerfilep);
    
      if(config.url)
        free(config.url);
    
    #ifdef GLOBURL
      if(url)
        free(url);
      if(config.outfile && !config.remotefile)
        free(config.outfile);
      }
    #ifdef MIME_SEPARATORS
      if (separator)
        printf("--%s--\n", MIMEseparator);
    #endif
    #endif
    
      curl_slist_free_all(config.quote); /* the checks for config.quote == NULL */
    
      return(res);
    }