diff options
author | Tobias Klauser <tklauser@distanz.ch> | 2008-01-27 11:37:44 +0100 |
---|---|---|
committer | Tobias Klauser <tklauser@xenon.tklauser.home> | 2008-01-27 11:37:44 +0100 |
commit | 7e0f021a9aec35fd8e6725e87e3313b101d26f5e (patch) | |
tree | b1cacc4b24393f517aeb4610e9e1021f954307a8 /reference/C/CONTRIB/SNIP/fcopy.c |
Initial import (2.0.2-6)2.0.2-6
Diffstat (limited to 'reference/C/CONTRIB/SNIP/fcopy.c')
-rwxr-xr-x | reference/C/CONTRIB/SNIP/fcopy.c | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/reference/C/CONTRIB/SNIP/fcopy.c b/reference/C/CONTRIB/SNIP/fcopy.c new file mode 100755 index 0000000..6617d6b --- /dev/null +++ b/reference/C/CONTRIB/SNIP/fcopy.c @@ -0,0 +1,55 @@ +/*
+ * FCOPY.C - copy one file to another. Returns the (positive)
+ * number of bytes copied, or -1 if an error occurred.
+ * by: Bob Jarvis
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#define BUFFER_SIZE 1024
+
+long fcopy(char *dest, char *source)
+{
+ FILE *d, *s;
+ char *buffer;
+ size_t incount;
+ long totcount = 0L;
+
+ s = fopen(source, "rb");
+ if(s == NULL)
+ return -1L;
+
+ d = fopen(dest, "wb");
+ if(d == NULL)
+ {
+ fclose(s);
+ return -1L;
+ }
+
+ buffer = malloc(BUFFER_SIZE);
+ if(buffer == NULL)
+ {
+ fclose(s);
+ fclose(d);
+ return -1L;
+ }
+
+ incount = fread(buffer, sizeof(char), BUFFER_SIZE, s);
+
+ while(!feof(s))
+ {
+ totcount += (long)incount;
+ fwrite(buffer, sizeof(char), incount, d);
+ incount = fread(buffer, sizeof(char), BUFFER_SIZE, s);
+ }
+
+ totcount += (long)incount;
+ fwrite(buffer, sizeof(char), incount, d);
+
+ free(buffer);
+ fclose(s);
+ fclose(d);
+
+ return totcount;
+}
|