From 161c3d8d0baea16241f0c1a5988f55cf8aa4aa34 Mon Sep 17 00:00:00 2001 From: Andi Jahja Date: Wed, 23 Jun 1999 16:32:51 +0000 Subject: [PATCH] __copyfile() added --- harbour/source/rtl/copyfile.c | 56 +++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 harbour/source/rtl/copyfile.c diff --git a/harbour/source/rtl/copyfile.c b/harbour/source/rtl/copyfile.c new file mode 100644 index 0000000000..1f0f29dab8 --- /dev/null +++ b/harbour/source/rtl/copyfile.c @@ -0,0 +1,56 @@ +/* + * $Id$ + */ + +#include +#include +#include +#include +#include + +#define BUFFER_SIZE 8096 + +static long _fsCopy(BYTEP ,BYTEP ) ; + +HARBOUR hb___copyfile() { + if ( ISCHAR(1) && ISCHAR(2) ) { + hb_retnl(_fsCopy((BYTEP)hb_parc(1),(BYTEP)hb_parc(2))); + } + return; +} + +static long _fsCopy(BYTEP source,BYTEP dest) { + FHANDLE dHANDLE,sHANDLE; + char *buffer; + USHORT usCount; + ULONG ulCount = 0L; + sHANDLE = _fsOpen(source, FO_READ); + if ( ! _fsError() ) { + dHANDLE = _fsCreate(dest,FC_NORMAL); + if ( _fsError() ) { + _fsClose(sHANDLE); + return( -2L) ; + } + buffer = hb_xgrab(BUFFER_SIZE); + if (buffer == NULL) { + _fsClose(sHANDLE); + _fsClose(dHANDLE); + return(-3L); + } + usCount = _fsRead(sHANDLE,buffer,BUFFER_SIZE); + while(1) { + ulCount += (ULONG)usCount; + _fsWrite(dHANDLE,buffer, usCount); + usCount = _fsRead(sHANDLE,buffer, BUFFER_SIZE); + if (usCount != BUFFER_SIZE ) { + break; + } + } + ulCount += (ULONG)usCount; + _fsWrite(dHANDLE,buffer,usCount); + hb_xfree(buffer); + _fsClose(sHANDLE); + _fsClose(dHANDLE); + } + return( ulCount ); +}