diff options
Diffstat (limited to 'debian/htdig/htdig-3.2.0b6/htlib/filecopy.cc')
-rw-r--r-- | debian/htdig/htdig-3.2.0b6/htlib/filecopy.cc | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/debian/htdig/htdig-3.2.0b6/htlib/filecopy.cc b/debian/htdig/htdig-3.2.0b6/htlib/filecopy.cc new file mode 100644 index 00000000..4cd23e85 --- /dev/null +++ b/debian/htdig/htdig-3.2.0b6/htlib/filecopy.cc @@ -0,0 +1,126 @@ +// +// filecopy.c +// +// Copies files from one file to another. +// Contains both Unix & Native Win32 Implementations +// +// Part of the ht://Dig package <http://www.htdig.org/> +// Copyright (c) 2003 The ht://Dig Group +// For copyright details, see the file COPYING in your distribution +// or the GNU Library General Public License (LGPL) version 2 or later or later +// <http://www.gnu.org/copyleft/lgpl.html> +// +// Copyright (c) 2002 RightNow Technologies, Inc. +// Donated to The ht://Dig Group under LGPL License + +#include <stdio.h> + +#ifdef _WIN32 + +#define WIN32_LEAN_AND_MEAN +#include <windows.h> + +#else /* UNIX */ + +#include <stdio.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <fcntl.h> +#include <unistd.h> +#include <errno.h> + +#endif /* _WIN32 | UNIX */ + + +#include "filecopy.h" + + + +//---------------------------------------------------------------------- +// int file_copy (char * from, char * to, char flags) +//---------------------------------------------------------------------- +// +// copy file 'from' -> 'to' +// +// set flags to FILECOPY_OVERWRITE_ON to overwrite the 'to' file if +// it exists +// +// set flags to FILECOPY_OVERWRITE_OFF to not overwrite the 'to' file +// if it exists +// +// returns 0/FALSE if unsucessful +// returns 1/TRUE if sucessful +// +// +#ifdef _WIN32 + +int file_copy (char * from, char * to, char flags) +{ + if (flags == FILECOPY_OVERWRITE_ON) + { + //overwrite + if (TRUE != (CopyFile(from , to, FALSE))) + return (FALSE); + } + else if (flags == FILECOPY_OVERWRITE_OFF) + { + //don't overwrite + if (TRUE != (CopyFile(from , to, TRUE))) + return (FALSE); + } + else //bad flag + { + return (FALSE); + } + + return (TRUE); +} + +#else //UNIX + +int file_copy (char * from, char * to, char flags) +{ + size_t nmemb; + //int nmemb; + FILE *ifp, *ofp; + char buf[BUFSIZ]; + + if (flags == FILECOPY_OVERWRITE_OFF) { + if (access(to, F_OK) == 0) { + //OUTLOG((FUNC, TRWRN, "file %s already exists\n", to)); + return(FALSE); + } + else if (errno != ENOENT) { + //OUTLOG((FUNC, TRERR, "access(%s, F_OK) failed\n", to)); + return(FALSE); + } + } + + if ((ifp=fopen(from, "r")) == NULL) { + //OUTLOG((FUNC, TRERR, "%s doesn't exist\n", from)); + return(FALSE); + } + + if ((ofp=fopen(to, "w+")) == NULL) { + //OUTLOG((FUNC, TRERR, "can't create %s\n", to)); + fclose(ifp); + return(FALSE); + } + + while ((nmemb=fread(buf, 1, sizeof(buf), ifp)) > 0) { + if (fwrite(buf, 1, nmemb, ofp) != nmemb) { + //OUTLOG((FUNC, TRERR, "fwrite failed\n")); + fclose(ifp); + fclose(ofp); + return(FALSE); + } + } + + fclose(ifp); + fclose(ofp); + + return (TRUE); +} + +#endif /* _WIN32 | UNIX */ + |