1. 程式人生 > >SylixOS移植時mk_time函數問題

SylixOS移植時mk_time函數問題

fff time 1.5 1970年1月1日 AR 導致 water space 而在

1.適用範圍

本文檔適用於進行SylixOS中間件移植的技術人員。

2.問題復現

2.1 問題現象

在進行Python3移植測試時,test_time.py測試用例出錯,錯誤如圖 2.1 所示:

技術分享圖片

圖 2.1 測試用例出錯信息

2.2 問題源碼

測試用例的python源碼如圖 2.2 所示:

技術分享圖片

圖 2.2 問題源碼

3.原因分析

mktime()是定義在time.h中的函數,函數原型為time_t mktime(struct tm * timeptr)。作用是將參數timeptr所指的tm結構數據轉換成從公元1970年1月1日0時0分0 秒算起至今的時間所經過的秒數。

在Linux下,timeptr所指的tm結構數據可以為任意數值。而在SylixOS下,mktime()函數的實現中有一個判斷,如程序清單 3.1所示:

程序清單 3.1

if ((timeptr->tm_year + TM_YEAR_BASE) < EPOCH_YEAR )

return ((time_t) PX_ERROR);


其中,TM_YEAR_BASE宏為1900,EPOCH_YEAR宏為1970。現象為如果傳入的tm_year值小於70,即實際傳入時間在1970年之前,會返回-1,導致test_time.py的測試函數無法通過。

這一行為與Windows是一致的,因為以函數的功能來看,傳入在1970年之前的時間也不合理,SylixOS的mk_time()函數只處理1970年以後的時間,Windows上是只處理1970-3000的時間。


SylixOS移植時mk_time函數問題