• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 AVUTIL_GETENV_UTF8_H
20 #define AVUTIL_GETENV_UTF8_H
21 
22 #include <stdlib.h>
23 
24 #include "config.h"
25 #include "mem.h"
26 
27 #if HAVE_GETENV && defined(_WIN32)
28 
29 #include "libavutil/wchar_filename.h"
30 
getenv_utf8(const char * varname)31 static inline char *getenv_utf8(const char *varname)
32 {
33     wchar_t *varname_w, *var_w;
34     char *var;
35 
36     if (utf8towchar(varname, &varname_w))
37         return NULL;
38     if (!varname_w)
39         return NULL;
40 
41     var_w = _wgetenv(varname_w);
42     av_free(varname_w);
43 
44     if (!var_w)
45         return NULL;
46     if (wchartoutf8(var_w, &var))
47         return NULL;
48 
49     return var;
50 
51     // No CP_ACP fallback compared to other *_utf8() functions:
52     // non UTF-8 strings must not be returned.
53 }
54 
freeenv_utf8(char * var)55 static inline void freeenv_utf8(char *var)
56 {
57     av_free(var);
58 }
59 
getenv_dup(const char * varname)60 static inline char *getenv_dup(const char *varname)
61 {
62     return getenv_utf8(varname);
63 }
64 
65 #else
66 
getenv_utf8(const char * varname)67 static inline char *getenv_utf8(const char *varname)
68 {
69     return getenv(varname);
70 }
71 
freeenv_utf8(char * var)72 static inline void freeenv_utf8(char *var)
73 {
74 }
75 
getenv_dup(const char * varname)76 static inline char *getenv_dup(const char *varname)
77 {
78     char *var = getenv(varname);
79     if (!var)
80         return NULL;
81     return av_strdup(var);
82 }
83 
84 #endif // HAVE_GETENV && defined(_WIN32)
85 
86 #endif // AVUTIL_GETENV_UTF8_H
87