summaryrefslogtreecommitdiffstats
path: root/cpukit/libfs
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2010-12-27 14:35:13 +0000
committerSebastian Huber <sebastian.huber@embedded-brains.de>2010-12-27 14:35:13 +0000
commit45edf78e3675fbf924ed72b175e2b4cf7932da08 (patch)
tree139b31bf2c996e40d47e51dd2d7a20b27ff2e2e9 /cpukit/libfs
parentRemove. (diff)
downloadrtems-45edf78e3675fbf924ed72b175e2b4cf7932da08.tar.bz2
2010-12-27 Sebastian Huber <sebastian.huber@embedded-brains.de>
* libfs/src/dosfs/msdos.h, libfs/src/dosfs/msdos_misc.c, libfs/src/dosfs/msdos_create.c: Create valid create and modfied date and time.
Diffstat (limited to 'cpukit/libfs')
-rw-r--r--cpukit/libfs/src/dosfs/msdos.h1
-rw-r--r--cpukit/libfs/src/dosfs/msdos_create.c7
-rw-r--r--cpukit/libfs/src/dosfs/msdos_misc.c6
3 files changed, 8 insertions, 6 deletions
diff --git a/cpukit/libfs/src/dosfs/msdos.h b/cpukit/libfs/src/dosfs/msdos.h
index 04814761d0..696dac37cf 100644
--- a/cpukit/libfs/src/dosfs/msdos.h
+++ b/cpukit/libfs/src/dosfs/msdos.h
@@ -112,6 +112,7 @@ typedef rtems_filesystem_node_types_t msdos_node_type_t;
#define MSDOS_FIRST_CLUSTER_LOW_OFFSET 26
#define MSDOS_FILE_WDATE_OFFSET 24
#define MSDOS_FILE_WTIME_OFFSET 22
+#define MSDOS_FILE_ADATE_OFFSET 18
/*
* Possible values of DIR_Attr field of 32 bytes long FAT Directory Entry
diff --git a/cpukit/libfs/src/dosfs/msdos_create.c b/cpukit/libfs/src/dosfs/msdos_create.c
index d4fc737d95..ec5862a178 100644
--- a/cpukit/libfs/src/dosfs/msdos_create.c
+++ b/cpukit/libfs/src/dosfs/msdos_create.c
@@ -96,8 +96,11 @@ msdos_creat_node(rtems_filesystem_location_info_t *parent_loc,
return -1;
msdos_date_unix2dos(time_ret, &date, &time_val);
+ *MSDOS_DIR_CRT_TIME(short_node) = CT_LE_W(time_val);
+ *MSDOS_DIR_CRT_DATE(short_node) = CT_LE_W(date);
*MSDOS_DIR_WRITE_TIME(short_node) = CT_LE_W(time_val);
*MSDOS_DIR_WRITE_DATE(short_node) = CT_LE_W(date);
+ *MSDOS_DIR_LAST_ACCESS_DATE(short_node) = CT_LE_W(date);
/* initialize directory/file size */
*MSDOS_DIR_FILE_SIZE(short_node) = MSDOS_INIT_DIR_SIZE;
@@ -146,10 +149,6 @@ msdos_creat_node(rtems_filesystem_location_info_t *parent_loc,
* set "archive bit" due to changes
*/
*MSDOS_DIR_ATTR(short_node) |= MSDOS_ATTR_ARCHIVE;
- /*
- * set "last access" date to today
- */
- *MSDOS_DIR_LAST_ACCESS_DATE(short_node) = CT_LE_W(date);
}
else { /* regular file... */
*MSDOS_DIR_ATTR(short_node) |= MSDOS_ATTR_ARCHIVE;
diff --git a/cpukit/libfs/src/dosfs/msdos_misc.c b/cpukit/libfs/src/dosfs/msdos_misc.c
index 864025ff10..d8a7773090 100644
--- a/cpukit/libfs/src/dosfs/msdos_misc.c
+++ b/cpukit/libfs/src/dosfs/msdos_misc.c
@@ -718,7 +718,7 @@ msdos_set_dir_wrt_time_and_date(
fat_file_fd_t *fat_fd
)
{
- ssize_t ret1 = 0, ret2 = 0;
+ ssize_t ret1 = 0, ret2 = 0, ret3 = 0;
msdos_fs_info_t *fs_info = mt_entry->fs_info;
uint16_t time_val;
uint16_t date;
@@ -742,8 +742,10 @@ msdos_set_dir_wrt_time_and_date(
date = CT_LE_W(date);
ret2 = _fat_block_write(mt_entry, sec, byte + MSDOS_FILE_WDATE_OFFSET,
2, (char *)(&date));
+ ret3 = _fat_block_write(mt_entry, sec, byte + MSDOS_FILE_ADATE_OFFSET,
+ 2, (char *)(&date));
- if ( (ret1 < 0) || (ret2 < 0) )
+ if ( (ret1 < 0) || (ret2 < 0) || (ret3 < 0) )
return -1;
return RC_OK;