From: Daniel Stenberg Date: Mon, 14 Apr 2008 14:42:06 +0000 (+0000) Subject: - Brock Noland reported that curl behaved differently depending on which order X-Git-Tag: upstream/7.37.1~7915 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ead2618c31fcb9e33e4ed23679b877e4e324c960;p=platform%2Fupstream%2Fcurl.git - Brock Noland reported that curl behaved differently depending on which order you used -i and -I. --- diff --git a/CHANGES b/CHANGES index 6d28e45..face399 100644 --- a/CHANGES +++ b/CHANGES @@ -6,6 +6,11 @@ Changelog + +Daniel Stenberg (14 Apr 2008) +- Brock Noland reported that curl behaved differently depending on which order + you used -i and -I. + Daniel Stenberg (12 Apr 2008) - Andre Guibert de Bruet found and fixed a case where malloc() was called but was not checked for a NULL return, in the Negotiate code. diff --git a/RELEASE-NOTES b/RELEASE-NOTES index fbb1f90..10e6414 100644 --- a/RELEASE-NOTES +++ b/RELEASE-NOTES @@ -20,6 +20,7 @@ This release includes the following bugfixes: o curl_easy_reset() resets the max redirect limit properly o configure now correctly recognizes Heimdal and MIT gssapi libraries o malloc() failure check in Negotiate + o -i and -I together now work the same no matter what order they're used This release includes the following known bugs: @@ -37,6 +38,6 @@ This release would not have looked like this without help, code, reports and advice from friends like these: Michal Marek, Daniel Fandrich, Scott Barrett, Alexey Simak, Daniel Black, - Rafa Muyo, Andre Guibert de Bruet + Rafa Muyo, Andre Guibert de Bruet, Brock Noland Thanks! (and sorry if I forgot to mention someone) diff --git a/src/main.c b/src/main.c index 7475a1e..9762ccd 100644 --- a/src/main.c +++ b/src/main.c @@ -200,7 +200,9 @@ typedef enum { #define CONF_AUTO_REFERER (1<<4) /* the automatic referer-system please! */ #define CONF_HEADER (1<<8) /* throw the header out too */ #define CONF_NOPROGRESS (1<<10) /* shut off the progress meter */ -#define CONF_NOBODY (1<<11) /* use HEAD to get http document */ +#define CONF_NOBODY (1<<11) /* get meta-data (headers) about the file + without transferring the body, use HEAD to + get http document */ #define CONF_FAILONERROR (1<<12) /* no output on http error codes >= 300 */ #define CONF_DIRLISTONLY (1<<16) /* request nonverbose directory listing */ #define CONF_FTPAPPEND (1<<20) /* Append instead of overwrite on upload! */ @@ -2452,22 +2454,13 @@ static ParameterError getparameter(char *flag, /* f or -long-flag */ break; case 'I': /* - * This is a bit tricky. We either SET both bits, or we clear both - * bits. Let's not make any other outcomes from this. + * CONF_BODY will imply CONF_HEADER later on */ - if((CONF_HEADER|CONF_NOBODY) != - (config->conf&(CONF_HEADER|CONF_NOBODY)) ) { - /* one of them weren't set, set both */ - config->conf |= (CONF_HEADER|CONF_NOBODY); - if(SetHTTPrequest(config, HTTPREQ_HEAD, &config->httpreq)) - return PARAM_BAD_USE; - } - else { - /* both were set, clear both */ - config->conf &= ~(CONF_HEADER|CONF_NOBODY); - if(SetHTTPrequest(config, HTTPREQ_GET, &config->httpreq)) - return PARAM_BAD_USE; - } + config->conf ^= CONF_NOBODY; + if(SetHTTPrequest(config, + (config->conf & CONF_NOBODY)?HTTPREQ_HEAD:HTTPREQ_GET, + &config->httpreq)) + return PARAM_BAD_USE; break; case 'k': /* allow insecure SSL connects */ config->insecure_ok ^= TRUE; @@ -4411,9 +4404,14 @@ operate(struct Configurable *config, int argc, argv_item_t argv[]) my_setopt(curl, CURLOPT_INFILESIZE_LARGE, uploadfilesize); my_setopt(curl, CURLOPT_URL, url); /* what to fetch */ my_setopt(curl, CURLOPT_PROXY, config->proxy); /* proxy to use */ - my_setopt(curl, CURLOPT_HEADER, config->conf&CONF_HEADER); my_setopt(curl, CURLOPT_NOPROGRESS, config->conf&CONF_NOPROGRESS); - my_setopt(curl, CURLOPT_NOBODY, config->conf&CONF_NOBODY); + if(config->conf&CONF_NOBODY) { + my_setopt(curl, CURLOPT_NOBODY, 1); + my_setopt(curl, CURLOPT_HEADER, 1); + } + else + my_setopt(curl, CURLOPT_HEADER, config->conf&CONF_HEADER); + my_setopt(curl, CURLOPT_FAILONERROR, config->conf&CONF_FAILONERROR); my_setopt(curl, CURLOPT_UPLOAD, uploadfile?TRUE:FALSE);