[libc][time] 修复数据类型报警

This commit is contained in:
Meco Man 2021-09-18 11:37:19 -04:00
parent 163c0597b8
commit 71f48266ff
2 changed files with 31 additions and 29 deletions

View File

@ -12,7 +12,8 @@
#define __SYS_TIME_H__ #define __SYS_TIME_H__
#include <rtconfig.h> #include <rtconfig.h>
#include <rtdef.h> #include <sys/types.h>
#include <stdint.h>
#include <time.h> #include <time.h>
#ifdef __cplusplus #ifdef __cplusplus
@ -32,22 +33,19 @@ extern "C" {
#define DST_TUR 9 /* Turkey */ #define DST_TUR 9 /* Turkey */
#define DST_AUSTALT 10 /* Australian style with shift in 1986 */ #define DST_AUSTALT 10 /* Australian style with shift in 1986 */
struct timezone { struct timezone
int tz_minuteswest; /* minutes west of Greenwich */ {
int tz_dsttime; /* type of dst correction */ int tz_minuteswest; /* minutes west of Greenwich */
int tz_dsttime; /* type of dst correction */
}; };
void rt_tz_set(rt_int8_t tz);
rt_int8_t rt_tz_get(void);
rt_int8_t rt_tz_is_dst(void);
/* /*
* Structure returned by gettimeofday(2) system call, * Structure returned by gettimeofday(2) system call,
* and used in other calls. * and used in other calls.
*/ */
#ifndef _TIMEVAL_DEFINED #ifndef _TIMEVAL_DEFINED
#define _TIMEVAL_DEFINED #define _TIMEVAL_DEFINED
#if !(defined(_WIN32)) #if !defined(_WIN32)
struct timeval struct timeval
{ {
time_t tv_sec; /* seconds */ time_t tv_sec; /* seconds */
@ -56,6 +54,16 @@ struct timeval
#endif #endif
#endif /* _TIMEVAL_DEFINED */ #endif /* _TIMEVAL_DEFINED */
#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 */
};
#endif
int stime(const time_t *t); int stime(const time_t *t);
time_t timegm(struct tm * const t); time_t timegm(struct tm * const t);
int gettimeofday(struct timeval *tv, struct timezone *tz); int gettimeofday(struct timeval *tv, struct timezone *tz);
@ -65,15 +73,6 @@ struct tm *gmtime_r(const time_t *timep, struct tm *r);
#endif #endif
#ifdef RT_USING_POSIX #ifdef RT_USING_POSIX
#include <sys/types.h>
#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 */
};
#endif
/* POSIX clock and timer */ /* POSIX clock and timer */
#define MILLISECOND_PER_SECOND 1000UL #define MILLISECOND_PER_SECOND 1000UL
#define MICROSECOND_PER_SECOND 1000000UL #define MICROSECOND_PER_SECOND 1000000UL
@ -106,6 +105,10 @@ int clock_settime (clockid_t clockid, const struct timespec *tp);
int rt_timespec_to_tick(const struct timespec *time); int rt_timespec_to_tick(const struct timespec *time);
#endif /* RT_USING_POSIX */ #endif /* RT_USING_POSIX */
void tz_set(int8_t tz);
int8_t tz_get(void);
int8_t tz_is_dst(void);
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

View File

@ -199,7 +199,7 @@ struct tm *gmtime_r(const time_t *timep, struct tm *r)
r->tm_mon = i; r->tm_mon = i;
r->tm_mday += work - __spm[i]; r->tm_mday += work - __spm[i];
r->tm_isdst = rt_tz_is_dst(); r->tm_isdst = tz_is_dst();
return r; return r;
} }
RTM_EXPORT(gmtime_r); RTM_EXPORT(gmtime_r);
@ -215,7 +215,7 @@ struct tm* localtime_r(const time_t* t, struct tm* r)
{ {
time_t local_tz; time_t local_tz;
local_tz = *t + rt_tz_get() * 3600; local_tz = *t + tz_get() * 3600;
return gmtime_r(&local_tz, r); return gmtime_r(&local_tz, r);
} }
RTM_EXPORT(localtime_r); RTM_EXPORT(localtime_r);
@ -232,7 +232,7 @@ time_t mktime(struct tm * const t)
time_t timestamp; time_t timestamp;
timestamp = timegm(t); timestamp = timegm(t);
timestamp = timestamp - 3600 * rt_tz_get(); timestamp = timestamp - 3600 * tz_get();
return timestamp; return timestamp;
} }
RTM_EXPORT(mktime); RTM_EXPORT(mktime);
@ -423,7 +423,7 @@ int gettimeofday(struct timeval *tv, struct timezone *tz)
if(tz != RT_NULL) if(tz != RT_NULL)
{ {
tz->tz_dsttime = DST_NONE; tz->tz_dsttime = DST_NONE;
tz->tz_minuteswest = -(rt_tz_get() * 60); tz->tz_minuteswest = -(tz_get() * 60);
} }
if (tv != RT_NULL && get_timeval(tv) == RT_EOK) if (tv != RT_NULL && get_timeval(tv) == RT_EOK)
@ -446,7 +446,6 @@ int settimeofday(const struct timeval *tv, const struct timezone *tz)
* Thus, the following is purely of historic interest. * Thus, the following is purely of historic interest.
*/ */
if (tv != RT_NULL if (tv != RT_NULL
&& tv->tv_sec >= 0
&& tv->tv_usec >= 0 && tv->tv_usec >= 0
&& set_timeval((struct timeval *)tv) == RT_EOK) && set_timeval((struct timeval *)tv) == RT_EOK)
{ {
@ -676,22 +675,22 @@ RTM_EXPORT(rt_timespec_to_tick);
#define RT_LIBC_DEFAULT_TIMEZONE 8 #define RT_LIBC_DEFAULT_TIMEZONE 8
#endif #endif
static volatile rt_int8_t rt_current_timezone = RT_LIBC_DEFAULT_TIMEZONE; static volatile int8_t _current_timezone = RT_LIBC_DEFAULT_TIMEZONE;
void rt_tz_set(rt_int8_t tz) void tz_set(int8_t tz)
{ {
register rt_base_t level; register rt_base_t level;
level = rt_hw_interrupt_disable(); level = rt_hw_interrupt_disable();
rt_current_timezone = tz; _current_timezone = tz;
rt_hw_interrupt_enable(level); rt_hw_interrupt_enable(level);
} }
rt_int8_t rt_tz_get(void) int8_t tz_get(void)
{ {
return rt_current_timezone; return _current_timezone;
} }
rt_int8_t rt_tz_is_dst(void) int8_t tz_is_dst(void)
{ {
return 0; return 0;
} }