diff options
| author | Ralf Jung <post@ralfj.de> | 2020-05-05 16:43:57 +0200 |
|---|---|---|
| committer | Ralf Jung <post@ralfj.de> | 2020-05-05 17:08:22 +0200 |
| commit | fbf791bd5259ebbf7575db245a2cffd0f59a15a8 (patch) | |
| tree | 10976399f0a8a83d30eb54821dad46f3d8beb37d | |
| parent | 04689e22e946879f2f5e2c73849d2f4e1f2b4b32 (diff) | |
| download | rust-fbf791bd5259ebbf7575db245a2cffd0f59a15a8.tar.gz rust-fbf791bd5259ebbf7575db245a2cffd0f59a15a8.zip | |
explain the types used in the open64 call
| -rw-r--r-- | src/libstd/sys/unix/fs.rs | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/src/libstd/sys/unix/fs.rs b/src/libstd/sys/unix/fs.rs index 2cfc63d9492..80cf6a5dbc2 100644 --- a/src/libstd/sys/unix/fs.rs +++ b/src/libstd/sys/unix/fs.rs @@ -703,6 +703,10 @@ impl File { | opts.get_access_mode()? | opts.get_creation_mode()? | (opts.custom_flags as c_int & !libc::O_ACCMODE); + // The third argument of `open64` is documented to have type `mode_t`. On + // some platforms (like macOS, where `open64` is actually `open`), `mode_t` is `u16`. + // However, since this is a variadic function, C integer promotion rules mean that on + // the ABI level, this still gets passed as `c_int` (aka `u32` on Unix platforms). let fd = cvt_r(|| unsafe { open64(path.as_ptr(), flags, opts.mode as c_int) })?; let fd = FileDesc::new(fd); |
