From e3444977887f7615cef271341f29f3a87a36eac9 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Wed, 13 Dec 2023 00:50:11 +0000 Subject: treewide: avoid strftime %k for portability The musl strftime(3) implementation on AlpineLinux 3.19.0 doesn't support `%k' and `%k' isn't in POSIX, either. So we fall back to using the `sprintf' perlop in the user-facing UI since leading zeroes require needless overhead for my eyes and brain to parse in the time. --- lib/PublicInbox/Admin.pm | 10 +++++++++- lib/PublicInbox/ExtSearchIdx.pm | 4 ++-- lib/PublicInbox/Hval.pm | 6 +++++- lib/PublicInbox/LeiMirror.pm | 4 ++-- lib/PublicInbox/LeiXSearch.pm | 3 ++- lib/PublicInbox/WwwStatic.pm | 5 ++--- 6 files changed, 22 insertions(+), 10 deletions(-) (limited to 'lib/PublicInbox') diff --git a/lib/PublicInbox/Admin.pm b/lib/PublicInbox/Admin.pm index cc9d2171..a1b1fc07 100644 --- a/lib/PublicInbox/Admin.pm +++ b/lib/PublicInbox/Admin.pm @@ -6,7 +6,7 @@ package PublicInbox::Admin; use v5.12; use parent qw(Exporter); -our @EXPORT_OK = qw(setup_signals); +our @EXPORT_OK = qw(setup_signals fmt_localtime); use PublicInbox::Config; use PublicInbox::Inbox; use PublicInbox::Spawn qw(run_qx); @@ -381,4 +381,12 @@ sub do_chdir ($) { } } +sub fmt_localtime ($) { + require POSIX; + my @lt = localtime $_[0]; + my (undef, $M, $H, $d, $m, $Y) = @lt; + sprintf('%u-%02u-%02u % 2u:%02u ', $Y + 1900, $m + 1, $d, $H, $M) + .POSIX::strftime('%z', @lt); +} + 1; diff --git a/lib/PublicInbox/ExtSearchIdx.pm b/lib/PublicInbox/ExtSearchIdx.pm index 7b7436ea..53078124 100644 --- a/lib/PublicInbox/ExtSearchIdx.pm +++ b/lib/PublicInbox/ExtSearchIdx.pm @@ -20,7 +20,6 @@ use parent qw(PublicInbox::ExtSearch PublicInbox::Umask PublicInbox::Lock); use Carp qw(croak carp); use Scalar::Util qw(blessed); use Sys::Hostname qw(hostname); -use POSIX qw(strftime); use File::Glob qw(bsd_glob GLOB_NOSORT); use PublicInbox::MultiGit; use PublicInbox::Search; @@ -34,6 +33,7 @@ use PublicInbox::ContentHash qw(content_hash); use PublicInbox::Eml; use PublicInbox::DS qw(now add_timer); use DBI qw(:sql_types); # SQL_BLOB +use PublicInbox::Admin qw(fmt_localtime); sub new { my (undef, $dir, $opt) = @_; @@ -749,7 +749,7 @@ sub eidxq_lock_acquire ($) { return $locked if $locked eq $cur; } my ($pid, $time, $euid, $ident) = split(/-/, $cur, 4); - my $t = strftime('%Y-%m-%d %k:%M %z', localtime($time)); + my $t = fmt_localtime($time); local $self->{current_info} = 'eidxq'; if ($euid == $> && $ident eq host_ident) { kill(0, $pid) and warn <{chg}->{fp_mismatch}; if ($mis) { - my $t = (stat($ft))[9]; - $t = strftime('%F %k:%M:%S %z', localtime($t)); + my $t = fmt_localtime((stat($ft))[9]); warn <qerr("# $uri limiting to ". - strftime('%Y-%m-%d %k:%M %z', localtime($lr)). ' and newer'); + PublicInbox::Admin::fmt_localtime($lr).' and newer'); # this should really be rt: (received-time), but no stable # public-inbox releases support it, yet. my $dt = 'dt:'.strftime('%Y%m%d%H%M%S', gmtime($lr)).'..'; diff --git a/lib/PublicInbox/WwwStatic.pm b/lib/PublicInbox/WwwStatic.pm index 1c1a3d38..d8902193 100644 --- a/lib/PublicInbox/WwwStatic.pm +++ b/lib/PublicInbox/WwwStatic.pm @@ -12,13 +12,12 @@ use strict; use v5.10.1; use parent qw(Exporter); use Fcntl qw(SEEK_SET O_RDONLY O_NONBLOCK); -use POSIX qw(strftime); use HTTP::Date qw(time2str); use HTTP::Status qw(status_message); use Errno qw(EACCES ENOTDIR ENOENT); use URI::Escape qw(uri_escape_utf8); use PublicInbox::GzipFilter qw(gzf_maybe); -use PublicInbox::Hval qw(ascii_html); +use PublicInbox::Hval qw(ascii_html fmt_ts); use Plack::MIME; our @EXPORT_OK = qw(@NO_CACHE r path_info_raw); @@ -299,7 +298,7 @@ sub dir_response ($$$) { $pad = 1 if $pad <= 0; $entry = qq(\n$name) . (' ' x $pad) . - strftime('%Y-%m-%d %k:%M', gmtime($mtime)) . + fmt_ts($mtime) . sprintf('% 8s', $hsize); } -- cgit v1.2.3-24-ge0c7