blob: bf29b15247fbfdd66e35c13a551a86de586c7657 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
#ifndef NVIM_ICONV_H
#define NVIM_ICONV_H
// iconv can be linked at compile-time as well as loaded at runtime. In the
// latter case, some function pointers need to be initialized after loading
// the library (see `iconv_enabled()` in mbyte.c). These function pointers
// are stored in globals.h. Since globals.h includes iconv.h to get the
// definition of USE_ICONV, we can't include it from iconv.h. One way to
// solve this conundrum would be perhaps to let cmake decide the value of
// USE_ICONV, or to put the USE_ICONV definition in config.h.in directly. As
// it stands, globals.h needs to be included alongside iconv.h.
#ifdef HAVE_CONFIG_H
# include "auto/config.h"
#endif
// Use iconv() when it's available, either by linking to the library at
// compile time or by loading it at runtime.
#if (defined(HAVE_ICONV_H) && defined(HAVE_ICONV)) || defined(DYNAMIC_ICONV)
# define USE_ICONV
#endif
// If we don't have the actual iconv header files present but USE_ICONV was
// defined, we provide a type shim (pull in errno.h and define iconv_t).
// This enables us to still load and use iconv dynamically at runtime.
#ifdef USE_ICONV
# include <errno.h>
# ifdef HAVE_ICONV_H
# include <iconv.h>
# else
typedef void *iconv_t;
# endif
#endif
// define some missing constants if necessary
# ifdef USE_ICONV
# ifndef EILSEQ
# define EILSEQ 123
# endif
# ifdef DYNAMIC_ICONV
// on win32 iconv.dll is dynamically loaded
# define ICONV_ERRNO (*iconv_errno())
# define ICONV_E2BIG 7
# define ICONV_EINVAL 22
# define ICONV_EILSEQ 42
# else
# define ICONV_ERRNO errno
# define ICONV_E2BIG E2BIG
# define ICONV_EINVAL EINVAL
# define ICONV_EILSEQ EILSEQ
# endif
# endif
#endif // NVIM_ICONV_H
|