Pārlūkot izejas kodu

修改get_timeval的错误返回形式

Meco Man 4 gadi atpakaļ
vecāks
revīzija
4accfc410c
1 mainītis faili ar 33 papildinājumiem un 16 dzēšanām
  1. 33 16
      components/libc/compilers/common/time.c

+ 33 - 16
components/libc/compilers/common/time.c

@@ -183,10 +183,12 @@ char* ctime(const time_t *tim_p)
 }
 RTM_EXPORT(ctime);
 
-static void get_timeval(struct timeval *tv)
+/*-1 failure; 1 success*/
+static int get_timeval(struct timeval *tv)
 {
     if (tv == RT_NULL)
-        return;
+        return -1;
+
     /* default is not available */
     tv->tv_sec = -1;
     /* default is 0 */
@@ -217,8 +219,11 @@ static void get_timeval(struct timeval *tv)
     {
         /* LOG_W will cause a recursive printing if ulog timestamp function is turned on */
         rt_kprintf("Cannot find a RTC device to provide time!\r\n");
-        errno = ENOSYS;
+        tv->tv_sec = 0;
+        return -1;
     }
+
+    return 1;
 }
 
 /**
@@ -234,13 +239,19 @@ RT_WEAK time_t time(time_t *t)
 {
     struct timeval now;
 
-    get_timeval(&now);
-
-    if (t)
+    if(get_timeval(&now)>0)
     {
-        *t = now.tv_sec;
+        if (t)
+        {
+            *t = now.tv_sec;
+        }
+        return now.tv_sec;
+    }
+    else
+    {
+        errno = EFAULT;
+        return -1;
     }
-    return now.tv_sec;
 }
 RTM_EXPORT(time);
 
@@ -265,13 +276,13 @@ int stime(const time_t *t)
     else
     {
         LOG_W("Cannot find a RTC device to provide time!");
-        errno = ENOSYS;
+        errno = EFAULT;
         return -1;
     }
     return 0;
 #else
     LOG_W("Cannot find a RTC device to provide time!");
-    errno = ENOSYS;
+    errno = EFAULT;
     return -1;
 #endif /* RT_USING_RTC */
 }
@@ -355,15 +366,13 @@ RTM_EXPORT(timegm);
 /* TODO: timezone */
 int gettimeofday(struct timeval *tv, struct timezone *tz)
 {
-    get_timeval(tv);
-
-    if (tv != RT_NULL && tv->tv_sec != (time_t) -1)
+    if (tv != RT_NULL && get_timeval(tv)>0)
     {
         return 0;
     }
     else
     {
-        errno = ENOSYS;
+        errno = EFAULT;
         return -1;
     }
 }
@@ -374,11 +383,19 @@ int settimeofday(const struct timeval *tv, const struct timezone *tz)
 {
     if (tv != RT_NULL)
     {
-        return stime((const time_t *)&tv->tv_sec);
+        if(tv->tv_sec >= 0 && tv->tv_usec >= 0)
+        {
+            return stime((const time_t *)&tv->tv_sec);
+        }
+        else
+        {
+            errno = EINVAL;
+            return -1;
+        }
     }
     else
     {
-        errno = ENOSYS;
+        errno = EFAULT;
         return -1;
     }
 }