BSD 4_4 release
[unix-history] / usr / src / usr.bin / ftp / ftp.c
index c54f7e3..77f07c8 100644 (file)
@@ -1,24 +1,38 @@
 /*
 /*
- * Copyright (c) 1985, 1989 Regents of the University of California.
- * All rights reserved.
+ * Copyright (c) 1985, 1989, 1993
+ *     The Regents of the University of California.  All rights reserved.
  *
  *
- * Redistribution and use in source and binary forms are permitted provided
- * that: (1) source distributions retain this entire copyright notice and
- * comment, and (2) distributions including binaries display the following
- * acknowledgement:  ``This product includes software developed by the
- * University of California, Berkeley and its contributors'' in the
- * documentation or other materials provided with the distribution and in
- * all advertising materials mentioning features or use of this software.
- * Neither the name of the University nor the names of its contributors may
- * be used to endorse or promote products derived from this software without
- * specific prior written permission.
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *     This product includes software developed by the University of
+ *     California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
  */
 
 #ifndef lint
  */
 
 #ifndef lint
-static char sccsid[] = "@(#)ftp.c      5.36 (Berkeley) 6/29/90";
+static char sccsid[] = "@(#)ftp.c      8.1 (Berkeley) 6/6/93";
 #endif /* not lint */
 
 #include <sys/param.h>
 #endif /* not lint */
 
 #include <sys/param.h>
@@ -34,13 +48,16 @@ static char sccsid[] = "@(#)ftp.c   5.36 (Berkeley) 6/29/90";
 #include <arpa/ftp.h>
 #include <arpa/telnet.h>
 
 #include <arpa/ftp.h>
 #include <arpa/telnet.h>
 
-#include <stdio.h>
 #include <signal.h>
 #include <signal.h>
-#include <errno.h>
 #include <netdb.h>
 #include <fcntl.h>
 #include <netdb.h>
 #include <fcntl.h>
+#include <errno.h>
 #include <pwd.h>
 #include <varargs.h>
 #include <pwd.h>
 #include <varargs.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
 
 #include "ftp_var.h"
 
 
 #include "ftp_var.h"
 
@@ -50,11 +67,9 @@ int  data = -1;
 int    abrtflag = 0;
 int    ptflag = 0;
 struct sockaddr_in myctladdr;
 int    abrtflag = 0;
 int    ptflag = 0;
 struct sockaddr_in myctladdr;
-uid_t  getuid();
 sig_t  lostpeer();
 off_t  restart_point = 0;
 
 sig_t  lostpeer();
 off_t  restart_point = 0;
 
-extern char *strerror();
 extern int connected, errno;
 
 FILE   *cin, *cout;
 extern int connected, errno;
 
 FILE   *cin, *cout;
@@ -283,7 +298,7 @@ va_dcl
        cpend = 1;
        r = getreply(!strcmp(fmt, "QUIT"));
        if (abrtflag && oldintr != SIG_IGN)
        cpend = 1;
        r = getreply(!strcmp(fmt, "QUIT"));
        if (abrtflag && oldintr != SIG_IGN)
-               (*oldintr)();
+               (*oldintr)(SIGINT);
        (void) signal(SIGINT, oldintr);
        return(r);
 }
        (void) signal(SIGINT, oldintr);
        return(r);
 }
@@ -390,7 +405,7 @@ getreply(expecteof)
                if (code == 421 || originalcode == 421)
                        lostpeer();
                if (abrtflag && oldintr != cmdabort && oldintr != SIG_IGN)
                if (code == 421 || originalcode == 421)
                        lostpeer();
                if (abrtflag && oldintr != cmdabort && oldintr != SIG_IGN)
-                       (*oldintr)();
+                       (*oldintr)(SIGINT);
                return (n - '0');
        }
 }
                return (n - '0');
        }
 }
@@ -581,10 +596,8 @@ sendrequest(cmd, local, remote, printnames)
                if (c < 0)
                        fprintf(stderr, "local: %s: %s\n", local,
                                strerror(errno));
                if (c < 0)
                        fprintf(stderr, "local: %s: %s\n", local,
                                strerror(errno));
-               if (d <= 0) {
-                       if (d == 0)
-                               fprintf(stderr, "netout: write returned 0?\n");
-                       else if (errno != EPIPE) 
+               if (d < 0) {
+                       if (errno != EPIPE) 
                                perror("netout");
                        bytes = -1;
                }
                                perror("netout");
                        bytes = -1;
                }
@@ -687,9 +700,7 @@ recvrequest(cmd, local, remote, lmode, printnames)
        register int c, d;
        struct timeval start, stop;
        struct stat st;
        register int c, d;
        struct timeval start, stop;
        struct stat st;
-       off_t lseek();
        void abortrecv();
        void abortrecv();
-       char *malloc();
 
        is_retr = strcmp(cmd, "RETR") == 0;
        if (is_retr && verbose && printnames) {
 
        is_retr = strcmp(cmd, "RETR") == 0;
        if (is_retr && verbose && printnames) {
@@ -832,7 +843,7 @@ recvrequest(cmd, local, remote, lmode, printnames)
        case TYPE_I:
        case TYPE_L:
                if (restart_point &&
        case TYPE_I:
        case TYPE_L:
                if (restart_point &&
-                   lseek(fileno(fout), (long) restart_point, L_SET) < 0) {
+                   lseek(fileno(fout), (off_t)restart_point, L_SET) < 0) {
                        fprintf(stderr, "local: %s: %s\n", local,
                                strerror(errno));
                        if (closefunc != NULL)
                        fprintf(stderr, "local: %s: %s\n", local,
                                strerror(errno));
                        if (closefunc != NULL)
@@ -1211,7 +1222,7 @@ pswitch(flag)
        (void) signal(SIGINT, oldintr);
        if (abrtflag) {
                abrtflag = 0;
        (void) signal(SIGINT, oldintr);
        if (abrtflag) {
                abrtflag = 0;
-               (*oldintr)();
+               (*oldintr)(SIGINT);
        }
 }
 
        }
 }