diff options
| author | Tomas Bzatek <tbzatek@users.sourceforge.net> | 2008-12-21 22:41:32 +0100 |
|---|---|---|
| committer | Tomas Bzatek <tbzatek@users.sourceforge.net> | 2008-12-21 22:41:32 +0100 |
| commit | 82435e6c67c4837b4d5256d8f606b495fffbcc4b (patch) | |
| tree | d2807c53912a5260232d39c1066ea7cad7293590 /gallery-utils.c | |
| parent | 6cf15dffd2cc4904f5100da825668056cb62d3f8 (diff) | |
| download | cataract-82435e6c67c4837b4d5256d8f606b495fffbcc4b.tar.xz | |
Preserve timestamps on copy
Diffstat (limited to 'gallery-utils.c')
| -rw-r--r-- | gallery-utils.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/gallery-utils.c b/gallery-utils.c index 9253f51..a11273b 100644 --- a/gallery-utils.c +++ b/gallery-utils.c @@ -19,6 +19,10 @@ #include <string.h> #include <stdlib.h> #include <errno.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <unistd.h> +#include <utime.h> #include "gallery-utils.h" @@ -115,6 +119,8 @@ copy_file (const char *src, const char *dst) FILE *fout; void *buffer; int size_r; + struct stat st; + struct utimbuf ut; fin = fopen (src, "r"); if (fin == NULL) { @@ -142,6 +148,19 @@ copy_file (const char *src, const char *dst) fclose (fin); free (buffer); + /* copy timestamps */ + memset (&st, 0, sizeof (st)); + if (stat (src, &st) == -1) { + fprintf (stderr, "copy_file: cannot stat source file \"%s\": %s\n", src, strerror (errno)); + return TRUE; + } + + memset (&ut, 0, sizeof (ut)); + ut.actime = st.st_atime; + ut.modtime = st.st_mtime; + if (utime (dst, &ut) == -1) + fprintf (stderr, "copy_file: cannot set timestamps on target file \"%s\": %s\n", dst, strerror (errno)); + return TRUE; } |
