1#include "include/pw.h"
2#include "include/pwlib/file.h"
3
4#include <libpussy/alignment.h>
5
6[[nodiscard]] bool _pw_file_open(PwValuePtr file_name, int flags, mode_t mode, PwValuePtr result)
7{
8 PwBufferedFileCtorArgs args = {
9 .type_id = PwTypeId_BufferedFile,
10 .read_bufsize = sys_page_size(),
11 .write_bufsize = sys_page_size()
12 };
13 if (!pw_create2(PwTypeId_BufferedFile, &args, result)) {
14 return false;
15 }
16 return pw_call(File, open, result, file_name, flags, mode);
17}
18
19[[nodiscard]] bool _pw_file_open_unbuffered(PwValuePtr file_name, int flags, mode_t mode, PwValuePtr result)
20{
21 if (!pw_create(PwTypeId_File, result)) {
22 return false;
23 }
24 return pw_call(File, open, result, file_name, flags, mode);
25}
26
27[[nodiscard]] bool pw_file_from_fd(int fd, bool take_ownership, PwValuePtr result)
28{
29 PwBufferedFileCtorArgs args = {
30 .type_id = PwTypeId_BufferedFile,
31 .read_bufsize = sys_page_size(),
32 .write_bufsize = sys_page_size()
33 };
34 if (!pw_create2(PwTypeId_BufferedFile, &args, result)) {
35 return false;
36 }
37 return pw_call(Fd, set_fd, result, fd, take_ownership);
38}