-
Notifications
You must be signed in to change notification settings - Fork 5.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Declare folly::fileops for open, close, read, write, and pipe
Summary: This creates `folly::fileops` for `open`, `close`, `read`, `write`, and `pipe` that will eventually replace the versions that folly places in the global scope. Folly's implementation of these functions differs from the existing Windows CRT version. `open`, `read`, `write`, and `close` add support for sockets. `pipe` uses sockets so libevent is supported. Folly's other posix functions that are absent from windows CRT (e.g., `fcntl`) remain available in the global scope via a `using` directive. `stdlib` and `sysstat` function declarations are moved from the global namespace to the `folly::portability::{stdlib, sysstat}` namespaces. This is the 1st phase in a 3-phase change to remove folly's global declarations of posix functions that conflict with the windows CRT. The 2nd phase updates the usage of these functions to use qualified name lookup (e.g., calls to `open` and changed to `folly::fileops::open`). The 3rd and final phase will remove folly's globally defined posix functions. Another round of work will move `folly:fileops` to another buck target cxx_library. **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` so 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: Orvid Differential Revision: D65153511 fbshipit-source-id: 557b96f3615b04ec80b53077089d88aa4bce5e54
- Loading branch information
1 parent
cf549a4
commit 23d7a4c
Showing
7 changed files
with
78 additions
and
14 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters