#include "file.h" #include "../String/StringBuilder.h" ktid_define(File); char* FileOpenMode_toStr(FileOpenMode m){ char* p; switch(m){ case FileOpenMode_Read: p="rb"; break; case FileOpenMode_Write: p="wb"; break; case FileOpenMode_Append: p="ab"; break; case FileOpenMode_ReadWrite: p="wb+"; break; case FileOpenMode_ReadAppend: p="ab+"; break; default: dbg(m); throw(ERR_UNEXPECTEDVAL); } return p; } Maybe file_open(FilePath path, FileOpenMode mode){ File* file=fopen(path, FileOpenMode_toStr(mode)); if(!file) safethrow(cptr_concat("can't open file ", (char*)path),;); return SUCCESS(UniHeapPtr(File,file)); } Maybe file_close(File* file){ if(!file) safethrow(ERR_NULLPTR,;); if(fclose(file)) safethrow(ERR_IO,;); return MaybeNull; } #define ioWriteCheck()\ if(rezult==EOF)\ safethrow(ERR_IO_EOF,;);\ if(rezult!=0)\ safethrow(ERR_IO,;); Maybe file_writeChar(File* file, char byte){ int rezult=fputc(byte, file); ioWriteCheck(); return MaybeNull; } Maybe file_writeBuffer(File* file, char* buffer, uint64 length){ int rezult=0; for(uint64 i=0; i