summaryrefslogtreecommitdiffstats
path: root/lib/libftp/FtpCopy.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libftp/FtpCopy.c')
-rw-r--r--lib/libftp/FtpCopy.c50
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..db582d2
--- /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;
+}
+
+
+
+
+
+
+
OpenPOWER on IntegriCloud