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}