From be63ecd9711b46135bbff1769c2e4c3642255ef1 Mon Sep 17 00:00:00 2001 From: Runxi Yu Date: Sat, 13 Jun 2026 03:32:21 +0000 Subject: Unify lengths --- internal/iolimit/expect_length_reader.go | 23 +++++------------------ internal/progress/meter.go | 17 ++++++----------- internal/progress/render.go | 11 ++--------- 3 files changed, 13 insertions(+), 38 deletions(-) (limited to 'internal') diff --git a/internal/iolimit/expect_length_reader.go b/internal/iolimit/expect_length_reader.go index 72b0d912..4e5e5950 100644 --- a/internal/iolimit/expect_length_reader.go +++ b/internal/iolimit/expect_length_reader.go @@ -2,10 +2,7 @@ package iolimit import ( "errors" - "fmt" "io" - - "lindenii.org/go/lgo/intconv" ) // ErrExpectedLengthExceeded reports that a stream @@ -24,7 +21,7 @@ var ErrExpectedLengthExceeded = errors.New("iolimit: stream exceeded expected le // As a result, // overlength streams are detected only // when a caller reads at or past the boundary. -func ExpectLengthReader(src io.Reader, expected uint64) io.Reader { +func ExpectLengthReader(src io.Reader, expected int) io.Reader { return &expectLengthReader{ src: src, remaining: expected, @@ -33,7 +30,7 @@ func ExpectLengthReader(src io.Reader, expected uint64) io.Reader { type expectLengthReader struct { src io.Reader - remaining uint64 + remaining int } func (reader *expectLengthReader) Read(dst []byte) (int, error) { @@ -56,23 +53,13 @@ func (reader *expectLengthReader) Read(dst []byte) (int, error) { return 0, err } - if uint64(len(dst)) > reader.remaining { - limit, err := intconv.Uint64ToInt(reader.remaining) - if err != nil { - return 0, fmt.Errorf("iolimit: %w", err) - } - - dst = dst[:limit] + if len(dst) > reader.remaining { + dst = dst[:reader.remaining] } n, err := reader.src.Read(dst) if n > 0 { - read, convErr := intconv.IntToUint64(n) - if convErr != nil { - return n, fmt.Errorf("iolimit: %w", convErr) - } - - reader.remaining -= read + reader.remaining -= n } if errors.Is(err, io.EOF) { diff --git a/internal/progress/meter.go b/internal/progress/meter.go index 0e4138de..e5e64fb4 100644 --- a/internal/progress/meter.go +++ b/internal/progress/meter.go @@ -3,7 +3,6 @@ package progress import ( "time" - "lindenii.org/go/lgo/intconv" "lindenii.org/go/lgo/iowrap" ) @@ -17,7 +16,7 @@ type Meter struct { writer iowrap.WriteFlusher title string - total uint64 + total int delay time.Duration sparse bool throughput bool @@ -26,8 +25,8 @@ type Meter struct { nextUpdateAt time.Time nextThroughput time.Time - lastDone uint64 - lastBytes uint64 + lastDone int + lastBytes int lastPercent int lastCounterW int sawValue bool @@ -58,7 +57,7 @@ type Options struct { Writer iowrap.WriteFlusher Title string - Total uint64 + Total int // Delay suppresses progress output until Delay has elapsed since Start. Delay time.Duration @@ -70,7 +69,7 @@ type Options struct { // Set records current progress // and renders when percent changed or the 1s tick elapsed. -func (meter *Meter) Set(done uint64, bytes uint64) { +func (meter *Meter) Set(done int, bytes int) { meter.lastDone = done meter.lastBytes = bytes meter.sawValue = true @@ -85,11 +84,7 @@ func (meter *Meter) Set(done uint64, bytes uint64) { percentChanged := false if meter.total > 0 { - percent, err := intconv.Uint64ToInt(done * 100 / meter.total) - if err != nil { - return // TODO - } - + percent := int(int64(done) * 100 / int64(meter.total)) percentChanged = percent != meter.lastPercent } diff --git a/internal/progress/render.go b/internal/progress/render.go index f51852eb..814ced98 100644 --- a/internal/progress/render.go +++ b/internal/progress/render.go @@ -7,7 +7,6 @@ import ( "lindenii.org/go/furgit/internal/utils" "lindenii.org/go/lgo/fmt/humanize" - "lindenii.org/go/lgo/intconv" ) func (meter *Meter) render(now time.Time, eol string) { @@ -42,13 +41,7 @@ func (meter *Meter) render(now time.Time, eol string) { func (meter *Meter) renderCounters() string { if meter.total > 0 { - u, err := intconv.Uint64ToInt(meter.lastDone * 100 / meter.total) - if err != nil { - return "overflow" - // TODO - } - - meter.lastPercent = u + meter.lastPercent = int(int64(meter.lastDone) * 100 / int64(meter.total)) return fmt.Sprintf("%3d%% (%d/%d)%s", meter.lastPercent, meter.lastDone, meter.total, meter.throughputSuffix) } @@ -75,5 +68,5 @@ func (meter *Meter) refreshThroughput(now time.Time) { } rate := uint64(float64(meter.lastBytes) / elapsed.Seconds()) - meter.throughputSuffix = ", " + humanize.Bytes(meter.lastBytes) + " | " + humanize.Bytes(rate) + "/s" + meter.throughputSuffix = ", " + humanize.Bytes(uint64(meter.lastBytes)) + " | " + humanize.Bytes(rate) + "/s" //nolint:gosec } -- cgit v1.3.1-10-gc9f91