|
1 | 1 | //! Standard symbolic constants and types
|
2 | 2 | //!
|
3 | 3 | use {Errno, Error, Result, NixPath};
|
4 |
| -use null_terminated::BorrowNullTerminatedSlice; |
| 4 | +use null_terminated::{IntoRef, NullTerminatedSlice}; |
5 | 5 | use fcntl::{fcntl, OFlag, O_NONBLOCK, O_CLOEXEC, FD_CLOEXEC};
|
6 | 6 | use fcntl::FcntlArg::{F_SETFD, F_SETFL};
|
7 | 7 | use libc::{self, c_char, c_void, c_int, c_uint, size_t, pid_t, off_t, uid_t, gid_t};
|
@@ -123,38 +123,37 @@ pub fn chown<P: ?Sized + NixPath>(path: &P, owner: Option<uid_t>, group: Option<
|
123 | 123 | }
|
124 | 124 |
|
125 | 125 | #[inline]
|
126 |
| -pub fn execv<A: BorrowNullTerminatedSlice<c_char>>(path: &CStr, argv: A) -> Result<Void> { |
127 |
| - argv.borrow_null_terminated_slice(|args_p| { |
128 |
| - unsafe { |
129 |
| - libc::execv(path.as_ptr(), args_p.as_ptr()) |
130 |
| - }; |
| 126 | +pub fn execv<'a, A: IntoRef<'a, NullTerminatedSlice<&'a c_char>>>(path: &CStr, argv: A) -> Result<Void> { |
| 127 | + let argv = argv.into_ref(); |
131 | 128 |
|
132 |
| - Err(Error::Sys(Errno::last())) |
133 |
| - }) |
| 129 | + unsafe { |
| 130 | + libc::execv(path.as_ptr(), argv.as_ref().as_ptr()) |
| 131 | + }; |
| 132 | + |
| 133 | + Err(Error::Sys(Errno::last())) |
134 | 134 | }
|
135 | 135 |
|
136 | 136 | #[inline]
|
137 |
| -pub fn execve<A: BorrowNullTerminatedSlice<c_char>, E: BorrowNullTerminatedSlice<c_char>>(path: &CStr, args: A, env: E) -> Result<Void> { |
138 |
| - args.borrow_null_terminated_slice(|args_p| { |
139 |
| - env.borrow_null_terminated_slice(|env_p| { |
140 |
| - unsafe { |
141 |
| - libc::execve(path.as_ptr(), args_p.as_ptr(), env_p.as_ptr()) |
142 |
| - }; |
143 |
| - |
144 |
| - Err(Error::Sys(Errno::last())) |
145 |
| - }) |
146 |
| - }) |
| 137 | +pub fn execve<'a, 'e, A: IntoRef<'a, NullTerminatedSlice<&'a c_char>>, E: IntoRef<'e, NullTerminatedSlice<&'e c_char>>>(path: &CStr, args: A, env: E) -> Result<Void> { |
| 138 | + let args = args.into_ref(); |
| 139 | + let env = env.into_ref(); |
| 140 | + |
| 141 | + unsafe { |
| 142 | + libc::execve(path.as_ptr(), args.as_ref().as_ptr(), env.as_ref().as_ptr()) |
| 143 | + }; |
| 144 | + |
| 145 | + Err(Error::Sys(Errno::last())) |
147 | 146 | }
|
148 | 147 |
|
149 | 148 | #[inline]
|
150 |
| -pub fn execvp<A: BorrowNullTerminatedSlice<c_char>>(filename: &CStr, args: A) -> Result<Void> { |
151 |
| - args.borrow_null_terminated_slice(|args_p| { |
152 |
| - unsafe { |
153 |
| - libc::execvp(filename.as_ptr(), args_p.as_ptr()) |
154 |
| - }; |
| 149 | +pub fn execvp<'a, A: IntoRef<'a, NullTerminatedSlice<&'a c_char>>>(filename: &CStr, args: A) -> Result<Void> { |
| 150 | + let args = args.into_ref(); |
155 | 151 |
|
156 |
| - Err(Error::Sys(Errno::last())) |
157 |
| - }) |
| 152 | + unsafe { |
| 153 | + libc::execvp(filename.as_ptr(), args.as_ref().as_ptr()) |
| 154 | + }; |
| 155 | + |
| 156 | + Err(Error::Sys(Errno::last())) |
158 | 157 | }
|
159 | 158 |
|
160 | 159 | pub fn daemon(nochdir: bool, noclose: bool) -> Result<()> {
|
|
0 commit comments