From f20761f9d42def83d954286e740691f970e7928a Mon Sep 17 00:00:00 2001
From: Matej Horvat <matej.horvat@guest.arnes.si>
Date: Wed, 20 Aug 2014 14:29:12 +0200
Subject: [PATCH] Set the archive bit on new or modified directory entries (but
not subdirectories)
---
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 7d35276..96753be 100644
a
|
b
|
create_dir_entry(nspace *vol, vnode *dir, vnode *node, const char *name,
|
900 | 900 | DPRINTF(0, ("creating directory entry (%11.11s)\n", nshort)); |
901 | 901 | |
902 | 902 | info.mode = node->mode; |
| 903 | if ((node->mode & FAT_SUBDIR) == 0) |
| 904 | info.mode |= FAT_ARCHIVE; |
903 | 905 | info.cluster = node->cluster; |
904 | 906 | info.size = node->st_size; |
905 | 907 | 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 d9239a3..5d5f028 100644
a
|
b
|
dosfs_wstat(fs_volume *_vol, fs_vnode *_node, const struct stat *st,
|
248 | 248 | |
249 | 249 | if (mask & B_STAT_MODIFICATION_TIME) { |
250 | 250 | DPRINTF(0, ("setting modification time\n")); |
| 251 | if ((node->mode & FAT_SUBDIR) == 0) |
| 252 | node->mode |= FAT_ARCHIVE; |
251 | 253 | node->st_time = st->st_mtime; |
252 | 254 | dirty = true; |
253 | 255 | } |
… |
… |
dosfs_mkdir(fs_volume *_vol, fs_vnode *_dir, const char *name, int perms)
|
934 | 936 | memset(buffer, ' ', 11); |
935 | 937 | memset(buffer+0x20, ' ', 11); |
936 | 938 | buffer[0] = buffer[0x20] = buffer[0x21] = '.'; |
937 | | buffer[0x0b] = buffer[0x2b] = 0x30; |
| 939 | buffer[0x0b] = buffer[0x2b] = FAT_SUBDIR; |
938 | 940 | i = time_t2dos(dummy.st_time); |
939 | 941 | buffer[0x16] = i & 0xff; |
940 | 942 | buffer[0x17] = (i >> 8) & 0xff; |