4 #include "common/err.h"
5 #include "common/file.h"
12 UwUVMValue uwu_read(UwUVMArgs *args)
14 uwuutil_require_exact("fs.read", args, 1);
16 char *filename = uwustr_get(uwuvm_get_arg(args, 0));
18 FILE *file = fopen(filename, "r");
19 if (! file) syserror("fopen", file);
20 if (fseek(file, 0, SEEK_END) == -1) syserror("fseek", file);
22 size_t size = ftell(file);
23 if (size == 1) syserror("ftell", file);
24 if (fseek(file, 0, SEEK_SET) == -1) syserror("fseek", file);
26 char contents[size + 1];
27 if (fread(contents, 1, size, file) != size) syserror("fread", file);
32 contents[size] = '\0';
34 return uwustr_create(contents);
37 UwUVMValue uwu_write(UwUVMArgs *args)
39 uwuutil_require_exact("fs.write", args, 2);
41 char *filename = uwustr_get(uwuvm_get_arg(args, 0));
42 char *contents = uwustr_get(uwuvm_get_arg(args, 1));
44 FILE *file = fopen(filename, "w");
45 if (! file) syserror("fopen", file);
47 size_t size = strlen(contents);
48 if (fwrite(contents, 1, size, file) != size) syserror("fwrite", file);
54 return uwunil_create();
57 UwUVMValue uwu_remove(UwUVMArgs *args)
59 uwuutil_require_min("fs.remove", args, 1);
61 for (size_t i = 0; i < args->num; i++) {
62 char *filename = uwustr_get(uwuvm_get_arg(args, i));
64 if (remove(filename) != 0) syserror("remove", NULL);
69 return uwunil_create();
72 UwUVMValue uwu_exists(UwUVMArgs *args)
74 uwuutil_require_min("fs.exists", args, 1);
76 for (size_t i = 0; i < args->num; i++) {
77 char *filename = uwustr_get(uwuvm_get_arg(args, i));
78 bool exists = file_exists(filename);
82 return uwubool_create(false);
85 return uwubool_create(true);