|
@@ -16,7 +16,7 @@
|
|
|
* 2012-12-08 Bernard <clock_time.c> fix the issue of _timevalue.tv_usec initialization,
|
|
|
* which found by Rob <rdent@iinet.net.au>
|
|
|
* 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);
|
|
|
|