Browse Source

Merge pull request #720 from xools/master

[DFS] fix fattime different from elmfat definition
Bernard Xiong 8 years ago
parent
commit
9804753614
1 changed files with 26 additions and 2 deletions
  1. 26 2
      components/dfs/filesystems/elmfat/dfs_elm.c

+ 26 - 2
components/dfs/filesystems/elmfat/dfs_elm.c

@@ -897,9 +897,33 @@ DRESULT disk_ioctl(BYTE drv, BYTE ctrl, void *buff)
     return RES_OK;
 }
 
-rt_time_t get_fattime(void)
+DWORD get_fattime(void)
 {
-    return time(RT_NULL);
+    time_t now;
+    struct tm *p_tm;
+    struct tm tm_now;
+    DWORD fat_time;
+
+    /* get current time */
+    now = time(RT_NULL);
+
+    /* lock scheduler. */
+    rt_enter_critical();
+    /* converts calendar time time into local time. */
+    p_tm = localtime(&now);
+    /* copy the statically located variable */
+    memcpy(&tm_now, p_tm, sizeof(struct tm));
+    /* unlock scheduler. */
+    rt_exit_critical();
+
+    fat_time =  (DWORD)(tm_now.tm_year - 80) << 25 | 
+                (DWORD)(tm_now.tm_mon + 1)   << 21 | 
+                (DWORD)tm_now.tm_mday        << 16 |
+                (DWORD)tm_now.tm_hour        << 11 |
+                (DWORD)tm_now.tm_min         <<  5 |
+                (DWORD)tm_now.tm_sec / 2 ;
+
+    return fat_time;
 }
 
 #if _FS_REENTRANT