diff options
author | Eric Wong <e@80x24.org> | 2022-09-10 08:17:22 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2022-09-10 19:50:51 +0000 |
commit | ee098bc50cc61538ea22264df951855ed09736ec (patch) | |
tree | 9b8ca834b10b48e25f94d9b8c561b361b1293159 /lib/PublicInbox | |
parent | 75527bc4bc897c7556e71e4daf79096188af1170 (diff) | |
download | public-inbox-ee098bc50cc61538ea22264df951855ed09736ec.tar.gz |
->zmore isn't cheap, and we can be smarter about how we place newlines to avoid a `join' operation, now. We can also drop some unused variables, here.
Diffstat (limited to 'lib/PublicInbox')
-rw-r--r-- | lib/PublicInbox/WwwStatic.pm | 32 |
1 files changed, 15 insertions, 17 deletions
diff --git a/lib/PublicInbox/WwwStatic.pm b/lib/PublicInbox/WwwStatic.pm index eeb5e565..1c1a3d38 100644 --- a/lib/PublicInbox/WwwStatic.pm +++ b/lib/PublicInbox/WwwStatic.pm @@ -275,12 +275,11 @@ sub dir_response ($$$) { my $path_info = $env->{PATH_INFO}; push @entries, '..' if $path_info ne '/'; for my $base (@entries) { + my @st = stat($fs_path . $base) or next; # unlikely my $href = ascii_html(uri_escape_utf8($base)); my $name = ascii_html($base); - my @st = stat($fs_path . $base) or next; # unlikely - my ($gzipped, $uncompressed, $hsize); - my $entry = ''; my $mtime = $st[9]; + my ($entry, $hsize); if (-d _) { $href .= '/'; $name .= '/'; @@ -296,12 +295,12 @@ sub dir_response ($$$) { next; } # 54 = 80 - (SP length(strftime(%Y-%m-%d %k:%M)) SP human_size) - $hsize = sprintf('% 8s', $hsize); my $pad = 54 - length($name); $pad = 1 if $pad <= 0; - $entry .= qq(<a\nhref="$href">$name</a>) . (' ' x $pad); - $mtime = strftime('%Y-%m-%d %k:%M', gmtime($mtime)); - $entry .= $mtime . $hsize; + $entry = qq(\n<a\nhref="$href">$name</a>) . + (' ' x $pad) . + strftime('%Y-%m-%d %k:%M', gmtime($mtime)) . + sprintf('% 8s', $hsize); } # filter out '.gz' files as long as the mtime matches the @@ -309,17 +308,16 @@ sub dir_response ($$$) { delete(@other{keys %want_gz}); @entries = ((map { ${$dirs{$_}} } sort keys %dirs), (map { ${$other{$_}} } sort keys %other)); - my $path_info_html = ascii_html($path_info); - my $h = [qw(Content-Type text/html Content-Length), undef]; - my $gzf = gzf_maybe($h, $env); - $gzf->zmore("<html><head><title>Index of $path_info_html</title>" . - ${$self->{style}} . - "</head><body><pre>Index of $path_info_html</pre><hr><pre>\n"); - $gzf->zmore(join("\n", @entries)); - my $out = $gzf->zflush("</pre><hr></body></html>\n"); - $h->[3] = length($out); - [ 200, $h, [ $out ] ] + my @h = qw(Content-Type text/html); + my $gzf = gzf_maybe(\@h, $env); + print { $gzf->zfh } '<html><head><title>Index of ', $path_info_html, + '</title>', ${$self->{style}}, '</head><body><pre>Index of ', + $path_info_html, '</pre><hr><pre>', @entries, + '</pre><hr></body></html>'; + my $out = $gzf->zflush; + push @h, 'Content-Length', length($out); + [ 200, \@h, [ $out ] ] } sub call { # PSGI app endpoint |