Third time lucky - pasting inline into email and resending to all previous
lists.
Please note that conversion into too-small buffer size in regression test may
not have expected result!
Tried to build with below and variants:
gcc -D_REGRESSION_TEST -D_COMPILING_NEWLIB -Dsniprintf=snprintf
-I/usr/src/cygwin-2.2.1-1.src/newlib-cygwin/winsup/cygwin/include -o
strftime-s-test strftime.c
gives undef refs for __cygwin_gettzname, __cygwin_gettzoffset,
__get_current_time_locale, __tz_lock, __tz_unlock,
_tzset_unlocked
Build stc with std cmdline and current strftime works and does demo issue.
Forwarded Message
Subject: Fwd: Re: Bash unable to print epoch timestamp
Date: Fri, 23 Oct 2015 14:32:44 -0600
From: Brian Inglis
Reply-To: brian.ing...@systematicsw.ab.ca
Organisation: Systematic Software
To: corinna-cyg...@cygwin.com
Already forwarded as below to cygwin and ...patches-allow...
- should be HTML free and pass filters?
--
Take care. Thanks, Brian Inglis
Forwarded Message
Subject: Re: Bash unable to print epoch timestamp
Date: Thu, 22 Oct 2015 18:08:52 -0600
From: Brian Inglis
Reply-To: brian.ing...@systematicsw.ab.ca
Organisation: Systematic Software
To: cyg...@cygwin.com, cygwin-patches-allow-subscr...@cygwin.com
Corinna Vinschen cygwin.com> wrote:
On Oct 22 07:03, Brian Inglis wrote:
Brian Inglis SystematicSw.ab.ca> writes:
> Don Harrop effx.us> writes:
> > Bash outputs no value when using it's built in method of printing an
> > "epoch" timestamp.
> > BashCommandLine#: printf '%(%s)T' -1
> bash printf depends on underlying strftime in newlib, which does not support
> %s, as it is conditional on _WANT_C99_TIME_FORMATS being defined, and that
> is presumably not defined in the config, as %s is not shown in man strftime.
> Workaround for now is use
> date +%s
> for current time, and
> date -d $(printf '%(%T)T' -2) +%s
> for shell invocation time.
> %s, as it is conditional on _WANT_C99_TIME_FORMATS being defined, and that
Wrong! Misread the code, strftime %s is not supported!
STC and suggested patch appended (posting from gmane), compiles, but can't
build STC as ld fails with undef refs, and I don't know all the correct
LD..., -L and -l incantations. Email me for original files.
Cool, thanks for the patch. Unfortunately it doesn't apply cleanly.
There are several unexpected line wraps and there's this:
--- a/newlib/time/strftime.c 2015-08-20 03:39:24.0 -0600
+++ b/newlib/time/strftime.c 2015-10-21 20:15:22.367453000 -0600
How did this happen? If you checkout the newlib-cygwin git repo,
strftime.c is under newlib/libc/time, not under newlib/time :o
Tried to download and build from source tarball, then cygport, then
local source file, but some unobvious build prereqs missing in all
cases, as reported by ld. Finally just diffed local source against
distro and posted from gmane, with attempted fixups in the post.
Would you mind to attach a patch generated with git format-patch?
Sorry, not using git yet, as I am set up with hg on BitBucket
- AIUI the output is close enough the attached should work okay.
[cc ...patches-allow...]
--
Take care. Thanks, Brian Inglis, Calgary, Alberta, Canada
- >8 - 8< -
/* newlib/libc/time/strftime.c %s format STC */
#include
#include
int main( int argc, char **argv) {
char ss[BUFSIZ] = "";
time_t tt = time( NULL );
struct tm *tp = gmtime( );
tt = mktime( tp );
size_t st = strftime( ss, sizeof ss, "%s", tp);
int rc = puts( ss );
st = strftime( ss, sizeof ss, "%T", tp);
rc = puts( ss );
return rc;
}
- >8 - 8< -
2015-10-12 Brian Inglis
* newlib/libc/time/strftime.c (__strftime): add support for %s
(seconds from Unix epoch)
--- a/newlib/libc/time/strftime.c 1969-12-31 17:00:00.0 -0700
+++ b/newlib/libc/time/strftime.c 2015-10-26 04:27:12.244016200 -0600
@@ -0,0 +1,1903 @@
+/* NOTE: This file defines both strftime() and wcsftime(). Take care when
+ * making changes. See also wcsftime.c, and note the (small) overlap in the
+ * manual description, taking care to edit both as needed. */
+/*
+ * strftime.c
+ * Original Author:G. Haley
+ * Additions from: Eric Blake
+ * Changes to allow dual use as wcstime, also: Craig Howland
+ *
+ * Places characters into the array pointed to by s as controlled by the string
+ * pointed to by format. If the total number of resulting characters including
+ * the terminating null character is not more than maxsize, returns the number
+ * of characters placed into the array pointed to by s (not including the
+ * terminating null character); otherwise zero is returned and the contents of
+ * the array indeterminate.
+ */
+
+/*
+FUNCTION
+<>---convert date and time to a formatted