Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/usr.bin/ftp ftp: add -? for help. improve synopsis



details:   https://anonhg.NetBSD.org/src/rev/eba05195de1e
branches:  trunk
changeset: 936074:eba05195de1e
user:      lukem <lukem%NetBSD.org@localhost>
date:      Sat Jul 18 03:00:37 2020 +0000

description:
ftp: add -? for help. improve synopsis

Add -? to display usage synopsis and help to stdout.
This allows for "ftp -? | less", which is more user friendly.
Errors still show usage to stderr.
Consistency improvements in some usage text.

diffstat:

 usr.bin/ftp/ftp.1     |   27 +++++++++--
 usr.bin/ftp/main.c    |  110 +++++++++++++++++++++++++++++++++++++------------
 usr.bin/ftp/version.h |    4 +-
 3 files changed, 106 insertions(+), 35 deletions(-)

diffs (280 lines):

diff -r effc938dd8ef -r eba05195de1e usr.bin/ftp/ftp.1
--- a/usr.bin/ftp/ftp.1 Fri Jul 17 21:59:30 2020 +0000
+++ b/usr.bin/ftp/ftp.1 Sat Jul 18 03:00:37 2020 +0000
@@ -1,4 +1,4 @@
-.\"    $NetBSD: ftp.1,v 1.141 2020/07/15 19:23:44 uwe Exp $
+.\"    $NetBSD: ftp.1,v 1.142 2020/07/18 03:00:37 lukem Exp $
 .\"
 .\" Copyright (c) 1996-2020 The NetBSD Foundation, Inc.
 .\" All rights reserved.
@@ -57,7 +57,7 @@
 .\"
 .\"    @(#)ftp.1       8.3 (Berkeley) 10/9/94
 .\"
-.Dd July 15, 2020
+.Dd July 18, 2020
 .Dt FTP 1
 .Os
 .Sh NAME
@@ -65,7 +65,7 @@
 .Nd Internet file transfer program
 .Sh SYNOPSIS
 .Nm
-.Op Fl 46AadefginpRtVv
+.Op Fl 46AadefginpRtVv?
 .Op Fl N Ar netrc
 .Op Fl o Ar output
 .Op Fl P Ar port
@@ -121,7 +121,7 @@
 .Ar host Oo Li \&: Ar port Oc
 .Li / Ar path
 .Op Li /
-.Op Li ;type= Ar X
+.Op Li ;type= Ar type
 .Oc
 .Sm on
 .Ek
@@ -138,6 +138,19 @@
 .Oc
 .Sm on
 .Ek
+.Bk -words
+.\" [https://[user[:password]@]host[:port]/path]
+.Sm off
+.Oo
+.Li https://
+.Oo Ar user
+.Op Li \&: Ar password
+.Li \&@ Oc
+.Ar host Oo Li \&: Ar port Oc
+.Li / Ar path
+.Oc
+.Sm on
+.Ek
 .Ar \&...
 .Nm
 .Bk -words
@@ -316,6 +329,8 @@
 Refer to
 .Ic xferbuf
 for more information.
+.It Fl ?
+Display help to stdout, and exit.
 .El
 .Pp
 The client host with which
@@ -1581,10 +1596,10 @@
 in the current directory.
 Otherwise, the full remote name is used as the local name,
 relative to the local root directory.
-.\" ftp://[user[:password]@]host[:port]/path[/][;type=X]
+.\" ftp://[user[:password]@]host[:port]/path[/][;type=type]
 .It Li ftp:// Ns Oo Ar user Ns Oo Ns Li \&: Ns Ar password Oc Ns Li \&@ Oc \
 Ns Ar host Ns Oo Li \&: Ns Ar port Oc Ns Li / Ns Ar path Ns Oo Li / Oc \
-Ns Oo Li ;type= Ns Ar X Oc
+Ns Oo Li ;type= Ns Ar type Oc
 An
 .Tn FTP
 URL, retrieved using the
diff -r effc938dd8ef -r eba05195de1e usr.bin/ftp/main.c
--- a/usr.bin/ftp/main.c        Fri Jul 17 21:59:30 2020 +0000
+++ b/usr.bin/ftp/main.c        Sat Jul 18 03:00:37 2020 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: main.c,v 1.126 2019/02/04 04:09:13 mrg Exp $   */
+/*     $NetBSD: main.c,v 1.127 2020/07/18 03:00:37 lukem Exp $ */
 
 /*-
  * Copyright (c) 1996-2015 The NetBSD Foundation, Inc.
@@ -98,7 +98,7 @@
 #if 0
 static char sccsid[] = "@(#)main.c     8.6 (Berkeley) 10/9/94";
 #else
-__RCSID("$NetBSD: main.c,v 1.126 2019/02/04 04:09:13 mrg Exp $");
+__RCSID("$NetBSD: main.c,v 1.127 2020/07/18 03:00:37 lukem Exp $");
 #endif
 #endif /* not lint */
 
@@ -130,7 +130,8 @@
 #define        NO_PROXY        "no_proxy"      /* env var with list of non-proxied
                                         * hosts, comma or space separated */
 
-__dead static void     usage(void);
+static int     usage(void);
+static int     usage_help(void);
 static void    setupoption(const char *, const char *, const char *);
 
 int
@@ -266,7 +267,7 @@
                }
        }
 
-       while ((ch = getopt(argc, argv, "46AadefginN:o:pP:q:r:Rs:tT:u:vVx:")) != -1) {
+       while ((ch = getopt(argc, argv, "?46AadefginN:o:pP:q:r:Rs:tT:u:vVx:")) != -1) {
                switch (ch) {
                case '4':
                        family = AF_INET;
@@ -378,15 +379,15 @@
                                if (*cp == '\0') {
                                        warnx("Bad throttle value `%s'",
                                            optarg);
-                                       usage();
-                                       /* NOTREACHED */
+                                       return usage();
                                }
                                targv[targc++] = cp;
                                if (targc >= 5)
                                        break;
                        }
-                       if (parserate(targc, targv, 1) == -1)
-                               usage();
+                       if (parserate(targc, targv, 1) == -1) {
+                               return usage();
+                       }
                        free(oac);
                        break;
                }
@@ -415,8 +416,14 @@
                        rcvbuf_size = sndbuf_size;
                        break;
 
+               case '?':
+                       if (optopt == '?') {
+                               return usage_help();
+                       }
+                       return usage();
+
                default:
-                       usage();
+                       errx(1, "unimplemented option -%c", ch);
                }
        }
                        /* set line buffering on ttyout */
@@ -572,8 +579,9 @@
                        retry_connect = 0; /* connected, stop hiding msgs */
                }
        }
-       if (isupload)
-               usage();
+       if (isupload) {
+               return usage();
+       }
 
 #ifndef NO_EDITCOMPLETE
        controlediting();
@@ -836,7 +844,6 @@
                                slrflag++;
                                INC_CHKCURSOR(stringbase);
                                return ((*sb == '!') ? bangstr : dollarstr);
-                               /* NOTREACHED */
                        case 1:
                                slrflag++;
                                altarg = stringbase;
@@ -965,7 +972,7 @@
        cmd = argv[0];
        isusage = (strcmp(cmd, "usage") == 0);
        if (argc == 0 || (isusage && argc == 1)) {
-               UPRINTF("usage: %s [command [...]]\n", cmd);
+               UPRINTF("usage: %s [command ...]\n", cmd);
                return;
        }
        if (argc == 1) {
@@ -1044,20 +1051,69 @@
        set_option(name, value ? value : defaultvalue, 0);
 }
 
-void
+static void
+synopsis(FILE * stream)
+{
+       const char * progname = getprogname();
+
+       fprintf(stream,
+"usage: %s [-46AadefginpRtVv] [-N NETRC] [-o OUTPUT] [-P PORT] [-q QUITTIME]\n"
+"           [-r RETRY] [-s SRCADDR] [-T DIR,MAX[,INC]] [-x XFERSIZE]\n"
+"           [[USER@]HOST [PORT]]\n"
+"           [[USER@]HOST:[PATH][/]]\n"
+"           [file:///PATH]\n"
+"           [ftp://[USER[:PASSWORD]@]HOST[:PORT]/PATH[/][;type=TYPE]]\n";
+"           [http://[USER[:PASSWORD]@]HOST[:PORT]/PATH]\n";
+#ifdef WITH_SSL
+"           [https://[USER[:PASSWORD]@]HOST[:PORT]/PATH]\n";
+#endif
+"           ...\n"
+"       %s -u URL FILE ...\n"
+"       %s -?\n",
+               progname, progname, progname);
+}
+
+static int
+usage_help(void)
+{
+       synopsis(stdout);
+#ifndef NO_USAGE
+       printf(
+"  -4            Only use IPv4 addresses\n"
+"  -6            Only use IPv6 addresses\n"
+"  -A            Force active mode\n"
+"  -a            Use anonymous login\n"
+"  -d            Enable debugging\n"
+"  -e            Disable command-line editing\n"
+"  -f            Force cache reload for FTP or HTTP proxy transfers\n"
+"  -g            Disable file name globbing\n"
+"  -i            Disable interactive prompt during multiple file transfers\n"
+"  -N NETRC      Use NETRC instead of ~/.netrc\n"
+"  -n            Disable auto-login\n"
+"  -o OUTPUT     Save auto-fetched files to OUTPUT\n"
+"  -P PORT       Use port PORT\n"
+"  -p            Force passive mode\n"
+"  -q QUITTIME   Quit if connection stalls for QUITTIME seconds\n"
+"  -R            Restart non-proxy auto-fetch\n"
+"  -r RETRY      Retry failed connection attempts after RETRY seconds\n"
+"  -s SRCADDR    Use source address SRCADDR\n"
+"  -t            Enable packet tracing\n"
+"  -T DIR,MAX[,INC]\n"
+"                Set maximum transfer rate for direction DIR to MAX bytes/s,\n"
+"                with optional increment INC bytes/s\n"
+"  -u URL        URL to upload file arguments to\n"
+"  -V            Disable verbose and progress\n"
+"  -v            Enable verbose and progress\n"
+"  -x XFERSIZE   Set socket send and receive size to XFERSIZE\n"
+"  -?            Display this help and exit\n"
+               );
+#endif
+       return EXIT_SUCCESS;
+}
+
+static int
 usage(void)
 {
-       const char *progname = getprogname();
-
-       (void)fprintf(stderr,
-"usage: %s [-46AadefginpRtVv] [-N netrc] [-o outfile] [-P port] [-q quittime]\n"
-"           [-r retry] [-s srcaddr] [-T dir,max[,inc]] [-x xferbufsize]\n"
-"           [[user@]host [port]] [host:path[/]] [file:///file]\n"
-"           [ftp://[user[:pass]@]host[:port]/path[/]]\n";
-"           [http://[user[:pass]@]host[:port]/path] [...]\n"
-#ifdef WITH_SSL
-"           [https://[user[:pass]@]host[:port]/path] [...]\n"
-#endif
-"       %s -u URL file [...]\n", progname, progname);
-       exit(1);
+       synopsis(stderr);
+       return EXIT_FAILURE;
 }
diff -r effc938dd8ef -r eba05195de1e usr.bin/ftp/version.h
--- a/usr.bin/ftp/version.h     Fri Jul 17 21:59:30 2020 +0000
+++ b/usr.bin/ftp/version.h     Sat Jul 18 03:00:37 2020 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: version.h,v 1.90 2020/07/11 02:19:31 lukem Exp $       */
+/*     $NetBSD: version.h,v 1.91 2020/07/18 03:00:37 lukem Exp $       */
 
 /*-
  * Copyright (c) 1999-2020 The NetBSD Foundation, Inc.
@@ -34,5 +34,5 @@
 #endif
 
 #ifndef FTP_VERSION
-#define        FTP_VERSION     "20200711"
+#define        FTP_VERSION     "20200718"
 #endif



Home | Main Index | Thread Index | Old Index