summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gallery-utils.c19
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;
}