Implement the truncate function

This commit is contained in:
Xavier L'Heureux
2019-09-17 19:57:43 -04:00
parent 5156a13b3e
commit 64f93fe6e0
2 changed files with 17 additions and 3 deletions
+13 -3
View File
@@ -4,7 +4,7 @@ use core::{convert::TryFrom, mem, ptr, slice};
use crate::{
c_str::CStr,
header::{errno, limits, stdlib::getenv, sys_ioctl, sys_time, termios, time::timespec},
header::{errno, limits, fcntl::sys::O_WRONLY, stdlib::getenv, sys_ioctl, sys_time, termios, time::timespec},
platform::{self, types::*, Pal, Sys},
};
use alloc::collections::LinkedList;
@@ -647,9 +647,19 @@ pub extern "C" fn tcsetpgrp(fd: c_int, pgrp: pid_t) -> c_int {
pgrp
}
// #[no_mangle]
#[no_mangle]
pub extern "C" fn truncate(path: *const c_char, length: off_t) -> c_int {
unimplemented!();
let file = unsafe { CStr::from_ptr(path) };
let fd = Sys::open(file, O_WRONLY, 0);
if fd < 0 {
return -1;
}
let res = ftruncate(fd, length);
Sys::close(fd);
res
}
#[no_mangle]
+4
View File
@@ -17,4 +17,8 @@ int main(void) {
int c = close(fd);
ERROR_IF(close, c, == -1);
UNEXP_IF(close, c, != 0);
status = truncate("ftruncate.out", 100);
ERROR_IF(truncate, status, == -1);
UNEXP_IF(truncate, status, != 0);
}