From 80cbb52f4d432d6572f7a40a10b2fd740a7c2c41 Mon Sep 17 00:00:00 2001 From: Abseil Team Date: Wed, 28 Sep 2022 14:06:14 -0700 Subject: `absl::base_internal::ReadLongFromFile` should use `O_CLOEXEC` and handle interrupts to `read` PiperOrigin-RevId: 477547252 Change-Id: Icc94290511b5071d15584d59dcd9cf6ad7319e2b --- absl/base/internal/sysinfo.cc | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'absl') diff --git a/absl/base/internal/sysinfo.cc b/absl/base/internal/sysinfo.cc index d820ce38..da499d3a 100644 --- a/absl/base/internal/sysinfo.cc +++ b/absl/base/internal/sysinfo.cc @@ -189,12 +189,15 @@ static double GetNominalCPUFrequency() { // and the memory location pointed to by value is set to the value read. static bool ReadLongFromFile(const char *file, long *value) { bool ret = false; - int fd = open(file, O_RDONLY); + int fd = open(file, O_RDONLY | O_CLOEXEC); if (fd != -1) { char line[1024]; char *err; memset(line, '\0', sizeof(line)); - ssize_t len = read(fd, line, sizeof(line) - 1); + ssize_t len; + do { + len = read(fd, line, sizeof(line) - 1); + } while (len < 0 && errno == EINTR); if (len <= 0) { ret = false; } else { -- cgit v1.2.3