diff --git a/Documentation/NuttxUserGuide.html b/Documentation/NuttxUserGuide.html
index 6aa9905fe06..70d8a6c7fa2 100644
--- a/Documentation/NuttxUserGuide.html
+++ b/Documentation/NuttxUserGuide.html
@@ -13,7 +13,7 @@
NuttX Operating SystemUser's Manual
by
Gregory Nutt
-
Last Updated: June 2, 2015
+ Last Updated: June 12, 2015
@@ -3884,14 +3884,18 @@ interface of the same name.
2.6.4 mktime
2.6.5 gmtime
2.6.6 localtime
- 2.6.7 gmtime_r
- 2.6.8 localtime_r
- 2.6.9 timer_create
- 2.6.10 timer_delete
- 2.6.11 timer_settime
- 2.6.12 timer_gettime
- 2.6.13 timer_getoverrun
- 2.6.14 gettimeofday
+ 2.6.7 asctime
+ 2.6.8 ctime
+ 2.6.9 gmtime_r
+ 2.6.10 localtime_r
+ 2.6.11 asctime_r
+ 2.6.12 ctime_r
+ 2.6.13 timer_create
+ 2.6.14 timer_delete
+ 2.6.15 timer_settime
+ 2.6.16 timer_gettime
+ 2.6.17 timer_getoverrun
+ 2.6.18 gettimeofday
@@ -3913,14 +3917,9 @@ interface of the same name.
Returned Value:
-
-
If successful, the clock_settime() function will return zero (OK).
Otherwise, an non-zero error number will be returned to indicate the error:
-
@@ -3941,14 +3940,9 @@ interface of the same name.
Returned Value:
-
-
If successful, the clock_gettime() function will return zero (OK).
Otherwise, an non-zero error number will be returned to indicate the error:
-
@@ -3969,14 +3963,9 @@ interface of the same name.
Returned Value:
-
-
If successful, the clock_getres() function will return zero (OK).
Otherwise, an non-zero error number will be returned to indicate the error:
-
@@ -3997,14 +3986,9 @@ interface of the same name.
Returned Value:
-
-
If successful, the mktime() function will return zero (OK).
Otherwise, an non-zero error number will be returned to indicate the error:
-
@@ -4012,80 +3996,241 @@ interface of the same name.
#include <time.h>
- struct tm *gmtime(const time_t *clock);
+ FAR struct tm *gmtime(FAR const time_t *timep);
Description:
+ Represents GMT date/time in a type struct tm.
+ This function is not re-entrant.
Input Parameters:
- clock.
- Represents calendar time.
- This is an absolute time value representing the number of seconds elapsed since 00:00:00
- on January 1, 1970, Coordinated Universal Time (UTC).
+ timep.
+ Represents GMT calendar time.
+ This is an absolute time value representing the number of seconds elapsed since 00:00:00 on January 1, 1970, Coordinated Universal Time (UTC).
Returned Value:
-
-
- If successful, the gmtime() function will return the pointer to a statically
- defined instance of struct tim.
+ If successful, the gmtime() function will return the pointer to a statically defined instance of struct tm.
Otherwise, a NULL will be returned to indicate the error:
-
-
- #include <time.h>
- #define localtime(c) gmtime(c)
-
+
+#include <time.h>
+#ifdef CONFIG_LIBC_LOCALTIME
+# define localtime(c) gmtime(c)
+#else
+FAR struct tm *localtime(FAR const time_t *timep);
+#endif
+
+
+ Description:
+ Represents local date/time in a type struct tm.
+ This function is not re-entrant.
+
+
+ Input Parameters:
+
+
+ timep.
+ Represents GMT calendar time.
+ This is an absolute time value representing the number of seconds elapsed since 00:00:00 on January 1, 1970, Coordinated Universal Time (UTC).
+
+
+ Returned Value:
+ Returned Value:
+ If successful, the localtime() function will return the pointer to a statically defined instance of struct tm.
+ Otherwise, a NULL will be returned to indicate the error:
+
-
+
+
+ Function Prototype:
+
+
+#include <time.h>
+#ifdef CONFIG_TIME_EXTENDED
+FAR char *asctime(FAR const struct tm *tp);
+#endif
+
+
+ Description:
+ asctime() convert the time provided in a struct tm to a string representation.
+ asctime() is not re-entrant.
+
+
+ Input Parameters:
+
+
+ tp.
+ Pointer to the time to be converted.
+
+
+
+ Returned Value:
+ If successful, the asctime() function will return a pointer to a statically defined string holding the converted time.
+ Otherwise, a NULL will be returned to indicate the error.
+
+
+
+
+ Function Prototype:
+
+
+#include <time.h>
+#ifdef CONFIG_TIME_EXTENDED
+FAR char *ctime(FAR const time_t *timep);
+#endif
+
+
+ Description:
+ ctime() converts the time provided in seconds since the epoch to a string representation.
+ ctime() is not re-entrant.
+
+
+ Input Parameters:
+
+
+ timep.
+ The current time represented as seconds since the epoch.
+
+
+
+ Returned Value:
+ If successful, the ctime() function will return the pointer to the converted string.
+ Otherwise, a NULL will be returned to indicate the error.
+
+
+
Function Prototype:
#include <time.h>
- struct tm *gmtime_r(const time_t *clock, struct tm *result);
+ struct tm *gmtime_r(const time_t *timep, struct tm *result);
Description:
+ Represents GMT date/time in a type struct tm.
+ This function is re-entrant.
Input Parameters:
- clock.
- Represents calendar time.
- This is an absolute time value representing the number of seconds elapsed since 00:00:00
- on January 1, 1970, Coordinated Universal Time (UTC).
+ timep.
+ Represents GMT calendar time.
+ This is an absolute time value representing the number of seconds elapsed since 00:00:00 on January 1, 1970, Coordinated Universal Time (UTC).
result.
A user-provided buffer to receive the converted time structure.
Returned Value:
-
-
If successful, the gmtime_r() function will return the pointer, result,
provided by the caller.
Otherwise, a NULL will be returned to indicate the error:
+
+
+
+#include <time.h>
+#ifdef CONFIG_LIBC_LOCALTIME
+# define localtime_r(c,r) gmtime_r(c,r)
+#else
+FAR struct tm *localtime_r(FAR const time_t *timep, FAR struct tm *result);
+#endif
+
+
+ Description:
+ Represents local date/time in a type struct tm.
+ This function is re-entrant.
+
+
+ Input Parameters:
+
- To be provided.
+ timep.
+ Represents GMT calendar time.
+ This is an absolute time value representing the number of seconds elapsed since 00:00:00 on January 1, 1970, Coordinated Universal Time (UTC).
+ result.
+ A user-provided buffer to receive the converted time structure.
+
+ Returned Value:
+ Returned Value:
+ If successful, the localtime_r() function will return the pointer, result,
+ provided by the caller.
+ Otherwise, a NULL will be returned to indicate the error:
+
-
-
- #include <time.h>
- #define localtime_r(c,r) gmtime_r(c,r)
-
+
+
+ Function Prototype:
+
+
+#include <time.h>
+#ifdef CONFIG_TIME_EXTENDED
+FAR char *asctime_r(FAR const struct tm *tp, FAR char *buf);
+#endif
+
+
+ Description:
+ asctime_r() converts the time provided in a struct tm to a string representation.
+ asctime-r() is re-entrant.
+
+
+ Input Parameters:
+
+
+ tp.
+ Pointer to the time to be converted.
+
+ buf.
+ The user provider buffer. of size >= 26 characters, to receive the converted time.
+
+
+
+ Returned Value:
+ If successful, the asctime_r() function will return the pointer, buf, provided by the caller.
+ Otherwise, a NULL will be returned to indicate the error.
+
-
+
+
+ Function Prototype:
+
+
+#include <time.h>
+#ifdef CONFIG_TIME_EXTENDED
+#endif
+
+
+ Description:
+ ctime_r() converts the time provided in seconds since the epoch to a string representation.
+ ctime() is re-entrant.
+
+
+ Input Parameters:
+
+
+ timep.
+ The current time represented as seconds since the epoch.
+
+ buf.
+ The user provider buffer. of size >= 26 characters, to receive the converted time.
+
+
+
+ Returned Value:
+ If successful, the ctime_r() function will return the pointer, buf, provided by the caller.
+ Otherwise, a NULL will be returned to indicate the error.
+
+
+
Function Prototype:
@@ -4130,8 +4275,6 @@ interface of the same name.
Returned Value:
-
-
If the call succeeds, timer_create() will return 0 (OK) and update the
location referenced by timerid to a timer_t, which can be passed to the
other per-thread timer calls. If an error occurs, the function will return
@@ -4155,7 +4298,7 @@ interface of the same name.
Only CLOCK_REALTIME is supported for the clockid argument.
-
+
Function Prototype:
@@ -4180,8 +4323,6 @@ interface of the same name.
Returned Value:
-
-
If successful, the timer_delete() function will return zero (OK).
Otherwise, the function will return a value of -1 (ERROR) and set
errno to indicate the error:
@@ -4194,7 +4335,7 @@ interface of the same name.
Comparable to the POSIX interface of the same name.
-
+
Function Prototype:
@@ -4258,8 +4399,6 @@ interface of the same name.
Returned Value:
-
-
If the timer_gettime() succeeds, a value of 0 (OK) will be returned.
If an error occurs, the value -1 (ERROR) will be returned, and
errno set to indicate the error.
@@ -4277,7 +4416,7 @@ interface of the same name.
The ovalue argument is ignored.
-
+
Function Prototype:
@@ -4309,8 +4448,6 @@ interface of the same name.
Returned Value:
-
-
If successful, the timer_gettime() function will return zero (OK).
Otherwise, an non-zero error number will be returned to indicate the error:
@@ -4324,7 +4461,7 @@ interface of the same name.
Comparable to the POSIX interface of the same name.
-
+
Function Prototype:
@@ -4385,7 +4522,7 @@ interface of the same name.
interface of the same name.
-
+
Function Prototype:
@@ -9754,6 +9891,8 @@ notify a task when a message is available on a queue.
aio_return
aio_suspend
aio_write
+ asctime
+ asctime_r
atexit
bind
BIOC_XIPBASE
@@ -9766,6 +9905,8 @@ notify a task when a message is available on a queue.
closedir
connect
creat
+ ctime
+ ctime_r
Data structures
Directory operations
dirent.h
@@ -9829,10 +9970,10 @@ notify a task when a message is available on a queue.
mq_timedsend
mq_unlink
mmap
- Network Interfaces
- on_exit
+ Network Interfaces
+ on_exit
open
opendir
OS Interfaces
diff --git a/include/time.h b/include/time.h
index 904022a7669..859c470c8c0 100644
--- a/include/time.h
+++ b/include/time.h
@@ -194,16 +194,25 @@ int clock_gettime(clockid_t clockid, FAR struct timespec *tp);
int clock_getres(clockid_t clockid, FAR struct timespec *res);
time_t mktime(FAR struct tm *tp);
-FAR struct tm *gmtime(FAR const time_t *timer);
-FAR struct tm *gmtime_r(FAR const time_t *timer, FAR struct tm *result);
+FAR struct tm *gmtime(FAR const time_t *timep);
+FAR struct tm *gmtime_r(FAR const time_t *timep, FAR struct tm *result);
+
#ifdef CONFIG_LIBC_LOCALTIME
-FAR struct tm *localtime(FAR const time_t *timer);
-FAR struct tm *localtime_r(FAR const time_t *timer, FAR struct tm *result);
+FAR struct tm *localtime(FAR const time_t *timep);
+FAR struct tm *localtime_r(FAR const time_t *timep, FAR struct tm *result);
#endif
+
size_t strftime(FAR char *s, size_t max, FAR const char *format,
FAR const struct tm *tm);
-time_t time(FAR time_t *tloc);
+#ifdef CONFIG_TIME_EXTENDED
+FAR char *asctime(FAR const struct tm *tp);
+FAR char *asctime_r(FAR const struct tm *tp, FAR char *buf);
+FAR char *ctime(FAR const time_t *timep);
+FAR char *ctime_r(FAR const time_t *timep, FAR char *buf);
+#endif
+
+time_t time(FAR time_t *timep);
int timer_create(clockid_t clockid, FAR struct sigevent *evp,
FAR timer_t *timerid);
diff --git a/libc/time/Make.defs b/libc/time/Make.defs
index f54aa5385a7..f5799c7dd21 100644
--- a/libc/time/Make.defs
+++ b/libc/time/Make.defs
@@ -39,11 +39,13 @@ CSRCS += lib_strftime.c lib_calendar2utc.c lib_daysbeforemonth.c
CSRCS += lib_gettimeofday.c lib_isleapyear.c lib_settimeofday.c lib_time.c
ifdef CONFIG_LIBC_LOCALTIME
-CSRCS += lib_localtime.c
+CSRCS += lib_localtime.c lib_asctime.c lib_asctimer.c lib_ctime.c
+CSRCS += lib_ctimer.c
else
CSRCS += lib_mktime.c lib_gmtime.c lib_gmtimer.c
ifdef CONFIG_TIME_EXTENDED
-CSRCS += lib_dayofweek.c
+CSRCS += lib_dayofweek.c lib_asctime.c lib_asctimer.c lib_ctime.c
+CSRCS += lib_ctimer.c
endif
endif
diff --git a/libc/time/lib_asctime.c b/libc/time/lib_asctime.c
new file mode 100644
index 00000000000..9879b835fb4
--- /dev/null
+++ b/libc/time/lib_asctime.c
@@ -0,0 +1,72 @@
+/****************************************************************************
+ * libc/time/lib_asctime.c
+ *
+ * Copyright (C) 2015 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include
+
+#include
+
+#ifdef CONFIG_TIME_EXTENDED
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Function: asctime
+ *
+ * Description:
+ * asctime and asctime_r converts the time provided in a struct tm to a
+ * string representation. asctime is not re-entrant.
+ *
+ * Parameters:
+ * tp - Pointer to the time to be converted.
+ *
+ * Return Value:
+ * One success a pointer to the string is returned; on failure, NULL is
+ * returned.
+ *
+ ****************************************************************************/
+
+FAR char *asctime(FAR const struct tm *tp)
+{
+ static char buf[26];
+ return asctime_r(tp, buf);
+}
+
+#endif /* CONFIG_TIME_EXTENDED */
diff --git a/libc/time/lib_asctimer.c b/libc/time/lib_asctimer.c
new file mode 100644
index 00000000000..c6aedfadd96
--- /dev/null
+++ b/libc/time/lib_asctimer.c
@@ -0,0 +1,96 @@
+/****************************************************************************
+ * libc/time/lib_asctimer.c
+ *
+ * Copyright (C) 2015 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include
+
+#include
+#include
+
+#ifdef CONFIG_TIME_EXTENDED
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+/* Note: These strings duplicate other definitions in other files. These
+ * definitions could be combined to save a little FLASH space.
+ */
+
+static const char g_wday_name[7][3] =
+{
+ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
+};
+
+static const char g_mon_name[12][3] =
+{
+ "Jan", "Feb", "Mar", "Apr", "May", "Jun",
+ "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
+};
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Function: asctime_r
+ *
+ * Description:
+ * asctime and asctime_r converts the time provided in a struct tm to a
+ * string representation. asctime_r is re-entrant.
+ *
+ * Parameters:
+ * tp - Pointer to the time to be converted.
+ * buf - A user provided buffer to receive the 26 character time string.
+ *
+ * Return Value:
+ * One success, the pointer to the 'buf' is returned; on failure, NULL is
+ * returned.
+ *
+ ****************************************************************************/
+
+FAR char *asctime_r(FAR const struct tm *tp, FAR char *buf)
+{
+ snprintf(buf, 26, "%.3s %.3s%3d %.2d:%.2d:%.2d %d\n",
+ g_wday_name[tp->tm_wday], g_mon_name[tp->tm_mon],
+ tp->tm_mday, tp->tm_hour, tp->tm_min, tp->tm_sec,
+ 1900 + tp->tm_year);
+
+ return buf;
+}
+
+#endif /* CONFIG_TIME_EXTENDED */
diff --git a/libc/time/lib_ctime.c b/libc/time/lib_ctime.c
new file mode 100644
index 00000000000..d7360017028
--- /dev/null
+++ b/libc/time/lib_ctime.c
@@ -0,0 +1,82 @@
+/****************************************************************************
+ * libc/time/lib_asctime.c
+ *
+ * Copyright (C) 2015 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include
+
+#include
+
+#ifdef CONFIG_TIME_EXTENDED
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Function: ctime
+ *
+ * Description:
+ * ctime and ctime_r converts the time provided in seconds since the
+ * epoch to a string representation. asctime is not re-entrant. ctime is
+ * not re-entrant.
+ *
+ * Parameters:
+ * timep - The current time represented as seconds since the epoch.
+ *
+ * Return Value:
+ * One success a pointer to the string is returned; on failure, NULL is
+ * returned.
+ *
+ ****************************************************************************/
+
+FAR char *ctime(FAR const time_t *timep)
+{
+#ifdef CONFIG_LIBC_LOCALTIME
+ /* Section 4.12.3.2 of X3.159-1989 requires that
+ * The ctime function converts the calendar time pointed to by timer
+ * to local time in the form of a string. It is equivalent to
+ * asctime(localtime(timer))
+ */
+
+ return asctime(localtime(timep));
+#else
+ return asctime(gmtime(timep));
+#endif
+}
+
+#endif /* CONFIG_TIME_EXTENDED */
diff --git a/libc/time/lib_ctimer.c b/libc/time/lib_ctimer.c
new file mode 100644
index 00000000000..83260e1b095
--- /dev/null
+++ b/libc/time/lib_ctimer.c
@@ -0,0 +1,83 @@
+/****************************************************************************
+ * libc/time/lib_ctimer.c
+ *
+ * Copyright (C) 2015 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include
+
+#include
+
+#ifdef CONFIG_TIME_EXTENDED
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Function: ctime_r
+ *
+ * Description:
+ * ctime and ctime_r converts the time provided in seconds since the
+ * epoch to a string representation. asctime is not re-entrant. ctimer is
+ * re-entrant.
+ *
+ * Parameters:
+ * timep - The current time represented as seconds since the epoch.
+ * buf - A user provided buffer to receive the 26 character time string.
+ *
+ * Return Value:
+ * One success, the pointer to the 'buf' is returned; on failure, NULL is
+ * returned.
+ *
+ ****************************************************************************/
+
+FAR char *ctime_r(FAR const time_t *timep, FAR char *buf)
+{
+ struct tm tm;
+
+#ifdef CONFIG_LIBC_LOCALTIME
+ return asctime_r(localtime_r(timep, &tm), buf);
+#else
+ return asctime_r(gmtime_r(timep, &tm), buf);
+#endif
+}
+
+#endif /* CONFIG_TIME_EXTENDED */
diff --git a/libc/time/lib_localtime.c b/libc/time/lib_localtime.c
index 7f7ce35ed20..6e587f9486d 100644
--- a/libc/time/lib_localtime.c
+++ b/libc/time/lib_localtime.c
@@ -2533,28 +2533,6 @@ FAR struct tm *gmtime_r(FAR const time_t * const timep, struct tm *tmp)
return gmtsub(timep, 0L, tmp);
}
-#if 0 /* No asctime() */
-FAR char *ctime(FAR const time_t * const timep)
-{
- /* Section 4.12.3.2 of X3.159-1989 requires that
- * The ctime function converts the calendar time pointed to by timer
- * to local time in the form of a string. It is equivalent to
- * asctime(localtime(timer))
- */
-
- return asctime(localtime(timep));
-}
-#endif
-
-#if 0 /* No asctime_r */
-FAR char *ctime_r(FAR const time_t * const timep, char *buf)
-{
- struct tm mytm;
-
- return asctime_r(localtime_r(timep, &mytm), buf);
-}
-#endif
-
time_t mktime(struct tm * const tmp)
{
tzset();
|