Author: gd
Date: 2005-06-21 11:27:17 +0000 (Tue, 21 Jun 2005)
New Revision: 7807

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=7807

Log:
Allow to touch mtime in vfs-recycle with

        recycle:touch_mtime = true

Guenther

Modified:
   branches/SAMBA_3_0/source/modules/vfs_recycle.c
   trunk/source/modules/vfs_recycle.c


Changeset:
Modified: branches/SAMBA_3_0/source/modules/vfs_recycle.c
===================================================================
--- branches/SAMBA_3_0/source/modules/vfs_recycle.c     2005-06-21 11:22:05 UTC 
(rev 7806)
+++ branches/SAMBA_3_0/source/modules/vfs_recycle.c     2005-06-21 11:27:17 UTC 
(rev 7807)
@@ -109,6 +109,17 @@
        return ret;
 }
 
+static BOOL recycle_touch_mtime(vfs_handle_struct *handle)
+{
+       BOOL ret;
+
+       ret = lp_parm_bool(SNUM(handle->conn), "recycle", "touch_mtime", False);
+
+       DEBUG(10, ("recycle: touch_mtime = %s\n", ret?"True":"False"));
+       
+       return ret;
+}
+
 static const char **recycle_exclude(vfs_handle_struct *handle)
 {
        const char **tmp_lp;
@@ -317,9 +328,9 @@
 }
 
 /**
- * Touch access date
+ * Touch access or modify date
  **/
-static void recycle_do_touch(vfs_handle_struct *handle, const char *fname)
+static void recycle_do_touch(vfs_handle_struct *handle, const char *fname, 
BOOL touch_mtime)
 {
        SMB_STRUCT_STAT st;
        struct utimbuf tb;
@@ -331,7 +342,7 @@
        }
        currtime = time(&currtime);
        tb.actime = currtime;
-       tb.modtime = st.st_mtime;
+       tb.modtime = touch_mtime ? currtime : st.st_mtime;
 
        if (SMB_VFS_NEXT_UTIME(handle, handle->conn, fname, &tb) == -1 ) {
                DEBUG(0, ("recycle: touching %s failed, reason = %s\n", fname, 
strerror(errno)));
@@ -490,8 +501,8 @@
        }
 
        /* touch access date of moved file */
-       if (recycle_touch(handle) == True )
-               recycle_do_touch(handle, final_name);
+       if (recycle_touch(handle) == True || recycle_touch_mtime(handle))
+               recycle_do_touch(handle, final_name, 
recycle_touch_mtime(handle));
 
 done:
        SAFE_FREE(path_name);

Modified: trunk/source/modules/vfs_recycle.c
===================================================================
--- trunk/source/modules/vfs_recycle.c  2005-06-21 11:22:05 UTC (rev 7806)
+++ trunk/source/modules/vfs_recycle.c  2005-06-21 11:27:17 UTC (rev 7807)
@@ -109,6 +109,17 @@
        return ret;
 }
 
+static BOOL recycle_touch_mtime(vfs_handle_struct *handle)
+{
+       BOOL ret;
+
+       ret = lp_parm_bool(SNUM(handle->conn), "recycle", "touch_mtime", False);
+
+       DEBUG(10, ("recycle: touch_mtime = %s\n", ret?"True":"False"));
+       
+       return ret;
+}
+
 static const char **recycle_exclude(vfs_handle_struct *handle)
 {
        const char **tmp_lp;
@@ -317,9 +328,9 @@
 }
 
 /**
- * Touch access date
+ * Touch access or modify date
  **/
-static void recycle_do_touch(vfs_handle_struct *handle, const char *fname)
+static void recycle_do_touch(vfs_handle_struct *handle, const char *fname, 
BOOL touch_mtime)
 {
        SMB_STRUCT_STAT st;
        struct utimbuf tb;
@@ -331,7 +342,7 @@
        }
        currtime = time(&currtime);
        tb.actime = currtime;
-       tb.modtime = st.st_mtime;
+       tb.modtime = touch_mtime ? currtime : st.st_mtime;
 
        if (SMB_VFS_NEXT_UTIME(handle, handle->conn, fname, &tb) == -1 ) {
                DEBUG(0, ("recycle: touching %s failed, reason = %s\n", fname, 
strerror(errno)));
@@ -490,8 +501,8 @@
        }
 
        /* touch access date of moved file */
-       if (recycle_touch(handle) == True )
-               recycle_do_touch(handle, final_name);
+       if (recycle_touch(handle) == True || recycle_touch_mtime(handle))
+               recycle_do_touch(handle, final_name, 
recycle_touch_mtime(handle));
 
 done:
        SAFE_FREE(path_name);

Reply via email to