blob: 71b7a70ebd684b3d71f630f2b8b0096a80fd6272 [file] [log] [blame]
khenaidood948f772021-08-11 17:49:24 -04001// Copyright 2019 The Prometheus Authors
2// Licensed under the Apache License, Version 2.0 (the "License");
3// you may not use this file except in compliance with the License.
4// You may obtain a copy of the License at
5//
6// http://www.apache.org/licenses/LICENSE-2.0
7//
8// Unless required by applicable law or agreed to in writing, software
9// distributed under the License is distributed on an "AS IS" BASIS,
10// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11// See the License for the specific language governing permissions and
12// limitations under the License.
13
14package util
15
16import (
17 "io"
khenaidood948f772021-08-11 17:49:24 -040018 "os"
19)
20
Abhay Kumara2ae5992025-11-10 14:02:24 +000021// ReadFileNoStat uses io.ReadAll to read contents of entire file.
22// This is similar to os.ReadFile but without the call to os.Stat, because
khenaidood948f772021-08-11 17:49:24 -040023// many files in /proc and /sys report incorrect file sizes (either 0 or 4096).
Abhay Kumara2ae5992025-11-10 14:02:24 +000024// Reads a max file size of 1024kB. For files larger than this, a scanner
khenaidood948f772021-08-11 17:49:24 -040025// should be used.
26func ReadFileNoStat(filename string) ([]byte, error) {
Abhay Kumara2ae5992025-11-10 14:02:24 +000027 const maxBufferSize = 1024 * 1024
khenaidood948f772021-08-11 17:49:24 -040028
29 f, err := os.Open(filename)
30 if err != nil {
31 return nil, err
32 }
33 defer f.Close()
34
35 reader := io.LimitReader(f, maxBufferSize)
Abhay Kumara2ae5992025-11-10 14:02:24 +000036 return io.ReadAll(reader)
khenaidood948f772021-08-11 17:49:24 -040037}