diff options
author | jkh <jkh@FreeBSD.org> | 1995-04-25 15:05:11 +0000 |
---|---|---|
committer | jkh <jkh@FreeBSD.org> | 1995-04-25 15:05:11 +0000 |
commit | 02ace706173509b7d8549494277ff682b7cefb8a (patch) | |
tree | 437a6d909f192743fe7d26def0fdfae947754209 /lib/libftp/FtpCopy.c | |
download | FreeBSD-src-02ace706173509b7d8549494277ff682b7cefb8a.zip FreeBSD-src-02ace706173509b7d8549494277ff682b7cefb8a.tar.gz |
A programmatic interface to ftp. I need this for several other
components of the system.
The license is poorly worded, though I have an (email only) release
from the author for unlimited FreeBSD use. I will try to get something
more concrete, though the author's remote location makes this difficult.
Submitted by: Oleg Orel <orel@oea.ihep.su>
Diffstat (limited to 'lib/libftp/FtpCopy.c')
-rw-r--r-- | lib/libftp/FtpCopy.c | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/lib/libftp/FtpCopy.c b/lib/libftp/FtpCopy.c new file mode 100644 index 0000000..d09fd36 --- /dev/null +++ b/lib/libftp/FtpCopy.c @@ -0,0 +1,50 @@ +/* + Library for ftpd clients.(libftp) + Copyright by Oleg Orel + All rights reserved. + +This library is desined for free, non-commercial software creation. +It is changeable and can be improved. The author would greatly appreciate +any advises, new components and patches of the existing programs. +Commercial usage is also possible with participation of it's author. + + + +*/ + +#include "FtpLibrary.h" + +STATUS FtpCopy (FTP * ftp1 , FTP * ftp2 ,char *in , char * out) +{ + int size; + char buffer[FTPBUFSIZ]; + + if (!*out) out=in; + + if ( FtpTestFlag(ftp1,FTP_REST) && FtpTestFlag(ftp2,FTP_REST) + && (size=FtpSize(ftp1,in))>0 + && FtpCommand(ftp1,"REST 0",0,0,EOF)==350 && FtpCommand(ftp2,"REST 0",0,0,EOF)==350 ) + ftp1->seek=ftp2->seek=size; + else + ftp1->seek=ftp2->seek=0; + + FtpAssert(ftp1,FtpData(ftp1,"RETR %s",in,"r")); + FtpAssert(ftp2,FtpData(ftp2,"STOR %s",out,"w")); + + while ((size=FtpReadBlock(ftp1,buffer,FTPBUFSIZ))>0) + { + if (FtpWriteBlock(ftp2,buffer,size)!=size) + return EXIT(ftp2,QUIT); + } + + FtpAssert(ftp1,FtpClose(ftp1)); + FtpAssert(ftp2,FtpClose(ftp2)); + return 0; +} + + + + + + + |