mirror of
https://github.com/curl/curl.git
synced 2026-08-24 20:03:52 +03:00
curl: allow both --etag-compare and --etag-save with same file name
This change inverse the order of processing for the --etag-compare and --etag-save option to process first --etag-compare. This in turn allows to use the same file name to compare and save an etag. The original behavior of not failing if the etag file does not exists is conserved. Fixes #5179 Closes #5180
This commit is contained in:
parent
23a870f2fd
commit
a448a4ce26
4 changed files with 150 additions and 31 deletions
|
|
@ -905,35 +905,6 @@ static CURLcode single_transfer(struct GlobalConfig *global,
|
|||
/* default output stream is stdout */
|
||||
outs->stream = stdout;
|
||||
|
||||
/* --etag-save */
|
||||
etag_save = &per->etag_save;
|
||||
etag_save->stream = stdout;
|
||||
|
||||
if(config->etag_save_file) {
|
||||
/* open file for output: */
|
||||
if(strcmp(config->etag_save_file, "-")) {
|
||||
FILE *newfile = fopen(config->etag_save_file, "wb");
|
||||
if(!newfile) {
|
||||
warnf(
|
||||
config->global,
|
||||
"Failed to open %s\n", config->etag_save_file);
|
||||
|
||||
result = CURLE_WRITE_ERROR;
|
||||
break;
|
||||
}
|
||||
else {
|
||||
etag_save->filename = config->etag_save_file;
|
||||
etag_save->s_isreg = TRUE;
|
||||
etag_save->fopened = TRUE;
|
||||
etag_save->stream = newfile;
|
||||
}
|
||||
}
|
||||
else {
|
||||
/* always use binary mode for protocol header output */
|
||||
set_binmode(etag_save->stream);
|
||||
}
|
||||
}
|
||||
|
||||
/* --etag-compare */
|
||||
if(config->etag_compare_file) {
|
||||
char *etag_from_file = NULL;
|
||||
|
|
@ -941,7 +912,7 @@ static CURLcode single_transfer(struct GlobalConfig *global,
|
|||
|
||||
/* open file for reading: */
|
||||
FILE *file = fopen(config->etag_compare_file, FOPEN_READTEXT);
|
||||
if(!file) {
|
||||
if(!file && !config->etag_save_file) {
|
||||
errorf(config->global,
|
||||
"Failed to open %s\n", config->etag_compare_file);
|
||||
result = CURLE_READ_ERROR;
|
||||
|
|
@ -975,6 +946,35 @@ static CURLcode single_transfer(struct GlobalConfig *global,
|
|||
}
|
||||
}
|
||||
|
||||
/* --etag-save */
|
||||
etag_save = &per->etag_save;
|
||||
etag_save->stream = stdout;
|
||||
|
||||
if(config->etag_save_file) {
|
||||
/* open file for output: */
|
||||
if(strcmp(config->etag_save_file, "-")) {
|
||||
FILE *newfile = fopen(config->etag_save_file, "wb");
|
||||
if(!newfile) {
|
||||
warnf(
|
||||
config->global,
|
||||
"Failed to open %s\n", config->etag_save_file);
|
||||
|
||||
result = CURLE_WRITE_ERROR;
|
||||
break;
|
||||
}
|
||||
else {
|
||||
etag_save->filename = config->etag_save_file;
|
||||
etag_save->s_isreg = TRUE;
|
||||
etag_save->fopened = TRUE;
|
||||
etag_save->stream = newfile;
|
||||
}
|
||||
}
|
||||
else {
|
||||
/* always use binary mode for protocol header output */
|
||||
set_binmode(etag_save->stream);
|
||||
}
|
||||
}
|
||||
|
||||
if(metalink) {
|
||||
/* For Metalink download, use name in Metalink file as
|
||||
filename. */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue