git subrepo pull --force deps/lightrec
[pcsx_rearmed.git] / deps / libretro-common / include / vfs / vfs.h
CommitLineData
3719602c
PC
1/* Copyright (C) 2010-2020 The RetroArch team
2*
3* ---------------------------------------------------------------------------------------
4* The following license statement only applies to this file (vfs_implementation.h).
5* ---------------------------------------------------------------------------------------
6*
7* Permission is hereby granted, free of charge,
8* to any person obtaining a copy of this software and associated documentation files (the "Software"),
9* to deal in the Software without restriction, including without limitation the rights to
10* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
11* and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
12*
13* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
14*
15* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
16* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
18* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
19* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21*/
22
23#ifndef __LIBRETRO_SDK_VFS_H
24#define __LIBRETRO_SDK_VFS_H
25
26#include <retro_common_api.h>
27#include <boolean.h>
28
29#ifdef RARCH_INTERNAL
30#ifndef VFS_FRONTEND
31#define VFS_FRONTEND
32#endif
33#endif
34
35RETRO_BEGIN_DECLS
36
37#ifdef _WIN32
38typedef void* HANDLE;
39#endif
40
41#ifdef HAVE_CDROM
42typedef struct
43{
44 int64_t byte_pos;
45 char *cue_buf;
46 size_t cue_len;
47 unsigned cur_lba;
48 unsigned last_frame_lba;
49 unsigned char cur_min;
50 unsigned char cur_sec;
51 unsigned char cur_frame;
52 unsigned char cur_track;
53 unsigned char last_frame[2352];
54 char drive;
55 bool last_frame_valid;
56} vfs_cdrom_t;
57#endif
58
59enum vfs_scheme
60{
61 VFS_SCHEME_NONE = 0,
62 VFS_SCHEME_CDROM
63};
64
65#if !(defined(__WINRT__) && defined(__cplusplus_winrt))
66#ifdef VFS_FRONTEND
67struct retro_vfs_file_handle
68#else
69struct libretro_vfs_implementation_file
70#endif
71{
72#ifdef HAVE_CDROM
73 vfs_cdrom_t cdrom; /* int64_t alignment */
74#endif
75 int64_t size;
76 uint64_t mappos;
77 uint64_t mapsize;
78 FILE *fp;
79#ifdef _WIN32
80 HANDLE fh;
81#endif
82 char *buf;
83 char* orig_path;
84 uint8_t *mapped;
85 int fd;
86 unsigned hints;
87 enum vfs_scheme scheme;
88};
89#endif
90
91/* Replace the following symbol with something appropriate
92 * to signify the file is being compiled for a front end instead of a core.
93 * This allows the same code to act as reference implementation
94 * for VFS and as fallbacks for when the front end does not provide VFS functionality.
95 */
96
97#ifdef VFS_FRONTEND
98typedef struct retro_vfs_file_handle libretro_vfs_implementation_file;
99#else
100typedef struct libretro_vfs_implementation_file libretro_vfs_implementation_file;
101#endif
102
103#ifdef VFS_FRONTEND
104typedef struct retro_vfs_dir_handle libretro_vfs_implementation_dir;
105#else
106typedef struct libretro_vfs_implementation_dir libretro_vfs_implementation_dir;
107#endif
108
109RETRO_END_DECLS
110
111#endif