bug-guile
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: guile 1.8.5 solaris 10 sparc with gcc strftime testing


From: ras
Subject: Re: guile 1.8.5 solaris 10 sparc with gcc strftime testing
Date: Tue, 26 Aug 2008 18:12:13 +0000 (UTC)
User-agent: Loom/3.14 (http://gmane.org/)

aloha Ludovic

with respect to solaris 10 sparc and the strftime tests

the guile-1.8.5 check-guile.log shows that the first strftime test
passes:

PASS: time.test: strftime: C99 %z format: GMT

but the second test fails

FAIL: time.test: strftime: C99 %z format: EST+5

using csh with LC_ALL=C and TZ=US/Pacific

date '+%z' yields
-0700

if i alter TZ
setenv TZ GMT+0 ( to that for the first test )
+0000
as expected

setenv TZ EST+5 ( to that for the second test )
-0500
which seems to be what the test expects, but apparently isn't getting back.
it's a shame what was returned from the strftime call isn't logged.


running the tests/time.test manually with --debug doesn't yield any more
information about what was returned ...


sorry i can't be of more help ... well i'm unable to resist the challenge
but i don't know scheme or the guile implementation so what appears below
should be considered naive

hacking into tests/time.test just after the     (pass-if "GMT" ... block

    (display (let ((tm (localtime 86400)))
    (strftime "%z" tm)))
    (newline)

i'm getting
+0000

so i then added similar code just after the     (pass-if "EST+5" ... block
and also am getting
+0000

with a bit more playing around it is looking to me like the sun strftime
isn't doing what the manpage suggests, but then this section could be a
bit more clear about what timezone is exactly and what exactly is returned
in place of %z.

     %z       Replaced by offset from UTC in ISO 8601:2000  stan-
              dard  format  (+hhmm or -hhmm), or by no characters
              if no timezone is  determinable.  For  example,  "-
              0430"  means 4 hours 30 minutes behind UTC (west of
              Greenwich).  If tm_isdst is zero, the standard time
              offset  is used.  If tm_isdst is greater than zero,
              the  daylight  savings  time  offset  if  used.  If
              tm_isdst is negative, no characters are returned.

as near as i can determine, the %z flag will always return +0000
with the time (hour/min) adjusted the according to the value specified in the
TZ envvar. e.g. TZ=EST+5 is returning %c %z as 'Thu Jan 01 19:00:00 1970 +0000',
TZ=GMT+8 results in %c %z returning 'Thu Jan 01 16:00:00 1970 +0000'
and TZ=GMT-1 results in %c %z returning 'Fri Jan 02 01:00:00 1970 +0000'.

without a (recognized) timezone string in TZ but with an offset, there
is no time adjustment at all. e.g. TZ=-0800 results in %c %z returning
'Fri Jan 02 00:00:00 1970 +0000' and as i show in the followup below
TZ=+0000 results in %c %z returning 'Fri Jan 02 00:00:00 1970 +0000'.


i might note that my locale is C and for that locale on sol10 LC_TIME is empty


hope this helps resolve the test problem for solaris ... yell if i can eval
anything further ...


regards

ras



couple of followups:

while the csh session indicates that TZ = EST+5 yielding via a
date command like: /usr/bin/date '+%z'
-0500
means the time.test should pass, the testing result differs, returning
timezone of +0000 but with the time (hhmm) adjusted in accordance with
EST+5:

    ;; prior to guile 1.6.9 and 1.8.1 this test failed, getting "+0500",
    ;; because we didn't adjust for tm:gmtoff being west of Greenwich versus
    ;; tm_gmtoff being east of Greenwich
    (pass-if "EST+5"
      (or have-strftime-%z (throw 'unsupported))
      (putenv "TZ=EST+5")
      (tzset)

    (display "tz expect: EST+5 :: ")
    (display (getenv "TZ"))
    (newline)

      (let ((tm (localtime 86400)))
        (string=? "+0000" (strftime "%z" tm))))
;;; this was changed^^^^ from -0500

    (display "date expect: +0000 :: ")
    (display (let ((tm (localtime 86400)))
        (strftime "%c %z" tm)))
    (newline)
    (newline)

prints
tz expect: EST+5 :: EST+5
date expect: +0000 :: Thu Jan 01 19:00:00 1970 +0000
note time has been adjusted      ^^ to EST

Ludo' asked:
So what does "(strftime "%z" (gmtime 0))" return?  Do you mean that it's
"+0000"?

yes ... as i show below.

from the csh:
setenv TZ 0
/usr/bin/date '+%c %z'
Tue Aug 26 17:17:53 2008 +0000

and
setenv TZ +0000
/usr/bin/date '+%z'
+0000

a hacked tests/time.test
with

    (pass-if "+0000"
      (or have-strftime-%z (throw 'unsupported))
      (putenv "TZ=+0000")
      (tzset)

    (display "+0000 tz expect: +0000 :: ")
    (display (getenv "TZ"))
    (newline)

      (let ((tm (localtime 86400)))
     (string=? "+0000" (strftime "%z" tm))))

    (display "date expect: +0000 :: ")
    (display (let ((tm (localtime 86400)))
     (strftime "%c %z" tm)))
    (newline)
    (newline)

prints:
+0000 tz expect: +0000 :: +0000
date expect: +0000 :: Fri Jan 02 00:00:00 1970 +0000



i googled strftime and found margin notes to strftime that might
be part of this issue, but don't know internals well enough to
really know. here's the url:
http://www.opengroup.org/onlinepubs/009695399/functions/strftime.html

aloha

ras






reply via email to

[Prev in Thread] Current Thread [Next in Thread]