CX Framework
Cross-platform C utility framework
Loading...
Searching...
No Matches
file.h
Go to the documentation of this file.
1
3
28
29#pragma once
30
31#include <cx/cx.h>
32#include <cx/fs/fs.h>
33#include <cx/fs/fileobj.h>
34
35CX_C_BEGIN
36
37// Internal function - use fileClose() macro instead
38_At_(*file, _Pre_maybenull_ _Post_null_)
39_meta_inline bool _fileClose(_Inout_ File** file)
40{
41 bool ret = fileCloseHandle(*file);
42 objRelease(file);
43 return ret;
44}
45
65#define fileClose(pfile) (unused_noeval(&((*(pfile))->_is_File)), _fileClose((File**)(pfile)))
66
68typedef File FSFile;
69
99_Ret_opt_valid_ FSFile* fsOpen(_In_opt_ strref path, flags_t flags);
100
126_meta_inline bool fsRead(_Inout_ FSFile* file, _Out_writes_bytes_to_(sz, *bytesread) void* buf,
127 size_t sz, _Out_ _Deref_out_range_(0, sz) size_t* bytesread)
128{
129 if (!file) {
130 *bytesread = 0;
131 return false;
132 }
133 return fileRead(file, buf, sz, bytesread);
134}
135
160_meta_inline bool fsWrite(_Inout_ FSFile* file, _In_reads_bytes_(sz) const void* buf, size_t sz,
161 _Out_opt_ _Deref_out_range_(0, sz) size_t* byteswritten)
162{
163 if (!file) {
164 if (byteswritten)
165 *byteswritten = 0;
166 return false;
167 }
168 return fileWrite(file, buf, sz, byteswritten);
169}
170
179_meta_inline bool fsWriteString(_Inout_ FSFile* file, _In_opt_ strref str,
180 _Out_opt_ size_t* byteswritten)
181{
182 if (!file) {
183 if (byteswritten)
184 *byteswritten = 0;
185 return false;
186 }
187 return fileWriteString(file, str, byteswritten);
188}
189
198_meta_inline int64 fsTell(_Inout_ FSFile* file)
199{
200 if (!file)
201 return -1;
202 return fileTell(file);
203}
204
225_meta_inline int64 fsSeek(_Inout_ FSFile* file, int64 off, FSSeekType seektype)
226{
227 if (!file)
228 return -1;
229 return fileSeek(file, off, seektype);
230}
231
244_meta_inline bool fsFlush(_Inout_ FSFile* file)
245{
246 if (!file)
247 return false;
248 return fileFlush(file);
249}
250
252
253CX_C_END
Platform-specific filesystem operations.
FSFile * fsOpen(strref path, flags_t flags)
#define fileRead(self, buf, sz, bytesread)
Definition fileobj.h:116
#define fileTell(self)
Definition fileobj.h:135
bool fsRead(FSFile *file, void *buf, size_t sz, size_t *bytesread)
Definition file.h:126
#define fileSeek(self, off, seektype)
Definition fileobj.h:143
bool fsWriteString(FSFile *file, strref str, size_t *byteswritten)
Definition file.h:179
#define fileWrite(self, buf, sz, byteswritten)
Definition fileobj.h:129
#define fileFlush(self)
Definition fileobj.h:152
#define fileWriteString(self, str, byteswritten)
Definition fileobj.h:95
enum FSSeekTypeEnum FSSeekType
bool fsWrite(FSFile *file, const void *buf, size_t sz, size_t *byteswritten)
Definition file.h:160
File FSFile
A file opened on the OS filesystem with fsOpen()
Definition file.h:68
int64 fsTell(FSFile *file)
Definition file.h:198
bool fsFlush(FSFile *file)
Definition file.h:244
int64 fsSeek(FSFile *file, int64 off, FSSeekType seektype)
Definition file.h:225
#define objRelease(pinst)
Definition objclass.h:257
Definition fileobj.h:59