diff options
author | Lukas Fleischer <calcurse@cryptocrack.de> | 2011-08-02 21:10:31 +0200 |
---|---|---|
committer | Lukas Fleischer <calcurse@cryptocrack.de> | 2011-10-05 12:25:47 +0200 |
commit | c7b56ca556f4ffd3e6fe941356c6abc4d16967d4 (patch) | |
tree | 46c7ebfedef3fcbbe72e731704af89ab4358a260 /src | |
parent | 9dcb377a641841d66ed8c9c4b0ac960f609ff65a (diff) | |
download | calcurse-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.h | 1 | ||||
-rw-r--r-- | src/io.c | 33 |
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); @@ -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; +} |