From 8a1fd78c19f62e03144437a95884071a26b023f3 Mon Sep 17 00:00:00 2001 From: Simon Krueger Date: Thu, 21 Nov 2024 12:10:42 -0800 Subject: [PATCH] Use folly::fileops qualified name Summary: This updates `open`, `close`, `read`, `write`, and `pipe` call sites to use `folly::fileops` qualified name lookup. This is the 2nd phase in a 3-phase change to remove folly's global definitions of the posix functions that conflict with windows CRT. The 1st phase created namespaces for folly's posix functions. The 2nd phase updates callsites to use the qualified name of folly's `open`, `close`, `read`, `write`, and `pipe` functions. The 3rd and final phase will remove folly's globally defined posix functions and have windows CRT define them again. **What is the reason for this change?** Folly's global definitions of posix functions on Windows causes `#include` order issues if folly is not included first. For example, when `gtest/gtest.h` is included before folly, gtest includes `windows.h` and that declares `open`, `read`, and `chdir`, which creates ambiguous references to folly's `open`, `read`, and `chdir`. Another example is where posix functions go undeclared when `folly/portability/windows.h` is included without other portability headers (e.g., `folly/portability/unistd.h`). `folly/portability/windows.h` includes `windows.h` in a way that only underscore versions of the posix functions are available (e.g., `_open`, `_close`). These issues create friction for windows development. **Background: What is the purpose of `folly::portability::{fcntl,stdlib,sysstat,unistd}`?** It is a portability layer to make posix functions available and behave consistently across platforms. Some posix functions don't exist on windows (e.g., `sysconf`). Some other posix functions, folly changes to adapt behavior across platforms. For example, on windows folly defines `open`, `read`, `write`, and `close` functions to work with sockets. Folly makes these functions available in the global scope for convenience. Reviewed By: Gownta Differential Revision: D66191403 fbshipit-source-id: f3966b9b3af3bc5f498ef92dbdb202baa950b41d --- folly/io/async/test/AsyncUDPSocketTest.cpp | 3 ++- folly/test/FileUtilTest.cpp | 4 +++- folly/test/IndexedMemPoolTest.cpp | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/folly/io/async/test/AsyncUDPSocketTest.cpp b/folly/io/async/test/AsyncUDPSocketTest.cpp index f311968ffcf..6b206470700 100644 --- a/folly/io/async/test/AsyncUDPSocketTest.cpp +++ b/folly/io/async/test/AsyncUDPSocketTest.cpp @@ -378,7 +378,8 @@ class UDPNotifyClient : public UDPClient { SocketAddress addr; addr.setFromSockaddr(rawAddr, addrLen); - onDataAvailable(addr, size_t(read), false, OnDataAvailableParams()); + onDataAvailable( + addr, size_t(folly::fileops::read), false, OnDataAvailableParams()); } void onRecvMmsg(AsyncUDPSocket& sock) { diff --git a/folly/test/FileUtilTest.cpp b/folly/test/FileUtilTest.cpp index 35e8245fb08..8fc465d3787 100644 --- a/folly/test/FileUtilTest.cpp +++ b/folly/test/FileUtilTest.cpp @@ -267,7 +267,9 @@ TEST(FileUtilTest2, wrapv) { #ifndef _WIN32 EXPECT_EQ(sum, wrapvFull(writev, tempFile.fd(), iov.data(), iov.size())); #else - EXPECT_EQ(sum, wrapvFull(write, tempFile.fd(), iov.data(), iov.size())); + EXPECT_EQ( + sum, + wrapvFull(folly::fileops::write, tempFile.fd(), iov.data(), iov.size())); #endif } diff --git a/folly/test/IndexedMemPoolTest.cpp b/folly/test/IndexedMemPoolTest.cpp index b597a884d33..19bb4f9060e 100644 --- a/folly/test/IndexedMemPoolTest.cpp +++ b/folly/test/IndexedMemPoolTest.cpp @@ -79,7 +79,7 @@ TEST(IndexedMemPool, noStarvation) { EXPECT_LE( idx, poolSize + (pool.NumLocalLists - 1) * pool.LocalListLimit); pool[idx] = i; - EXPECT_EQ(write(fd[1], &idx, sizeof(idx)), sizeof(idx)); + EXPECT_EQ(fileops::write(fd[1], &idx, sizeof(idx)), sizeof(idx)); Sched::post(&readSem); } });