mirror of
				https://github.com/RaySollium99/picodrive.git
				synced 2025-10-27 21:48:50 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			63 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			63 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* Copyright  (C) 2010-2020 The RetroArch team
 | |
|  *
 | |
|  * ---------------------------------------------------------------------------------------
 | |
|  * The following license statement only applies to this file (fopen_utf8.c).
 | |
|  * ---------------------------------------------------------------------------------------
 | |
|  *
 | |
|  * Permission is hereby granted, free of charge,
 | |
|  * to any person obtaining a copy of this software and associated documentation files (the "Software"),
 | |
|  * to deal in the Software without restriction, including without limitation the rights to
 | |
|  * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
 | |
|  * and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
 | |
|  *
 | |
|  * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 | |
|  *
 | |
|  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
 | |
|  * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | |
|  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
 | |
|  * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
 | |
|  * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | |
|  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 | |
|  */
 | |
| 
 | |
| #include <compat/fopen_utf8.h>
 | |
| #include <encodings/utf.h>
 | |
| #include <stdio.h>
 | |
| #include <stdlib.h>
 | |
| 
 | |
| #if defined(_WIN32_WINNT) && _WIN32_WINNT < 0x0500 || defined(_XBOX)
 | |
| #ifndef LEGACY_WIN32
 | |
| #define LEGACY_WIN32
 | |
| #endif
 | |
| #endif
 | |
| 
 | |
| #ifdef _WIN32
 | |
| #undef fopen
 | |
| 
 | |
| void *fopen_utf8(const char * filename, const char * mode)
 | |
| {
 | |
| #if defined(LEGACY_WIN32)
 | |
|    FILE             *ret = NULL;
 | |
|    char * filename_local = utf8_to_local_string_alloc(filename);
 | |
| 
 | |
|    if (!filename_local)
 | |
|       return NULL;
 | |
|    ret = fopen(filename_local, mode);
 | |
|    if (filename_local)
 | |
|       free(filename_local);
 | |
|    return ret;
 | |
| #else
 | |
|    wchar_t * filename_w = utf8_to_utf16_string_alloc(filename);
 | |
|    wchar_t * mode_w = utf8_to_utf16_string_alloc(mode);
 | |
|    FILE* ret = NULL;
 | |
| 
 | |
|    if (filename_w && mode_w)
 | |
|       ret = _wfopen(filename_w, mode_w);
 | |
|    if (filename_w)
 | |
|       free(filename_w);
 | |
|    if (mode_w)
 | |
|       free(mode_w);
 | |
|    return ret;
 | |
| #endif
 | |
| }
 | |
| #endif
 | 
