diff options
| author | Dylan DPC <dylan.dpc@gmail.com> | 2020-05-06 13:22:22 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-05-06 13:22:22 +0200 |
| commit | b86620a558dd662fe4261b8c0a2798b7c3d1f068 (patch) | |
| tree | 37c3fb4745e7d4415233d21c70eba1595fca85cc /src/libstd/sys | |
| parent | f29a92366e06b43da52929a14ac4931b218cb3fc (diff) | |
| parent | fbf791bd5259ebbf7575db245a2cffd0f59a15a8 (diff) | |
| download | rust-b86620a558dd662fe4261b8c0a2798b7c3d1f068.tar.gz rust-b86620a558dd662fe4261b8c0a2798b7c3d1f068.zip | |
Rollup merge of #71921 - RalfJung:open-mode, r=hanna-kruppe
explain the types used in the open64 call Fixes https://github.com/rust-lang/rust/issues/71915, where I learned about this quirk. I don't actually know what I am talking about here. ;)
Diffstat (limited to 'src/libstd/sys')
| -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); |
