summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPaul Eggert <eggert@cs.ucla.edu>2015-07-23 18:49:31 -0700
committerPaul Eggert <eggert@cs.ucla.edu>2015-07-23 18:52:15 -0700
commit037e3b9847feb46cf6b58d99ce960d3987faaf52 (patch)
tree94b15de6669f6543038549ddf696f9968e557c48 /src
parent7131a3395205b410aaf5b2b774a594d9ae82cffb (diff)
downloadcoreutils-037e3b9847feb46cf6b58d99ce960d3987faaf52.tar.xz
build: fprintftime/nstrftime API changes
* bootstrap.conf (gnulib_modules): Add time_rz, since the main source code now uses timezone_t. * src/date.c (batch_convert, main, show_date): * src/ls.c (align_nstrftime, long_time_expected_width) (print_long_format): * src/stat.c (human_time): Use timezone_t rather than boolean to specify which time zone is wanted. * src/ls.c (localtz): New static var. (main): Initialize it.
Diffstat (limited to 'src')
-rw-r--r--src/date.c16
-rw-r--r--src/ls.c15
-rw-r--r--src/stat.c5
3 files changed, 24 insertions, 12 deletions
diff --git a/src/date.c b/src/date.c
index eaee8b273..fae0256ad 100644
--- a/src/date.c
+++ b/src/date.c
@@ -38,7 +38,7 @@
#define AUTHORS proper_name ("David MacKenzie")
-static bool show_date (const char *format, struct timespec when);
+static bool show_date (const char *, struct timespec, timezone_t);
enum Time_spec
{
@@ -272,7 +272,7 @@ Show the local time for 9AM next Friday on the west coast of the US\n\
Return true if successful. */
static bool
-batch_convert (const char *input_filename, const char *format)
+batch_convert (const char *input_filename, const char *format, timezone_t tz)
{
bool ok;
FILE *in_stream;
@@ -315,7 +315,7 @@ batch_convert (const char *input_filename, const char *format)
}
else
{
- ok &= show_date (format, when);
+ ok &= show_date (format, when, tz);
}
}
@@ -485,8 +485,10 @@ main (int argc, char **argv)
}
}
+ timezone_t tz = tzalloc (getenv ("TZ"));
+
if (batch_file != NULL)
- ok = batch_convert (batch_file, format);
+ ok = batch_convert (batch_file, format, tz);
else
{
bool valid_date = true;
@@ -543,7 +545,7 @@ main (int argc, char **argv)
}
}
- ok &= show_date (format, when);
+ ok &= show_date (format, when, tz);
}
return ok ? EXIT_SUCCESS : EXIT_FAILURE;
@@ -553,7 +555,7 @@ main (int argc, char **argv)
in FORMAT, followed by a newline. Return true if successful. */
static bool
-show_date (const char *format, struct timespec when)
+show_date (const char *format, struct timespec when, timezone_t tz)
{
struct tm *tm;
@@ -567,7 +569,7 @@ show_date (const char *format, struct timespec when)
if (format == rfc_2822_format)
setlocale (LC_TIME, "C");
- fprintftime (stdout, format, tm, 0, when.tv_nsec);
+ fprintftime (stdout, format, tm, tz, when.tv_nsec);
fputc ('\n', stdout);
if (format == rfc_2822_format)
setlocale (LC_TIME, "");
diff --git a/src/ls.c b/src/ls.c
index 6860dd413..fe95a4667 100644
--- a/src/ls.c
+++ b/src/ls.c
@@ -699,6 +699,10 @@ static bool print_dir_name;
static size_t line_length;
+/* The local time zone rules, as per the TZ environment variable. */
+
+static timezone_t localtz;
+
/* If true, the file listing format requires that stat be called on
each file. */
@@ -1374,6 +1378,8 @@ main (int argc, char **argv)
obstack_init (&dev_ino_obstack);
}
+ localtz = tzalloc (getenv ("TZ"));
+
format_needs_stat = sort_type == sort_time || sort_type == sort_size
|| format == long_format
|| print_scontext
@@ -3654,7 +3660,7 @@ print_current_files (void)
static size_t
align_nstrftime (char *buf, size_t size, char const *fmt, struct tm const *tm,
- int __utc, int __ns)
+ timezone_t tz, int ns)
{
const char *nfmt = fmt;
/* In the unlikely event that rpl_fmt below is not large enough,
@@ -3674,7 +3680,7 @@ align_nstrftime (char *buf, size_t size, char const *fmt, struct tm const *tm,
strcpy (pfmt, pb + 2);
}
}
- size_t ret = nstrftime (buf, size, nfmt, tm, __utc, __ns);
+ size_t ret = nstrftime (buf, size, nfmt, tm, tz, ns);
return ret;
}
@@ -3702,7 +3708,8 @@ long_time_expected_width (void)
if (tm)
{
size_t len =
- align_nstrftime (buf, sizeof buf, long_time_format[0], tm, 0, 0);
+ align_nstrftime (buf, sizeof buf, long_time_format[0], tm,
+ localtz, 0);
if (len != 0)
width = mbsnwidth (buf, len, 0);
}
@@ -3987,7 +3994,7 @@ print_long_format (const struct fileinfo *f)
/* We assume here that all time zones are offset from UTC by a
whole number of seconds. */
s = align_nstrftime (p, TIME_STAMP_LEN_MAXIMUM + 1, fmt,
- when_local, 0, when_timespec.tv_nsec);
+ when_local, localtz, when_timespec.tv_nsec);
}
if (s || !*p)
diff --git a/src/stat.c b/src/stat.c
index 6d2366539..680a598f0 100644
--- a/src/stat.c
+++ b/src/stat.c
@@ -547,10 +547,13 @@ human_time (struct timespec t)
(INT_STRLEN_BOUND (int) /* YYYY */
+ 1 /* because YYYY might equal INT_MAX + 1900 */
+ sizeof "-MM-DD HH:MM:SS.NNNNNNNNN +ZZZZ"))];
+ static timezone_t tz;
+ if (!tz)
+ tz = tzalloc (getenv ("TZ"));
struct tm const *tm = localtime (&t.tv_sec);
if (tm == NULL)
return timetostr (t.tv_sec, str);
- nstrftime (str, sizeof str, "%Y-%m-%d %H:%M:%S.%N %z", tm, 0, t.tv_nsec);
+ nstrftime (str, sizeof str, "%Y-%m-%d %H:%M:%S.%N %z", tm, tz, t.tv_nsec);
return str;
}