X-Recipient: archive-cygwin AT delorie DOT com X-SWARE-Spam-Status: No, hits=-1.7 required=5.0 tests=AWL,BAYES_00,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Message-ID: <4DCAA2A0.6040506@lysator.liu.se> Date: Wed, 11 May 2011 16:52:16 +0200 From: Peter Rosin User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.17) Gecko/20110414 Thunderbird/3.1.10 MIME-Version: 1.0 To: cygwin AT cygwin DOT com Subject: strptime doesn't fill in tm_wday and tm_yday. Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com Hello! The following STC hints at a problem in strptime: -----------------------8<---------------------------- #include #include int main(void) { /* seed tm with some garbage */ struct tm tm = { 0, 0, 0, /* s m h */ 0, 0, 0, /* d m y */ 290774, 2280577, 81 }; const char date[] = "2011-05-11 14:06:11"; if (!strptime(date, "%Y - %m - %d %T", &tm)) { fprintf(stderr, "strptime error\n"); return 1; } printf("%s", asctime(&tm)); printf("tm_yday %d\n", tm.tm_yday); printf("tm_wday %d\n", tm.tm_wday); printf("tm_isdst %d\n", tm.tm_isdst); return 0; } -----------------------8<---------------------------- I get this output with Cygwin 1.7.9-1: May 11 14:06:11 2011 tm_yday 2280577 tm_wday 290774 tm_isdst 81 I expect: Wed May 11 14:06:11 2011 tm_yday 130 tm_wday 3 tm_isdst whatever I get the expected output on the Linux host I tried (with tm_isdst=81), but not on Solaris 10. On Solaris 10 I get (for completeness): Sun May 11 14:06:11 2011 tm_yday 0 tm_wday 0 tm_isdst 0 Opengroup has this to say about only filling in some fields: "It is unspecified whether multiple calls to strptime() using the same tm structure will update the current contents of the structure or overwrite all contents of the structure. Conforming applications should make a single call to strptime() with a format and all data needed to completely specify the date and time being converted." but I don't think it applies since indeed I do completely specify the date in my strptime call. In my "real" program, the call to asctime with the crippled tm causes a seg-fault instead of "just" missing weekday output, I guess it depends... Cheers, Peter -- 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