From 888c30ba01f2ea7fe4ba1f24b536aafe887b2c37 Mon Sep 17 00:00:00 2001 From: Joao Ferreira Date: Wed, 14 May 2008 22:10:37 +0100 Subject: [PATCH] Fixed bug #23238: --no-clobber doesn't work with -O flag "wget -nc -O file URL" now checks if "file" exists first. If it does, it terminates. --- src/ftp.c | 4 +++- src/http.c | 10 ++++++---- src/main.c | 6 ++++++ 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/ftp.c b/src/ftp.c index 5a9ecc6a..e6163880 100644 --- a/src/ftp.c +++ b/src/ftp.c @@ -1091,7 +1091,9 @@ ftp_loop_internal (struct url *u, struct fileinfo *f, ccon *con) if (!con->target) con->target = url_file_name (u); - if (opt.noclobber && file_exists_p (con->target)) + /* If the output_document was given, then this check was already done and + the file doesn't exist. Hence the !opt.output_document */ + if (opt.noclobber && !opt.output_document && file_exists_p (con->target)) { logprintf (LOG_VERBOSE, _("File `%s' already there; not retrieving.\n"), con->target); diff --git a/src/http.c b/src/http.c index 129359ca..fa83ebf5 100644 --- a/src/http.c +++ b/src/http.c @@ -1821,10 +1821,11 @@ gethttp (struct url *u, struct http_stat *hs, int *dt, struct url *proxy) /* TODO: perform this check only once. */ if (!hs->existence_checked && file_exists_p (hs->local_file)) { - if (opt.noclobber) + if (opt.noclobber && !opt.output_document) { /* If opt.noclobber is turned on and file already exists, do not - retrieve the file */ + retrieve the file. But if the output_document was given, then this + test was already done and the file doesn't exist. Hence the !opt.output_document */ logprintf (LOG_VERBOSE, _("\ File `%s' already there; not retrieving.\n\n"), hs->local_file); /* If the file is there, we suppose it's retrieved OK. */ @@ -2374,10 +2375,11 @@ http_loop (struct url *u, char **newloc, char **local_file, const char *referer, /* TODO: Ick! This code is now in both gethttp and http_loop, and is * screaming for some refactoring. */ - if (got_name && file_exists_p (hstat.local_file) && opt.noclobber) + if (got_name && file_exists_p (hstat.local_file) && opt.noclobber && !opt.output_document) { /* If opt.noclobber is turned on and file already exists, do not - retrieve the file */ + retrieve the file. But if the output_document was given, then this + test was already done and the file doesn't exist. Hence the !opt.output_document */ logprintf (LOG_VERBOSE, _("\ File `%s' already there; not retrieving.\n\n"), hstat.local_file); diff --git a/src/main.c b/src/main.c index 421a5501..fdf368a5 100644 --- a/src/main.c +++ b/src/main.c @@ -905,6 +905,12 @@ WARNING: timestamping does nothing in combination with -O. See the manual\n\ for details.\n\n")); opt.timestamping = false; } + if (opt.noclobber && file_exists_p(opt.output_document)) + { + /* Check if output file exists; if it does, exit. */ + logprintf (LOG_VERBOSE, _("File `%s' already there; not retrieving.\n"), opt.output_document); + exit(1); + } } if (!nurl && !opt.input_filename)