Use localtime_r only when HAVE_LOCALTIME_R is defined. Might be undefined on some weird systems out there, e.g. windows/mingw32.

git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@14081 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
Christian Stimming 2006-05-16 09:32:47 +00:00
parent 2810b01eb6
commit b33f376ad2
2 changed files with 64 additions and 16 deletions

View File

@ -1,3 +1,11 @@
2006-05-16 Christian Stimming <stimming@tuhh.de>
* lib/libqof/qof/gnc-date.c (timespecCanonicalDayTime)
(qof_print_date_buff, dateSeparator, gnc_timespec_last_mday)
(gnc_timespec2dmy): Use localtime_r only when HAVE_LOCALTIME_R is
defined. Might be undefined on some weird systems out there,
e.g. windows/mingw32.
2006-05-15 Derek Atkins <derek@ihtfp.com>
* src/import-export/test/Makefile.am:

View File

@ -249,9 +249,17 @@ Timespec
timespecCanonicalDayTime(Timespec t)
{
struct tm tm;
#ifndef HAVE_LOCALTIME_R
struct tm *result;
#endif
Timespec retval;
time_t t_secs = t.tv_sec + (t.tv_nsec / NANOS_PER_SECOND);
#ifndef HAVE_LOCALTIME_R
result = localtime(&t_secs);
tm = *result;
#else
localtime_r(&t_secs, &tm);
#endif
gnc_tm_set_day_middle(&tm);
retval.tv_sec = mktime(&tm);
retval.tv_nsec = 0;
@ -495,16 +503,24 @@ qof_print_date_dmy_buff (char * buff, size_t len, int day, int month, int year)
size_t
qof_print_date_buff (char * buff, size_t len, time_t t)
{
struct tm theTime;
#ifdef HAVE_LOCALTIME_R
struct tm theTime_tm;
#endif
struct tm *theTime;
if (!buff) return 0 ;
localtime_r(&t, &theTime);
#ifdef HAVE_LOCALTIME_R
localtime_r (&t, &theTime_tm);
theTime = &theTime_tm;
#else
theTime = localtime (&t);
#endif
return qof_print_date_dmy_buff (buff, len,
theTime.tm_mday,
theTime.tm_mon + 1,
theTime.tm_year + 1900);
theTime->tm_mday,
theTime->tm_mon + 1,
theTime->tm_year + 1900);
}
size_t
@ -938,13 +954,21 @@ char dateSeparator (void)
else
{ /* Make a guess */
unsigned char string[256];
struct tm tm;
struct tm *tm;
#ifdef HAVE_LOCALTIME_R
struct tm struct_tm;
#endif
time_t secs;
unsigned char *s;
secs = time(NULL);
localtime_r(&secs, &tm);
strftime(string, sizeof(string), GNC_D_FMT, &tm);
#ifdef HAVE_LOCALTIME_R
localtime_r(&secs, &struct_tm);
tm = &struct_tm;
#else
tm = localtime(&secs);
#endif
strftime(string, sizeof(string), GNC_D_FMT, tm);
for (s = string; s != '\0'; s++)
if (!isdigit(*s))
@ -1190,22 +1214,38 @@ gnc_timespec_to_iso8601_buff (Timespec ts, char * buff)
int
gnc_timespec_last_mday (Timespec t)
{
struct tm result;
#ifdef HAVE_LOCALTIME_R
struct tm tm;
#endif
struct tm *result;
time_t t_secs = t.tv_sec + (t.tv_nsec / NANOS_PER_SECOND);
localtime_r(&t_secs, &result);
return date_get_last_mday (&result);
#ifdef HAVE_LOCALTIME_R
localtime_r(&t_secs, &tm);
result = &tm;
#else
result = localtime(&t_secs);
#endif
return date_get_last_mday (result);
}
void
gnc_timespec2dmy (Timespec t, int *day, int *month, int *year)
{
struct tm result;
#ifdef HAVE_LOCALTIME_R
struct tm tm;
#endif
struct tm *result;
time_t t_secs = t.tv_sec + (t.tv_nsec / NANOS_PER_SECOND);
localtime_r(&t_secs, &result);
#ifdef HAVE_LOCALTIME_R
localtime_r(&t_secs, &tm);
result = &tm;
#else
result = localtime(&t_secs);
#endif
if (day) *day = result.tm_mday;
if (month) *month = result.tm_mon+1;
if (year) *year = result.tm_year+1900;
if (day) *day = result->tm_mday;
if (month) *month = result->tm_mon+1;
if (year) *year = result->tm_year+1900;
}
/********************************************************************\