diff options
| author | Meco Jianting Man <[email protected]> | 2021-05-01 11:05:16 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2021-05-01 11:05:16 +0800 |
| commit | 6d57515316bce0698d2998d807e904554db2f978 (patch) | |
| tree | 0f3efbca3e6033f0c085453748a6437d8c2ee03a /components | |
| parent | 79a452b26d5499466c111d6fceac5b628ff7fdf2 (diff) | |
| parent | be3b5a950f8b0610b7f454769c2d5bf4a54afc8a (diff) | |
Merge pull request #48 from RT-Thread/master
sycn
Diffstat (limited to 'components')
| -rw-r--r-- | components/libc/Kconfig | 8 | ||||
| -rw-r--r-- | components/libc/compilers/common/sys/time.h | 10 | ||||
| -rw-r--r-- | components/libc/compilers/common/time.c | 26 | ||||
| -rw-r--r-- | components/libc/compilers/newlib/SConscript | 9 |
4 files changed, 24 insertions, 29 deletions
diff --git a/components/libc/Kconfig b/components/libc/Kconfig index 49b97481d1..8a790c298d 100644 --- a/components/libc/Kconfig +++ b/components/libc/Kconfig @@ -55,8 +55,14 @@ endif if RT_USING_LIBC != y config RT_LIBC_USING_TIME - bool "Enable TIME FUNCTIONS WITHOUT COMPILER'S LIBC" + bool "Enable time functions without compiler's libc" default y endif +config RT_LIBC_FIXED_TIMEZONE + depends on (RT_LIBC_USING_TIME || RT_USING_LIBC) + int "Manually set a fixed time zone (UTC+)" + range -12 12 + default 8 + endmenu diff --git a/components/libc/compilers/common/sys/time.h b/components/libc/compilers/common/sys/time.h index ef1c810608..24da0b6c77 100644 --- a/components/libc/compilers/common/sys/time.h +++ b/components/libc/compilers/common/sys/time.h @@ -18,14 +18,6 @@ extern "C" { #endif -/* - * Skip define timespec for IAR version over 8.10.1 where __VER__ is 8010001. - */ -#if defined ( __ICCARM__ ) && (__VER__ >= 8010001) -#define _TIMESPEC_DEFINED -#endif - - #ifndef _TIMEVAL_DEFINED #define _TIMEVAL_DEFINED /* @@ -40,7 +32,7 @@ struct timeval { #endif #endif /* _TIMEVAL_DEFINED */ -#if !(defined(__GNUC__) && !defined(__ARMCC_VERSION)/*GCC*/) && !defined (__ICCARM__) && !defined (_WIN32) +#if !(defined(__GNUC__) && !defined(__ARMCC_VERSION)/*GCC*/) && !(defined(__ICCARM__) && (__VER__ >= 8010001)) && !defined(_WIN32) struct timespec { time_t tv_sec; /* seconds */ long tv_nsec; /* and nanoseconds */ diff --git a/components/libc/compilers/common/time.c b/components/libc/compilers/common/time.c index 33d8907165..deda18a560 100644 --- a/components/libc/compilers/common/time.c +++ b/components/libc/compilers/common/time.c @@ -16,7 +16,7 @@ * 2012-12-08 Bernard <clock_time.c> fix the issue of _timevalue.tv_usec initialization, * which found by Rob <[email protected]> * 2021-02-12 Meco Man move all of the functions located in <clock_time.c> to this file - * 2021-03-15 Meco Man fixed bug: https://club.rt-thread.org/ask/question/423650.html + * 2021-03-15 Meco Man fixed a bug of leaking memory in asctime() */ #include <sys/time.h> @@ -30,6 +30,10 @@ #define DBG_LVL DBG_INFO #include <rtdbg.h> +#ifndef RT_LIBC_FIXED_TIMEZONE +#define RT_LIBC_FIXED_TIMEZONE 8 /* UTC+8 */ +#endif + /* seconds per day */ #define SPD 24*60*60 @@ -104,7 +108,7 @@ static int get_timeval(struct timeval *tv) } else { - /* LOG_W will cause a recursive printing if ulog timestamp function is turned on */ + /* LOG_W will cause a recursive printing if ulog timestamp function is enabled */ rt_kprintf("Cannot find a RTC device to provide time!\r\n"); return -1; } @@ -112,7 +116,7 @@ static int get_timeval(struct timeval *tv) return (rst < 0) ? -1 : 1; #else - /* LOG_W will cause a recursive printing if ulog timestamp function is turned on */ + /* LOG_W will cause a recursive printing if ulog timestamp function is enabled */ rt_kprintf("Cannot find a RTC device to provide time!\r\n"); return -1; #endif /* RT_USING_RTC */ @@ -208,14 +212,11 @@ struct tm* gmtime(const time_t* t) } RTM_EXPORT(gmtime); -/*TODO: timezone */ struct tm* localtime_r(const time_t* t, struct tm* r) { time_t local_tz; - int utc_plus; - utc_plus = 8; /* GMT: UTC+8 */ - local_tz = *t + utc_plus * 3600; + local_tz = *t + RT_LIBC_FIXED_TIMEZONE * 3600; return gmtime_r(&local_tz, r); } RTM_EXPORT(localtime_r); @@ -227,15 +228,12 @@ struct tm* localtime(const time_t* t) } RTM_EXPORT(localtime); -/* TODO: timezone */ time_t mktime(struct tm * const t) { time_t timestamp; - int utc_plus; - utc_plus = 8; /* GMT: UTC+8 */ timestamp = timegm(t); - timestamp = timestamp - 3600 * utc_plus; + timestamp = timestamp - 3600 * RT_LIBC_FIXED_TIMEZONE; return timestamp; } RTM_EXPORT(mktime); @@ -270,16 +268,16 @@ char* asctime(const struct tm *timeptr) } RTM_EXPORT(asctime); -char *ctime_r (const time_t * tim_p, char * result) +char *ctime_r(const time_t * tim_p, char * result) { struct tm tm; - return asctime_r (localtime_r (tim_p, &tm), result); + return asctime_r(localtime_r(tim_p, &tm), result); } RTM_EXPORT(ctime_r); char* ctime(const time_t *tim_p) { - return asctime (localtime (tim_p)); + return asctime(localtime(tim_p)); } RTM_EXPORT(ctime); diff --git a/components/libc/compilers/newlib/SConscript b/components/libc/compilers/newlib/SConscript index b1ad6e4784..542cdecd40 100644 --- a/components/libc/compilers/newlib/SConscript +++ b/components/libc/compilers/newlib/SConscript @@ -4,17 +4,18 @@ Import('rtconfig') src = [] cwd = GetCurrentDir() group = [] - +LIBS = [] +CPPDEFINES = [] CPPPATH = [cwd] if rtconfig.PLATFORM == 'gcc': if GetDepend('RT_USING_LIBC'): - CPPDEFINES = ['RT_USING_NEWLIB'] + CPPDEFINES += ['RT_USING_NEWLIB'] # link with libc and libm: # libm is a frequently used lib. Newlib is compiled with -ffunction-sections in # recent GCC tool chains. The linker would just link in the functions that have # been referenced. So setting this won't result in bigger text size. - LIBS = ['c', 'm'] + LIBS += ['c', 'm'] src += Glob('*.c') SrcRemove(src, ['minilib.c']) @@ -22,8 +23,6 @@ if rtconfig.PLATFORM == 'gcc': SrcRemove(src, ['libc_syms.c']) else: src += ['minilib.c'] - CPPDEFINES = [] - LIBS = [] group = DefineGroup('libc', src, depend = [], CPPPATH = CPPPATH, CPPDEFINES = CPPDEFINES, LIBS = LIBS) |
