Subject: Re: ssmtp "Date:" oddity
From: Brian Dessent <[email-masked]>
To: [email-masked]
Date: Sun, 01 Feb 2004 21:37:22 -0800

Igor Pechtchanski wrote:
> 
> On Mon, 2 Feb 2004, Robert R Schneck wrote:
> 
> > Maybe someone can help me understand this.  The problem is in the
> > following format string to strftime:
> >
> >         /* RFC822 format string borrowed from GNU shellutils date.c */
> >         const char *format = "%a, %_d %b %Y %H:%M:%S %z";
> >
> >         now = time(NULL);
> >         date = localtime((const time_t *)&now);
> >         (void)strftime(d_string, ARPADATE_LENGTH, format, date);
> >
> > Both %_ and %z become nothing.
>
> Most likely the latter.  Cygwin gets its strftime implementation from
> newlib, which understands neither of the two format strings above.
> 
> IIUC, "%_d" is intended to produce the day of the month preceded by a
> blank if single-digit.  In newlib and all other systems I could access
> this is accomplished via the "%e" strftime format string.  I couldn't even
> find "%_d" until I looked at "date --help", and found out that "date" uses
> the underscore ("_") to indicate space padding (although the newer GNU
> versions also support "%e" for space-padded day).  It is my guess that
> "%_d" is a typo and should be fixed.
> 
> "%z" is a harder case, since some systems (Darwin, Linux) do understand
> it, and some (newlib, Solaris, BSD) don't.  The Linux man page lists "%z"
> as a GNU extension.  I would guess newlib would be happy to support it
> given a patch, since it is (to quote the Linux man page) "required to
> emit RFC822-conformant dates", but it's their call.

Yes, those are both GNU extensions, see
<http://www.gnu.org/software/libc/manual/html_node/Formatting-Calendar-Time.html#Formatting%20Calendar%20Time>

However, the page does mention that "%z" is supposed to be in C99.  But
I can echo a story of heartburn and hair pulling trying to figure out
why it didn't work under FreeBSD.  It my case it was actually
strptime(), but its manpage says that it supports all the format
specifiers of strftime.  Insidiously, the FreeBSD manpage for
strftime(3) lists support for %z.  But there's no support for it in
strptime.  I finally rooted around in CVS to find the darn source for
that function:
<http://www.freebsd.org/cgi/cvsweb.cgi/~checkout~/src/lib/libc/stdtime/strptime.c?rev=1.35> 
...At which point I discovered the error in their manpage.  I then began
on a trek to get their stupid 'send-pr' thing to work to report it. 
They ONLY accept pr's through email, but their mail server is picky in
whom it will talk to -- my FreeBSD server had no reverse DNS at the
time, and of course you can't run send-pr on any other kind of system. 
So after doing all that I finally found that this had been reported
before in their pr database, likely by other really PO'd people that had
wasted hours and hours on this stupid issue that could be fixed by
adding a single sentence to a manpage.  And yet to this day it's still
not fixed, so I'm sure others are having this same issue if they want to
use %z in their code.  *BIG SIGH*  Not bitter, I swear...

Brian

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/