FFmpeg
getenv_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 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 
30 
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 
55 static inline void freeenv_utf8(char *var)
56 {
57  av_free(var);
58 }
59 
60 static inline char *getenv_dup(const char *varname)
61 {
62  return getenv_utf8(varname);
63 }
64 
65 #else
66 
67 static inline char *getenv_utf8(const char *varname)
68 {
69  return getenv(varname);
70 }
71 
72 static inline void freeenv_utf8(char *var)
73 {
74 }
75 
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
wchar_filename.h
freeenv_utf8
static void freeenv_utf8(char *var)
Definition: getenv_utf8.h:72
NULL
#define NULL
Definition: coverity.c:32
getenv_utf8
static char * getenv_utf8(const char *varname)
Definition: getenv_utf8.h:67
getenv_dup
static char * getenv_dup(const char *varname)
Definition: getenv_utf8.h:76
av_strdup
char * av_strdup(const char *s)
Duplicate a string.
Definition: mem.c:272
mem.h
av_free
#define av_free(p)
Definition: tableprint_vlc.h:33