aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorLukas Fleischer <calcurse@cryptocrack.de>2011-08-02 21:10:31 +0200
committerLukas Fleischer <calcurse@cryptocrack.de>2011-10-05 12:25:47 +0200
commitc7b56ca556f4ffd3e6fe941356c6abc4d16967d4 (patch)
tree46c7ebfedef3fcbbe72e731704af89ab4358a260 /src
parent9dcb377a641841d66ed8c9c4b0ac960f609ff65a (diff)
downloadcalcurse-c7b56ca556f4ffd3e6fe941356c6abc4d16967d4.tar.gz
calcurse-c7b56ca556f4ffd3e6fe941356c6abc4d16967d4.zip
Add a copy file routine
Add io_file_cp() which can be used to copy an existing source file to another location. We will need this for our new hash-based note file names. Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
Diffstat (limited to 'src')
-rw-r--r--src/calcurse.h1
-rw-r--r--src/io.c33
2 files changed, 34 insertions, 0 deletions
diff --git a/src/calcurse.h b/src/calcurse.h
index b1b8e75..8b82422 100644
--- a/src/calcurse.h
+++ b/src/calcurse.h
@@ -693,6 +693,7 @@ void io_set_lock (void);
unsigned io_dump_pid (char *);
unsigned io_get_pid (char *);
int io_file_is_empty (char *);
+int io_file_cp (const char *, const char *);
/* keys.c */
void keys_init (void);
diff --git a/src/io.c b/src/io.c
index ddd584b..b461b2b 100644
--- a/src/io.c
+++ b/src/io.c
@@ -3050,3 +3050,36 @@ io_file_is_empty (char *file)
return -1;
}
+
+/*
+ * Copy an existing file to a new location.
+ */
+int
+io_file_cp (const char *src, const char *dst)
+{
+ FILE *fp_src, *fp_dst;
+ char *buffer[BUFSIZ];
+ unsigned int bytes_read;
+
+ if (!(fp_src = fopen (src, "rb")))
+ return 0;
+ if (!(fp_dst = fopen (dst, "wb")))
+ return 0;
+
+ while (!feof (fp_src))
+ {
+ bytes_read = fread (buffer, 1, BUFSIZ, fp_src);
+ if (bytes_read > 0)
+ {
+ if (fwrite (buffer, 1, bytes_read, fp_dst) != bytes_read)
+ return 0;
+ }
+ else
+ return 0;
+ }
+
+ fclose (fp_dst);
+ fclose (fp_src);
+
+ return 1;
+}