Implement the truncate function
This commit is contained in:
@@ -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]
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user