mod imp {
use std::ffi::CString;
use libc;
+ use std::os as stdos;
#[cfg(target_os = "linux")]
mod os {
libc::open(buf.as_ptr(), libc::O_RDWR | libc::O_CREAT,
libc::S_IRWXU)
};
- assert!(fd > 0);
+ assert!(fd > 0, "failed to open lockfile: [{}] {}",
+ stdos::errno(), stdos::last_os_error());
let flock = os::flock {
l_start: 0,
l_len: 0,
l_sysid: 0,
};
let ret = unsafe {
- libc::fcntl(fd, os::F_SETLKW, &flock as *const os::flock)
+ libc::fcntl(fd, os::F_SETLKW, &flock)
};
if ret == -1 {
+ let errno = stdos::errno();
unsafe { libc::close(fd); }
- panic!("could not lock `{}`", p.display())
+ panic!("could not lock `{}`: [{}] {}", p.display(),
+ errno, stdos::error_string(errno))
}
Lock { fd: fd }
}
l_sysid: 0,
};
unsafe {
- libc::fcntl(self.fd, os::F_SETLK, &flock as *const os::flock);
+ libc::fcntl(self.fd, os::F_SETLK, &flock);
libc::close(self.fd);
}
}
ptr::null_mut())
};
if handle == libc::INVALID_HANDLE_VALUE {
- panic!("create file error: {}", os::last_os_error());
+ panic!("create file error: [{}] {}",
+ os::errno(), os::last_os_error());
}
let mut overlapped: libc::OVERLAPPED = unsafe { mem::zeroed() };
let ret = unsafe {
&mut overlapped)
};
if ret == 0 {
+ let errno = os::errno();
unsafe { libc::CloseHandle(handle); }
- panic!("could not lock `{}`: {}", p.display(),
- os::last_os_error())
+ panic!("could not lock `{}`: [{}] {}", p.display(),
+ errno, os::error_string(errno));
}
Lock { handle: handle }
}