mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-11 14:21:10 +02:00
(bdtime2c): Test HAVE_STRUCT_TM_TM_GMTOFF for tm_gmtoff, rather than
HAVE_TM_ZONE. (scm_strptime): Use tm_gmtoff from the strptime result when that field exists, it's set by glibc strptime "%s".
This commit is contained in:
parent
dd1aea35e1
commit
9b24833dbf
1 changed files with 16 additions and 2 deletions
|
@ -497,8 +497,10 @@ bdtime2c (SCM sbd_time, struct tm *lt, int pos, const char *subr)
|
||||||
lt->tm_wday = scm_to_int (SCM_SIMPLE_VECTOR_REF (sbd_time, 6));
|
lt->tm_wday = scm_to_int (SCM_SIMPLE_VECTOR_REF (sbd_time, 6));
|
||||||
lt->tm_yday = scm_to_int (SCM_SIMPLE_VECTOR_REF (sbd_time, 7));
|
lt->tm_yday = scm_to_int (SCM_SIMPLE_VECTOR_REF (sbd_time, 7));
|
||||||
lt->tm_isdst = scm_to_int (SCM_SIMPLE_VECTOR_REF (sbd_time, 8));
|
lt->tm_isdst = scm_to_int (SCM_SIMPLE_VECTOR_REF (sbd_time, 8));
|
||||||
#ifdef HAVE_TM_ZONE
|
#if HAVE_STRUCT_TM_TM_GMTOFF
|
||||||
lt->tm_gmtoff = - scm_to_int (SCM_SIMPLE_VECTOR_REF (sbd_time, 9));
|
lt->tm_gmtoff = - scm_to_int (SCM_SIMPLE_VECTOR_REF (sbd_time, 9));
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_TM_ZONE
|
||||||
if (scm_is_false (SCM_SIMPLE_VECTOR_REF (sbd_time, 10)))
|
if (scm_is_false (SCM_SIMPLE_VECTOR_REF (sbd_time, 10)))
|
||||||
lt->tm_zone = NULL;
|
lt->tm_zone = NULL;
|
||||||
else
|
else
|
||||||
|
@ -731,6 +733,7 @@ SCM_DEFINE (scm_strptime, "strptime", 2, 0, 0,
|
||||||
{
|
{
|
||||||
struct tm t;
|
struct tm t;
|
||||||
const char *fmt, *str, *rest;
|
const char *fmt, *str, *rest;
|
||||||
|
long zoff;
|
||||||
|
|
||||||
SCM_VALIDATE_STRING (1, format);
|
SCM_VALIDATE_STRING (1, format);
|
||||||
SCM_VALIDATE_STRING (2, string);
|
SCM_VALIDATE_STRING (2, string);
|
||||||
|
@ -748,6 +751,9 @@ SCM_DEFINE (scm_strptime, "strptime", 2, 0, 0,
|
||||||
tm_init (tm_year);
|
tm_init (tm_year);
|
||||||
tm_init (tm_wday);
|
tm_init (tm_wday);
|
||||||
tm_init (tm_yday);
|
tm_init (tm_yday);
|
||||||
|
#if HAVE_STRUCT_TM_TM_GMTOFF
|
||||||
|
tm_init (tm_gmtoff);
|
||||||
|
#endif
|
||||||
#undef tm_init
|
#undef tm_init
|
||||||
|
|
||||||
/* GNU glibc strptime() "%s" is affected by the current timezone, since it
|
/* GNU glibc strptime() "%s" is affected by the current timezone, since it
|
||||||
|
@ -766,7 +772,15 @@ SCM_DEFINE (scm_strptime, "strptime", 2, 0, 0,
|
||||||
SCM_SYSERROR;
|
SCM_SYSERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
return scm_cons (filltime (&t, 0, NULL),
|
/* tm_gmtoff is set by GNU glibc strptime "%s", so capture it when
|
||||||
|
available */
|
||||||
|
#if HAVE_STRUCT_TM_TM_GMTOFF
|
||||||
|
zoff = - t.tm_gmtoff; /* seconds west, not east */
|
||||||
|
#else
|
||||||
|
zoff = 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return scm_cons (filltime (&t, zoff, NULL),
|
||||||
scm_from_signed_integer (rest - str));
|
scm_from_signed_integer (rest - str));
|
||||||
}
|
}
|
||||||
#undef FUNC_NAME
|
#undef FUNC_NAME
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue