From 850e1aeb5264818c133a32ff457794ff9bd9364d Mon Sep 17 00:00:00 2001 From: Meco Man <920369182@qq.com> Date: Wed, 28 Apr 2021 13:03:43 +0800 Subject: [PATCH 1/7] =?UTF-8?q?[libc][time]=20=E7=BB=86=E5=BE=AE=E8=B0=83?= =?UTF-8?q?=E6=95=B4time.c?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/libc/compilers/common/time.c | 10 +++++----- components/libc/compilers/newlib/SConscript | 9 ++++----- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/components/libc/compilers/common/time.c b/components/libc/compilers/common/time.c index 33d8907165..5f4af8e572 100644 --- a/components/libc/compilers/common/time.c +++ b/components/libc/compilers/common/time.c @@ -16,7 +16,7 @@ * 2012-12-08 Bernard fix the issue of _timevalue.tv_usec initialization, * which found by Rob * 2021-02-12 Meco Man move all of the functions located in 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 @@ -104,7 +104,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 +112,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 */ @@ -273,13 +273,13 @@ RTM_EXPORT(asctime); 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) From 82f2d8e53d866598b993054990b73339ef457607 Mon Sep 17 00:00:00 2001 From: Meco Jianting Man <920369182@qq.com> Date: Thu, 29 Apr 2021 00:21:10 +0800 Subject: [PATCH 2/7] =?UTF-8?q?time.c=20=E5=88=A0=E9=99=A4=E5=87=BD?= =?UTF-8?q?=E6=95=B0=E5=90=8D=E4=B8=8E=E6=8B=AC=E5=8F=B7=E4=B9=8B=E9=97=B4?= =?UTF-8?q?=E7=9A=84=E7=A9=BA=E6=A0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/libc/compilers/common/time.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/libc/compilers/common/time.c b/components/libc/compilers/common/time.c index 5f4af8e572..72542867d2 100644 --- a/components/libc/compilers/common/time.c +++ b/components/libc/compilers/common/time.c @@ -270,7 +270,7 @@ 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); From 1627597fcc89a7d9babc972b5d1d46764ffc7ef8 Mon Sep 17 00:00:00 2001 From: Meco Jianting Man <920369182@qq.com> Date: Thu, 29 Apr 2021 04:42:11 +0800 Subject: [PATCH 3/7] remove _TIMESPEC_DEFINED --- components/libc/compilers/common/sys/time.h | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) 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 */ From a7a3ca9f0290131842f1a40bb8dca1a9490e4d27 Mon Sep 17 00:00:00 2001 From: Meco Man <920369182@qq.com> Date: Sat, 1 May 2021 05:51:18 +0800 Subject: [PATCH 4/7] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=89=8B=E5=8A=A8?= =?UTF-8?q?=E8=AE=BE=E7=BD=AE=E6=97=B6=E5=8C=BA=E7=9A=84=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/libc/Kconfig | 8 +++++++- components/libc/compilers/common/time.c | 4 ++-- 2 files changed, 9 insertions(+), 3 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/time.c b/components/libc/compilers/common/time.c index 33d8907165..8dda257937 100644 --- a/components/libc/compilers/common/time.c +++ b/components/libc/compilers/common/time.c @@ -214,7 +214,7 @@ struct tm* localtime_r(const time_t* t, struct tm* r) time_t local_tz; int utc_plus; - utc_plus = 8; /* GMT: UTC+8 */ + utc_plus = RT_LIBC_FIXED_TIMEZONE; local_tz = *t + utc_plus * 3600; return gmtime_r(&local_tz, r); } @@ -233,7 +233,7 @@ time_t mktime(struct tm * const t) time_t timestamp; int utc_plus; - utc_plus = 8; /* GMT: UTC+8 */ + utc_plus = RT_LIBC_FIXED_TIMEZONE; timestamp = timegm(t); timestamp = timestamp - 3600 * utc_plus; return timestamp; From 0aa3b80fc3509a2377d727e76fd9393f4b4962d8 Mon Sep 17 00:00:00 2001 From: Meco Man <920369182@qq.com> Date: Sat, 1 May 2021 06:03:46 +0800 Subject: [PATCH 5/7] =?UTF-8?q?=E5=9C=A8time.c=E4=B8=AD=E5=A2=9E=E5=8A=A0R?= =?UTF-8?q?T=5FLIBC=5FFIXED=5FTIMEZONE=E9=BB=98=E8=AE=A4=E5=80=BC=EF=BC=8C?= =?UTF-8?q?=E9=98=B2=E6=AD=A2=E6=9C=89=E4=BA=9B=E5=B7=A5=E7=A8=8B=E6=B2=A1?= =?UTF-8?q?=E6=9C=89=E9=85=8D=E7=BD=AERT=5FLIBC=5FFIXED=5FTIMEZONE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/libc/compilers/common/time.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/components/libc/compilers/common/time.c b/components/libc/compilers/common/time.c index 8dda257937..3e23fc8242 100644 --- a/components/libc/compilers/common/time.c +++ b/components/libc/compilers/common/time.c @@ -30,6 +30,10 @@ #define DBG_LVL DBG_INFO #include +#ifndef RT_LIBC_FIXED_TIMEZONE +#define RT_LIBC_FIXED_TIMEZONE 8 +#endif + /* seconds per day */ #define SPD 24*60*60 From 65984a7116e747e022083774852f3a90617ca4e1 Mon Sep 17 00:00:00 2001 From: Meco Man <920369182@qq.com> Date: Sat, 1 May 2021 06:06:03 +0800 Subject: [PATCH 6/7] add comment --- components/libc/compilers/common/time.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/libc/compilers/common/time.c b/components/libc/compilers/common/time.c index 3e23fc8242..f7f52be9b4 100644 --- a/components/libc/compilers/common/time.c +++ b/components/libc/compilers/common/time.c @@ -31,7 +31,7 @@ #include #ifndef RT_LIBC_FIXED_TIMEZONE -#define RT_LIBC_FIXED_TIMEZONE 8 +#define RT_LIBC_FIXED_TIMEZONE 8 /* UTC+8 */ #endif /* seconds per day */ From a611a6686402bd074cbaf53c53356c381ab54a5f Mon Sep 17 00:00:00 2001 From: Meco Man <920369182@qq.com> Date: Sat, 1 May 2021 06:08:14 +0800 Subject: [PATCH 7/7] =?UTF-8?q?=E7=B2=BE=E7=AE=80=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/libc/compilers/common/time.c | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/components/libc/compilers/common/time.c b/components/libc/compilers/common/time.c index f7f52be9b4..799f71a2d0 100644 --- a/components/libc/compilers/common/time.c +++ b/components/libc/compilers/common/time.c @@ -212,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 = RT_LIBC_FIXED_TIMEZONE; - local_tz = *t + utc_plus * 3600; + local_tz = *t + RT_LIBC_FIXED_TIMEZONE * 3600; return gmtime_r(&local_tz, r); } RTM_EXPORT(localtime_r); @@ -231,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 = RT_LIBC_FIXED_TIMEZONE; timestamp = timegm(t); - timestamp = timestamp - 3600 * utc_plus; + timestamp = timestamp - 3600 * RT_LIBC_FIXED_TIMEZONE; return timestamp; } RTM_EXPORT(mktime);