From 34a6028663ecc4c5458178966821cc32d3683231 Mon Sep 17 00:00:00 2001 From: Jes Cok Date: Sun, 11 Jun 2023 21:42:07 +0800 Subject: [PATCH] archive/tar: optimize formatter's formatString When dealing with the last special case, we only need to know the string length after TrimRight '/'. This optimization clarifies what we really want and speeds up the execution. --- src/archive/tar/strconv.go | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/archive/tar/strconv.go b/src/archive/tar/strconv.go index ac3196370e..601b9bc17d 100644 --- a/src/archive/tar/strconv.go +++ b/src/archive/tar/strconv.go @@ -73,8 +73,13 @@ func (f *formatter) formatString(b []byte, s string) { // in the V7 path field as a directory even though the full path // recorded elsewhere (e.g., via PAX record) contains no trailing slash. if len(s) > len(b) && b[len(b)-1] == '/' { - n := len(strings.TrimRight(s[:len(b)], "/")) - b[n] = 0 // Replace trailing slash with NUL terminator + i := len(b) - 2 // s[len(b)-1] == '/' + for ; i >= 0; i-- { + if s[i] != '/' { + break + } + } + b[i+1] = 0 // Replace trailing slash with NUL terminator } }