SylixOS移植時mk_time函數問題
阿新 • • 發佈:2018-06-21
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函數問題