mirror of
				https://github.com/nyanmisaka/ffmpeg-rockchip.git
				synced 2025-11-01 04:53:04 +08:00 
			
		
		
		
	 fee765c207
			
		
	
	fee765c207
	
	
	
		
			
			Signed-off-by: softworkz <softworkz@hotmail.com> Signed-off-by: Martin Storsjö <martin@martin.st>
		
			
				
	
	
		
			72 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			72 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * This file is part of FFmpeg.
 | |
|  *
 | |
|  * FFmpeg is free software; you can redistribute it and/or
 | |
|  * modify it under the terms of the GNU Lesser General Public
 | |
|  * License as published by the Free Software Foundation; either
 | |
|  * version 2.1 of the License, or (at your option) any later version.
 | |
|  *
 | |
|  * FFmpeg is distributed in the hope that it will be useful,
 | |
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public
 | |
|  * License along with FFmpeg; if not, write to the Free Software
 | |
|  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 | |
|  */
 | |
| 
 | |
| #ifndef FFTOOLS_FOPEN_UTF8_H
 | |
| #define FFTOOLS_FOPEN_UTF8_H
 | |
| 
 | |
| #include <stdio.h>
 | |
| 
 | |
| /* The fopen_utf8 function here is essentially equivalent to avpriv_fopen_utf8,
 | |
|  * except that it doesn't set O_CLOEXEC, and that it isn't exported
 | |
|  * from a different library. (On Windows, each DLL might use a different
 | |
|  * CRT, and FILE* handles can't be shared across them.) */
 | |
| 
 | |
| #ifdef _WIN32
 | |
| #include "libavutil/wchar_filename.h"
 | |
| 
 | |
| static inline FILE *fopen_utf8(const char *path_utf8, const char *mode)
 | |
| {
 | |
|     wchar_t *path_w, *mode_w;
 | |
|     FILE *f;
 | |
| 
 | |
|     /* convert UTF-8 to wide chars */
 | |
|     if (get_extended_win32_path(path_utf8, &path_w)) /* This sets errno on error. */
 | |
|         return NULL;
 | |
|     if (!path_w)
 | |
|         goto fallback;
 | |
| 
 | |
|     if (utf8towchar(mode, &mode_w))
 | |
|         return NULL;
 | |
|     if (!mode_w) {
 | |
|         /* If failing to interpret the mode string as utf8, it is an invalid
 | |
|          * parameter. */
 | |
|         av_freep(&path_w);
 | |
|         errno = EINVAL;
 | |
|         return NULL;
 | |
|     }
 | |
| 
 | |
|     f = _wfopen(path_w, mode_w);
 | |
|     av_freep(&path_w);
 | |
|     av_freep(&mode_w);
 | |
| 
 | |
|     return f;
 | |
| fallback:
 | |
|     /* path may be in CP_ACP */
 | |
|     return fopen(path_utf8, mode);
 | |
| }
 | |
| 
 | |
| #else
 | |
| 
 | |
| static inline FILE *fopen_utf8(const char *path, const char *mode)
 | |
| {
 | |
|     return fopen(path, mode);
 | |
| }
 | |
| #endif
 | |
| 
 | |
| #endif /* FFTOOLS_FOPEN_UTF8_H */
 |