mirror of
https://github.com/J-D-K/JKSV.git
synced 2026-03-21 17:24:37 -05:00
101 lines
2.1 KiB
C
101 lines
2.1 KiB
C
#pragma once
|
|
|
|
#include <switch.h>
|
|
#include <stdint.h>
|
|
|
|
//Bare minimum wrapper around switch fs for JKSV
|
|
#define FS_SEEK_SET 0
|
|
#define FS_SEEK_CUR 1
|
|
#define FS_SEEK_END 2
|
|
|
|
#ifdef __cplusplus
|
|
extern "C"
|
|
{
|
|
#endif
|
|
typedef struct
|
|
{
|
|
FsFile _f;
|
|
Result error;
|
|
s64 offset, fsize;
|
|
} FSFILE;
|
|
|
|
int fsremove(const char *_p);
|
|
Result fsDelDirRec(const char *_p);
|
|
|
|
char *getDeviceFromPath(char *dev, size_t _max, const char *path);
|
|
char *getFilePath(char *pathOut, size_t _max, const char *path);
|
|
|
|
bool fsMkDir(const char *_p);
|
|
|
|
/*Opens file. Device is fetched from path. Libnx romfs doesn't work with this.
|
|
Mode needs to be:
|
|
FsOpenMode_Read
|
|
FsOpenMode_Write
|
|
FsOpenMode_Append
|
|
*/
|
|
bool fsfcreate(const char *_p, int64_t crSize);
|
|
|
|
FSFILE *fsfopen(const char *_p, uint32_t mode);
|
|
|
|
/*Same as above, but FsFileSystem _s is used. Path cannot have device in it*/
|
|
FSFILE *fsfopenWithSystem(FsFileSystem *_s, const char *_p, uint32_t mode);
|
|
|
|
//Closes _f
|
|
inline void fsfclose(FSFILE *_f)
|
|
{
|
|
if(_f != NULL)
|
|
{
|
|
fsFileClose(&_f->_f);
|
|
free(_f);
|
|
}
|
|
}
|
|
|
|
//Seeks like stdio
|
|
inline void fsfseek(FSFILE *_f, int offset, int origin)
|
|
{
|
|
switch(origin)
|
|
{
|
|
case FS_SEEK_SET:
|
|
_f->offset = offset;
|
|
break;
|
|
|
|
case FS_SEEK_CUR:
|
|
_f->offset += offset;
|
|
break;
|
|
|
|
case FS_SEEK_END:
|
|
_f->offset = offset + _f->fsize;
|
|
break;
|
|
}
|
|
}
|
|
|
|
//Returns offset
|
|
inline size_t fsftell(FSFILE *_f) { return _f->offset; }
|
|
|
|
//Writes buf to file. Automatically resizes _f to fit buf
|
|
size_t fsfwrite(const void *buf, size_t sz, size_t count, FSFILE *_f);
|
|
|
|
//Reads to buff
|
|
inline size_t fsfread(void *buf, size_t sz, size_t count, FSFILE *_f)
|
|
{
|
|
uint64_t read = 0;
|
|
_f->error = fsFileRead(&_f->_f, _f->offset, buf, sz * count, 0, &read);
|
|
_f->offset += read;
|
|
return read;
|
|
}
|
|
|
|
//Gets byte from file
|
|
inline char fsfgetc(FSFILE *_f)
|
|
{
|
|
char ret = 0;
|
|
uint64_t read = 0;
|
|
_f->error = fsFileRead(&_f->_f, _f->offset++, &ret, 1, 0, &read);
|
|
return ret;
|
|
}
|
|
|
|
//Writes byte to file
|
|
inline void fsfputc(int ch, FSFILE *_f) { fsfwrite(&ch, 1, 1, _f); }
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|