- Added portable implementation of timegm for non GNU/BSD platforms that
  don't have their own implementation
- Removed the use of tm_gmtoff on non GNU/BSD platforms that don't have
  it as part of the tm struct in time.h
- Added CMake tests HAVE_TIMEGM and HAVE_TM_GMTOFF
This commit is contained in:
Owen Clarke 2012-07-16 22:45:11 +10:00
parent 7e48eb9ec2
commit a655be823b
6 changed files with 39 additions and 0 deletions

View file

@ -2,6 +2,7 @@ cmake_minimum_required (VERSION 2.8)
set(CMAKE_LEGACY_CYGWIN_WIN32 0) # Remove when CMake >= 2.8.4 is required
include (CheckFunctionExists)
include (CheckStructHasMember)
set (HAVE_CMAKE true)
@ -65,6 +66,9 @@ endif (LUA51_FOUND)
check_function_exists (random HAVE_RANDOM)
check_function_exists (srandom HAVE_SRANDOM)
check_function_exists (timegm HAVE_TIMEGM)
check_struct_has_member ("struct tm" tm_gmtoff time.h HAVE_TM_GMTOFF)
message ("-- Looking for libuuid")
if (DARWIN)

View file

@ -110,6 +110,8 @@ Bugs
modification (thanks to Christoph Lange).
+ Fixed bug #1028, so that UDA durations are stored in seconds, not in raw form
(thank to Uli Martens).
+ Fixed bug #1030, which defines a portable implementation of timegm and removes
the use of tm_gmtoff for non GNU/BSD platforms.
------ old releases ------------------------------

View file

@ -57,6 +57,12 @@ Override PACKAGE_LANGUAGE, then
/* Found srandom */
#cmakedefine HAVE_SRANDOM
/* Found tm_gmtoff */
#cmakedefine HAVE_TM_GMTOFF
/* Found timegm */
#cmakedefine HAVE_TIMEGM
/* Found the uuid library */
#cmakedefine HAVE_UUID
#cmakedefine HAVE_UUID_UNPARSE_LOWER

View file

@ -37,6 +37,7 @@
#ifdef NIBBLER_FEATURE_REGEX
#include <RX.h>
#endif
#include <cmake.h>
static const char* _uuid_pattern = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx";
static const unsigned int _uuid_min_length = 9;
@ -701,7 +702,9 @@ bool Nibbler::getDateISO (time_t& t)
tms.tm_hour = hour;
tms.tm_min = minute;
tms.tm_sec = second;
#ifdef HAVE_TM_GMTOFF
tms.tm_gmtoff = 0;
#endif
t = timegm (&tms);
return true;

View file

@ -610,3 +610,23 @@ const std::string indentProject (
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
#ifndef HAVE_TIMEGM
time_t timegm (struct tm *tm)
{
time_t ret;
char *tz;
tz = getenv ("TZ");
setenv ("TZ", "UTC", 1);
tzset ();
ret = mktime (tm);
if (tz)
setenv ("TZ", tz, 1);
else
unsetenv ("TZ");
tzset ();
return ret;
}
#endif
////////////////////////////////////////////////////////////////////////////////

View file

@ -84,5 +84,9 @@ const std::string indentProject (
const std::string& whitespace = " ",
char delimiter = '.');
#ifndef HAVE_TIMEGM
time_t timegm (struct tm *tm);
#endif
#endif
////////////////////////////////////////////////////////////////////////////////