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/mem.h
"
31
#include "
libavutil/wchar_filename.h
"
32
33
static
inline
FILE *
fopen_utf8
(
const
char
*path_utf8,
const
char
*
mode
)
34
{
35
wchar_t
*path_w, *mode_w;
36
FILE *
f
;
37
38
/* convert UTF-8 to wide chars */
39
if
(get_extended_win32_path(path_utf8, &path_w))
/* This sets errno on error. */
40
return
NULL
;
41
if
(!path_w)
42
goto
fallback;
43
44
if
(utf8towchar(
mode
, &mode_w))
45
return
NULL
;
46
if
(!mode_w) {
47
/* If failing to interpret the mode string as utf8, it is an invalid
48
* parameter. */
49
av_freep
(&path_w);
50
errno = EINVAL;
51
return
NULL
;
52
}
53
54
f
= _wfopen(path_w, mode_w);
55
av_freep
(&path_w);
56
av_freep
(&mode_w);
57
58
return
f
;
59
fallback:
60
/* path may be in CP_ACP */
61
return
fopen(path_utf8,
mode
);
62
}
63
64
#else
65
66
static
inline
FILE *
fopen_utf8
(
const
char
*path,
const
char
*
mode
)
67
{
68
return
fopen(path,
mode
);
69
}
70
#endif
71
72
#endif
/* FFTOOLS_FOPEN_UTF8_H */
fopen_utf8
static FILE * fopen_utf8(const char *path, const char *mode)
Definition:
fopen_utf8.h:66
wchar_filename.h
mode
Definition:
swscale.c:52
NULL
#define NULL
Definition:
coverity.c:32
f
f
Definition:
af_crystalizer.c:122
mem.h
av_freep
#define av_freep(p)
Definition:
tableprint_vlc.h:34
Generated on Fri Dec 13 2024 19:21:19 for FFmpeg by
1.8.17