Klemens Nanni <[email protected]> wrote:

> With the current wording, I'd either expect usage error when passing
> `-o output' or more wording explaining the behaviour when fetching
> multiple files.
> 
> Usage error seems wrong since our synopsis explicitly allows it, but
> writing the contents behind multiple URLs into the same file, while
> truncating the file for each URL does not make much sense, either.
> 
> 
> I came across this as I wanted to fetch multiple URLs at once without
> scripting, looked at ftp(1) and didn't found anything to do that.
> Tried `-o' with multiple URLs to see how it behaves as that case isn't
> documented.
> 
> So should we at least go with this correction?
> 
> Index: ftp.1
> ===================================================================
> RCS file: /cvs/src/usr.bin/ftp/ftp.1,v
> retrieving revision 1.122
> diff -u -p -r1.122 ftp.1
> --- ftp.1     2 Feb 2021 12:58:42 -0000       1.122
> +++ ftp.1     28 Jul 2021 15:46:19 -0000
> @@ -212,7 +212,7 @@ will prompt for the remote machine login
>  identity on the local machine) and, if necessary, prompt for a password
>  and an account with which to log in.
>  .It Fl o Ar output
> -When fetching a single file or URL, save the contents in
> +When fetching files or URLs, save the contents in
>  .Ar output .
>  To make the contents go to stdout,
>  use
> 

So it concatenates the output to the one file?  Fine.  But we should
also block users from more than one -o option.

Index: main.c
===================================================================
RCS file: /cvs/src/usr.bin/ftp/main.c,v
retrieving revision 1.138
diff -u -p -u -r1.138 main.c
--- main.c      14 Jul 2021 13:33:57 -0000      1.138
+++ main.c      28 Jul 2021 16:31:31 -0000
@@ -501,6 +501,8 @@ main(volatile int argc, char *argv[])
                        break;
 
                case 'o':
+                       if (outfile)
+                               usage();
                        outfile = optarg;
                        if (*outfile == '\0') {
                                pipeout = 0;

Reply via email to