Changes of Revision 3

libretro-picodrive.changes Changed
x
 
1
@@ -1,4 +1,11 @@
2
 -------------------------------------------------------------------
3
+Wed Sep 02 09:34:14 UTC 2020 - i@guoyunhe.me
4
+
5
+- Update to version 0~git20200816:
6
+  * Fix non-MSVC builds
7
+  * Fixed MSVC compilation, VFS
8
+
9
+-------------------------------------------------------------------
10
 Sun Aug 09 10:56:09 UTC 2020 - i@guoyunhe.me
11
 
12
 - Update to version 0~git20200716:
13
libretro-picodrive.spec Changed
10
 
1
@@ -17,7 +17,7 @@
2
 
3
 
4
 Name:           libretro-picodrive
5
-Version:        0~git20200716
6
+Version:        0~git20200816
7
 Release:        0
8
 Summary:        PicoDrive libretro core for MegaDrive/Genesis emulation
9
 License:        NonFree
10
_servicedata Changed
9
 
1
@@ -1,4 +1,4 @@
2
 <servicedata>
3
 <service name="tar_scm">
4
                 <param name="url">https://github.com/libretro/picodrive.git</param>
5
-              <param name="changesrevision">e6b80af200f19d8d518d427dc20314606e9d8510</param></service></servicedata>
6
\ No newline at end of file
7
+              <param name="changesrevision">68329d146bff07b3e8a827ed718d86422cebb67b</param></service></servicedata>
8
\ No newline at end of file
9
libretro-picodrive-0~git20200716.tar.xz/Makefile -> libretro-picodrive-0~git20200816.tar.xz/Makefile Changed
9
 
1
@@ -153,6 +153,7 @@
2
 ifeq "$(PLATFORM)" "libretro"
3
 OBJS += platform/libretro/libretro.o
4
 ifeq "$(USE_LIBRETRO_VFS)" "1"
5
+OBJS += platform/libretro/libretro-common/compat/compat_posix_string.o
6
 OBJS += platform/libretro/libretro-common/compat/compat_strl.o
7
 OBJS += platform/libretro/libretro-common/compat/fopen_utf8.o
8
 OBJS += platform/libretro/libretro-common/encodings/encoding_utf.o
9
libretro-picodrive-0~git20200716.tar.xz/cpu/sh2/compiler.c -> libretro-picodrive-0~git20200816.tar.xz/cpu/sh2/compiler.c Changed
81
 
1
@@ -462,9 +462,9 @@
2
 // SR must and R0 should by all means be statically mapped.
3
 // XXX the static definition of SR MUST match that in compiler.h
4
 
5
-#ifdef __arm__
6
+#if defined(__arm__) || defined(_M_ARM)
7
 #include "../drc/emit_arm.c"
8
-#elif defined(__aarch64__)
9
+#elif defined(__aarch64__) || defined(_M_ARM64)
10
 #include "../drc/emit_arm64.c"
11
 #elif defined(__mips__)
12
 #include "../drc/emit_mips.c"
13
@@ -472,9 +472,9 @@
14
 #include "../drc/emit_riscv.c"
15
 #elif defined(__powerpc__)
16
 #include "../drc/emit_ppc.c"
17
-#elif defined(__i386__)
18
+#elif defined(__i386__) || defined(_M_X86)
19
 #include "../drc/emit_x86.c"
20
-#elif defined(__x86_64__)
21
+#elif defined(__x86_64__) || defined(_M_X64)
22
 #include "../drc/emit_x86.c"
23
 #else
24
 #error unsupported arch
25
@@ -816,7 +816,7 @@
26
         emith_jump_patch(jump, bl->blx, &jump);
27
         emith_jump_at(bl->blx, be->tcache_ptr);
28
         if ((((uintptr_t)bl->blx & 0x1f) + emith_jump_at_size()-1) > 0x1f)
29
-          host_instructions_updated(bl->blx, bl->blx + emith_jump_at_size()-1);
30
+          host_instructions_updated(bl->blx, (char*)bl->blx + emith_jump_at_size()-1);
31
       }
32
     } else {
33
       printf("unknown BL type %d\n", bl->type);
34
@@ -855,7 +855,7 @@
35
         // via blx: @jump near jumpcc to blx; @blx load target_pc, far jump
36
         emith_jump_patch(bl->jump, bl->blx, &jump);
37
         memcpy(bl->blx, bl->jdisp, emith_jump_at_size());
38
-        host_instructions_updated(bl->blx, bl->blx + emith_jump_at_size()-1);
39
+        host_instructions_updated(bl->blx, (char*)bl->blx + emith_jump_at_size()-1);
40
       } else {
41
         printf("unknown BL type %d\n", bl->type);
42
         exit(1);
43
@@ -4657,7 +4657,15 @@
44
       case 0x03: // MOV    Rm,Rn        0110nnnnmmmm0011
45
         emit_move_r_r(GET_Rn(), GET_Rm());
46
         goto end_op;
47
-      case 0x07 ... 0x0f:
48
+      case 0x07:
49
+      case 0x08:
50
+      case 0x09:
51
+      case 0x0a:
52
+      case 0x0b:
53
+      case 0x0c:
54
+      case 0x0d:
55
+      case 0x0e:
56
+      case 0x0f:
57
         tmp  = rcache_get_reg(GET_Rm(), RC_GR_READ, NULL);
58
         tmp2 = rcache_get_reg(GET_Rn(), RC_GR_WRITE, NULL);
59
         switch (op & 0x0f)
60
@@ -5140,7 +5148,7 @@
61
   // fill blx backup; do this last to backup final patched code
62
   for (i = 0; i < block->entry_count; i++)
63
     for (bl = block->entryp[i].o_links; bl; bl = bl->o_next)
64
-      memcpy(bl->jdisp, bl->blx ?: bl->jump, emith_jump_at_size());
65
+      memcpy(bl->jdisp, bl->blx ? bl->blx : bl->jump, emith_jump_at_size());
66
 
67
   ring_alloc(&tcache_ring[tcache_id], tcache_ptr - block_entry_ptr);
68
   host_instructions_updated(block_entry_ptr, tcache_ptr);
69
@@ -6987,9 +6995,9 @@
70
 
71
   *end_pc_out = end_pc;
72
   if (base_literals_out != NULL)
73
-    *base_literals_out = (lowest_literal ?: end_pc);
74
+    *base_literals_out = (lowest_literal ? lowest_literal : end_pc);
75
   if (end_literals_out != NULL)
76
-    *end_literals_out = (end_literals ?: end_pc);
77
+    *end_literals_out = (end_literals ? lowest_literal : end_pc);
78
 
79
   // crc overflow handling, twice to collect all overflows
80
   crc = (crc & 0xffff) + (crc >> 16);
81
libretro-picodrive-0~git20200716.tar.xz/pico/32x/memory.c -> libretro-picodrive-0~git20200816.tar.xz/pico/32x/memory.c Changed
50
 
1
@@ -1817,7 +1817,7 @@
2
 static void REGPARM(3) sh2_write32_sdram(u32 a, u32 d, SH2 *sh2)
3
 {
4
   u32 a1 = a & 0x3fffc;
5
-  *(u32 *)(sh2->p_sdram + a1) = (d << 16) | (d >> 16);
6
+  *(u32 *)((char*)sh2->p_sdram + a1) = (d << 16) | (d >> 16);
7
 #ifdef DRC_SH2
8
   u8 *p = sh2->p_drcblk_ram;
9
   u32 t = p[a1 >> SH2_DRCBLK_RAM_SHIFT];
10
@@ -1940,7 +1940,7 @@
11
   } else if ((a & 0xc6000000) == 0x02000000) {
12
     // banked ROM. Return bank address
13
     u32 bank = carthw_ssf2_banks[(a >> 19) & 7] << 19;
14
-    ret = sh2->p_rom + bank;
15
+    ret = (char*)sh2->p_rom + bank;
16
     *mask = 0x07ffff;
17
   }
18
 
19
@@ -1958,7 +1958,11 @@
20
     return 0;
21
   if ((ps = p32x_sh2_get_mem_ptr(src, &mask, sh2)) == (void *)-1)
22
     return 0;
23
+#if _MSC_VER
24
+  (char*)ps += src & mask;
25
+#else
26
   ps += src & mask;
27
+#endif
28
   len = count * size;
29
 
30
   // DRAM in byte access is always in overwrite mode
31
@@ -1968,13 +1972,17 @@
32
   // align dst to halfword
33
   if (dst & 1) {
34
     p32x_sh2_write8(dst, *(u8 *)((uptr)ps ^ 1), sh2);
35
+#if _MSC_VER
36
+    ((char*)ps)++, dst++, len --;
37
+#else
38
     ps++, dst++, len --;
39
+#endif
40
   }
41
 
42
   // copy data
43
   if ((uptr)ps & 1) {
44
     // unaligned, use halfword copy mode to reduce memory bandwidth
45
-    u16 *sp = (u16 *)(ps - 1);
46
+    u16 *sp = (u16 *)((char*)ps - 1);
47
     u16 dl, dh = *sp++;
48
     for (i = 0; i < (len & ~1); i += 2, dst += 2, sp++) {
49
       dl = dh, dh = *sp;
50
libretro-picodrive-0~git20200716.tar.xz/pico/draw.c -> libretro-picodrive-0~git20200816.tar.xz/pico/draw.c Changed
10
 
1
@@ -1891,7 +1891,7 @@
2
   if (dest != NULL) {
3
     DrawLineDestBase = dest;
4
     DrawLineDestIncrement = increment;
5
-    Pico.est.DrawLineDest = DrawLineDestBase + Pico.est.DrawScanline * increment;
6
+    Pico.est.DrawLineDest = (char*)DrawLineDestBase + Pico.est.DrawScanline * increment;
7
   }
8
   else {
9
     DrawLineDestBase = DefOutBuff;
10
libretro-picodrive-0~git20200816.tar.xz/platform/libretro/libretro-common/compat/compat_posix_string.c Added
106
 
1
@@ -0,0 +1,104 @@
2
+/* Copyright  (C) 2010-2018 The RetroArch team
3
+ *
4
+ * ---------------------------------------------------------------------------------------
5
+ * The following license statement only applies to this file (compat_posix_string.c).
6
+ * ---------------------------------------------------------------------------------------
7
+ *
8
+ * Permission is hereby granted, free of charge,
9
+ * to any person obtaining a copy of this software and associated documentation files (the "Software"),
10
+ * to deal in the Software without restriction, including without limitation the rights to
11
+ * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
12
+ * and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
13
+ *
14
+ * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
15
+ *
16
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
17
+ * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
20
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
+ */
23
+
24
+#include <ctype.h>
25
+
26
+#include <compat/posix_string.h>
27
+
28
+#ifdef _WIN32
29
+
30
+#undef strcasecmp
31
+#undef strdup
32
+#undef isblank
33
+#undef strtok_r
34
+#include <ctype.h>
35
+#include <stdlib.h>
36
+#include <stddef.h>
37
+#include <compat/strl.h>
38
+
39
+#include <string.h>
40
+
41
+int retro_strcasecmp__(const char *a, const char *b)
42
+{
43
+   while (*a && *b)
44
+   {
45
+      int a_ = tolower(*a);
46
+      int b_ = tolower(*b);
47
+
48
+      if (a_ != b_)
49
+         return a_ - b_;
50
+
51
+      a++;
52
+      b++;
53
+   }
54
+
55
+   return tolower(*a) - tolower(*b);
56
+}
57
+
58
+char *retro_strdup__(const char *orig)
59
+{
60
+   size_t len = strlen(orig) + 1;
61
+   char *ret  = (char*)malloc(len);
62
+   if (!ret)
63
+      return NULL;
64
+
65
+   strlcpy(ret, orig, len);
66
+   return ret;
67
+}
68
+
69
+int retro_isblank__(int c)
70
+{
71
+   return (c == ' ') || (c == '\t');
72
+}
73
+
74
+char *retro_strtok_r__(char *str, const char *delim, char **saveptr)
75
+{
76
+   char *first = NULL;
77
+   if (!saveptr || !delim)
78
+      return NULL;
79
+
80
+   if (str)
81
+      *saveptr = str;
82
+
83
+   do
84
+   {
85
+      char *ptr = NULL;
86
+      first = *saveptr;
87
+      while (*first && strchr(delim, *first))
88
+         *first++ = '\0';
89
+
90
+      if (*first == '\0')
91
+         return NULL;
92
+
93
+      ptr = first + 1;
94
+
95
+      while (*ptr && !strchr(delim, *ptr))
96
+         ptr++;
97
+
98
+      *saveptr = ptr + (*ptr ? 1 : 0);
99
+      *ptr     = '\0';
100
+   } while (strlen(first) == 0);
101
+
102
+   return first;
103
+}
104
+
105
+#endif
106
libretro-picodrive-0~git20200816.tar.xz/platform/libretro/libretro-common/include/file Added
2
 
1
+(directory)
2
libretro-picodrive-0~git20200816.tar.xz/platform/libretro/libretro-common/include/file/file_path.h Added
201
 
1
@@ -0,0 +1,531 @@
2
+/* Copyright  (C) 2010-2019 The RetroArch team
3
+ *
4
+ * ---------------------------------------------------------------------------------------
5
+ * The following license statement only applies to this file (file_path.h).
6
+ * ---------------------------------------------------------------------------------------
7
+ *
8
+ * Permission is hereby granted, free of charge,
9
+ * to any person obtaining a copy of this software and associated documentation files (the "Software"),
10
+ * to deal in the Software without restriction, including without limitation the rights to
11
+ * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
12
+ * and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
13
+ *
14
+ * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
15
+ *
16
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
17
+ * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
20
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
+ */
23
+
24
+#ifndef __LIBRETRO_SDK_FILE_PATH_H
25
+#define __LIBRETRO_SDK_FILE_PATH_H
26
+
27
+#include <stdio.h>
28
+#include <stdint.h>
29
+#include <stddef.h>
30
+#include <sys/types.h>
31
+
32
+#include <libretro.h>
33
+#include <retro_common_api.h>
34
+
35
+#include <boolean.h>
36
+
37
+RETRO_BEGIN_DECLS
38
+
39
+#define PATH_REQUIRED_VFS_VERSION 3
40
+
41
+void path_vfs_init(const struct retro_vfs_interface_info* vfs_info);
42
+
43
+/* Order in this enum is equivalent to negative sort order in filelist
44
+ *  (i.e. DIRECTORY is on top of PLAIN_FILE) */
45
+enum
46
+{
47
+   RARCH_FILETYPE_UNSET,
48
+   RARCH_PLAIN_FILE,
49
+   RARCH_COMPRESSED_FILE_IN_ARCHIVE,
50
+   RARCH_COMPRESSED_ARCHIVE,
51
+   RARCH_DIRECTORY,
52
+   RARCH_FILE_UNSUPPORTED
53
+};
54
+
55
+/**
56
+ * path_is_compressed_file:
57
+ * @path               : path
58
+ *
59
+ * Checks if path is a compressed file.
60
+ *
61
+ * Returns: true (1) if path is a compressed file, otherwise false (0).
62
+ **/
63
+bool path_is_compressed_file(const char *path);
64
+
65
+/**
66
+ * path_contains_compressed_file:
67
+ * @path               : path
68
+ *
69
+ * Checks if path contains a compressed file.
70
+ *
71
+ * Currently we only check for hash symbol (#) inside the pathname.
72
+ * If path is ever expanded to a general URI, we should check for that here.
73
+ *
74
+ * Example:  Somewhere in the path there might be a compressed file
75
+ * E.g.: /path/to/file.7z#mygame.img
76
+ *
77
+ * Returns: true (1) if path contains compressed file, otherwise false (0).
78
+ **/
79
+#define path_contains_compressed_file(path) (path_get_archive_delim((path)) != NULL)
80
+
81
+/**
82
+ * path_get_archive_delim:
83
+ * @path               : path
84
+ *
85
+ * Gets delimiter of an archive file. Only the first '#'
86
+ * after a compression extension is considered.
87
+ *
88
+ * Returns: pointer to the delimiter in the path if it contains
89
+ * a compressed file, otherwise NULL.
90
+ */
91
+const char *path_get_archive_delim(const char *path);
92
+
93
+/**
94
+ * path_get_extension:
95
+ * @path               : path
96
+ *
97
+ * Gets extension of file. Only '.'s
98
+ * after the last slash are considered.
99
+ *
100
+ * Returns: extension part from the path.
101
+ */
102
+const char *path_get_extension(const char *path);
103
+
104
+/**
105
+ * path_remove_extension:
106
+ * @path               : path
107
+ *
108
+ * Mutates path by removing its extension. Removes all
109
+ * text after and including the last '.'.
110
+ * Only '.'s after the last slash are considered.
111
+ *
112
+ * Returns:
113
+ * 1) If path has an extension, returns path with the
114
+ *    extension removed.
115
+ * 2) If there is no extension, returns NULL.
116
+ * 3) If path is empty or NULL, returns NULL
117
+ */
118
+char *path_remove_extension(char *path);
119
+
120
+/**
121
+ * path_basename:
122
+ * @path               : path
123
+ *
124
+ * Get basename from @path.
125
+ *
126
+ * Returns: basename from path.
127
+ **/
128
+const char *path_basename(const char *path);
129
+
130
+/**
131
+ * path_basedir:
132
+ * @path               : path
133
+ *
134
+ * Extracts base directory by mutating path.
135
+ * Keeps trailing '/'.
136
+ **/
137
+void path_basedir(char *path);
138
+
139
+/**
140
+ * path_parent_dir:
141
+ * @path               : path
142
+ *
143
+ * Extracts parent directory by mutating path.
144
+ * Assumes that path is a directory. Keeps trailing '/'.
145
+ * If the path was already at the root directory, returns empty string
146
+ **/
147
+void path_parent_dir(char *path);
148
+
149
+/**
150
+ * path_resolve_realpath:
151
+ * @buf                : input and output buffer for path
152
+ * @size               : size of buffer
153
+ * @resolve_symlinks   : whether to resolve symlinks or not
154
+ *
155
+ * Resolves use of ".", "..", multiple slashes etc in absolute paths.
156
+ *
157
+ * Relative paths are rebased on the current working dir.
158
+ *
159
+ * Returns: @buf if successful, NULL otherwise.
160
+ * Note: Not implemented on consoles
161
+ * Note: Symlinks are only resolved on Unix-likes
162
+ * Note: The current working dir might not be what you expect,
163
+ *       e.g. on Android it is "/"
164
+ *       Use of fill_pathname_resolve_relative() should be prefered
165
+ **/
166
+char *path_resolve_realpath(char *buf, size_t size, bool resolve_symlinks);
167
+
168
+/**
169
+ * path_relative_to:
170
+ * @out                : buffer to write the relative path to
171
+ * @path               : path to be expressed relatively
172
+ * @base               : relative to this
173
+ * @size               : size of output buffer
174
+ *
175
+ * Turns @path into a path relative to @base and writes it to @out.
176
+ *
177
+ * @base is assumed to be a base directory, i.e. a path ending with '/' or '\'.
178
+ * Both @path and @base are assumed to be absolute paths without "." or "..".
179
+ *
180
+ * E.g. path /a/b/e/f.cgp with base /a/b/c/d/ turns into ../../e/f.cgp
181
+ **/
182
+void path_relative_to(char *out, const char *path, const char *base, size_t size);
183
+
184
+/**
185
+ * path_is_absolute:
186
+ * @path               : path
187
+ *
188
+ * Checks if @path is an absolute path or a relative path.
189
+ *
190
+ * Returns: true if path is absolute, false if path is relative.
191
+ **/
192
+bool path_is_absolute(const char *path);
193
+
194
+/**
195
+ * fill_pathname:
196
+ * @out_path           : output path
197
+ * @in_path            : input  path
198
+ * @replace            : what to replace
199
+ * @size               : buffer size of output path
200
+ *
201
libretro-picodrive-0~git20200816.tar.xz/platform/libretro/libretro-common/include/vfs/vfs.h Added
113
 
1
@@ -0,0 +1,111 @@
2
+/* Copyright  (C) 2010-2019 The RetroArch team
3
+*
4
+* ---------------------------------------------------------------------------------------
5
+* The following license statement only applies to this file (vfs_implementation.h).
6
+* ---------------------------------------------------------------------------------------
7
+*
8
+* Permission is hereby granted, free of charge,
9
+* to any person obtaining a copy of this software and associated documentation files (the "Software"),
10
+* to deal in the Software without restriction, including without limitation the rights to
11
+* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
12
+* and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
13
+*
14
+* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
15
+*
16
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
17
+* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19
+* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
20
+* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
+*/
23
+
24
+#ifndef __LIBRETRO_SDK_VFS_H
25
+#define __LIBRETRO_SDK_VFS_H
26
+
27
+#include <retro_common_api.h>
28
+#include <boolean.h>
29
+
30
+#ifdef RARCH_INTERNAL
31
+#ifndef VFS_FRONTEND
32
+#define VFS_FRONTEND
33
+#endif
34
+#endif
35
+
36
+RETRO_BEGIN_DECLS
37
+
38
+#ifdef _WIN32
39
+typedef void* HANDLE;
40
+#endif
41
+
42
+#ifdef HAVE_CDROM
43
+typedef struct
44
+{
45
+   char *cue_buf;
46
+   size_t cue_len;
47
+   int64_t byte_pos;
48
+   char drive;
49
+   unsigned char cur_min;
50
+   unsigned char cur_sec;
51
+   unsigned char cur_frame;
52
+   unsigned char cur_track;
53
+   unsigned cur_lba;
54
+   unsigned last_frame_lba;
55
+   unsigned char last_frame[2352];
56
+   bool last_frame_valid;
57
+} vfs_cdrom_t;
58
+#endif
59
+
60
+enum vfs_scheme
61
+{
62
+   VFS_SCHEME_NONE = 0,
63
+   VFS_SCHEME_CDROM
64
+};
65
+
66
+#ifndef __WINRT__
67
+#ifdef VFS_FRONTEND
68
+struct retro_vfs_file_handle
69
+#else
70
+struct libretro_vfs_implementation_file
71
+#endif
72
+{
73
+   int fd;
74
+   unsigned hints;
75
+   int64_t size;
76
+   char *buf;
77
+   FILE *fp;
78
+#ifdef _WIN32
79
+   HANDLE fh;
80
+#endif
81
+   char* orig_path;
82
+   uint64_t mappos;
83
+   uint64_t mapsize;
84
+   uint8_t *mapped;
85
+   enum vfs_scheme scheme;
86
+#ifdef HAVE_CDROM
87
+   vfs_cdrom_t cdrom;
88
+#endif
89
+};
90
+#endif
91
+
92
+/* Replace the following symbol with something appropriate
93
+ * to signify the file is being compiled for a front end instead of a core.
94
+ * This allows the same code to act as reference implementation
95
+ * for VFS and as fallbacks for when the front end does not provide VFS functionality.
96
+ */
97
+
98
+#ifdef VFS_FRONTEND
99
+typedef struct retro_vfs_file_handle libretro_vfs_implementation_file;
100
+#else
101
+typedef struct libretro_vfs_implementation_file libretro_vfs_implementation_file;
102
+#endif
103
+
104
+#ifdef VFS_FRONTEND
105
+typedef struct retro_vfs_dir_handle libretro_vfs_implementation_dir;
106
+#else
107
+typedef struct libretro_vfs_implementation_dir libretro_vfs_implementation_dir;
108
+#endif
109
+
110
+RETRO_END_DECLS
111
+
112
+#endif
113