From 45edf78e3675fbf924ed72b175e2b4cf7932da08 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Mon, 27 Dec 2010 14:35:13 +0000 Subject: 2010-12-27 Sebastian Huber * 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. --- cpukit/libfs/src/dosfs/msdos.h | 1 + cpukit/libfs/src/dosfs/msdos_create.c | 7 +++---- cpukit/libfs/src/dosfs/msdos_misc.c | 6 ++++-- 3 files changed, 8 insertions(+), 6 deletions(-) (limited to 'cpukit/libfs') 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; -- cgit v1.2.3