SylixOS移植時mk_time函數問題

1.適用範圍

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

2.問題復現

2.1 問題現象

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

image.png

2.1 測試用例出錯信息

2.2 問題源碼

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

image.png

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的時間。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章