[comp.sources.bugs] ftp patches for piping binary files

david@wubios.wustl.edu (David J. Camp) (09/20/89)

Here are some hacks to the ftp source from
wuarchive:/archive/unix/4.3BSD-tahoe/ucb/ftp/*

They solve a problem with piping binary files to the ftp put command.  I
do not know why it was failing, and I know my changes will slow it down,
but it works now and it did not before (when piping binary files).  I
tried not to make it too sun-specific, but I know little of other
machines.  Often I just used '#ifdef sun' around a change, when it may
be appropriate for other machines also.  -David-

Bitnet:   david@wubios.wustl                ^      Mr. David J. Camp
Internet: david%wubios@wucs1.wustl.edu    < * >    Box 8067, Biostatistics
uucp:     uunet!wucs1!wubios!david          v      660 South Euclid
Washington University (314) 36-23635               Saint Louis, MO 63110

diff -bc oftpsrc/Makefile ftpsrc/Makefile
*** oftpsrc/Makefile	Tue Sep 19 23:00:10 1989
--- ftpsrc/Makefile	Tue Sep 19 22:49:59 1989
***************
*** 18,26 ****
  #
  CFLAGS=	-O
  LIBC=	/lib/libc.a
! SRCS=	cmds.c cmdtab.c ftp.c getpass.c glob.c main.c pclose.c ruserpass.c              domacro.c
! OBJS=	cmds.o cmdtab.o ftp.o getpass.o glob.o main.o pclose.o ruserpass.o              domacro.o
  
  all: ftp
  
  ftp:	${OBJS} ${LIBC}
--- 18,30 ----
  #
  CFLAGS= -O
  LIBC=	/lib/libc.a
! SRCS=	cmds.c cmdtab.c ftp.c getpass.c glob.c main.c ruserpass.c              domacro.c mypopen.c
! OBJS=	cmds.o cmdtab.o ftp.o getpass.o glob.o main.o ruserpass.o              domacro.o mypopen.o
! MACHINE=sun3
  
+ .c.o:
+ 	${CC} -o $*.o ${CFLAGS} $*.c -c
+ 
  all: ftp
  
  ftp:	${OBJS} ${LIBC}
***************
*** 47,84 ****
  # DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY.
  
  cmds.o: cmds.c ftp_var.h /usr/include/sys/param.h /usr/include/sys/types.h
! cmds.o: /usr/include/signal.h /usr/include/machine/trap.h
! cmds.o: /usr/include/machine/machparam.h /usr/include/machine/endian.h
  cmds.o: /usr/include/setjmp.h /usr/include/sys/socket.h /usr/include/arpa/ftp.h
  cmds.o: /usr/include/signal.h /usr/include/stdio.h /usr/include/errno.h
  cmds.o: /usr/include/netdb.h /usr/include/ctype.h /usr/include/sys/wait.h
  cmdtab.o: cmdtab.c ftp_var.h /usr/include/sys/param.h /usr/include/sys/types.h
! cmdtab.o: /usr/include/signal.h /usr/include/machine/trap.h
! cmdtab.o: /usr/include/machine/machparam.h /usr/include/machine/endian.h
  cmdtab.o: /usr/include/setjmp.h
  ftp.o: ftp.c ftp_var.h /usr/include/sys/param.h /usr/include/sys/types.h
! ftp.o: /usr/include/signal.h /usr/include/machine/trap.h
! ftp.o: /usr/include/machine/machparam.h /usr/include/machine/endian.h
  ftp.o: /usr/include/setjmp.h /usr/include/sys/stat.h /usr/include/sys/ioctl.h
  ftp.o: /usr/include/sys/ttychars.h /usr/include/sys/ttydev.h
  ftp.o: /usr/include/sys/socket.h /usr/include/sys/time.h /usr/include/time.h
  ftp.o: /usr/include/sys/param.h /usr/include/sys/types.h /usr/include/signal.h
! ftp.o: /usr/include/machine/machparam.h /usr/include/netinet/in.h
  ftp.o: /usr/include/arpa/ftp.h /usr/include/arpa/telnet.h /usr/include/stdio.h
  ftp.o: /usr/include/signal.h /usr/include/errno.h /usr/include/netdb.h
  ftp.o: /usr/include/fcntl.h /usr/include/pwd.h /usr/include/ctype.h
  getpass.o: getpass.c /usr/include/stdio.h /usr/include/signal.h
! getpass.o: /usr/include/machine/trap.h /usr/include/sgtty.h
  getpass.o: /usr/include/sys/ioctl.h /usr/include/sys/ttychars.h
  getpass.o: /usr/include/sys/ttydev.h
  glob.o: glob.c /usr/include/sys/param.h /usr/include/sys/types.h
! glob.o: /usr/include/signal.h /usr/include/machine/trap.h
! glob.o: /usr/include/machine/machparam.h /usr/include/machine/endian.h
  glob.o: /usr/include/sys/stat.h /usr/include/sys/dir.h /usr/include/stdio.h
  glob.o: /usr/include/errno.h /usr/include/pwd.h
  main.o: main.c ftp_var.h /usr/include/sys/param.h /usr/include/sys/types.h
! main.o: /usr/include/signal.h /usr/include/machine/trap.h
! main.o: /usr/include/machine/machparam.h /usr/include/machine/endian.h
  main.o: /usr/include/setjmp.h /usr/include/sys/socket.h
  main.o: /usr/include/sys/ioctl.h /usr/include/sys/ttychars.h
  main.o: /usr/include/sys/ttydev.h /usr/include/sys/types.h
--- 51,88 ----
  # DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY.
  
  cmds.o: cmds.c ftp_var.h /usr/include/sys/param.h /usr/include/sys/types.h
! cmds.o: /usr/include/signal.h /usr/include/${MACHINE}/trap.h
! cmds.o: /usr/include/${MACHINE}/param.h 
  cmds.o: /usr/include/setjmp.h /usr/include/sys/socket.h /usr/include/arpa/ftp.h
  cmds.o: /usr/include/signal.h /usr/include/stdio.h /usr/include/errno.h
  cmds.o: /usr/include/netdb.h /usr/include/ctype.h /usr/include/sys/wait.h
  cmdtab.o: cmdtab.c ftp_var.h /usr/include/sys/param.h /usr/include/sys/types.h
! cmdtab.o: /usr/include/signal.h /usr/include/${MACHINE}/trap.h
! cmdtab.o: /usr/include/${MACHINE}/param.h 
  cmdtab.o: /usr/include/setjmp.h
  ftp.o: ftp.c ftp_var.h /usr/include/sys/param.h /usr/include/sys/types.h
! ftp.o: /usr/include/signal.h /usr/include/${MACHINE}/trap.h
! ftp.o: /usr/include/${MACHINE}/param.h 
  ftp.o: /usr/include/setjmp.h /usr/include/sys/stat.h /usr/include/sys/ioctl.h
  ftp.o: /usr/include/sys/ttychars.h /usr/include/sys/ttydev.h
  ftp.o: /usr/include/sys/socket.h /usr/include/sys/time.h /usr/include/time.h
  ftp.o: /usr/include/sys/param.h /usr/include/sys/types.h /usr/include/signal.h
! ftp.o: /usr/include/${MACHINE}/param.h /usr/include/netinet/in.h
  ftp.o: /usr/include/arpa/ftp.h /usr/include/arpa/telnet.h /usr/include/stdio.h
  ftp.o: /usr/include/signal.h /usr/include/errno.h /usr/include/netdb.h
  ftp.o: /usr/include/fcntl.h /usr/include/pwd.h /usr/include/ctype.h
  getpass.o: getpass.c /usr/include/stdio.h /usr/include/signal.h
! getpass.o: /usr/include/${MACHINE}/trap.h /usr/include/sgtty.h
  getpass.o: /usr/include/sys/ioctl.h /usr/include/sys/ttychars.h
  getpass.o: /usr/include/sys/ttydev.h
  glob.o: glob.c /usr/include/sys/param.h /usr/include/sys/types.h
! glob.o: /usr/include/signal.h /usr/include/${MACHINE}/trap.h
! glob.o: /usr/include/${MACHINE}/param.h 
  glob.o: /usr/include/sys/stat.h /usr/include/sys/dir.h /usr/include/stdio.h
  glob.o: /usr/include/errno.h /usr/include/pwd.h
  main.o: main.c ftp_var.h /usr/include/sys/param.h /usr/include/sys/types.h
! main.o: /usr/include/signal.h /usr/include/${MACHINE}/trap.h
! main.o: /usr/include/${MACHINE}/param.h 
  main.o: /usr/include/setjmp.h /usr/include/sys/socket.h
  main.o: /usr/include/sys/ioctl.h /usr/include/sys/ttychars.h
  main.o: /usr/include/sys/ttydev.h /usr/include/sys/types.h
***************
*** 85,102 ****
  main.o: /usr/include/arpa/ftp.h /usr/include/signal.h /usr/include/stdio.h
  main.o: /usr/include/errno.h /usr/include/ctype.h /usr/include/netdb.h
  main.o: /usr/include/pwd.h
- pclose.o: pclose.c /usr/include/stdio.h /usr/include/signal.h
- pclose.o: /usr/include/machine/trap.h /usr/include/sys/param.h
- pclose.o: /usr/include/sys/types.h /usr/include/signal.h
- pclose.o: /usr/include/machine/machparam.h /usr/include/machine/endian.h
- pclose.o: /usr/include/sys/wait.h
  ruserpass.o: ruserpass.c /usr/include/stdio.h /usr/include/utmp.h
  ruserpass.o: /usr/include/ctype.h /usr/include/sys/types.h
  ruserpass.o: /usr/include/sys/stat.h /usr/include/errno.h
  domacro.o: domacro.c ftp_var.h /usr/include/sys/param.h
  domacro.o: /usr/include/sys/types.h /usr/include/signal.h
! domacro.o: /usr/include/machine/trap.h /usr/include/machine/machparam.h
! domacro.o: /usr/include/machine/endian.h /usr/include/setjmp.h
  domacro.o: /usr/include/signal.h /usr/include/stdio.h /usr/include/errno.h
  domacro.o: /usr/include/ctype.h /usr/include/sys/ttychars.h
  
--- 89,101 ----
  main.o: /usr/include/arpa/ftp.h /usr/include/signal.h /usr/include/stdio.h
  main.o: /usr/include/errno.h /usr/include/ctype.h /usr/include/netdb.h
  main.o: /usr/include/pwd.h
  ruserpass.o: ruserpass.c /usr/include/stdio.h /usr/include/utmp.h
  ruserpass.o: /usr/include/ctype.h /usr/include/sys/types.h
  ruserpass.o: /usr/include/sys/stat.h /usr/include/errno.h
  domacro.o: domacro.c ftp_var.h /usr/include/sys/param.h
  domacro.o: /usr/include/sys/types.h /usr/include/signal.h
! domacro.o: /usr/include/${MACHINE}/trap.h /usr/include/sun3/param.h
! domacro.o:  /usr/include/setjmp.h
  domacro.o: /usr/include/signal.h /usr/include/stdio.h /usr/include/errno.h
  domacro.o: /usr/include/ctype.h /usr/include/sys/ttychars.h
  
diff -bc oftpsrc/domacro.c ftpsrc/domacro.c
*** oftpsrc/domacro.c	Tue Sep 19 23:00:11 1989
--- ftpsrc/domacro.c	Tue Sep 19 22:39:36 1989
***************
*** 26,31 ****
--- 26,35 ----
  #include <errno.h>
  #include <ctype.h>
  #include <sys/ttychars.h>
+ #ifdef sun
+ #undef CTRL
+ #define	CTRL(c)	(c&037)
+ #endif
  
  domacro(argc, argv)
  	int argc;
diff -bc oftpsrc/ftp.c ftpsrc/ftp.c
*** oftpsrc/ftp.c	Tue Sep 19 23:00:11 1989
--- ftpsrc/ftp.c	Tue Sep 19 22:53:26 1989
***************
*** 50,55 ****
--- 50,58 ----
  FILE	*cin, *cout;
  FILE	*dataconn();
  
+ int mypclose ();
+ FILE * mypopen ();
+ 
  char *
  hookup(host, port)
  	char *host;
***************
*** 474,479 ****
--- 477,483 ----
  	case TYPE_I:
  	case TYPE_L:
  		errno = d = 0;
+ /*
  		while ((c = read(fileno (fin), buf, sizeof (buf))) > 0) {
  			if ((d = write(fileno (dout), buf, c)) < 0)
  				break;
***************
*** 483,495 ****
  				(void) fflush(stdout);
  			}
  		}
! 		if (hash && bytes > 0) {
  			(void) putchar('\n');
  			(void) fflush(stdout);
  		}
! 		if (c < 0)
  			perror(local);
! 		if (d < 0)
  			perror("netout");
  		break;
  
--- 487,517 ----
  				(void) fflush(stdout);
  			}
  		}
! 		if (c < 0)
! 			perror(local);
! 		if (d < 0)
! 			perror("netout");
! */
!                 c = fgetc (fin);
!                 while ((! feof (fin)) && (! ferror (fin)) && (! ferror (dout)))
!                     {
!                     fputc (c, dout);
!                     bytes ++;
!                     if (bytes % 1024 == 0 && hash)
!                         {
!                         fputc ('#', stdout);
!                         fflush (stdout);
!                         }
!                     c = fgetc (fin);
!                     }
! 		if (hash && bytes > 0) 
!                     {
                      (void) putchar('\n');
                      (void) fflush(stdout);
                      }
! 		if (ferror (fin))
                      perror(local);
! 		if (ferror (dout))
                      perror("netout");
  		break;
  
Only in ftpsrc: ftpput
diff -bc oftpsrc/getpass.c ftpsrc/getpass.c
*** oftpsrc/getpass.c	Tue Sep 19 23:00:12 1989
--- ftpsrc/getpass.c	Tue Sep 19 21:56:41 1989
***************
*** 42,48 ****
--- 42,50 ----
  	register char *p;
  	register c;
  	static char pbuf[50+1];
+ #ifndef sun
  	int (*signal())();
+ #endif
  	int (*sig)();
  
  	if ((fi = fopen("/dev/tty", "r")) == NULL)
diff -bc oftpsrc/glob.c ftpsrc/glob.c
*** oftpsrc/glob.c	Tue Sep 19 23:00:12 1989
--- ftpsrc/glob.c	Tue Sep 19 22:17:35 1989
***************
*** 38,46 ****
  #define	isdir(d)	((d.st_mode & S_IFMT) == S_IFDIR)
  
  static	char **gargv;		/* Pointer to the (stack) arglist */
! static	short gargc;		/* Number args in gargv */
! static	short gnleft;
! static	short gflag;
  static	int tglob();
  char	**glob();
  char	*globerr;
--- 38,46 ----
  #define	isdir(d)	((d.st_mode & S_IFMT) == S_IFDIR)
  
  static	char **gargv;		/* Pointer to the (stack) arglist */
! static	int gargc;		/* Number args in gargv */
! static	int gnleft;
! static	int gflag;
  static	int tglob();
  char	**glob();
  char	*globerr;
diff -bc oftpsrc/main.c ftpsrc/main.c
*** oftpsrc/main.c	Tue Sep 19 23:00:13 1989
--- ftpsrc/main.c	Tue Sep 19 22:37:29 1989
***************
*** 41,47 ****
  #include <ctype.h>
  #include <netdb.h>
  #include <pwd.h>
! 
  
  uid_t	getuid();
  int	intr();
--- 41,50 ----
  #include <ctype.h>
  #include <netdb.h>
  #include <pwd.h>
! #ifdef sun
! #undef CTRL
! #define	CTRL(c)	(c&037)
! #endif
  
  uid_t	getuid();
  int	intr();
Only in ftpsrc: mypopen.c
Only in ftpsrc: tftpput
-- 
Bitnet:   david@wubios.wustl                ^      Mr. David J. Camp
Internet: david%wubios@wucs1.wustl.edu    < * >    Box 8067, Biostatistics
uucp:     uunet!wucs1!wubios!david          v      660 South Euclid
Washington University (314) 36-23635               Saint Louis, MO 63110