/** * Touch access or modify date **/ static void recycle_do_touch(vfs_handle_struct *handle, const char *fname, BOOL touch_mtime) { SMB_STRUCT_STAT st; struct timespec ts[2]; if (SMB_VFS_NEXT_STAT(handle, fname, &st) != 0) { DEBUG(0,("recycle: stat for %s returned %s\n", fname, strerror(errno))); return; } ts[0] = timespec_current(); /* atime */ ts[1] = touch_mtime ? ts[0] : get_mtimespec(&st); /* mtime */ if (SMB_VFS_NEXT_NTIMES(handle, fname, ts) == -1 ) { DEBUG(0, ("recycle: touching %s failed, reason = %s\n", fname, strerror(errno))); } }
/** * Touch access or modify date **/ static void recycle_do_touch(vfs_handle_struct *handle, const struct smb_filename *smb_fname, bool touch_mtime) { struct smb_filename *smb_fname_tmp = NULL; struct smb_file_time ft; NTSTATUS status; int ret, err; ZERO_STRUCT(ft); status = copy_smb_filename(talloc_tos(), smb_fname, &smb_fname_tmp); if (!NT_STATUS_IS_OK(status)) { return; } if (SMB_VFS_STAT(handle->conn, smb_fname_tmp) != 0) { DEBUG(0,("recycle: stat for %s returned %s\n", smb_fname_str_dbg(smb_fname_tmp), strerror(errno))); goto out; } /* atime */ ft.atime = timespec_current(); /* mtime */ ft.mtime = touch_mtime ? ft.atime : smb_fname_tmp->st.st_ex_mtime; become_root(); ret = SMB_VFS_NEXT_NTIMES(handle, smb_fname_tmp, &ft); err = errno; unbecome_root(); if (ret == -1 ) { DEBUG(0, ("recycle: touching %s failed, reason = %s\n", smb_fname_str_dbg(smb_fname_tmp), strerror(err))); } out: TALLOC_FREE(smb_fname_tmp); }
static int skel_ntimes(vfs_handle_struct *handle, const struct smb_filename *smb_fname, struct smb_file_time *ft) { return SMB_VFS_NEXT_NTIMES(handle, smb_fname, ft); }
static int skel_ntimes(vfs_handle_struct *handle, const char *path, const struct timespec ts[2]) { return SMB_VFS_NEXT_NTIMES(handle, path, ts); }