diff options
author | Nicolas Hillegeer <nicolas@hillegeer.com> | 2014-07-20 16:53:18 +0200 |
---|---|---|
committer | Justin M. Keyes <justinkz@gmail.com> | 2014-07-20 18:27:45 -0400 |
commit | 636ddd075c8fdfffcac22281120baed9f293b266 (patch) | |
tree | 2d7e5956df2c749033950f786c364b019204ed7f | |
parent | 6610b002ef6068c4a7d4bdec3bd87d61fb934e71 (diff) | |
download | rneovim-636ddd075c8fdfffcac22281120baed9f293b266.tar.gz rneovim-636ddd075c8fdfffcac22281120baed9f293b266.tar.bz2 rneovim-636ddd075c8fdfffcac22281120baed9f293b266.zip |
os/time: fix os_localtime_r on win + add func_attr
- it makes no sense for these functions to take NULL pointers
- if `localtime()` on Windows returns a NULL pointer, the old code would try
to dereference it.
-rw-r--r-- | src/nvim/os/time.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/src/nvim/os/time.c b/src/nvim/os/time.c index 813cb073cf..e3b76ac833 100644 --- a/src/nvim/os/time.c +++ b/src/nvim/os/time.c @@ -84,7 +84,8 @@ static void microdelay(uint64_t microseconds) /// Portable version of POSIX localtime_r() /// /// @return NULL in case of error -struct tm *os_localtime_r(const time_t *clock, struct tm *result) +struct tm *os_localtime_r(const time_t *restrict clock, + struct tm *restrict result) FUNC_ATTR_NONNULL_ALL { #ifdef UNIX // POSIX provides localtime_r() as a thread-safe version of localtime(). @@ -93,8 +94,11 @@ struct tm *os_localtime_r(const time_t *clock, struct tm *result) // Windows version of localtime() is thread-safe. // See http://msdn.microsoft.com/en-us/library/bf12f0hc%28VS.80%29.aspx struct tm *local_time = localtime(clock); // NOLINT + if (!local_time) { + return NULL; + } *result = *local_time; -return result; + return result; #endif } @@ -103,7 +107,7 @@ return result; /// @param result Pointer to a 'struct tm' where the result should be placed /// @return A pointer to a 'struct tm' in the current time zone (the 'result' /// argument) or NULL in case of error -struct tm *os_get_localtime(struct tm *result) +struct tm *os_get_localtime(struct tm *result) FUNC_ATTR_NONNULL_ALL { time_t rawtime = time(NULL); return os_localtime_r(&rawtime, result); |