From c1fcde6665f1519093ea1819a18731abd679dd7a Mon Sep 17 00:00:00 2001 From: Matej Horvat Date: Wed, 20 Aug 2014 14:29:12 +0200 Subject: [PATCH] Set the archive bit on new or modified directory entries (but not subdirectories) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Axel Dörfler --- src/add-ons/kernel/file_systems/fat/dir.c | 2 ++ src/add-ons/kernel/file_systems/fat/file.c | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/add-ons/kernel/file_systems/fat/dir.c b/src/add-ons/kernel/file_systems/fat/dir.c index 7d35276304..96753be64f 100644 --- a/src/add-ons/kernel/file_systems/fat/dir.c +++ b/src/add-ons/kernel/file_systems/fat/dir.c @@ -900,6 +900,8 @@ create_dir_entry(nspace *vol, vnode *dir, vnode *node, const char *name, DPRINTF(0, ("creating directory entry (%11.11s)\n", nshort)); info.mode = node->mode; + if ((node->mode & FAT_SUBDIR) == 0) + info.mode |= FAT_ARCHIVE; info.cluster = node->cluster; info.size = node->st_size; info.time = node->st_time; diff --git a/src/add-ons/kernel/file_systems/fat/file.c b/src/add-ons/kernel/file_systems/fat/file.c index d9239a3b59..5d5f028423 100644 --- a/src/add-ons/kernel/file_systems/fat/file.c +++ b/src/add-ons/kernel/file_systems/fat/file.c @@ -248,6 +248,8 @@ dosfs_wstat(fs_volume *_vol, fs_vnode *_node, const struct stat *st, if (mask & B_STAT_MODIFICATION_TIME) { DPRINTF(0, ("setting modification time\n")); + if ((node->mode & FAT_SUBDIR) == 0) + node->mode |= FAT_ARCHIVE; node->st_time = st->st_mtime; dirty = true; } @@ -934,7 +936,7 @@ dosfs_mkdir(fs_volume *_vol, fs_vnode *_dir, const char *name, int perms) memset(buffer, ' ', 11); memset(buffer+0x20, ' ', 11); buffer[0] = buffer[0x20] = buffer[0x21] = '.'; - buffer[0x0b] = buffer[0x2b] = 0x30; + buffer[0x0b] = buffer[0x2b] = FAT_SUBDIR; i = time_t2dos(dummy.st_time); buffer[0x16] = i & 0xff; buffer[0x17] = (i >> 8) & 0xff;