prettyness police
authorJan-Simon Pendry <pendry@ucbvax.Berkeley.EDU>
Sun, 3 Apr 1994 06:06:57 +0000 (22:06 -0800)
committerJan-Simon Pendry <pendry@ucbvax.Berkeley.EDU>
Sun, 3 Apr 1994 06:06:57 +0000 (22:06 -0800)
SCCS-vsn: usr.bin/ftp/ftp_var.h 8.2
SCCS-vsn: usr.bin/ftp/cmdtab.c 8.2
SCCS-vsn: usr.bin/ftp/ruserpass.c 8.2
SCCS-vsn: usr.bin/ftp/domacro.c 8.2
SCCS-vsn: usr.bin/ftp/main.c 8.2
SCCS-vsn: usr.bin/ftp/cmds.c 8.2
SCCS-vsn: usr.bin/ftp/ftp.c 8.2

usr/src/usr.bin/ftp/cmds.c
usr/src/usr.bin/ftp/cmdtab.c
usr/src/usr.bin/ftp/domacro.c
usr/src/usr.bin/ftp/ftp.c
usr/src/usr.bin/ftp/ftp_var.h
usr/src/usr.bin/ftp/main.c
usr/src/usr.bin/ftp/ruserpass.c

index 8a37ea4..af860ff 100644 (file)
@@ -6,7 +6,7 @@
  */
 
 #ifndef lint
  */
 
 #ifndef lint
-static char sccsid[] = "@(#)cmds.c     8.1 (Berkeley) %G%";
+static char sccsid[] = "@(#)cmds.c     8.2 (Berkeley) %G%";
 #endif /* not lint */
 
 /*
 #endif /* not lint */
 
 /*
@@ -16,34 +16,24 @@ static char sccsid[] = "@(#)cmds.c  8.1 (Berkeley) %G%";
 #include <sys/wait.h>
 #include <sys/stat.h>
 #include <sys/socket.h>
 #include <sys/wait.h>
 #include <sys/stat.h>
 #include <sys/socket.h>
-
+#include <netinet/in.h>
 #include <arpa/ftp.h>
 
 #include <arpa/ftp.h>
 
+#include <ctype.h>
+#include <err.h>
+#include <netdb.h>
 #include <signal.h>
 #include <stdio.h>
 #include <signal.h>
 #include <stdio.h>
-#include <errno.h>
-#include <netdb.h>
-#include <ctype.h>
+#include <stdlib.h>
+#include <string.h>
 #include <time.h>
 #include <time.h>
-#include <netinet/in.h>
+#include <unistd.h>
 
 #include "ftp_var.h"
 #include "pathnames.h"
 
 
 #include "ftp_var.h"
 #include "pathnames.h"
 
-extern char *globerr;
-extern char **ftpglob();
-extern char *home;
-extern char *remglob();
-extern char *getenv();
-extern char *index();
-extern char *rindex();
-extern char *strerror();
-extern int  errno;
-extern char reply_string[];
-
-char *mname;
-jmp_buf jabort;
-char *dotrans(), *domap();
+jmp_buf        jabort;
+char   *mname;
 
 /*
  * `Another' gets another argument, and stores the new argc and argv.
 
 /*
  * `Another' gets another argument, and stores the new argc and argv.
@@ -51,13 +41,13 @@ char *dotrans(), *domap();
  *
  * Returns false if no new arguments have been added.
  */
  *
  * Returns false if no new arguments have been added.
  */
+int
 another(pargc, pargv, prompt)
        int *pargc;
        char ***pargv;
        char *prompt;
 {
        int len = strlen(line), ret;
 another(pargc, pargv, prompt)
        int *pargc;
        char ***pargv;
        char *prompt;
 {
        int len = strlen(line), ret;
-       extern sig_t intr();
 
        if (len >= sizeof(line) - 3) {
                printf("sorry, arguments too long\n");
 
        if (len >= sizeof(line) - 3) {
                printf("sorry, arguments too long\n");
@@ -81,11 +71,12 @@ another(pargc, pargv, prompt)
  * Connect to peer server and
  * auto-login, if possible.
  */
  * Connect to peer server and
  * auto-login, if possible.
  */
+void
 setpeer(argc, argv)
        int argc;
        char *argv[];
 {
 setpeer(argc, argv)
        int argc;
        char *argv[];
 {
-       char *host, *hookup();
+       char *host;
        short port;
 
        if (connected) {
        short port;
 
        if (connected) {
@@ -138,10 +129,10 @@ setpeer(argc, argv)
                if (debug == 0)
                        verbose = -1;
                if (command("SYST") == COMPLETE && overbose) {
                if (debug == 0)
                        verbose = -1;
                if (command("SYST") == COMPLETE && overbose) {
-                       register char *cp, c;
-                       cp = index(reply_string+4, ' ');
+                       char *cp, c;
+                       cp = strchr(reply_string+4, ' ');
                        if (cp == NULL)
                        if (cp == NULL)
-                               cp = index(reply_string+4, '\r');
+                               cp = strchr(reply_string+4, '\r');
                        if (cp) {
                                if (cp[-1] == '.')
                                        cp--;
                        if (cp) {
                                if (cp[-1] == '.')
                                        cp--;
@@ -196,17 +187,18 @@ struct    types {
        { "image",      "I",    TYPE_I, 0 },
        { "ebcdic",     "E",    TYPE_E, 0 },
        { "tenex",      "L",    TYPE_L, bytename },
        { "image",      "I",    TYPE_I, 0 },
        { "ebcdic",     "E",    TYPE_E, 0 },
        { "tenex",      "L",    TYPE_L, bytename },
-       0
+       { NULL }
 };
 
 /*
  * Set transfer type.
  */
 };
 
 /*
  * Set transfer type.
  */
+void
 settype(argc, argv)
        int argc;
        char *argv[];
 {
 settype(argc, argv)
        int argc;
        char *argv[];
 {
-       register struct types *p;
+       struct types *p;
        int comret;
 
        if (argc > 2) {
        int comret;
 
        if (argc > 2) {
@@ -250,10 +242,11 @@ settype(argc, argv)
  * without changing our notion of the type for data transfers.
  * Used to change to and from ascii for listings.
  */
  * without changing our notion of the type for data transfers.
  * Used to change to and from ascii for listings.
  */
+void
 changetype(newtype, show)
        int newtype, show;
 {
 changetype(newtype, show)
        int newtype, show;
 {
-       register struct types *p;
+       struct types *p;
        int comret, oldverbose = verbose;
 
        if (newtype == 0)
        int comret, oldverbose = verbose;
 
        if (newtype == 0)
@@ -288,8 +281,12 @@ char *stype[] = {
  * Set binary transfer type.
  */
 /*VARARGS*/
  * Set binary transfer type.
  */
 /*VARARGS*/
-setbinary()
+void
+setbinary(argc, argv)
+       int argc;
+       char **argv;
 {
 {
+
        stype[1] = "binary";
        settype(2, stype);
 }
        stype[1] = "binary";
        settype(2, stype);
 }
@@ -298,8 +295,12 @@ setbinary()
  * Set ascii transfer type.
  */
 /*VARARGS*/
  * Set ascii transfer type.
  */
 /*VARARGS*/
-setascii()
+void
+setascii(argc, argv)
+       int argc;
+       char *argv[];
 {
 {
+
        stype[1] = "ascii";
        settype(2, stype);
 }
        stype[1] = "ascii";
        settype(2, stype);
 }
@@ -308,8 +309,12 @@ setascii()
  * Set tenex transfer type.
  */
 /*VARARGS*/
  * Set tenex transfer type.
  */
 /*VARARGS*/
-settenex()
+void
+settenex(argc, argv)
+       int argc;
+       char *argv[];
 {
 {
+
        stype[1] = "tenex";
        settype(2, stype);
 }
        stype[1] = "tenex";
        settype(2, stype);
 }
@@ -318,7 +323,8 @@ settenex()
  * Set file transfer mode.
  */
 /*ARGSUSED*/
  * Set file transfer mode.
  */
 /*ARGSUSED*/
-setmode(argc, argv)
+void
+setftmode(argc, argv)
        int argc;
        char *argv[];
 {
        int argc;
        char *argv[];
 {
@@ -331,6 +337,7 @@ setmode(argc, argv)
  * Set file transfer format.
  */
 /*ARGSUSED*/
  * Set file transfer format.
  */
 /*ARGSUSED*/
+void
 setform(argc, argv)
        int argc;
        char *argv[];
 setform(argc, argv)
        int argc;
        char *argv[];
@@ -344,6 +351,7 @@ setform(argc, argv)
  * Set file transfer structure.
  */
 /*ARGSUSED*/
  * Set file transfer structure.
  */
 /*ARGSUSED*/
+void
 setstruct(argc, argv)
        int argc;
        char *argv[];
 setstruct(argc, argv)
        int argc;
        char *argv[];
@@ -356,6 +364,7 @@ setstruct(argc, argv)
 /*
  * Send a single file.
  */
 /*
  * Send a single file.
  */
+void
 put(argc, argv)
        int argc;
        char *argv[];
 put(argc, argv)
        int argc;
        char *argv[];
@@ -404,16 +413,15 @@ usage:
 /*
  * Send multiple files.
  */
 /*
  * Send multiple files.
  */
+void
 mput(argc, argv)
        int argc;
        char **argv;
 {
 mput(argc, argv)
        int argc;
        char **argv;
 {
-       extern jmp_buf jabort;
-       register int i;
+       int i;
        sig_t oldintr;
        int ointer;
        char *tp;
        sig_t oldintr;
        int ointer;
        char *tp;
-       void mabort();
 
        if (argc < 2 && !another(&argc, &argv, "local-files")) {
                printf("usage: %s local-files\n", argv[0]);
 
        if (argc < 2 && !another(&argc, &argv, "local-files")) {
                printf("usage: %s local-files\n", argv[0]);
@@ -474,7 +482,7 @@ mput(argc, argv)
                return;
        }
        for (i = 1; i < argc; i++) {
                return;
        }
        for (i = 1; i < argc; i++) {
-               register char **cpp, **gargs;
+               char **cpp, **gargs;
 
                if (!doglob) {
                        if (mflag && confirm(argv[0], argv[i])) {
 
                if (!doglob) {
                        if (mflag && confirm(argv[0], argv[i])) {
@@ -527,10 +535,13 @@ mput(argc, argv)
        mflag = 0;
 }
 
        mflag = 0;
 }
 
+void
 
 
+void
 /*
  * Receive one file.
  */
 /*
  * Receive one file.
  */
+int
 get(argc, argv)
        char *argv[];
 {
 get(argc, argv)
        char *argv[];
 {
@@ -582,11 +593,12 @@ usage:
        recvrequest("RETR", argv[2], argv[1], "w");
 }
 
        recvrequest("RETR", argv[2], argv[1], "w");
 }
 
+/* ARGSUSED */
 void
 void
-mabort()
+mabort(signo)
+       int signo;
 {
        int ointer;
 {
        int ointer;
-       extern jmp_buf jabort;
 
        printf("\n");
        (void) fflush(stdout);
 
        printf("\n");
        (void) fflush(stdout);
@@ -606,15 +618,14 @@ mabort()
 /*
  * Get multiple files.
  */
 /*
  * Get multiple files.
  */
+void
 mget(argc, argv)
        int argc;
        char **argv;
 {
 mget(argc, argv)
        int argc;
        char **argv;
 {
-       extern jmp_buf jabort;
        sig_t oldintr;
        int ch, ointer;
        char *cp, *tp, *tp2, tmpbuf[MAXPATHLEN];
        sig_t oldintr;
        int ch, ointer;
        char *cp, *tp, *tp2, tmpbuf[MAXPATHLEN];
-       void mabort();
 
        if (argc < 2 && !another(&argc, &argv, "remote-files")) {
                printf("usage: %s remote-files\n", argv[0]);
 
        if (argc < 2 && !another(&argc, &argv, "remote-files")) {
                printf("usage: %s remote-files\n", argv[0]);
@@ -623,7 +634,7 @@ mget(argc, argv)
        }
        mname = argv[0];
        mflag = 1;
        }
        mname = argv[0];
        mflag = 1;
-       oldintr = signal(SIGINT,mabort);
+       oldintr = signal(SIGINT, mabort);
        (void) setjmp(jabort);
        while ((cp = remglob(argv,proxy)) != NULL) {
                if (*cp == '\0') {
        (void) setjmp(jabort);
        while ((cp = remglob(argv,proxy)) != NULL) {
                if (*cp == '\0') {
@@ -681,7 +692,7 @@ remglob(argv,doswitch)
                                ftemp = NULL;
                        }
                }
                                ftemp = NULL;
                        }
                }
-               return(NULL);
+               return (NULL);
        }
        if (!doglob) {
                if (args == NULL)
        }
        if (!doglob) {
                if (args == NULL)
@@ -715,7 +726,7 @@ remglob(argv,doswitch)
                (void) fclose(ftemp), ftemp = NULL;
                return (NULL);
        }
                (void) fclose(ftemp), ftemp = NULL;
                return (NULL);
        }
-       if ((cp = index(buf, '\n')) != NULL)
+       if ((cp = strchr(buf, '\n')) != NULL)
                *cp = '\0';
        return (buf);
 }
                *cp = '\0';
        return (buf);
 }
@@ -732,6 +743,7 @@ onoff(bool)
  * Show status.
  */
 /*ARGSUSED*/
  * Show status.
  */
 /*ARGSUSED*/
+void
 status(argc, argv)
        int argc;
        char *argv[];
 status(argc, argv)
        int argc;
        char *argv[];
@@ -787,7 +799,10 @@ status(argc, argv)
  * Set beep on cmd completed mode.
  */
 /*VARARGS*/
  * Set beep on cmd completed mode.
  */
 /*VARARGS*/
-setbell()
+void
+setbell(argc, argv)
+       int argc;
+       char *argv[];
 {
 
        bell = !bell;
 {
 
        bell = !bell;
@@ -799,7 +814,10 @@ setbell()
  * Turn on packet tracing.
  */
 /*VARARGS*/
  * Turn on packet tracing.
  */
 /*VARARGS*/
-settrace()
+void
+settrace(argc, argv)
+       int argc;
+       char *argv[];
 {
 
        trace = !trace;
 {
 
        trace = !trace;
@@ -811,7 +829,10 @@ settrace()
  * Toggle hash mark printing during transfers.
  */
 /*VARARGS*/
  * Toggle hash mark printing during transfers.
  */
 /*VARARGS*/
-sethash()
+void
+sethash(argc, argv)
+       int argc;
+       char *argv[];
 {
 
        hash = !hash;
 {
 
        hash = !hash;
@@ -826,7 +847,10 @@ sethash()
  * Turn on printing of server echo's.
  */
 /*VARARGS*/
  * Turn on printing of server echo's.
  */
 /*VARARGS*/
-setverbose()
+void
+setverbose(argc, argv)
+       int argc;
+       char *argv[];
 {
 
        verbose = !verbose;
 {
 
        verbose = !verbose;
@@ -838,7 +862,10 @@ setverbose()
  * Toggle PORT cmd use before each data connection.
  */
 /*VARARGS*/
  * Toggle PORT cmd use before each data connection.
  */
 /*VARARGS*/
-setport()
+void
+setport(argc, argv)
+       int argc;
+       char *argv[];
 {
 
        sendport = !sendport;
 {
 
        sendport = !sendport;
@@ -851,7 +878,10 @@ setport()
  * during mget, mput, and mdelete.
  */
 /*VARARGS*/
  * during mget, mput, and mdelete.
  */
 /*VARARGS*/
-setprompt()
+void
+setprompt(argc, argv)
+       int argc;
+       char *argv[];
 {
 
        interactive = !interactive;
 {
 
        interactive = !interactive;
@@ -864,7 +894,10 @@ setprompt()
  * on local file names.
  */
 /*VARARGS*/
  * on local file names.
  */
 /*VARARGS*/
-setglob()
+void
+setglob(argc, argv)
+       int argc;
+       char *argv[];
 {
        
        doglob = !doglob;
 {
        
        doglob = !doglob;
@@ -877,6 +910,7 @@ setglob()
  * set level of debugging.
  */
 /*VARARGS*/
  * set level of debugging.
  */
 /*VARARGS*/
+void
 setdebug(argc, argv)
        int argc;
        char *argv[];
 setdebug(argc, argv)
        int argc;
        char *argv[];
@@ -905,6 +939,7 @@ setdebug(argc, argv)
  * Set current working directory
  * on remote machine.
  */
  * Set current working directory
  * on remote machine.
  */
+void
 cd(argc, argv)
        int argc;
        char *argv[];
 cd(argc, argv)
        int argc;
        char *argv[];
@@ -926,12 +961,12 @@ cd(argc, argv)
  * Set current working directory
  * on local machine.
  */
  * Set current working directory
  * on local machine.
  */
+void
 lcd(argc, argv)
        int argc;
        char *argv[];
 {
        char buf[MAXPATHLEN];
 lcd(argc, argv)
        int argc;
        char *argv[];
 {
        char buf[MAXPATHLEN];
-       extern char *getwd();
 
        if (argc < 2)
                argc++, argv[1] = home;
 
        if (argc < 2)
                argc++, argv[1] = home;
@@ -945,7 +980,7 @@ lcd(argc, argv)
                return;
        }
        if (chdir(argv[1]) < 0) {
                return;
        }
        if (chdir(argv[1]) < 0) {
-               fprintf(stderr, "local: %s: %s\n", argv[1], strerror(errno));
+               warn("local: %s", argv[1]);
                code = -1;
                return;
        }
                code = -1;
                return;
        }
@@ -956,6 +991,7 @@ lcd(argc, argv)
 /*
  * Delete a single file.
  */
 /*
  * Delete a single file.
  */
+void
 delete(argc, argv)
        int argc;
        char *argv[];
 delete(argc, argv)
        int argc;
        char *argv[];
@@ -972,15 +1008,14 @@ delete(argc, argv)
 /*
  * Delete multiple files.
  */
 /*
  * Delete multiple files.
  */
+void
 mdelete(argc, argv)
        int argc;
        char **argv;
 {
 mdelete(argc, argv)
        int argc;
        char **argv;
 {
-       extern jmp_buf jabort;
        sig_t oldintr;
        int ointer;
        char *cp;
        sig_t oldintr;
        int ointer;
        char *cp;
-       void mabort();
 
        if (argc < 2 && !another(&argc, &argv, "remote-files")) {
                printf("usage: %s remote-files\n", argv[0]);
 
        if (argc < 2 && !another(&argc, &argv, "remote-files")) {
                printf("usage: %s remote-files\n", argv[0]);
@@ -1015,6 +1050,7 @@ mdelete(argc, argv)
 /*
  * Rename a remote file.
  */
 /*
  * Rename a remote file.
  */
+void
 renamefile(argc, argv)
        int argc;
        char *argv[];
 renamefile(argc, argv)
        int argc;
        char *argv[];
@@ -1036,6 +1072,7 @@ usage:
  * Get a directory listing
  * of remote files.
  */
  * Get a directory listing
  * of remote files.
  */
+void
 ls(argc, argv)
        int argc;
        char *argv[];
 ls(argc, argv)
        int argc;
        char *argv[];
@@ -1068,15 +1105,14 @@ ls(argc, argv)
  * Get a directory listing
  * of multiple remote files.
  */
  * Get a directory listing
  * of multiple remote files.
  */
+void
 mls(argc, argv)
        int argc;
        char **argv;
 {
 mls(argc, argv)
        int argc;
        char **argv;
 {
-       extern jmp_buf jabort;
        sig_t oldintr;
        int ointer, i;
        char *cmd, mode[1], *dest;
        sig_t oldintr;
        int ointer, i;
        char *cmd, mode[1], *dest;
-       void mabort();
 
        if (argc < 2 && !another(&argc, &argv, "remote-files"))
                goto usage;
 
        if (argc < 2 && !another(&argc, &argv, "remote-files"))
                goto usage;
@@ -1119,11 +1155,12 @@ usage:
  * Do a shell escape
  */
 /*ARGSUSED*/
  * Do a shell escape
  */
 /*ARGSUSED*/
+void
 shell(argc, argv)
        int argc;
        char **argv;
 {
 shell(argc, argv)
        int argc;
        char **argv;
 {
-       int pid;
+       pid_t pid;
        sig_t old1, old2;
        char shellnam[40], *shell, *namep; 
        union wait status;
        sig_t old1, old2;
        char shellnam[40], *shell, *namep; 
        union wait status;
@@ -1138,7 +1175,7 @@ shell(argc, argv)
                shell = getenv("SHELL");
                if (shell == NULL)
                        shell = _PATH_BSHELL;
                shell = getenv("SHELL");
                if (shell == NULL)
                        shell = _PATH_BSHELL;
-               namep = rindex(shell,'/');
+               namep = strrchr(shell,'/');
                if (namep == NULL)
                        namep = shell;
                (void) strcpy(shellnam,"-");
                if (namep == NULL)
                        namep = shell;
                (void) strcpy(shellnam,"-");
@@ -1155,33 +1192,33 @@ shell(argc, argv)
                else {
                        execl(shell,shellnam,(char *)0);
                }
                else {
                        execl(shell,shellnam,(char *)0);
                }
-               perror(shell);
+               warn("%s", shell);
                code = -1;
                exit(1);
                code = -1;
                exit(1);
-               }
+       }
        if (pid > 0)
                while (wait((int *)&status) != pid)
                        ;
        (void) signal(SIGINT, old1);
        (void) signal(SIGQUIT, old2);
        if (pid == -1) {
        if (pid > 0)
                while (wait((int *)&status) != pid)
                        ;
        (void) signal(SIGINT, old1);
        (void) signal(SIGQUIT, old2);
        if (pid == -1) {
-               perror("Try again later");
+               warn("%s", "Try again later");
                code = -1;
        }
        else {
                code = 0;
        }
                code = -1;
        }
        else {
                code = 0;
        }
-       return (0);
 }
 
 /*
  * Send new user information (re-login)
  */
 }
 
 /*
  * Send new user information (re-login)
  */
+void
 user(argc, argv)
        int argc;
        char **argv;
 {
 user(argc, argv)
        int argc;
        char **argv;
 {
-       char acct[80], *getpass();
+       char acct[80];
        int n, aflag = 0;
 
        if (argc < 2)
        int n, aflag = 0;
 
        if (argc < 2)
@@ -1189,7 +1226,7 @@ user(argc, argv)
        if (argc < 2 || argc > 4) {
                printf("usage: %s username [password] [account]\n", argv[0]);
                code = -1;
        if (argc < 2 || argc > 4) {
                printf("usage: %s username [password] [account]\n", argv[0]);
                code = -1;
-               return (0);
+               return;
        }
        n = command("USER %s", argv[1]);
        if (n == CONTINUE) {
        }
        n = command("USER %s", argv[1]);
        if (n == CONTINUE) {
@@ -1209,19 +1246,21 @@ user(argc, argv)
        }
        if (n != COMPLETE) {
                fprintf(stdout, "Login failed.\n");
        }
        if (n != COMPLETE) {
                fprintf(stdout, "Login failed.\n");
-               return (0);
+               return;
        }
        if (!aflag && argc == 4) {
                (void) command("ACCT %s", argv[3]);
        }
        }
        if (!aflag && argc == 4) {
                (void) command("ACCT %s", argv[3]);
        }
-       return (1);
 }
 
 /*
  * Print working directory.
  */
 /*VARARGS*/
 }
 
 /*
  * Print working directory.
  */
 /*VARARGS*/
-pwd()
+void
+pwd(argc, argv)
+       int argc;
+       char *argv[];
 {
        int oldverbose = verbose;
 
 {
        int oldverbose = verbose;
 
@@ -1239,6 +1278,7 @@ pwd()
 /*
  * Make a directory.
  */
 /*
  * Make a directory.
  */
+void
 makedir(argc, argv)
        int argc;
        char *argv[];
 makedir(argc, argv)
        int argc;
        char *argv[];
@@ -1259,6 +1299,7 @@ makedir(argc, argv)
 /*
  * Remove a directory.
  */
 /*
  * Remove a directory.
  */
+void
 removedir(argc, argv)
        int argc;
        char *argv[];
 removedir(argc, argv)
        int argc;
        char *argv[];
@@ -1279,6 +1320,7 @@ removedir(argc, argv)
 /*
  * Send a line, verbatim, to the remote machine.
  */
 /*
  * Send a line, verbatim, to the remote machine.
  */
+void
 quote(argc, argv)
        int argc;
        char *argv[];
 quote(argc, argv)
        int argc;
        char *argv[];
@@ -1297,6 +1339,7 @@ quote(argc, argv)
  * is sent verbatim to the remote machine, except that the
  * word "SITE" is added at the front.
  */
  * is sent verbatim to the remote machine, except that the
  * word "SITE" is added at the front.
  */
+void
 site(argc, argv)
        int argc;
        char *argv[];
 site(argc, argv)
        int argc;
        char *argv[];
@@ -1314,12 +1357,13 @@ site(argc, argv)
  * Turn argv[1..argc) into a space-separated string, then prepend initial text.
  * Send the result as a one-line command and get response.
  */
  * Turn argv[1..argc) into a space-separated string, then prepend initial text.
  * Send the result as a one-line command and get response.
  */
+void
 quote1(initial, argc, argv)
        char *initial;
        int argc;
        char **argv;
 {
 quote1(initial, argc, argv)
        char *initial;
        int argc;
        char **argv;
 {
-       register int i, len;
+       int i, len;
        char buf[BUFSIZ];               /* must be >= sizeof(line) */
 
        (void) strcpy(buf, initial);
        char buf[BUFSIZ];               /* must be >= sizeof(line) */
 
        (void) strcpy(buf, initial);
@@ -1332,10 +1376,12 @@ quote1(initial, argc, argv)
                }
        }
        if (command(buf) == PRELIM) {
                }
        }
        if (command(buf) == PRELIM) {
-               while (getreply(0) == PRELIM);
+               while (getreply(0) == PRELIM)
+                       continue;
        }
 }
 
        }
 }
 
+void
 do_chmod(argc, argv)
        int argc;
        char *argv[];
 do_chmod(argc, argv)
        int argc;
        char *argv[];
@@ -1352,6 +1398,7 @@ usage:
        (void) command("SITE CHMOD %s %s", argv[1], argv[2]);
 }
 
        (void) command("SITE CHMOD %s %s", argv[1], argv[2]);
 }
 
+void
 do_umask(argc, argv)
        int argc;
        char *argv[];
 do_umask(argc, argv)
        int argc;
        char *argv[];
@@ -1363,6 +1410,7 @@ do_umask(argc, argv)
        verbose = oldverbose;
 }
 
        verbose = oldverbose;
 }
 
+void
 idle(argc, argv)
        int argc;
        char *argv[];
 idle(argc, argv)
        int argc;
        char *argv[];
@@ -1377,6 +1425,7 @@ idle(argc, argv)
 /*
  * Ask the other side for help.
  */
 /*
  * Ask the other side for help.
  */
+void
 rmthelp(argc, argv)
        int argc;
        char *argv[];
 rmthelp(argc, argv)
        int argc;
        char *argv[];
@@ -1392,14 +1441,17 @@ rmthelp(argc, argv)
  * Terminate session and exit.
  */
 /*VARARGS*/
  * Terminate session and exit.
  */
 /*VARARGS*/
-quit()
+void
+quit(argc, argv)
+       int argc;
+       char *argv[];
 {
 
        if (connected)
 {
 
        if (connected)
-               disconnect();
+               disconnect(0, 0);
        pswitch(1);
        if (connected) {
        pswitch(1);
        if (connected) {
-               disconnect();
+               disconnect(0, 0);
        }
        exit(0);
 }
        }
        exit(0);
 }
@@ -1407,10 +1459,11 @@ quit()
 /*
  * Terminate session, but don't exit.
  */
 /*
  * Terminate session, but don't exit.
  */
-disconnect()
+void
+disconnect(argc, argv)
+       int argc;
+       char *argv[];
 {
 {
-       extern FILE *cout;
-       extern int data;
 
        if (!connected)
                return;
 
        if (!connected)
                return;
@@ -1426,6 +1479,7 @@ disconnect()
        }
 }
 
        }
 }
 
+int
 confirm(cmd, file)
        char *cmd, *file;
 {
 confirm(cmd, file)
        char *cmd, *file;
 {
@@ -1440,12 +1494,12 @@ confirm(cmd, file)
        return (*line != 'n' && *line != 'N');
 }
 
        return (*line != 'n' && *line != 'N');
 }
 
+void
 fatal(msg)
        char *msg;
 {
 
 fatal(msg)
        char *msg;
 {
 
-       fprintf(stderr, "ftp: %s\n", msg);
-       exit(1);
+       errx(1, "%s", msg);
 }
 
 /*
 }
 
 /*
@@ -1454,6 +1508,7 @@ fatal(msg)
  * Can't control multiple values being expanded
  * from the expression, we return only the first.
  */
  * Can't control multiple values being expanded
  * from the expression, we return only the first.
  */
+int
 globulize(cpp)
        char **cpp;
 {
 globulize(cpp)
        char **cpp;
 {
@@ -1473,14 +1528,15 @@ globulize(cpp)
        if (globbed) {
                *cpp = *globbed++;
                /* don't waste too much memory */
        if (globbed) {
                *cpp = *globbed++;
                /* don't waste too much memory */
-               if (*globbed) {
-                       blkfree(*globbed);
+               if (globbed) {
+                       blkfree(globbed);
                        free((char *)*globbed);
                }
        }
        return (1);
 }
 
                        free((char *)*globbed);
                }
        }
        return (1);
 }
 
+void
 account(argc,argv)
        int argc;
        char **argv;
 account(argc,argv)
        int argc;
        char **argv;
@@ -1510,7 +1566,6 @@ jmp_buf abortprox;
 void
 proxabort()
 {
 void
 proxabort()
 {
-       extern int proxy;
 
        if (!proxy) {
                pswitch(1);
 
        if (!proxy) {
                pswitch(1);
@@ -1525,16 +1580,13 @@ proxabort()
        longjmp(abortprox,1);
 }
 
        longjmp(abortprox,1);
 }
 
-doproxy(argc,argv)
+void
+doproxy(argc, argv)
        int argc;
        char *argv[];
 {
        int argc;
        char *argv[];
 {
-       extern struct cmd cmdtab[];
-       extern jmp_buf abortprox;
-       register struct cmd *c;
-       struct cmd *getcmd();
+       struct cmd *c;
        sig_t oldintr;
        sig_t oldintr;
-       void proxabort();
 
        if (argc < 2 && !another(&argc, &argv, "command")) {
                printf("usage: %s command\n", argv[0]);
 
        if (argc < 2 && !another(&argc, &argv, "command")) {
                printf("usage: %s command\n", argv[0]);
@@ -1585,20 +1637,29 @@ doproxy(argc,argv)
        (void) signal(SIGINT, oldintr);
 }
 
        (void) signal(SIGINT, oldintr);
 }
 
-setcase()
+void
+setcase(argc, argv)
+       int argc;
+       char *argv[];
 {
 {
+
        mcase = !mcase;
        printf("Case mapping %s.\n", onoff(mcase));
        code = mcase;
 }
 
        mcase = !mcase;
        printf("Case mapping %s.\n", onoff(mcase));
        code = mcase;
 }
 
-setcr()
+void
+setcr(argc, argv)
+       int argc;
+       char *argv[];
 {
 {
+
        crflag = !crflag;
        printf("Carriage Return stripping %s.\n", onoff(crflag));
        code = crflag;
 }
 
        crflag = !crflag;
        printf("Carriage Return stripping %s.\n", onoff(crflag));
        code = crflag;
 }
 
+void
 setntrans(argc,argv)
        int argc;
        char *argv[];
 setntrans(argc,argv)
        int argc;
        char *argv[];
@@ -1627,9 +1688,10 @@ dotrans(name)
 {
        static char new[MAXPATHLEN];
        char *cp1, *cp2 = new;
 {
        static char new[MAXPATHLEN];
        char *cp1, *cp2 = new;
-       register int i, ostop, found;
+       int i, ostop, found;
 
 
-       for (ostop = 0; *(ntout + ostop) && ostop < 16; ostop++);
+       for (ostop = 0; *(ntout + ostop) && ostop < 16; ostop++)
+               continue;
        for (cp1 = name; *cp1; cp1++) {
                found = 0;
                for (i = 0; *(ntin + i) && i < 16; i++) {
        for (cp1 = name; *cp1; cp1++) {
                found = 0;
                for (i = 0; *(ntin + i) && i < 16; i++) {
@@ -1646,9 +1708,10 @@ dotrans(name)
                }
        }
        *cp2 = '\0';
                }
        }
        *cp2 = '\0';
-       return(new);
+       return (new);
 }
 
 }
 
+void
 setnmap(argc, argv)
        int argc;
        char *argv[];
 setnmap(argc, argv)
        int argc;
        char *argv[];
@@ -1668,15 +1731,17 @@ setnmap(argc, argv)
        }
        mapflag = 1;
        code = 1;
        }
        mapflag = 1;
        code = 1;
-       cp = index(altarg, ' ');
+       cp = strchr(altarg, ' ');
        if (proxy) {
        if (proxy) {
-               while(*++cp == ' ');
+               while(*++cp == ' ')
+                       continue;
                altarg = cp;
                altarg = cp;
-               cp = index(altarg, ' ');
+               cp = strchr(altarg, ' ');
        }
        *cp = '\0';
        (void) strncpy(mapin, altarg, MAXPATHLEN - 1);
        }
        *cp = '\0';
        (void) strncpy(mapin, altarg, MAXPATHLEN - 1);
-       while (*++cp == ' ');
+       while (*++cp == ' ')
+               continue;
        (void) strncpy(mapout, cp, MAXPATHLEN - 1);
 }
 
        (void) strncpy(mapout, cp, MAXPATHLEN - 1);
 }
 
@@ -1685,7 +1750,7 @@ domap(name)
        char *name;
 {
        static char new[MAXPATHLEN];
        char *name;
 {
        static char new[MAXPATHLEN];
-       register char *cp1 = name, *cp2 = mapin;
+       char *cp1 = name, *cp2 = mapin;
        char *tp[9], *te[9];
        int i, toks[9], toknum = 0, match = 1;
 
        char *tp[9], *te[9];
        int i, toks[9], toknum = 0, match = 1;
 
@@ -1791,7 +1856,7 @@ LOOP:
                                        }
                                        if (!*cp2) {
                                                printf("nmap: unbalanced brackets\n");
                                        }
                                        if (!*cp2) {
                                                printf("nmap: unbalanced brackets\n");
-                                               return(name);
+                                               return (name);
                                        }
                                        match = 1;
                                        cp2--;
                                        }
                                        match = 1;
                                        cp2--;
@@ -1804,7 +1869,7 @@ LOOP:
                                        }
                                        if (!*cp2) {
                                                printf("nmap: unbalanced brackets\n");
                                        }
                                        if (!*cp2) {
                                                printf("nmap: unbalanced brackets\n");
-                                               return(name);
+                                               return (name);
                                        }
                                        break;
                                }
                                        }
                                        break;
                                }
@@ -1845,28 +1910,40 @@ LOOP:
        }
        *cp1 = '\0';
        if (!*new) {
        }
        *cp1 = '\0';
        if (!*new) {
-               return(name);
+               return (name);
        }
        }
-       return(new);
+       return (new);
 }
 
 }
 
-setsunique()
+void
+setsunique(argc, argv)
+       int argc;
+       char *argv[];
 {
 {
+
        sunique = !sunique;
        printf("Store unique %s.\n", onoff(sunique));
        code = sunique;
 }
 
        sunique = !sunique;
        printf("Store unique %s.\n", onoff(sunique));
        code = sunique;
 }
 
-setrunique()
+void
+setrunique(argc, argv)
+       int argc;
+       char *argv[];
 {
 {
+
        runique = !runique;
        printf("Receive unique %s.\n", onoff(runique));
        code = runique;
 }
 
 /* change directory to perent directory */
        runique = !runique;
        printf("Receive unique %s.\n", onoff(runique));
        code = runique;
 }
 
 /* change directory to perent directory */
-cdup()
+void
+cdup(argc, argv)
+       int argc;
+       char *argv[];
 {
 {
+
        if (command("CDUP") == ERROR && code == 500) {
                if (verbose)
                        printf("CDUP command not recognized, trying XCUP\n");
        if (command("CDUP") == ERROR && code == 500) {
                if (verbose)
                        printf("CDUP command not recognized, trying XCUP\n");
@@ -1876,11 +1953,16 @@ cdup()
 
 
 /* show remote system type */
 
 
 /* show remote system type */
-syst()
+void
+syst(argc, argv)
+       int argc;
+       char *argv[];
 {
 {
+
        (void) command("SYST");
 }
 
        (void) command("SYST");
 }
 
+void
 macdef(argc, argv)
        int argc;
        char *argv[];
 macdef(argc, argv)
        int argc;
        char *argv[];
@@ -1944,6 +2026,7 @@ macdef(argc, argv)
 /*
  * get size of file on remote machine
  */
 /*
  * get size of file on remote machine
  */
+void
 sizecmd(argc, argv)
        int argc;
        char *argv[];
 sizecmd(argc, argv)
        int argc;
        char *argv[];
@@ -1960,6 +2043,7 @@ sizecmd(argc, argv)
 /*
  * get last modification time of file on remote machine
  */
 /*
  * get last modification time of file on remote machine
  */
+void
 modtime(argc, argv)
        int argc;
        char *argv[];
 modtime(argc, argv)
        int argc;
        char *argv[];
@@ -1989,9 +2073,11 @@ modtime(argc, argv)
 /*
  * show status on remote machine
  */
 /*
  * show status on remote machine
  */
+void
 rmtstatus(argc, argv)
        int argc;
        char *argv[];
 {
 rmtstatus(argc, argv)
        int argc;
        char *argv[];
 {
+
        (void) command(argc > 1 ? "STAT %s" : "STAT" , argv[1]);
 }
        (void) command(argc > 1 ? "STAT %s" : "STAT" , argv[1]);
 }
index a7e2d90..581799e 100644 (file)
@@ -6,26 +6,15 @@
  */
 
 #ifndef lint
  */
 
 #ifndef lint
-static char sccsid[] = "@(#)cmdtab.c   8.1 (Berkeley) %G%";
+static char sccsid[] = "@(#)cmdtab.c   8.2 (Berkeley) %G%";
 #endif /* not lint */
 
 #endif /* not lint */
 
+#include <stdio.h>
 #include "ftp_var.h"
 
 /*
  * User FTP -- Command Tables.
  */
 #include "ftp_var.h"
 
 /*
  * User FTP -- Command Tables.
  */
-int    setascii(), setbell(), setbinary(), setdebug(), setform();
-int    setglob(), sethash(), setmode(), setpeer(), setport();
-int    setprompt(), setstruct();
-int    settenex(), settrace(), settype(), setverbose();
-int    disconnect(), syst();
-int    cd(), lcd(), delete(), mdelete(), user();
-int    ls(), mls(), get(), mget(), help(), append(), put(), mput();
-int    quit(), renamefile(), status();
-int    quote(), rmthelp(), shell(), site();
-int    pwd(), makedir(), removedir(), setcr();
-int    account(), doproxy(), reset(), setcase(), setntrans(), setnmap();
-int    setsunique(), setrunique(), cdup(), macdef(), domacro();
 int    sizecmd(), modtime(), rmtstatus();
 
 char   accounthelp[] = "send account command to remote server";
 int    sizecmd(), modtime(), rmtstatus();
 
 char   accounthelp[] = "send account command to remote server";
@@ -125,7 +114,7 @@ struct cmd cmdtab[] = {
        { "mget",       mgethelp,       1,      1,      1,      mget },
        { "mkdir",      mkdirhelp,      0,      1,      1,      makedir },
        { "mls",        mlshelp,        1,      1,      1,      mls },
        { "mget",       mgethelp,       1,      1,      1,      mget },
        { "mkdir",      mkdirhelp,      0,      1,      1,      makedir },
        { "mls",        mlshelp,        1,      1,      1,      mls },
-       { "mode",       modehelp,       0,      1,      1,      setmode },
+       { "mode",       modehelp,       0,      1,      1,      setftmode },
        { "modtime",    modtimehelp,    0,      1,      1,      modtime },
        { "mput",       mputhelp,       1,      1,      1,      mput },
        { "nmap",       nmaphelp,       0,      0,      1,      setnmap },
        { "modtime",    modtimehelp,    0,      1,      1,      modtime },
        { "mput",       mputhelp,       1,      1,      1,      mput },
        { "nmap",       nmaphelp,       0,      0,      1,      setnmap },
index fe7f60c..1e37ee2 100644 (file)
@@ -6,28 +6,24 @@
  */
 
 #ifndef lint
  */
 
 #ifndef lint
-static char sccsid[] = "@(#)domacro.c  8.1 (Berkeley) %G%";
+static char sccsid[] = "@(#)domacro.c  8.2 (Berkeley) %G%";
 #endif /* not lint */
 
 #endif /* not lint */
 
-#include "ftp_var.h"
-
+#include <ctype.h>
 #include <signal.h>
 #include <stdio.h>
 #include <signal.h>
 #include <stdio.h>
-#include <errno.h>
-#include <ctype.h>
-#include <sys/ttychars.h>
+#include <strings.h>
+
+#include "ftp_var.h"
 
 
+void
 domacro(argc, argv)
        int argc;
        char *argv[];
 {
 domacro(argc, argv)
        int argc;
        char *argv[];
 {
-       register int i, j;
-       register char *cp1, *cp2;
-       int count = 2, loopflg = 0;
-       char line2[200];
-       extern char **glob(), *globerr;
-       struct cmd *getcmd(), *c;
-       extern struct cmd cmdtab[];
+       int i, j, count = 2, loopflg = 0;
+       char *cp1, *cp2, line2[200];
+       struct cmd *c;
 
        if (argc < 2 && !another(&argc, &argv, "macro name")) {
                printf("Usage: %s macro_name.\n", argv[0]);
 
        if (argc < 2 && !another(&argc, &argv, "macro name")) {
                printf("Usage: %s macro_name.\n", argv[0]);
index 4b9466b..f440b90 100644 (file)
@@ -6,7 +6,7 @@
  */
 
 #ifndef lint
  */
 
 #ifndef lint
-static char sccsid[] = "@(#)ftp.c      8.1 (Berkeley) %G%";
+static char sccsid[] = "@(#)ftp.c      8.2 (Berkeley) %G%";
 #endif /* not lint */
 
 #include <sys/param.h>
 #endif /* not lint */
 
 #include <sys/param.h>
@@ -19,45 +19,49 @@ static char sccsid[] = "@(#)ftp.c   8.1 (Berkeley) %G%";
 #include <netinet/in.h>
 #include <netinet/in_systm.h>
 #include <netinet/ip.h>
 #include <netinet/in.h>
 #include <netinet/in_systm.h>
 #include <netinet/ip.h>
+#include <arpa/inet.h>
 #include <arpa/ftp.h>
 #include <arpa/telnet.h>
 
 #include <arpa/ftp.h>
 #include <arpa/telnet.h>
 
-#include <signal.h>
-#include <netdb.h>
-#include <fcntl.h>
+#include <ctype.h>
+#include <err.h>
 #include <errno.h>
 #include <errno.h>
+#include <fcntl.h>
+#include <netdb.h>
 #include <pwd.h>
 #include <pwd.h>
-#include <varargs.h>
-#include <unistd.h>
-#include <stdlib.h>
+#include <signal.h>
 #include <stdio.h>
 #include <stdio.h>
+#include <stdlib.h>
 #include <string.h>
 #include <string.h>
+#include <unistd.h>
+#include <varargs.h>
 
 #include "ftp_var.h"
 
 
 #include "ftp_var.h"
 
+extern int h_errno;
+
 struct sockaddr_in hisctladdr;
 struct sockaddr_in data_addr;
 int    data = -1;
 int    abrtflag = 0;
 struct sockaddr_in hisctladdr;
 struct sockaddr_in data_addr;
 int    data = -1;
 int    abrtflag = 0;
+jmp_buf        ptabort;
+int    ptabflg;
 int    ptflag = 0;
 struct sockaddr_in myctladdr;
 int    ptflag = 0;
 struct sockaddr_in myctladdr;
-sig_t  lostpeer();
 
 
-extern int connected, errno;
 
 FILE   *cin, *cout;
 
 FILE   *cin, *cout;
-FILE   *dataconn();
 
 char *
 hookup(host, port)
        char *host;
        int port;
 {
 
 char *
 hookup(host, port)
        char *host;
        int port;
 {
-       register struct hostent *hp = 0;
+       struct hostent *hp = 0;
        int s, len, tos;
        static char hostnamebuf[80];
 
        int s, len, tos;
        static char hostnamebuf[80];
 
-       bzero((char *)&hisctladdr, sizeof (hisctladdr));
+       memset((char *)&hisctladdr, 0, sizeof (hisctladdr));
        hisctladdr.sin_addr.s_addr = inet_addr(host);
        if (hisctladdr.sin_addr.s_addr != -1) {
                hisctladdr.sin_family = AF_INET;
        hisctladdr.sin_addr.s_addr = inet_addr(host);
        if (hisctladdr.sin_addr.s_addr != -1) {
                hisctladdr.sin_family = AF_INET;
@@ -65,20 +69,19 @@ hookup(host, port)
        } else {
                hp = gethostbyname(host);
                if (hp == NULL) {
        } else {
                hp = gethostbyname(host);
                if (hp == NULL) {
-                       fprintf(stderr, "ftp: %s: ", host);
-                       herror((char *)NULL);
+                       warnx("%s: %s", host, hstrerror(h_errno));
                        code = -1;
                        code = -1;
-                       return((char *) 0);
+                       return ((char *) 0);
                }
                hisctladdr.sin_family = hp->h_addrtype;
                }
                hisctladdr.sin_family = hp->h_addrtype;
-               bcopy(hp->h_addr_list[0],
-                   (caddr_t)&hisctladdr.sin_addr, hp->h_length);
+               memmove((caddr_t)&hisctladdr.sin_addr,
+                               hp->h_addr_list[0], hp->h_length);
                (void) strncpy(hostnamebuf, hp->h_name, sizeof(hostnamebuf));
        }
        hostname = hostnamebuf;
        s = socket(hisctladdr.sin_family, SOCK_STREAM, 0);
        if (s < 0) {
                (void) strncpy(hostnamebuf, hp->h_name, sizeof(hostnamebuf));
        }
        hostname = hostnamebuf;
        s = socket(hisctladdr.sin_family, SOCK_STREAM, 0);
        if (s < 0) {
-               perror("ftp: socket");
+               warn("socket");
                code = -1;
                return (0);
        }
                code = -1;
                return (0);
        }
@@ -86,45 +89,44 @@ hookup(host, port)
        while (connect(s, (struct sockaddr *)&hisctladdr, sizeof (hisctladdr)) < 0) {
                if (hp && hp->h_addr_list[1]) {
                        int oerrno = errno;
        while (connect(s, (struct sockaddr *)&hisctladdr, sizeof (hisctladdr)) < 0) {
                if (hp && hp->h_addr_list[1]) {
                        int oerrno = errno;
-                       extern char *inet_ntoa();
+                       char *ia;
 
 
-                       fprintf(stderr, "ftp: connect to address %s: ",
-                               inet_ntoa(hisctladdr.sin_addr));
+                       ia = inet_ntoa(hisctladdr.sin_addr);
                        errno = oerrno;
                        errno = oerrno;
-                       perror((char *) 0);
+                       warn("connect to address %s", ia);
                        hp->h_addr_list++;
                        hp->h_addr_list++;
-                       bcopy(hp->h_addr_list[0],
-                            (caddr_t)&hisctladdr.sin_addr, hp->h_length);
+                       memmove((caddr_t)&hisctladdr.sin_addr,
+                                       hp->h_addr_list[0], hp->h_length);
                        fprintf(stdout, "Trying %s...\n",
                                inet_ntoa(hisctladdr.sin_addr));
                        (void) close(s);
                        s = socket(hisctladdr.sin_family, SOCK_STREAM, 0);
                        if (s < 0) {
                        fprintf(stdout, "Trying %s...\n",
                                inet_ntoa(hisctladdr.sin_addr));
                        (void) close(s);
                        s = socket(hisctladdr.sin_family, SOCK_STREAM, 0);
                        if (s < 0) {
-                               perror("ftp: socket");
+                               warn("socket");
                                code = -1;
                                return (0);
                        }
                        continue;
                }
                                code = -1;
                                return (0);
                        }
                        continue;
                }
-               perror("ftp: connect");
+               warn("connect");
                code = -1;
                goto bad;
        }
        len = sizeof (myctladdr);
        if (getsockname(s, (struct sockaddr *)&myctladdr, &len) < 0) {
                code = -1;
                goto bad;
        }
        len = sizeof (myctladdr);
        if (getsockname(s, (struct sockaddr *)&myctladdr, &len) < 0) {
-               perror("ftp: getsockname");
+               warn("getsockname");
                code = -1;
                goto bad;
        }
 #ifdef IP_TOS
        tos = IPTOS_LOWDELAY;
        if (setsockopt(s, IPPROTO_IP, IP_TOS, (char *)&tos, sizeof(int)) < 0)
                code = -1;
                goto bad;
        }
 #ifdef IP_TOS
        tos = IPTOS_LOWDELAY;
        if (setsockopt(s, IPPROTO_IP, IP_TOS, (char *)&tos, sizeof(int)) < 0)
-               perror("ftp: setsockopt TOS (ignored)");
+               warn("setsockopt TOS (ignored)");
 #endif
        cin = fdopen(s, "r");
        cout = fdopen(s, "w");
        if (cin == NULL || cout == NULL) {
 #endif
        cin = fdopen(s, "r");
        cout = fdopen(s, "w");
        if (cin == NULL || cout == NULL) {
-               fprintf(stderr, "ftp: fdopen failed.\n");
+               warnx("fdopen failed.");
                if (cin)
                        (void) fclose(cin);
                if (cout)
                if (cin)
                        (void) fclose(cin);
                if (cout)
@@ -148,7 +150,7 @@ hookup(host, port)
 
        if (setsockopt(s, SOL_SOCKET, SO_OOBINLINE, (char *)&on, sizeof(on))
                < 0 && debug) {
 
        if (setsockopt(s, SOL_SOCKET, SO_OOBINLINE, (char *)&on, sizeof(on))
                < 0 && debug) {
-                       perror("ftp: setsockopt");
+                       warn("setsockopt");
                }
        }
 #endif /* SO_OOBINLINE */
                }
        }
 #endif /* SO_OOBINLINE */
@@ -159,17 +161,18 @@ bad:
        return ((char *)0);
 }
 
        return ((char *)0);
 }
 
+int
 login(host)
        char *host;
 {
        char tmp[80];
 login(host)
        char *host;
 {
        char tmp[80];
-       char *user, *pass, *acct, *getlogin(), *getpass();
+       char *user, *pass, *acct;
        int n, aflag = 0;
 
        user = pass = acct = 0;
        if (ruserpass(host, &user, &pass, &acct) < 0) {
                code = -1;
        int n, aflag = 0;
 
        user = pass = acct = 0;
        if (ruserpass(host, &user, &pass, &acct) < 0) {
                code = -1;
-               return(0);
+               return (0);
        }
        while (user == NULL) {
                char *myname = getlogin();
        }
        while (user == NULL) {
                char *myname = getlogin();
@@ -203,13 +206,13 @@ login(host)
                n = command("ACCT %s", acct);
        }
        if (n != COMPLETE) {
                n = command("ACCT %s", acct);
        }
        if (n != COMPLETE) {
-               fprintf(stderr, "Login failed.\n");
+               warnx("Login failed.");
                return (0);
        }
        if (!aflag && acct != NULL)
                (void) command("ACCT %s", acct);
        if (proxy)
                return (0);
        }
        if (!aflag && acct != NULL)
                (void) command("ACCT %s", acct);
        if (proxy)
-               return(1);
+               return (1);
        for (n = 0; n < macnum; ++n) {
                if (!strcmp("init", macros[n].mac_name)) {
                        (void) strcpy(line, "$init");
        for (n = 0; n < macnum; ++n) {
                if (!strcmp("init", macros[n].mac_name)) {
                        (void) strcpy(line, "$init");
@@ -224,7 +227,6 @@ login(host)
 void
 cmdabort()
 {
 void
 cmdabort()
 {
-       extern jmp_buf ptabort;
 
        printf("\n");
        (void) fflush(stdout);
 
        printf("\n");
        (void) fflush(stdout);
@@ -234,6 +236,7 @@ cmdabort()
 }
 
 /*VARARGS*/
 }
 
 /*VARARGS*/
+int
 command(va_alist)
 va_dcl
 {
 command(va_alist)
 va_dcl
 {
@@ -241,7 +244,6 @@ va_dcl
        char *fmt;
        int r;
        sig_t oldintr;
        char *fmt;
        int r;
        sig_t oldintr;
-       void cmdabort();
 
        abrtflag = 0;
        if (debug) {
 
        abrtflag = 0;
        if (debug) {
@@ -257,7 +259,7 @@ va_dcl
                (void) fflush(stdout);
        }
        if (cout == NULL) {
                (void) fflush(stdout);
        }
        if (cout == NULL) {
-               perror ("No control connection for command");
+               warn("No control connection for command");
                code = -1;
                return (0);
        }
                code = -1;
                return (0);
        }
@@ -273,24 +275,21 @@ va_dcl
        if (abrtflag && oldintr != SIG_IGN)
                (*oldintr)(SIGINT);
        (void) signal(SIGINT, oldintr);
        if (abrtflag && oldintr != SIG_IGN)
                (*oldintr)(SIGINT);
        (void) signal(SIGINT, oldintr);
-       return(r);
+       return (r);
 }
 
 char reply_string[BUFSIZ];             /* last line of previous reply */
 
 }
 
 char reply_string[BUFSIZ];             /* last line of previous reply */
 
-#include <ctype.h>
-
+int
 getreply(expecteof)
        int expecteof;
 {
 getreply(expecteof)
        int expecteof;
 {
-       register int c, n;
-       register int dig;
-       register char *cp;
+       int c, n;
+       int dig;
        int originalcode = 0, continuation = 0;
        sig_t oldintr;
        int pflag = 0;
        int originalcode = 0, continuation = 0;
        sig_t oldintr;
        int pflag = 0;
-       char *pt = pasv;
-       void cmdabort();
+       char *cp, *pt = pasv;
 
        oldintr = signal(SIGINT, cmdabort);
        for (;;) {
 
        oldintr = signal(SIGINT, cmdabort);
        for (;;) {
@@ -329,7 +328,7 @@ getreply(expecteof)
                                        (void) fflush(stdout);
                                }
                                code = 421;
                                        (void) fflush(stdout);
                                }
                                code = 421;
-                               return(4);
+                               return (4);
                        }
                        if (c != '\r' && (verbose > 0 ||
                            (verbose > -1 && n == '5' && dig > 4))) {
                        }
                        if (c != '\r' && (verbose > 0 ||
                            (verbose > -1 && n == '5' && dig > 4))) {
@@ -383,6 +382,7 @@ getreply(expecteof)
        }
 }
 
        }
 }
 
+int
 empty(mask, sec)
        struct fd_set *mask;
        int sec;
 empty(mask, sec)
        struct fd_set *mask;
        int sec;
@@ -391,7 +391,7 @@ empty(mask, sec)
 
        t.tv_sec = (long) sec;
        t.tv_usec = 0;
 
        t.tv_sec = (long) sec;
        t.tv_usec = 0;
-       return(select(32, mask, (struct fd_set *) 0, (struct fd_set *) 0, &t));
+       return (select(32, mask, (struct fd_set *) 0, (struct fd_set *) 0, &t));
 }
 
 jmp_buf        sendabort;
 }
 
 jmp_buf        sendabort;
@@ -409,19 +409,19 @@ abortsend()
 
 #define HASHBYTES 1024
 
 
 #define HASHBYTES 1024
 
+void
 sendrequest(cmd, local, remote, printnames)
        char *cmd, *local, *remote;
        int printnames;
 {
        struct stat st;
        struct timeval start, stop;
 sendrequest(cmd, local, remote, printnames)
        char *cmd, *local, *remote;
        int printnames;
 {
        struct stat st;
        struct timeval start, stop;
-       register int c, d;
+       int c, d;
        FILE *fin, *dout = 0, *popen();
        FILE *fin, *dout = 0, *popen();
-       int (*closefunc)(), pclose(), fclose();
+       int (*closefunc) __P((FILE *));
        char buf[BUFSIZ], *bufp;
        long bytes = 0, hashbytes = HASHBYTES;
        char *lmode, buf[BUFSIZ], *bufp;
        char buf[BUFSIZ], *bufp;
        long bytes = 0, hashbytes = HASHBYTES;
        char *lmode, buf[BUFSIZ], *bufp;
-       void abortsend();
 
        if (verbose && printnames) {
                if (local && *local != '-')
 
        if (verbose && printnames) {
                if (local && *local != '-')
@@ -461,7 +461,7 @@ sendrequest(cmd, local, remote, printnames)
                oldintp = signal(SIGPIPE,SIG_IGN);
                fin = popen(local + 1, "r");
                if (fin == NULL) {
                oldintp = signal(SIGPIPE,SIG_IGN);
                fin = popen(local + 1, "r");
                if (fin == NULL) {
-                       perror(local + 1);
+                       warn("%s", local + 1);
                        (void) signal(SIGINT, oldintr);
                        (void) signal(SIGPIPE, oldintp);
                        code = -1;
                        (void) signal(SIGINT, oldintr);
                        (void) signal(SIGPIPE, oldintp);
                        code = -1;
@@ -471,8 +471,7 @@ sendrequest(cmd, local, remote, printnames)
        } else {
                fin = fopen(local, "r");
                if (fin == NULL) {
        } else {
                fin = fopen(local, "r");
                if (fin == NULL) {
-                       fprintf(stderr, "local: %s: %s\n", local,
-                               strerror(errno));
+                       warn("local: %s", local);
                        (void) signal(SIGINT, oldintr);
                        code = -1;
                        return;
                        (void) signal(SIGINT, oldintr);
                        code = -1;
                        return;
@@ -550,13 +549,12 @@ sendrequest(cmd, local, remote, printnames)
                        (void) fflush(stdout);
                }
                if (c < 0)
                        (void) fflush(stdout);
                }
                if (c < 0)
-                       fprintf(stderr, "local: %s: %s\n", local,
-                               strerror(errno));
+                       warn("local: %s", local);
                if (d <= 0) {
                        if (d == 0)
                                fprintf(stderr, "netout: write returned 0?\n");
                        else if (errno != EPIPE) 
                if (d <= 0) {
                        if (d == 0)
                                fprintf(stderr, "netout: write returned 0?\n");
                        else if (errno != EPIPE) 
-                               perror("netout");
+                               warn("netout");
                        bytes = -1;
                }
                break;
                        bytes = -1;
                }
                break;
@@ -577,7 +575,7 @@ sendrequest(cmd, local, remote, printnames)
                        (void) putc(c, dout);
                        bytes++;
        /*              if (c == '\r') {                                */
                        (void) putc(c, dout);
                        bytes++;
        /*              if (c == '\r') {                                */
-       /*              (void)  putc('\0', dout);  /* this violates rfc */
+       /*              (void)  putc('\0', dout);  // this violates rfc */
        /*                      bytes++;                                */
        /*              }                                               */      
                }
        /*                      bytes++;                                */
        /*              }                                               */      
                }
@@ -588,11 +586,10 @@ sendrequest(cmd, local, remote, printnames)
                        (void) fflush(stdout);
                }
                if (ferror(fin))
                        (void) fflush(stdout);
                }
                if (ferror(fin))
-                       fprintf(stderr, "local: %s: %s\n", local,
-                               strerror(errno));
+                       warn("local: %s", local);
                if (ferror(dout)) {
                        if (errno != EPIPE)
                if (ferror(dout)) {
                        if (errno != EPIPE)
-                               perror("netout");
+                               warn("netout");
                        bytes = -1;
                }
                break;
                        bytes = -1;
                }
                break;
@@ -644,19 +641,18 @@ abortrecv()
        longjmp(recvabort, 1);
 }
 
        longjmp(recvabort, 1);
 }
 
+void
 recvrequest(cmd, local, remote, lmode, printnames)
        char *cmd, *local, *remote, *lmode;
 recvrequest(cmd, local, remote, lmode, printnames)
        char *cmd, *local, *remote, *lmode;
+       int printnames;
 {
 {
-       FILE *fout, *din = 0, *popen();
        char *bufp, *gunique(), msg;
        static char *buf;
        static int bufsize;
        static char *buf;
        long bytes = 0, hashbytes = HASHBYTES;
        char *bufp, *gunique(), msg;
        static char *buf;
        static int bufsize;
        static char *buf;
        long bytes = 0, hashbytes = HASHBYTES;
-       register int c, d;
        struct timeval start, stop;
        struct stat st;
        struct timeval start, stop;
        struct stat st;
-       void abortrecv();
 
        is_retr = strcmp(cmd, "RETR") == 0;
        if (is_retr && verbose && printnames) {
 
        is_retr = strcmp(cmd, "RETR") == 0;
        if (is_retr && verbose && printnames) {
@@ -689,11 +685,10 @@ recvrequest(cmd, local, remote, lmode, printnames)
        oldintr = signal(SIGINT, abortrecv);
        if (strcmp(local, "-") && *local != '|') {
                if (access(local, 2) < 0) {
        oldintr = signal(SIGINT, abortrecv);
        if (strcmp(local, "-") && *local != '|') {
                if (access(local, 2) < 0) {
-                       char *dir = rindex(local, '/');
+                       char *dir = strrchr(local, '/');
 
                        if (errno != ENOENT && errno != EACCES) {
 
                        if (errno != ENOENT && errno != EACCES) {
-                               fprintf(stderr, "local: %s: %s\n", local,
-                                       strerror(errno));
+                               warn("local: %s", local);
                                (void) signal(SIGINT, oldintr);
                                code = -1;
                                return;
                                (void) signal(SIGINT, oldintr);
                                code = -1;
                                return;
@@ -704,16 +699,14 @@ recvrequest(cmd, local, remote, lmode, printnames)
                        if (dir != NULL)
                                *dir = '/';
                        if (d < 0) {
                        if (dir != NULL)
                                *dir = '/';
                        if (d < 0) {
-                               fprintf(stderr, "local: %s: %s\n", local,
-                                       strerror(errno));
+                               warn("local: %s", local);
                                (void) signal(SIGINT, oldintr);
                                code = -1;
                                return;
                        }
                        if (!runique && errno == EACCES &&
                            chmod(local, 0600) < 0) {
                                (void) signal(SIGINT, oldintr);
                                code = -1;
                                return;
                        }
                        if (!runique && errno == EACCES &&
                            chmod(local, 0600) < 0) {
-                               fprintf(stderr, "local: %s: %s\n", local,
-                                       strerror(errno));
+                               warn("local: %s", local);
                                (void) signal(SIGINT, oldintr);
                                (void) signal(SIGINT, oldintr);
                                code = -1;
                                (void) signal(SIGINT, oldintr);
                                (void) signal(SIGINT, oldintr);
                                code = -1;
@@ -767,15 +760,14 @@ recvrequest(cmd, local, remote, lmode, printnames)
                oldintp = signal(SIGPIPE, SIG_IGN);
                fout = popen(local + 1, "w");
                if (fout == NULL) {
                oldintp = signal(SIGPIPE, SIG_IGN);
                fout = popen(local + 1, "w");
                if (fout == NULL) {
-                       perror(local+1);
+                       warn("%s", local+1);
                        goto abort;
                }
                closefunc = pclose;
        } else {
                fout = fopen(local, lmode);
                if (fout == NULL) {
                        goto abort;
                }
                closefunc = pclose;
        } else {
                fout = fopen(local, lmode);
                if (fout == NULL) {
-                       fprintf(stderr, "local: %s: %s\n", local,
-                               strerror(errno));
+                       warn("local: %s", local);
                        goto abort;
                }
                closefunc = fclose;
                        goto abort;
                }
                closefunc = fclose;
@@ -787,7 +779,7 @@ recvrequest(cmd, local, remote, lmode, printnames)
                        (void) free(buf);
                buf = malloc((unsigned)st.st_blksize);
                if (buf == NULL) {
                        (void) free(buf);
                buf = malloc((unsigned)st.st_blksize);
                if (buf == NULL) {
-                       perror("malloc");
+                       warn("malloc");
                        bufsize = 0;
                        bufsize = 0;
                        goto abort;
                        bufsize = 0;
                        bufsize = 0;
                        goto abort;
@@ -820,7 +812,7 @@ recvrequest(cmd, local, remote, lmode, printnames)
                }
                if (c < 0) {
                        if (errno != EPIPE)
                }
                if (c < 0) {
                        if (errno != EPIPE)
-                               perror("netin");
+                               warn("netin");
                        bytes = -1;
                }
                if (d < c) {
                        bytes = -1;
                }
                if (d < c) {
@@ -874,12 +866,11 @@ break2:
                }
                if (ferror(din)) {
                        if (errno != EPIPE)
                }
                if (ferror(din)) {
                        if (errno != EPIPE)
-                               perror("netin");
+                               warn("netin");
                        bytes = -1;
                }
                if (ferror(fout))
                        bytes = -1;
                }
                if (ferror(fout))
-                       fprintf(stderr, "local: %s: %s\n", local,
-                               strerror(errno));
+                       warn("local: %s", local);
                break;
        }
        if (closefunc != NULL)
                break;
        }
        if (closefunc != NULL)
@@ -926,9 +917,10 @@ abort:
  * Need to start a listen on the data channel before we send the command,
  * otherwise the server's connect may fail.
  */
  * Need to start a listen on the data channel before we send the command,
  * otherwise the server's connect may fail.
  */
+int
 initconn()
 {
 initconn()
 {
-       register char *p, *a;
+       char *p, *a;
        int result, len, tmpno = 0;
        int on = 1;
 
        int result, len, tmpno = 0;
        int on = 1;
 
@@ -940,30 +932,30 @@ noport:
                (void) close(data);
        data = socket(AF_INET, SOCK_STREAM, 0);
        if (data < 0) {
                (void) close(data);
        data = socket(AF_INET, SOCK_STREAM, 0);
        if (data < 0) {
-               perror("ftp: socket");
+               warn("socket");
                if (tmpno)
                        sendport = 1;
                return (1);
        }
        if (!sendport)
                if (setsockopt(data, SOL_SOCKET, SO_REUSEADDR, (char *)&on, sizeof (on)) < 0) {
                if (tmpno)
                        sendport = 1;
                return (1);
        }
        if (!sendport)
                if (setsockopt(data, SOL_SOCKET, SO_REUSEADDR, (char *)&on, sizeof (on)) < 0) {
-                       perror("ftp: setsockopt (reuse address)");
+                       warn("setsockopt (reuse address)");
                        goto bad;
                }
        if (bind(data, (struct sockaddr *)&data_addr, sizeof (data_addr)) < 0) {
                        goto bad;
                }
        if (bind(data, (struct sockaddr *)&data_addr, sizeof (data_addr)) < 0) {
-               perror("ftp: bind");
+               warn("bind");
                goto bad;
        }
        if (options & SO_DEBUG &&
            setsockopt(data, SOL_SOCKET, SO_DEBUG, (char *)&on, sizeof (on)) < 0)
                goto bad;
        }
        if (options & SO_DEBUG &&
            setsockopt(data, SOL_SOCKET, SO_DEBUG, (char *)&on, sizeof (on)) < 0)
-               perror("ftp: setsockopt (ignored)");
+               warn("setsockopt (ignored)");
        len = sizeof (data_addr);
        if (getsockname(data, (struct sockaddr *)&data_addr, &len) < 0) {
        len = sizeof (data_addr);
        if (getsockname(data, (struct sockaddr *)&data_addr, &len) < 0) {
-               perror("ftp: getsockname");
+               warn("getsockname");
                goto bad;
        }
        if (listen(data, 1) < 0)
                goto bad;
        }
        if (listen(data, 1) < 0)
-               perror("ftp: listen");
+               warn("listen");
        if (sendport) {
                a = (char *)&data_addr.sin_addr;
                p = (char *)&data_addr.sin_port;
        if (sendport) {
                a = (char *)&data_addr.sin_addr;
                p = (char *)&data_addr.sin_port;
@@ -984,7 +976,7 @@ noport:
 #ifdef IP_TOS
        on = IPTOS_THROUGHPUT;
        if (setsockopt(data, IPPROTO_IP, IP_TOS, (char *)&on, sizeof(int)) < 0)
 #ifdef IP_TOS
        on = IPTOS_THROUGHPUT;
        if (setsockopt(data, IPPROTO_IP, IP_TOS, (char *)&on, sizeof(int)) < 0)
-               perror("ftp: setsockopt TOS (ignored)");
+               warn("setsockopt TOS (ignored)");
 #endif
        return (0);
 bad:
 #endif
        return (0);
 bad:
@@ -1003,7 +995,7 @@ dataconn(lmode)
 
        s = accept(data, (struct sockaddr *) &from, &fromlen);
        if (s < 0) {
 
        s = accept(data, (struct sockaddr *) &from, &fromlen);
        if (s < 0) {
-               perror("ftp: accept");
+               warn("accept");
                (void) close(data), data = -1;
                return (NULL);
        }
                (void) close(data), data = -1;
                return (NULL);
        }
@@ -1012,11 +1004,12 @@ dataconn(lmode)
 #ifdef IP_TOS
        tos = IPTOS_THROUGHPUT;
        if (setsockopt(s, IPPROTO_IP, IP_TOS, (char *)&tos, sizeof(int)) < 0)
 #ifdef IP_TOS
        tos = IPTOS_THROUGHPUT;
        if (setsockopt(s, IPPROTO_IP, IP_TOS, (char *)&tos, sizeof(int)) < 0)
-               perror("ftp: setsockopt TOS (ignored)");
+               warn("setsockopt TOS (ignored)");
 #endif
        return (fdopen(data, lmode));
 }
 
 #endif
        return (fdopen(data, lmode));
 }
 
+void
 ptransfer(direction, bytes, t0, t1)
        char *direction;
        long bytes;
 ptransfer(direction, bytes, t0, t1)
        char *direction;
        long bytes;
@@ -1035,7 +1028,9 @@ ptransfer(direction, bytes, t0, t1)
        }
 }
 
        }
 }
 
-/*tvadd(tsum, t0)
+/*
+void
+tvadd(tsum, t0)
        struct timeval *tsum, *t0;
 {
 
        struct timeval *tsum, *t0;
 {
 
@@ -1043,8 +1038,10 @@ ptransfer(direction, bytes, t0, t1)
        tsum->tv_usec += t0->tv_usec;
        if (tsum->tv_usec > 1000000)
                tsum->tv_sec++, tsum->tv_usec -= 1000000;
        tsum->tv_usec += t0->tv_usec;
        if (tsum->tv_usec > 1000000)
                tsum->tv_sec++, tsum->tv_usec -= 1000000;
-} */
+}
+*/
 
 
+void
 tvsub(tdiff, t1, t0)
        struct timeval *tdiff, *t1, *t0;
 {
 tvsub(tdiff, t1, t0)
        struct timeval *tdiff, *t1, *t0;
 {
@@ -1058,15 +1055,14 @@ tvsub(tdiff, t1, t0)
 void
 psabort()
 {
 void
 psabort()
 {
-       extern int abrtflag;
 
        abrtflag++;
 }
 
 
        abrtflag++;
 }
 
+void
 pswitch(flag)
        int flag;
 {
 pswitch(flag)
        int flag;
 {
-       extern int proxy, abrtflag;
        sig_t oldintr;
        static struct comvars {
                int connect;
        sig_t oldintr;
        static struct comvars {
                int connect;
@@ -1156,12 +1152,10 @@ pswitch(flag)
        }
 }
 
        }
 }
 
-jmp_buf ptabort;
-int ptabflg;
-
 void
 abortpt()
 {
 void
 abortpt()
 {
+
        printf("\n");
        (void) fflush(stdout);
        ptabflg++;
        printf("\n");
        (void) fflush(stdout);
        ptabflg++;
@@ -1170,15 +1164,14 @@ abortpt()
        longjmp(ptabort, 1);
 }
 
        longjmp(ptabort, 1);
 }
 
+void
 proxtrans(cmd, local, remote)
        char *cmd, *local, *remote;
 {
        sig_t oldintr;
        int secndflag = 0, prox_type, nfnd;
 proxtrans(cmd, local, remote)
        char *cmd, *local, *remote;
 {
        sig_t oldintr;
        int secndflag = 0, prox_type, nfnd;
-       extern jmp_buf ptabort;
        char *cmd2;
        struct fd_set mask;
        char *cmd2;
        struct fd_set mask;
-       void abortpt();
 
        if (strcmp(cmd, "RETR"))
                cmd2 = "RETR";
 
        if (strcmp(cmd, "RETR"))
                cmd2 = "RETR";
@@ -1273,7 +1266,7 @@ abort:
                FD_SET(fileno(cin), &mask);
                if ((nfnd = empty(&mask, 10)) <= 0) {
                        if (nfnd < 0) {
                FD_SET(fileno(cin), &mask);
                if ((nfnd = empty(&mask, 10)) <= 0) {
                        if (nfnd < 0) {
-                               perror("abort");
+                               warn("abort");
                        }
                        if (ptabflg)
                                code = -1;
                        }
                        if (ptabflg)
                                code = -1;
@@ -1290,7 +1283,10 @@ abort:
        (void) signal(SIGINT, oldintr);
 }
 
        (void) signal(SIGINT, oldintr);
 }
 
-reset()
+void
+reset(argc, argv)
+       int argc;
+       char *argv[];
 {
        struct fd_set mask;
        int nfnd = 1;
 {
        struct fd_set mask;
        int nfnd = 1;
@@ -1299,7 +1295,7 @@ reset()
        while (nfnd > 0) {
                FD_SET(fileno(cin), &mask);
                if ((nfnd = empty(&mask,0)) < 0) {
        while (nfnd > 0) {
                FD_SET(fileno(cin), &mask);
                if ((nfnd = empty(&mask,0)) < 0) {
-                       perror("reset");
+                       warn("reset");
                        code = -1;
                        lostpeer();
                }
                        code = -1;
                        lostpeer();
                }
@@ -1314,7 +1310,7 @@ gunique(local)
        char *local;
 {
        static char new[MAXPATHLEN];
        char *local;
 {
        static char new[MAXPATHLEN];
-       char *cp = rindex(local, '/');
+       char *cp = strrchr(local, '/');
        int d, count=0;
        char ext = '1';
 
        int d, count=0;
        char ext = '1';
 
@@ -1324,8 +1320,8 @@ gunique(local)
        if (cp)
                *cp = '/';
        if (d < 0) {
        if (cp)
                *cp = '/';
        if (d < 0) {
-               fprintf(stderr, "local: %s: %s\n", local, strerror(errno));
-               return((char *) 0);
+               warn("local: %s", local);
+               return ((char *) 0);
        }
        (void) strcpy(new, local);
        cp = new + strlen(new);
        }
        (void) strcpy(new, local);
        cp = new + strlen(new);
@@ -1333,7 +1329,7 @@ gunique(local)
        while (!d) {
                if (++count == 100) {
                        printf("runique: can't find unique file name.\n");
        while (!d) {
                if (++count == 100) {
                        printf("runique: can't find unique file name.\n");
-                       return((char *) 0);
+                       return ((char *) 0);
                }
                *cp++ = ext;
                *cp = '\0';
                }
                *cp++ = ext;
                *cp = '\0';
@@ -1352,11 +1348,12 @@ gunique(local)
                        cp--;
                }
        }
                        cp--;
                }
        }
-       return(new);
+       return (new);
 }
 
 }
 
+void
 abort_remote(din)
 abort_remote(din)
-FILE *din;
+       FILE *din;
 {
        char buf[BUFSIZ];
        int nfnd;
 {
        char buf[BUFSIZ];
        int nfnd;
@@ -1368,7 +1365,7 @@ FILE *din;
         */
        sprintf(buf, "%c%c%c", IAC, IP, IAC);
        if (send(fileno(cout), buf, 3, MSG_OOB) != 3)
         */
        sprintf(buf, "%c%c%c", IAC, IP, IAC);
        if (send(fileno(cout), buf, 3, MSG_OOB) != 3)
-               perror("abort");
+               warn("abort");
        fprintf(cout,"%cABOR\r\n", DM);
        (void) fflush(cout);
        FD_ZERO(&mask);
        fprintf(cout,"%cABOR\r\n", DM);
        (void) fflush(cout);
        FD_ZERO(&mask);
@@ -1378,7 +1375,7 @@ FILE *din;
        }
        if ((nfnd = empty(&mask, 10)) <= 0) {
                if (nfnd < 0) {
        }
        if ((nfnd = empty(&mask, 10)) <= 0) {
                if (nfnd < 0) {
-                       perror("abort");
+                       warn("abort");
                }
                if (ptabflg)
                        code = -1;
                }
                if (ptabflg)
                        code = -1;
index 95fdcc9..d55d7e0 100644 (file)
@@ -4,13 +4,18 @@
  *
  * %sccs.include.redist.c%
  *
  *
  * %sccs.include.redist.c%
  *
- *     @(#)ftp_var.h   8.1 (Berkeley) %G%
+ *     @(#)ftp_var.h   8.2 (Berkeley) %G%
  */
 
 /*
  * FTP global variables.
  */
 
  */
 
 /*
  * FTP global variables.
  */
 
+#include <sys/param.h>
+#include <setjmp.h>
+
+#include "extern.h"
+
 /*
  * Options and other state info.
  */
 /*
  * Options and other state info.
  */
@@ -38,7 +43,6 @@ char  pasv[64];               /* passive port for proxy data connection */
 char   *altarg;                /* argv[1] with no shell-like preprocessing  */
 char   ntin[17];               /* input translation table */
 char   ntout[17];              /* output translation table */
 char   *altarg;                /* argv[1] with no shell-like preprocessing  */
 char   ntin[17];               /* input translation table */
 char   ntout[17];              /* output translation table */
-#include <sys/param.h>
 char   mapin[MAXPATHLEN];      /* input map template */
 char   mapout[MAXPATHLEN];     /* output map template */
 char   typename[32];           /* name of file transfer type */
 char   mapin[MAXPATHLEN];      /* input map template */
 char   mapout[MAXPATHLEN];     /* output map template */
 char   typename[32];           /* name of file transfer type */
@@ -59,7 +63,6 @@ int   unix_proxy;             /* proxy is unix, can use binary for ascii */
 
 struct servent *sp;            /* service spec for tcp/ftp */
 
 
 struct servent *sp;            /* service spec for tcp/ftp */
 
-#include <setjmp.h>
 jmp_buf        toplevel;               /* non-local goto stuff for cmd scanner */
 
 char   line[200];              /* input line buffer */
 jmp_buf        toplevel;               /* non-local goto stuff for cmd scanner */
 
 char   line[200];              /* input line buffer */
@@ -82,7 +85,7 @@ struct cmd {
        char    c_bell;         /* give bell when command completes */
        char    c_conn;         /* must be connected to use command */
        char    c_proxy;        /* proxy server may execute */
        char    c_bell;         /* give bell when command completes */
        char    c_conn;         /* must be connected to use command */
        char    c_proxy;        /* proxy server may execute */
-       int     (*c_handler)(); /* function to call */
+       void    (*c_handler) __P((int, char **)); /* function to call */
 };
 
 struct macel {
 };
 
 struct macel {
@@ -94,14 +97,3 @@ struct macel {
 int macnum;                    /* number of defined macros */
 struct macel macros[16];
 char macbuf[4096];
 int macnum;                    /* number of defined macros */
 struct macel macros[16];
 char macbuf[4096];
-
-extern char *tail();
-extern char *index();
-extern char *rindex();
-extern char *remglob();
-extern int errno;
-extern char *mktemp();
-extern char *strncpy();
-extern char *strncat();
-extern char *strcat();
-extern char *strcpy();
index 34cdfe5..13f4f21 100644 (file)
@@ -12,84 +12,81 @@ static char copyright[] =
 #endif /* not lint */
 
 #ifndef lint
 #endif /* not lint */
 
 #ifndef lint
-static char sccsid[] = "@(#)main.c     8.1 (Berkeley) %G%";
+static char sccsid[] = "@(#)main.c     8.2 (Berkeley) %G%";
 #endif /* not lint */
 
 /*
  * FTP User Program -- Command Interface.
  */
 #endif /* not lint */
 
 /*
  * FTP User Program -- Command Interface.
  */
-#include "ftp_var.h"
-#include <sys/socket.h>
-#include <sys/ioctl.h>
+/*#include <sys/ioctl.h>*/
 #include <sys/types.h>
 #include <sys/types.h>
+#include <sys/socket.h>
 
 #include <arpa/ftp.h>
 
 
 #include <arpa/ftp.h>
 
-#include <signal.h>
-#include <stdio.h>
-#include <errno.h>
 #include <ctype.h>
 #include <ctype.h>
+#include <err.h>
 #include <netdb.h>
 #include <pwd.h>
 #include <netdb.h>
 #include <pwd.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
 
 
-uid_t  getuid();
-void   intr(), lostpeer();
-extern char *home;
-char   *getlogin();
+#include "ftp_var.h"
 
 
+int
 main(argc, argv)
 main(argc, argv)
+       int argc;
        char *argv[];
 {
        char *argv[];
 {
-       register char *cp;
-       int top;
+       int ch, top;
        struct passwd *pw = NULL;
        struct passwd *pw = NULL;
-       char homedir[MAXPATHLEN];
+       char *cp, homedir[MAXPATHLEN];
 
        sp = getservbyname("ftp", "tcp");
 
        sp = getservbyname("ftp", "tcp");
-       if (sp == 0) {
-               fprintf(stderr, "ftp: ftp/tcp: unknown service\n");
-               exit(1);
-       }
+       if (sp == 0)
+               errx(1, "ftp/tcp: unknown service");
        doglob = 1;
        interactive = 1;
        autologin = 1;
        doglob = 1;
        interactive = 1;
        autologin = 1;
-       argc--, argv++;
-       while (argc > 0 && **argv == '-') {
-               for (cp = *argv + 1; *cp; cp++)
-                       switch (*cp) {
-
-                       case 'd':
-                               options |= SO_DEBUG;
-                               debug++;
-                               break;
+
+       while ((ch = getopt(argc, argv, "dgintv")) != EOF) {
+               switch (*cp) {
+               case 'd':
+                       options |= SO_DEBUG;
+                       debug++;
+                       break;
                        
                        
-                       case 'v':
-                               verbose++;
-                               break;
+               case 'g':
+                       doglob = 0;
+                       break;
 
 
-                       case 't':
-                               trace++;
-                               break;
+               case 'i':
+                       interactive = 0;
+                       break;
 
 
-                       case 'i':
-                               interactive = 0;
-                               break;
+               case 'n':
+                       autologin = 0;
+                       break;
 
 
-                       case 'n':
-                               autologin = 0;
-                               break;
+               case 't':
+                       trace++;
+                       break;
 
 
-                       case 'g':
-                               doglob = 0;
-                               break;
+               case 'v':
+                       verbose++;
+                       break;
 
 
-                       default:
-                               fprintf(stdout,
-                                 "ftp: %c: unknown option\n", *cp);
-                               exit(1);
-                       }
-               argc--, argv++;
+               default:
+                       (void)fprintf(stderr,
+                               "usage: ftp [-dgintv] [host [port]]\n");
+                       exit(1);
+               }
        }
        }
+       argc -= optind;
+       argv += optind;
+
        fromatty = isatty(fileno(stdin));
        if (fromatty)
                verbose++;
        fromatty = isatty(fileno(stdin));
        if (fromatty)
                verbose++;
@@ -111,11 +108,18 @@ main(argc, argv)
                (void) strcpy(home, pw->pw_dir);
        }
        if (argc > 0) {
                (void) strcpy(home, pw->pw_dir);
        }
        if (argc > 0) {
+               char *xargv[3];
+               extern char *__progname;
+
                if (setjmp(toplevel))
                        exit(0);
                (void) signal(SIGINT, intr);
                (void) signal(SIGPIPE, lostpeer);
                if (setjmp(toplevel))
                        exit(0);
                (void) signal(SIGINT, intr);
                (void) signal(SIGPIPE, lostpeer);
-               setpeer(argc + 1, argv - 1);
+               xargv[0] = __progname;
+               xargv[1] = argv[0];
+               xargv[2] = argv[1];
+               xargv[3] = argv[2];
+               setpeer(argc+1, xargv);
        }
        top = setjmp(toplevel) == 0;
        if (top) {
        }
        top = setjmp(toplevel) == 0;
        if (top) {
@@ -138,8 +142,6 @@ intr()
 void
 lostpeer()
 {
 void
 lostpeer()
 {
-       extern FILE *cout;
-       extern int data;
 
        if (connected) {
                if (cout != NULL) {
 
        if (connected) {
                if (cout != NULL) {
@@ -167,14 +169,15 @@ lostpeer()
        pswitch(0);
 }
 
        pswitch(0);
 }
 
-/*char *
+/*
+char *
 tail(filename)
        char *filename;
 {
 tail(filename)
        char *filename;
 {
-       register char *s;
+       char *s;
        
        while (*filename) {
        
        while (*filename) {
-               s = rindex(filename, '/');
+               s = strrchr(filename, '/');
                if (s == NULL)
                        break;
                if (s[1])
                if (s == NULL)
                        break;
                if (s[1])
@@ -184,16 +187,16 @@ tail(filename)
        return (filename);
 }
 */
        return (filename);
 }
 */
+
 /*
  * Command parser.
  */
 /*
  * Command parser.
  */
+void
 cmdscanner(top)
        int top;
 {
 cmdscanner(top)
        int top;
 {
-       register struct cmd *c;
-       register int l;
-       struct cmd *getcmd();
-       extern int help();
+       struct cmd *c;
+       int l;
 
        if (!top)
                (void) putchar('\n');
 
        if (!top)
                (void) putchar('\n');
@@ -203,7 +206,7 @@ cmdscanner(top)
                        (void) fflush(stdout);
                }
                if (fgets(line, sizeof line, stdin) == NULL)
                        (void) fflush(stdout);
                }
                if (fgets(line, sizeof line, stdin) == NULL)
-                       quit();
+                       quit(0, 0);
                l = strlen(line);
                if (l == 0)
                        break;
                l = strlen(line);
                if (l == 0)
                        break;
@@ -246,12 +249,11 @@ cmdscanner(top)
 
 struct cmd *
 getcmd(name)
 
 struct cmd *
 getcmd(name)
-       register char *name;
+       char *name;
 {
 {
-       extern struct cmd cmdtab[];
-       register char *p, *q;
-       register struct cmd *c, *found;
-       register int nmatches, longest;
+       char *p, *q;
+       struct cmd *c, *found;
+       int nmatches, longest;
 
        longest = 0;
        nmatches = 0;
 
        longest = 0;
        nmatches = 0;
@@ -280,10 +282,10 @@ getcmd(name)
 
 int slrflag;
 
 
 int slrflag;
 
+void
 makeargv()
 {
        char **argp;
 makeargv()
 {
        char **argp;
-       char *slurpstring();
 
        margc = 0;
        argp = margv;
 
        margc = 0;
        argp = margv;
@@ -303,8 +305,8 @@ char *
 slurpstring()
 {
        int got_one = 0;
 slurpstring()
 {
        int got_one = 0;
-       register char *sb = stringbase;
-       register char *ap = argbase;
+       char *sb = stringbase;
+       char *ap = argbase;
        char *tmp = argbase;            /* will return this if token found */
 
        if (*sb == '!' || *sb == '$') { /* recognize ! as a token for shell */
        char *tmp = argbase;            /* will return this if token found */
 
        if (*sb == '!' || *sb == '$') { /* recognize ! as a token for shell */
@@ -401,7 +403,7 @@ OUT:
        argbase = ap;                   /* update storage pointer */
        stringbase = sb;                /* update scan pointer */
        if (got_one) {
        argbase = ap;                   /* update storage pointer */
        stringbase = sb;                /* update scan pointer */
        if (got_one) {
-               return(tmp);
+               return (tmp);
        }
        switch (slrflag) {
                case 0:
        }
        switch (slrflag) {
                case 0:
@@ -414,26 +416,25 @@ OUT:
                default:
                        break;
        }
                default:
                        break;
        }
-       return((char *)0);
+       return ((char *)0);
 }
 
 }
 
-#define HELPINDENT (sizeof ("directory"))
+#define HELPINDENT ((int) sizeof ("directory"))
 
 /*
  * Help command.
  * Call each command handler with argc == 0 and argv[0] == name.
  */
 
 /*
  * Help command.
  * Call each command handler with argc == 0 and argv[0] == name.
  */
+void
 help(argc, argv)
        int argc;
        char *argv[];
 {
 help(argc, argv)
        int argc;
        char *argv[];
 {
-       extern struct cmd cmdtab[];
-       register struct cmd *c;
+       struct cmd *c;
 
        if (argc == 1) {
 
        if (argc == 1) {
-               register int i, j, w, k;
+               int i, j, w, k;
                int columns, width = 0, lines;
                int columns, width = 0, lines;
-               extern int NCMDS;
 
                printf("Commands may be abbreviated.  Commands are:\n\n");
                for (c = cmdtab; c < &cmdtab[NCMDS]; c++) {
 
                printf("Commands may be abbreviated.  Commands are:\n\n");
                for (c = cmdtab; c < &cmdtab[NCMDS]; c++) {
@@ -472,7 +473,7 @@ help(argc, argv)
                return;
        }
        while (--argc > 0) {
                return;
        }
        while (--argc > 0) {
-               register char *arg;
+               char *arg;
                arg = *++argv;
                c = getcmd(arg);
                if (c == (struct cmd *)-1)
                arg = *++argv;
                c = getcmd(arg);
                if (c == (struct cmd *)-1)
index 897a6bf..d908745 100644 (file)
@@ -6,20 +6,23 @@
  */
 
 #ifndef lint
  */
 
 #ifndef lint
-static char sccsid[] = "@(#)ruserpass.c        8.1 (Berkeley) %G%";
+static char sccsid[] = "@(#)ruserpass.c        8.2 (Berkeley) %G%";
 #endif /* not lint */
 
 #include <sys/types.h>
 #endif /* not lint */
 
 #include <sys/types.h>
-#include <stdio.h>
-#include <utmp.h>
-#include <ctype.h>
 #include <sys/stat.h>
 #include <sys/stat.h>
+
+#include <ctype.h>
+#include <err.h>
 #include <errno.h>
 #include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
 #include "ftp_var.h"
 
 #include "ftp_var.h"
 
-char   *renvlook(), *malloc(), *index(), *getenv(), *getpass(), *getlogin();
-char   *strcpy();
-struct utmp *getutmp();
+static int token __P((void));
 static FILE *cfile;
 
 #define        DEFAULT 1
 static FILE *cfile;
 
 #define        DEFAULT 1
@@ -36,16 +39,17 @@ static struct toktab {
        char *tokstr;
        int tval;
 } toktab[]= {
        char *tokstr;
        int tval;
 } toktab[]= {
-       "default",      DEFAULT,
-       "login",        LOGIN,
-       "password",     PASSWD,
-       "passwd",       PASSWD,
-       "account",      ACCOUNT,
-       "machine",      MACH,
-       "macdef",       MACDEF,
-       0,              0
+       { "default",    DEFAULT },
+       { "login",      LOGIN },
+       { "password",   PASSWD },
+       { "passwd",     PASSWD },
+       { "account",    ACCOUNT },
+       { "machine",    MACH },
+       { "macdef",     MACDEF },
+       { NULL,         0 }
 };
 
 };
 
+int
 ruserpass(host, aname, apass, aacct)
        char *host, **aname, **apass, **aacct;
 {
 ruserpass(host, aname, apass, aacct)
        char *host, **aname, **apass, **aacct;
 {
@@ -53,7 +57,6 @@ ruserpass(host, aname, apass, aacct)
        char myname[MAXHOSTNAMELEN], *mydomain;
        int t, i, c, usedefault = 0;
        struct stat stb;
        char myname[MAXHOSTNAMELEN], *mydomain;
        int t, i, c, usedefault = 0;
        struct stat stb;
-       static int token();
 
        hdir = getenv("HOME");
        if (hdir == NULL)
 
        hdir = getenv("HOME");
        if (hdir == NULL)
@@ -62,12 +65,12 @@ ruserpass(host, aname, apass, aacct)
        cfile = fopen(buf, "r");
        if (cfile == NULL) {
                if (errno != ENOENT)
        cfile = fopen(buf, "r");
        if (cfile == NULL) {
                if (errno != ENOENT)
-                       perror(buf);
-               return(0);
+                       warn("%s", buf);
+               return (0);
        }
        if (gethostname(myname, sizeof(myname)) < 0)
                myname[0] = '\0';
        }
        if (gethostname(myname, sizeof(myname)) < 0)
                myname[0] = '\0';
-       if ((mydomain = index(myname, '.')) == NULL)
+       if ((mydomain = strchr(myname, '.')) == NULL)
                mydomain = "";
 next:
        while ((t = token())) switch(t) {
                mydomain = "";
 next:
        while ((t = token())) switch(t) {
@@ -89,12 +92,12 @@ next:
                                goto match;
                        if (strcasecmp(hostname, tokval) == 0)
                                goto match;
                                goto match;
                        if (strcasecmp(hostname, tokval) == 0)
                                goto match;
-                       if ((tmp = index(hostname, '.')) != NULL &&
+                       if ((tmp = strchr(hostname, '.')) != NULL &&
                            strcasecmp(tmp, mydomain) == 0 &&
                            strncasecmp(hostname, tokval, tmp-hostname) == 0 &&
                            tokval[tmp - hostname] == '\0')
                                goto match;
                            strcasecmp(tmp, mydomain) == 0 &&
                            strncasecmp(hostname, tokval, tmp-hostname) == 0 &&
                            tokval[tmp - hostname] == '\0')
                                goto match;
-                       if ((tmp = index(host, '.')) != NULL &&
+                       if ((tmp = strchr(host, '.')) != NULL &&
                            strcasecmp(tmp, mydomain) == 0 &&
                            strncasecmp(host, tokval, tmp - host) == 0 &&
                            tokval[tmp - host] == '\0')
                            strcasecmp(tmp, mydomain) == 0 &&
                            strncasecmp(host, tokval, tmp - host) == 0 &&
                            tokval[tmp - host] == '\0')
@@ -118,9 +121,8 @@ next:
                        if (strcmp(*aname, "anonymous") &&
                            fstat(fileno(cfile), &stb) >= 0 &&
                            (stb.st_mode & 077) != 0) {
                        if (strcmp(*aname, "anonymous") &&
                            fstat(fileno(cfile), &stb) >= 0 &&
                            (stb.st_mode & 077) != 0) {
-       fprintf(stderr, "Error: .netrc file is readable by others.\n");
-       fprintf(stderr, 
-               "Remove password or make file unreadable by others.\n\n");
+       warnx("Error: .netrc file is readable by others.");
+       warnx("Remove password or make file unreadable by others.");
                                goto bad;
                        }
                        if (token() && *apass == 0) {
                                goto bad;
                        }
                        if (token() && *apass == 0) {
@@ -131,9 +133,8 @@ next:
                case ACCOUNT:
                        if (fstat(fileno(cfile), &stb) >= 0
                            && (stb.st_mode & 077) != 0) {
                case ACCOUNT:
                        if (fstat(fileno(cfile), &stb) >= 0
                            && (stb.st_mode & 077) != 0) {
-       fprintf(stderr, "Error: .netrc file is readable by others.\n");
-       fprintf(stderr, 
-               "Remove account or make file unreadable by others.\n\n");
+       warnx("Error: .netrc file is readable by others.");
+       warnx("Remove account or make file unreadable by others.");
                                goto bad;
                        }
                        if (token() && *aacct == 0) {
                                goto bad;
                        }
                        if (token() && *aacct == 0) {
@@ -144,7 +145,7 @@ next:
                case MACDEF:
                        if (proxy) {
                                (void) fclose(cfile);
                case MACDEF:
                        if (proxy) {
                                (void) fclose(cfile);
-                               return(0);
+                               return (0);
                        }
                        while ((c=getc(cfile)) != EOF && c == ' ' || c == '\t');
                        if (c == EOF || c == '\n') {
                        }
                        while ((c=getc(cfile)) != EOF && c == ' ' || c == '\t');
                        if (c == EOF || c == '\n') {
@@ -201,20 +202,20 @@ next:
                        }
                        break;
                default:
                        }
                        break;
                default:
-       fprintf(stderr, "Unknown .netrc keyword %s\n", tokval);
+                       warnx("Unknown .netrc keyword %s", tokval);
                        break;
                }
                goto done;
        }
 done:
        (void) fclose(cfile);
                        break;
                }
                goto done;
        }
 done:
        (void) fclose(cfile);
-       return(0);
+       return (0);
 bad:
        (void) fclose(cfile);
 bad:
        (void) fclose(cfile);
-       return(-1);
+       return (-1);
 }
 
 }
 
-static
+static int
 token()
 {
        char *cp;
 token()
 {
        char *cp;