mgba/src/util/vfs.h

87 lines
2.5 KiB
C
Raw Normal View History

/* Copyright (c) 2013-2014 Jeffrey Pfau
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
2014-07-17 06:55:09 +00:00
#ifndef VFS_H
#define VFS_H
2014-10-12 01:18:47 +00:00
#include "util/common.h"
2015-06-10 04:22:11 +00:00
#ifdef _WIN32
#include <io.h>
#include <windows.h>
#define PATH_SEP "\\"
2015-06-10 04:22:11 +00:00
#else
#define PATH_SEP "/"
#endif
#ifndef PATH_MAX
#ifdef MAX_PATH
#define PATH_MAX MAX_PATH
#else
#define PATH_MAX 128
#endif
#endif
enum {
MAP_READ = 1,
MAP_WRITE = 2
};
2014-07-16 09:08:54 +00:00
struct VFile {
bool (*close)(struct VFile* vf);
2014-07-16 10:02:16 +00:00
off_t (*seek)(struct VFile* vf, off_t offset, int whence);
ssize_t (*read)(struct VFile* vf, void* buffer, size_t size);
ssize_t (*readline)(struct VFile* vf, char* buffer, size_t size);
2014-10-14 10:08:39 +00:00
ssize_t (*write)(struct VFile* vf, const void* buffer, size_t size);
2014-07-16 09:08:54 +00:00
void* (*map)(struct VFile* vf, size_t size, int flags);
void (*unmap)(struct VFile* vf, void* memory, size_t size);
void (*truncate)(struct VFile* vf, size_t size);
ssize_t (*size)(struct VFile* vf);
bool (*sync)(struct VFile* vf, const void* buffer, size_t size);
};
2014-07-17 06:55:09 +00:00
struct VDirEntry {
const char* (*name)(struct VDirEntry* vde);
};
struct VDir {
bool (*close)(struct VDir* vd);
void (*rewind)(struct VDir* vd);
2014-07-17 06:55:09 +00:00
struct VDirEntry* (*listNext)(struct VDir* vd);
struct VFile* (*openFile)(struct VDir* vd, const char* name, int mode);
};
struct VFile* VFileOpen(const char* path, int flags);
struct VFile* VFileOpenFD(const char* path, int flags);
2015-06-15 08:05:45 +00:00
struct VFile* VFileFOpen(const char* path, const char* mode);
struct VFile* VFileFromFD(int fd);
2015-03-06 02:44:28 +00:00
struct VFile* VFileFromMemory(void* mem, size_t size);
2015-06-15 08:05:45 +00:00
struct VFile* VFileFromFILE(FILE* file);
2014-07-17 06:55:09 +00:00
struct VDir* VDirOpen(const char* path);
#ifdef USE_LIBZIP
2014-07-17 09:45:17 +00:00
struct VDir* VDirOpenZip(const char* path, int flags);
#endif
#ifdef USE_LZMA
2015-01-25 08:11:05 +00:00
struct VDir* VDirOpen7z(const char* path, int flags);
#endif
struct VFile* VDirOptionalOpenFile(struct VDir* dir, const char* realPath, const char* prefix, const char* suffix,
int mode);
struct VFile* VDirOptionalOpenIncrementFile(struct VDir* dir, const char* realPath, const char* prefix,
const char* infix, const char* suffix, int mode);
2014-10-10 06:55:02 +00:00
2015-03-06 02:40:33 +00:00
ssize_t VFileReadline(struct VFile* vf, char* buffer, size_t size);
ssize_t VFileWrite32LE(struct VFile* vf, int32_t word);
ssize_t VFileWrite16LE(struct VFile* vf, int16_t hword);
ssize_t VFileRead32LE(struct VFile* vf, void* word);
ssize_t VFileRead16LE(struct VFile* vf, void* hword);
#endif