implement system.h abstraction for utime()

Thu, 01 May 2025 12:40:00 +0200

author
Mike Becker <universe@uap-core.de>
date
Thu, 01 May 2025 12:40:00 +0200
changeset 865
0b61e0164b44
parent 864
029e839a4079
child 866
4a9227846234

implement system.h abstraction for utime()

fixes #297

dav/sync.c file | annotate | diff | comparison | revisions
dav/system.c file | annotate | diff | comparison | revisions
dav/system.h file | annotate | diff | comparison | revisions
--- a/dav/sync.c	Thu May 01 01:16:53 2025 +0200
+++ b/dav/sync.c	Thu May 01 12:40:00 2025 +0200
@@ -44,7 +44,6 @@
 #ifndef _WIN32
 // unix includes
 #include <unistd.h>
-#include <utime.h>
 #include <pthread.h>
 #else
 //windows includes
@@ -3634,21 +3633,16 @@
         FileInfo f;
         finfo_get_values(fileinfo, &f);
         if((dir->metadata & FINFO_MTIME) == FINFO_MTIME && f.date_set) {
-            // TODO: implement on windows
-#ifndef _WIN32
             // set mtime
-            struct utimbuf t;
+            sys_utimbuf t;
             t.actime = f.last_modified;
             t.modtime = f.last_modified;
-            if(utime(path, &t)) {
+            if(sys_utime(path, &t)) {
                 log_error("utime failed for file: %s : %s\n", path, strerror(errno));
                 ret = 1;
             } else {
                 local->last_modified = f.last_modified;
             }
-#else
-            local->last_modified = 0;
-#endif
         }
         if((dir->metadata & FINFO_MODE) == FINFO_MODE && f.mode_set) {
             // set mode
--- a/dav/system.c	Thu May 01 01:16:53 2025 +0200
+++ b/dav/system.c	Thu May 01 12:40:00 2025 +0200
@@ -528,4 +528,15 @@
     return ret;
 }
 
+int sys_utime(const char* filename, sys_utimbuf* times) {
+    wchar_t* wpath = path2winpath(filename, FALSE, NULL);
+    if (!wpath) {
+        fprintf(stderr, "sys_utime: cannot convert path\n");
+        return -1;
+    }
+    int ret = _wutime(wpath, times);
+    free(wpath);
+    return ret;
+}
+
 #endif
--- a/dav/system.h	Thu May 01 01:16:53 2025 +0200
+++ b/dav/system.h	Thu May 01 12:40:00 2025 +0200
@@ -36,11 +36,23 @@
 
 
 #ifdef _WIN32
+
 #include <Windows.h>
 #define mode_t unsigned int
-#else
+
+#include <sys/utime.h>
+typedef struct _utimbuf sys_utimbuf;
+int sys_utime(const char* filename, sys_utimbuf* times);
+
+#else // not _WIN32
+
 #include <dirent.h>
-#endif
+
+#include <utime.h>
+typedef struct utimbuf sys_utimbuf;
+#define sys_utime utime
+
+#endif // _WIN32
 
 #ifdef __cplusplus
 extern "C" {

mercurial