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 
35 RETRO_BEGIN_DECLS
36 
37 #ifdef _WIN32
38 typedef void* HANDLE;
39 #endif
40 
41 #ifdef HAVE_CDROM
42 typedef 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 
59 enum vfs_scheme
60 {
61    VFS_SCHEME_NONE = 0,
62    VFS_SCHEME_CDROM
63 };
64 
65 #ifndef __WINRT__
66 #ifdef VFS_FRONTEND
67 struct retro_vfs_file_handle
68 #else
69 struct 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
98 typedef struct retro_vfs_file_handle libretro_vfs_implementation_file;
99 #else
100 typedef struct libretro_vfs_implementation_file libretro_vfs_implementation_file;
101 #endif
102 
103 #ifdef VFS_FRONTEND
104 typedef struct retro_vfs_dir_handle libretro_vfs_implementation_dir;
105 #else
106 typedef struct libretro_vfs_implementation_dir libretro_vfs_implementation_dir;
107 #endif
108 
109 RETRO_END_DECLS
110 
111 #endif
112