FFmpeg
fftools
fopen_utf8.h
Go to the documentation of this file.
1
/*
2
* This file is part of FFmpeg.
3
*
4
* FFmpeg is free software; you can redistribute it and/or
5
* modify it under the terms of the GNU Lesser General Public
6
* License as published by the Free Software Foundation; either
7
* version 2.1 of the License, or (at your option) any later version.
8
*
9
* FFmpeg is distributed in the hope that it will be useful,
10
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
* Lesser General Public License for more details.
13
*
14
* You should have received a copy of the GNU Lesser General Public
15
* License along with FFmpeg; if not, write to the Free Software
16
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17
*/
18
19
#ifndef FFTOOLS_FOPEN_UTF8_H
20
#define FFTOOLS_FOPEN_UTF8_H
21
22
#include <stdio.h>
23
24
/* The fopen_utf8 function here is essentially equivalent to avpriv_fopen_utf8,
25
* except that it doesn't set O_CLOEXEC, and that it isn't exported
26
* from a different library. (On Windows, each DLL might use a different
27
* CRT, and FILE* handles can't be shared across them.) */
28
29
#ifdef _WIN32
30
#include "
libavutil/wchar_filename.h
"
31
32
static
inline
FILE *
fopen_utf8
(
const
char
*path_utf8,
const
char
*
mode
)
33
{
34
wchar_t
*path_w, *mode_w;
35
FILE *
f
;
36
37
/* convert UTF-8 to wide chars */
38
if
(get_extended_win32_path(path_utf8, &path_w))
/* This sets errno on error. */
39
return
NULL
;
40
if
(!path_w)
41
goto
fallback;
42
43
if
(utf8towchar(
mode
, &mode_w))
44
return
NULL
;
45
if
(!mode_w) {
46
/* If failing to interpret the mode string as utf8, it is an invalid
47
* parameter. */
48
av_freep
(&path_w);
49
errno = EINVAL;
50
return
NULL
;
51
}
52
53
f
= _wfopen(path_w, mode_w);
54
av_freep
(&path_w);
55
av_freep
(&mode_w);
56
57
return
f
;
58
fallback:
59
/* path may be in CP_ACP */
60
return
fopen(path_utf8,
mode
);
61
}
62
63
#else
64
65
static
inline
FILE *
fopen_utf8
(
const
char
*path,
const
char
*
mode
)
66
{
67
return
fopen(path,
mode
);
68
}
69
#endif
70
71
#endif
/* FFTOOLS_FOPEN_UTF8_H */
fopen_utf8
static FILE * fopen_utf8(const char *path, const char *mode)
Definition:
fopen_utf8.h:65
wchar_filename.h
NULL
#define NULL
Definition:
coverity.c:32
f
f
Definition:
af_crystalizer.c:122
mode
mode
Definition:
ebur128.h:83
av_freep
#define av_freep(p)
Definition:
tableprint_vlc.h:34
Generated on Tue Feb 28 2023 21:33:05 for FFmpeg by
1.8.17