mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
os: move file logic to file.v (#6013)
This commit is contained in:
committed by
GitHub
parent
055117dc5f
commit
d71c11577a
89
vlib/os/file.v
Normal file
89
vlib/os/file.v
Normal file
@@ -0,0 +1,89 @@
|
||||
module os
|
||||
|
||||
pub struct File {
|
||||
cfile voidptr // Using void* instead of FILE*
|
||||
pub:
|
||||
fd int
|
||||
pub mut:
|
||||
is_opened bool
|
||||
}
|
||||
|
||||
struct FileInfo {
|
||||
name string
|
||||
size int
|
||||
}
|
||||
|
||||
[deprecated]
|
||||
pub fn (f File) is_opened() bool {
|
||||
eprintln('warning: `file.is_opened()` has been deprecated, use `file.is_opened` instead')
|
||||
return f.is_opened
|
||||
}
|
||||
|
||||
// **************************** Write ops ***************************
|
||||
pub fn (mut f File) write(s string) {
|
||||
if !f.is_opened {
|
||||
return
|
||||
}
|
||||
/*
|
||||
$if linux {
|
||||
$if !android {
|
||||
C.syscall(sys_write, f.fd, s.str, s.len)
|
||||
return
|
||||
}
|
||||
}
|
||||
*/
|
||||
C.fwrite(s.str, s.len, 1, f.cfile)
|
||||
}
|
||||
|
||||
pub fn (mut f File) writeln(s string) {
|
||||
if !f.is_opened {
|
||||
return
|
||||
}
|
||||
/*
|
||||
$if linux {
|
||||
$if !android {
|
||||
snl := s + '\n'
|
||||
C.syscall(sys_write, f.fd, snl.str, snl.len)
|
||||
return
|
||||
}
|
||||
}
|
||||
*/
|
||||
// TODO perf
|
||||
C.fwrite(s.str, s.len, 1, f.cfile)
|
||||
C.fputs('\n', f.cfile)
|
||||
}
|
||||
|
||||
pub fn (mut f File) write_bytes(data voidptr, size int) int {
|
||||
return C.fwrite(data, 1, size, f.cfile)
|
||||
}
|
||||
|
||||
pub fn (mut f File) write_bytes_at(data voidptr, size, pos int) int {
|
||||
C.fseek(f.cfile, pos, C.SEEK_SET)
|
||||
res := C.fwrite(data, 1, size, f.cfile)
|
||||
C.fseek(f.cfile, 0, C.SEEK_END)
|
||||
return res
|
||||
}
|
||||
|
||||
// **************************** Read ops ***************************
|
||||
// read_bytes reads an amount of bytes from the beginning of the file
|
||||
pub fn (f &File) read_bytes(size int) []byte {
|
||||
return f.read_bytes_at(size, 0)
|
||||
}
|
||||
|
||||
// read_bytes_at reads an amount of bytes at the given position in the file
|
||||
pub fn (f &File) read_bytes_at(size, pos int) []byte {
|
||||
mut arr := [`0`].repeat(size)
|
||||
C.fseek(f.cfile, pos, C.SEEK_SET)
|
||||
nreadbytes := C.fread(arr.data, 1, size, f.cfile)
|
||||
C.fseek(f.cfile, 0, C.SEEK_SET)
|
||||
return arr[0..nreadbytes]
|
||||
}
|
||||
|
||||
// **************************** Utility ops ***********************
|
||||
// write any unwritten data in stream's buffer
|
||||
pub fn (mut f File) flush() {
|
||||
if !f.is_opened {
|
||||
return
|
||||
}
|
||||
C.fflush(f.cfile)
|
||||
}
|
||||
Reference in New Issue
Block a user