]> git.lizzy.rs Git - rust.git/blobdiff - src/libstd/sys/windows/fs2.rs
rollup merge of #24873: alexcrichton/fix-windows-stdio
[rust.git] / src / libstd / sys / windows / fs2.rs
index 5b748280986f7258bb4ff1ab64ad03491b4e0c36..03a56e2958a6e9f485b050323ac42274b744b9eb 100644 (file)
@@ -65,6 +65,7 @@ pub struct OpenOptions {
     share_mode: Option<libc::DWORD>,
     creation_disposition: Option<libc::DWORD>,
     flags_and_attributes: Option<libc::DWORD>,
+    security_attributes: usize, // *mut T doesn't have a Default impl
 }
 
 #[derive(Clone, PartialEq, Eq, Debug)]
@@ -169,6 +170,9 @@ pub fn desired_access(&mut self, val: i32) {
     pub fn share_mode(&mut self, val: i32) {
         self.share_mode = Some(val as libc::DWORD);
     }
+    pub fn security_attributes(&mut self, attrs: libc::LPSECURITY_ATTRIBUTES) {
+        self.security_attributes = attrs as usize;
+    }
 
     fn get_desired_access(&self) -> libc::DWORD {
         self.desired_access.unwrap_or({
@@ -227,7 +231,7 @@ pub fn open(path: &Path, opts: &OpenOptions) -> io::Result<File> {
             libc::CreateFileW(path.as_ptr(),
                               opts.get_desired_access(),
                               opts.get_share_mode(),
-                              ptr::null_mut(),
+                              opts.security_attributes as *mut _,
                               opts.get_creation_disposition(),
                               opts.get_flags_and_attributes(),
                               ptr::null_mut())
@@ -344,6 +348,8 @@ fn readlink(&self) -> io::Result<PathBuf> {
             Ok(PathBuf::from(OsString::from_wide(subst)))
         }
     }
+
+    pub fn into_handle(self) -> Handle { self.handle }
 }
 
 impl FromInner<libc::HANDLE> for File {