From a3a9b1049e59672e4bd56b597b273ef1b07313a0 Mon Sep 17 00:00:00 2001
From: Jabar Asadi <jasadi@d2iq.com>
Date: Sun, 28 May 2023 06:45:23 +0000
Subject: [PATCH] os: ReadFile: don't check for re-allocation in the first
 iteration

At the beginning of the for-loop iteration cap(data) > len(data) always.
Therefore, in the first iteration, this check becomes unnecessary.
we can move this check to after the read operation.

Change-Id: I205e4a842ced74f31124b45a39b70523b56ad840
GitHub-Last-Rev: 2fdf25dff2e9984d3a8f8e5e612ea802c88e88a1
GitHub-Pull-Request: golang/go#60473
Reviewed-on: https://go-review.googlesource.com/c/go/+/498915
Reviewed-by: Rob Pike <r@golang.org>
Reviewed-by: Bryan Mills <bcmills@google.com>
Run-TryBot: Rob Pike <r@golang.org>
TryBot-Result: Gopher Robot <gobot@golang.org>
Run-TryBot: Ian Lance Taylor <iant@google.com>
Reviewed-by: Ian Lance Taylor <iant@google.com>
Auto-Submit: Ian Lance Taylor <iant@google.com>
---
 src/os/file.go | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/src/os/file.go b/src/os/file.go
index 806c1f20459..2f12c3bdae5 100644
--- a/src/os/file.go
+++ b/src/os/file.go
@@ -725,10 +725,6 @@ func ReadFile(name string) ([]byte, error) {
 
 	data := make([]byte, 0, size)
 	for {
-		if len(data) >= cap(data) {
-			d := append(data[:cap(data)], 0)
-			data = d[:len(data)]
-		}
 		n, err := f.Read(data[len(data):cap(data)])
 		data = data[:len(data)+n]
 		if err != nil {
@@ -737,6 +733,11 @@ func ReadFile(name string) ([]byte, error) {
 			}
 			return data, err
 		}
+
+		if len(data) >= cap(data) {
+			d := append(data[:cap(data)], 0)
+			data = d[:len(data)]
+		}
 	}
 }
 
-- 
GitLab