From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 19528 invoked by alias); 1 Aug 2015 21:47:36 -0000 Mailing-List: contact cygwin-help@cygwin.com; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner@cygwin.com Mail-Followup-To: cygwin@cygwin.com Received: (qmail 19513 invoked by uid 89); 1 Aug 2015 21:47:35 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.4 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_LOW,RP_MATCHES_RCVD,SPF_HELO_PASS,SPF_PASS autolearn=ham version=3.3.2 X-HELO: plane.gmane.org Received: from plane.gmane.org (HELO plane.gmane.org) (80.91.229.3) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-SHA encrypted) ESMTPS; Sat, 01 Aug 2015 21:47:34 +0000 Received: from list by plane.gmane.org with local (Exim 4.69) (envelope-from ) id 1ZLecr-0007hL-Sd for cygwin@cygwin.com; Sat, 01 Aug 2015 23:47:30 +0200 Received: from S010690fba62c4bda.cg.shawcable.net ([96.51.88.197]) by main.gmane.org with esmtp (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Sat, 01 Aug 2015 23:47:29 +0200 Received: from Brian.Inglis by S010690fba62c4bda.cg.shawcable.net with local (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Sat, 01 Aug 2015 23:47:29 +0200 To: cygwin@cygwin.com From: Brian Inglis Subject: Re: Seg Fault in strftime Date: Sat, 01 Aug 2015 21:47:00 -0000 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit User-Agent: Loom/3.14 (http://gmane.org/) X-IsSubscribed: yes X-SW-Source: 2015-08/txt/msg00011.txt.bz2 Michael Enright kmcardiff.com> writes: > The tznam is set from the tmzone member and when this happens that > member is garbage. This member is garbage POSSIBLY because of a > configuration option in libmozjs. The calling code is in prmjtime.cpp > fills in a struct tm from Spidermonkey's own broken-down time > structure, 'a', and then if the configuration enables, it makes > *another* struct tm with more fields filled in in order to get > a.tm_zone's proper value. My guess is that the path is not enabled but > the bits delivered to me do not disclose whether this righteous code > path is enabled. __cygwin_gettzname is evidently compiled to expect > the tm_zone member to exist because GDB shows it does exist. > > So did any aspect of this change recently? The application and library > were getting along okay before I did cygwin updates. The last time I > had tried to run this code was early June, at which time I was running > it dozens of times a day. > > Also it appears that the tm_zone member is an extension. I haven't > been able to find POSIX guidance about how applications are supposed > use struct tm in compliance in the presence of implementation-defined > fields. POSIX example code shows a usage that does access the 'at > least' fields. The language allows for implementation-defined fields. > No mechanism is provided within POSIX to allow an application to > discover additional fields and take care of them. It seems to me that > an application can then assume that when it provides a struct tm as > input, filling in the time and date reasonably, it is always > sufficient to fill in the 'at least' fields and the implementation is > the one who has to assume that the rest of the fields might not be > filled in. Two problems I have encountered in the past with manually constructed struct tm: - failing to set struct tm.tm_isdst member to -1, or any negative value, so that mktime(3) will determine whether DST is in effect, and set the struct tm.tzname array from the tzdb - failing to call mktime(3) for each struct tm variable to normalize the struct tm members, determine if DST is in effect if struct tm.tm_isdst member is -1, and set the struct tm.tzname array from the tzdb. Check back in the code to see if struct tm.tm_isdst is set and to what value, and if mktime(3) is called on each struct tm after it is filled. - failing to call mktime() -- Problem reports: http://cygwin.com/problems.html FAQ: http://cygwin.com/faq/ Documentation: http://cygwin.com/docs.html Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple