diff options
Diffstat (limited to 'nxcomp/src/Timestamp.cpp')
-rw-r--r-- | nxcomp/src/Timestamp.cpp | 55 |
1 files changed, 38 insertions, 17 deletions
diff --git a/nxcomp/src/Timestamp.cpp b/nxcomp/src/Timestamp.cpp index e7e0c494a..4a9dd3347 100644 --- a/nxcomp/src/Timestamp.cpp +++ b/nxcomp/src/Timestamp.cpp @@ -44,34 +44,55 @@ T_timestamp timestamp; -// -// The following functions all use the ctime -// static buffer from the C library. -// - -char *strTimestamp(const T_timestamp &ts) +std::string strTimestamp(const T_timestamp &ts) { - char *ctime_now = ctime((time_t *) &ts.tv_sec); + std::string ret; + + char ctime_now[26] = { }; + bool err = true; - ctime_now[24] = '\0'; +#if HAVE_CTIME_S + errno_t retval = ::ctime_s(ctime_now, sizeof(ctime_now), static_cast<const time_t*>(&ts.tv_sec)); - return ctime_now; + if (retval != 0) +#else + char *retval = ::ctime_r(static_cast<const time_t*>(&ts.tv_sec), ctime_now); + + if (!(retval)) +#endif + { + std::cerr << "WARNING: converting time to string failed." << std::endl; + } + else + { + /* Replace newline at position 25 with a NULL byte. */ + ctime_now[24] = '\0'; + + ret = ctime_now; + } + + return ret; } // -// This is especially dirty. +// This is especially dirty. // -char *strMsTimestamp(const T_timestamp &ts) +std::string strMsTimestamp(const T_timestamp &ts) { - char *ctime_now = ctime((time_t *) &ts.tv_sec); + std::string ret; + + std::string ctime_now = strTimestamp(ts); - char ctime_new[25]; + if (!(ctime_now.empty())) + { + char ctime_new[26] = { }; - sprintf(ctime_new, "%.8s:%3.3f", ctime_now + 11, - (float) ts.tv_usec / 1000); + snprintf(ctime_new, sizeof(ctime_new), "%.8s:%3.3f", + ctime_now.c_str() + 11, static_cast<float>(ts.tv_usec) / 1000); - strncpy(ctime_now, ctime_new, 24); + ret = ctime_new; + } - return ctime_now; + return ret; } |