summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--3rdParty/LibIDN/SConscript12
-rw-r--r--3rdParty/LibIDN/src/config.h1296
-rw-r--r--3rdParty/LibIDN/src/gl/c-ctype.c395
-rw-r--r--3rdParty/LibIDN/src/gl/c-ctype.h295
-rw-r--r--3rdParty/LibIDN/src/gl/c-strcase.h56
-rw-r--r--3rdParty/LibIDN/src/gl/c-strcasecmp.c56
-rw-r--r--3rdParty/LibIDN/src/gl/c-strncasecmp.c56
-rw-r--r--3rdParty/LibIDN/src/gl/unistr.h750
-rw-r--r--3rdParty/LibIDN/src/gl/unistr/u8-check.c105
-rw-r--r--3rdParty/LibIDN/src/gl/unitypes.h46
-rw-r--r--3rdParty/LibIDN/src/gunicomp.h3
-rw-r--r--3rdParty/LibIDN/src/gunidecomp.h3
-rw-r--r--3rdParty/LibIDN/src/idna.c121
-rw-r--r--3rdParty/LibIDN/src/idna.h117
-rw-r--r--3rdParty/LibIDN/src/nfkc.c432
-rw-r--r--3rdParty/LibIDN/src/profiles.c47
-rw-r--r--3rdParty/LibIDN/src/punycode.c102
-rw-r--r--3rdParty/LibIDN/src/punycode.h139
-rw-r--r--3rdParty/LibIDN/src/rfc3454.c1
-rw-r--r--3rdParty/LibIDN/src/stringprep.c73
-rw-r--r--3rdParty/LibIDN/src/stringprep.h209
-rw-r--r--3rdParty/LibIDN/src/toutf8.c60
-rw-r--r--3rdParty/LibIDN/stubs/unused-parameter.h3
-rw-r--r--3rdParty/LibIDN/stubs/win32/stdbool.h40
24 files changed, 3849 insertions, 568 deletions
diff --git a/3rdParty/LibIDN/SConscript b/3rdParty/LibIDN/SConscript
index 3711ad8..cfe189b 100644
--- a/3rdParty/LibIDN/SConscript
+++ b/3rdParty/LibIDN/SConscript
@@ -8,11 +8,11 @@ if env.get("LIBIDN_BUNDLED", False) :
8# Module flags 8# Module flags
9################################################################################ 9################################################################################
10 10
11 if env["SCONS_STAGE"] == "flags" : 11 if env["SCONS_STAGE"] == "flags" :
12 env["LIBIDN_FLAGS"] = { 12 env["LIBIDN_FLAGS"] = {
13 "CPPDEFINES": ["IDNA_STATIC"], 13 "CPPDEFINES": ["LIBIDN_STATIC"],
14 } 14 }
15 if os.path.basename(env["CC"]) in ("clang", "gcc") : 15 if os.path.basename(env["CC"]) in ("clang", "gcc") :
16 env["LIBIDN_FLAGS"].update({"CPPFLAGS": ["-isystem" "3rdParty/LibIDN/src"]}) 16 env["LIBIDN_FLAGS"].update({"CPPFLAGS": ["-isystem" "3rdParty/LibIDN/src"]})
17 else : 17 else :
18 env["LIBIDN_FLAGS"].update({"CPPPATH": [Dir("src")]}) 18 env["LIBIDN_FLAGS"].update({"CPPPATH": [Dir("src")]})
@@ -46,12 +46,12 @@ if env.get("LIBIDN_BUNDLED", False) :
46 else : 46 else :
47 print "Error: Cannot find strncasecmp() or strnicmp()" 47 print "Error: Cannot find strncasecmp() or strnicmp()"
48 Exit(1) 48 Exit(1)
49 conf.Finish() 49 conf.Finish()
50 50
51 myenv.Append(CPPDEFINES = "IDNA_STATIC") 51 myenv.Append(CPPDEFINES = ["LIBIDN_STATIC", "HAVE_CONFIG_H"])
52 myenv.Append(CPPPATH = ["src", "stubs"]) 52 myenv.Append(CPPPATH = ["src", "stubs", "src/gl"])
53 if myenv["PLATFORM"] == "win32" : 53 if myenv["PLATFORM"] == "win32" :
54 myenv.Append(CPPPATH = "stubs/win32") 54 myenv.Append(CPPPATH = "stubs/win32")
55 if myenv["MSVC_VERSION"][:3] == "9.0" : 55 if myenv["MSVC_VERSION"][:3] == "9.0" :
56 myenv.Append(CPPPATH = "stubs/win32/VC2008") 56 myenv.Append(CPPPATH = "stubs/win32/VC2008")
57 57
@@ -60,7 +60,11 @@ if env.get("LIBIDN_BUNDLED", False) :
60 "src/profiles.c", 60 "src/profiles.c",
61 "src/rfc3454.c", 61 "src/rfc3454.c",
62 "src/punycode.c", 62 "src/punycode.c",
63 "src/idna.c", 63 "src/idna.c",
64 "src/toutf8.c", 64 "src/toutf8.c",
65 "src/nfkc.c" 65 "src/nfkc.c",
66 "src/gl/c-ctype.c",
67 "src/gl/c-strcasecmp.c",
68 "src/gl/c-strncasecmp.c",
69 "src/gl/unistr/u8-check.c"
66 ]) 70 ])
diff --git a/3rdParty/LibIDN/src/config.h b/3rdParty/LibIDN/src/config.h
new file mode 100644
index 0000000..7a38073
--- /dev/null
+++ b/3rdParty/LibIDN/src/config.h
@@ -0,0 +1,1296 @@
1/* config.h.in. Generated from configure.ac by autoheader. */
2
3/* Define to the number of bits in type 'ptrdiff_t'. */
4#undef BITSIZEOF_PTRDIFF_T
5
6/* Define to the number of bits in type 'sig_atomic_t'. */
7#undef BITSIZEOF_SIG_ATOMIC_T
8
9/* Define to the number of bits in type 'size_t'. */
10#undef BITSIZEOF_SIZE_T
11
12/* Define to the number of bits in type 'wchar_t'. */
13#undef BITSIZEOF_WCHAR_T
14
15/* Define to the number of bits in type 'wint_t'. */
16#undef BITSIZEOF_WINT_T
17
18/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP
19 systems. This function is required for `alloca.c' support on those systems.
20 */
21#undef CRAY_STACKSEG_END
22
23/* Define if mono is the preferred C# implementation. */
24#undef CSHARP_CHOICE_MONO
25
26/* Define if pnet is the preferred C# implementation. */
27#undef CSHARP_CHOICE_PNET
28
29/* Define to 1 if using `alloca.c'. */
30#undef C_ALLOCA
31
32/* Define to 1 if translation of program messages to the user's native
33 language is requested. */
34#undef ENABLE_NLS
35
36/* Define if gettimeofday clobbers the localtime buffer. */
37#undef GETTIMEOFDAY_CLOBBERS_LOCALTIME
38
39/* Define this to 'void' or 'struct timezone' to match the system's
40 declaration of the second argument to gettimeofday. */
41#undef GETTIMEOFDAY_TIMEZONE
42
43/* Define to a C preprocessor expression that evaluates to 1 or 0, depending
44 whether the gnulib module fscanf shall be considered present. */
45#undef GNULIB_FSCANF
46
47/* Define to a C preprocessor expression that evaluates to 1 or 0, depending
48 whether the gnulib module lock shall be considered present. */
49#undef GNULIB_LOCK
50
51/* Define to 1 if printf and friends should be labeled with attribute
52 "__gnu_printf__" instead of "__printf__" */
53#undef GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU
54
55/* Define to a C preprocessor expression that evaluates to 1 or 0, depending
56 whether the gnulib module scanf shall be considered present. */
57#undef GNULIB_SCANF
58
59/* Define to a C preprocessor expression that evaluates to 1 or 0, depending
60 whether the gnulib module strerror shall be considered present. */
61#undef GNULIB_STRERROR
62
63/* Define to 1 when the gnulib module close should be tested. */
64#undef GNULIB_TEST_CLOSE
65
66/* Define to 1 when the gnulib module dup2 should be tested. */
67#undef GNULIB_TEST_DUP2
68
69/* Define to 1 when the gnulib module environ should be tested. */
70#undef GNULIB_TEST_ENVIRON
71
72/* Define to 1 when the gnulib module fdopen should be tested. */
73#undef GNULIB_TEST_FDOPEN
74
75/* Define to 1 when the gnulib module fstat should be tested. */
76#undef GNULIB_TEST_FSTAT
77
78/* Define to 1 when the gnulib module getcwd should be tested. */
79#undef GNULIB_TEST_GETCWD
80
81/* Define to 1 when the gnulib module getdtablesize should be tested. */
82#undef GNULIB_TEST_GETDTABLESIZE
83
84/* Define to 1 when the gnulib module getopt-gnu should be tested. */
85#undef GNULIB_TEST_GETOPT_GNU
86
87/* Define to 1 when the gnulib module gettimeofday should be tested. */
88#undef GNULIB_TEST_GETTIMEOFDAY
89
90/* Define to 1 when the gnulib module lstat should be tested. */
91#undef GNULIB_TEST_LSTAT
92
93/* Define to 1 when the gnulib module malloc-posix should be tested. */
94#undef GNULIB_TEST_MALLOC_POSIX
95
96/* Define to 1 when the gnulib module open should be tested. */
97#undef GNULIB_TEST_OPEN
98
99/* Define to 1 when the gnulib module putenv should be tested. */
100#undef GNULIB_TEST_PUTENV
101
102/* Define to 1 when the gnulib module setenv should be tested. */
103#undef GNULIB_TEST_SETENV
104
105/* Define to 1 when the gnulib module setlocale should be tested. */
106#undef GNULIB_TEST_SETLOCALE
107
108/* Define to 1 when the gnulib module stat should be tested. */
109#undef GNULIB_TEST_STAT
110
111/* Define to 1 when the gnulib module strerror should be tested. */
112#undef GNULIB_TEST_STRERROR
113
114/* Define to 1 when the gnulib module strverscmp should be tested. */
115#undef GNULIB_TEST_STRVERSCMP
116
117/* Define to 1 when the gnulib module symlink should be tested. */
118#undef GNULIB_TEST_SYMLINK
119
120/* Define to 1 when the gnulib module unsetenv should be tested. */
121#undef GNULIB_TEST_UNSETENV
122
123/* Define to a C preprocessor expression that evaluates to 1 or 0, depending
124 whether the gnulib module unistr/u8-mbtoucr shall be considered present. */
125#undef GNULIB_UNISTR_U8_MBTOUCR
126
127/* Define to a C preprocessor expression that evaluates to 1 or 0, depending
128 whether the gnulib module unistr/u8-uctomb shall be considered present. */
129#undef GNULIB_UNISTR_U8_UCTOMB
130
131/* Define to 1 if you have 'alloca' after including <alloca.h>, a header that
132 may be supplied by this distribution. */
133#undef HAVE_ALLOCA
134
135/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix).
136 */
137#undef HAVE_ALLOCA_H
138
139/* Define to 1 if you have the Mac OS X function CFLocaleCopyCurrent in the
140 CoreFoundation framework. */
141#undef HAVE_CFLOCALECOPYCURRENT
142
143/* Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in
144 the CoreFoundation framework. */
145#undef HAVE_CFPREFERENCESCOPYAPPVALUE
146
147/* Define if the GNU dcgettext() function is already present or preinstalled.
148 */
149#undef HAVE_DCGETTEXT
150
151/* Define to 1 if you have the declaration of `getdtablesize', and to 0 if you
152 don't. */
153#undef HAVE_DECL_GETDTABLESIZE
154
155/* Define to 1 if you have the declaration of `getenv', and to 0 if you don't.
156 */
157#undef HAVE_DECL_GETENV
158
159/* Define to 1 if you have the declaration of `program_invocation_name', and
160 to 0 if you don't. */
161#undef HAVE_DECL_PROGRAM_INVOCATION_NAME
162
163/* Define to 1 if you have the declaration of `program_invocation_short_name',
164 and to 0 if you don't. */
165#undef HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME
166
167/* Define to 1 if you have the declaration of `setenv', and to 0 if you don't.
168 */
169#undef HAVE_DECL_SETENV
170
171/* Define to 1 if you have the declaration of `strerror_r', and to 0 if you
172 don't. */
173#undef HAVE_DECL_STRERROR_R
174
175/* Define to 1 if you have the declaration of `unsetenv', and to 0 if you
176 don't. */
177#undef HAVE_DECL_UNSETENV
178
179/* Define to 1 if you have the declaration of `_putenv', and to 0 if you
180 don't. */
181#undef HAVE_DECL__PUTENV
182
183/* Define to 1 if you have the <dlfcn.h> header file. */
184#undef HAVE_DLFCN_H
185
186/* Define to 1 if you have the 'dup2' function. */
187#undef HAVE_DUP2
188
189/* Define if you have the declaration of environ. */
190#undef HAVE_ENVIRON_DECL
191
192/* Define to 1 if you have the <features.h> header file. */
193#undef HAVE_FEATURES_H
194
195/* Define to 1 if you have the `getdtablesize' function. */
196#undef HAVE_GETDTABLESIZE
197
198/* Define to 1 if you have the `getlocalename_l' function. */
199#undef HAVE_GETLOCALENAME_L
200
201/* Define to 1 if you have the <getopt.h> header file. */
202#undef HAVE_GETOPT_H
203
204/* Define to 1 if you have the `getopt_long_only' function. */
205#undef HAVE_GETOPT_LONG_ONLY
206
207/* Define if the GNU gettext() function is already present or preinstalled. */
208#undef HAVE_GETTEXT
209
210/* Define to 1 if you have the `gettimeofday' function. */
211#undef HAVE_GETTIMEOFDAY
212
213/* Define if you have the iconv() function and it works. */
214#undef HAVE_ICONV
215
216/* Define to 1 if you have the <iconv.h> header file. */
217#undef HAVE_ICONV_H
218
219/* Define to 1 if the compiler supports one of the keywords 'inline',
220 '__inline__', '__inline' and effectively inlines functions marked as such.
221 */
222#undef HAVE_INLINE
223
224/* Define to 1 if you have the <inttypes.h> header file. */
225#undef HAVE_INTTYPES_H
226
227/* Define if you have <langinfo.h> and nl_langinfo(CODESET). */
228#undef HAVE_LANGINFO_CODESET
229
230/* Define to 1 if you have the <langinfo.h> header file. */
231#undef HAVE_LANGINFO_H
232
233/* Define if your <locale.h> file defines LC_MESSAGES. */
234#undef HAVE_LC_MESSAGES
235
236/* Define to 1 if the system has the type 'long long int'. */
237#undef HAVE_LONG_LONG_INT
238
239/* Define to 1 if you have the `lstat' function. */
240#undef HAVE_LSTAT
241
242/* Define if the 'malloc' function is POSIX compliant. */
243#undef HAVE_MALLOC_POSIX
244
245/* Define to 1 if you have the <memory.h> header file. */
246#undef HAVE_MEMORY_H
247
248/* Define to 1 on MSVC platforms that have the "invalid parameter handler"
249 concept. */
250#undef HAVE_MSVC_INVALID_PARAMETER_HANDLER
251
252/* Define to 1 if you have the `newlocale' function. */
253#undef HAVE_NEWLOCALE
254
255/* Define to 1 if you have the `pthread_atfork' function. */
256#undef HAVE_PTHREAD_ATFORK
257
258/* Define if the <pthread.h> defines PTHREAD_MUTEX_RECURSIVE. */
259#undef HAVE_PTHREAD_MUTEX_RECURSIVE
260
261/* Define if the POSIX multithreading library has read/write locks. */
262#undef HAVE_PTHREAD_RWLOCK
263
264/* Define to 1 if atoll is declared even after undefining macros. */
265#undef HAVE_RAW_DECL_ATOLL
266
267/* Define to 1 if btowc is declared even after undefining macros. */
268#undef HAVE_RAW_DECL_BTOWC
269
270/* Define to 1 if canonicalize_file_name is declared even after undefining
271 macros. */
272#undef HAVE_RAW_DECL_CANONICALIZE_FILE_NAME
273
274/* Define to 1 if chdir is declared even after undefining macros. */
275#undef HAVE_RAW_DECL_CHDIR
276
277/* Define to 1 if chown is declared even after undefining macros. */
278#undef HAVE_RAW_DECL_CHOWN
279
280/* Define to 1 if dprintf is declared even after undefining macros. */
281#undef HAVE_RAW_DECL_DPRINTF
282
283/* Define to 1 if dup is declared even after undefining macros. */
284#undef HAVE_RAW_DECL_DUP
285
286/* Define to 1 if dup2 is declared even after undefining macros. */
287#undef HAVE_RAW_DECL_DUP2
288
289/* Define to 1 if dup3 is declared even after undefining macros. */
290#undef HAVE_RAW_DECL_DUP3
291
292/* Define to 1 if duplocale is declared even after undefining macros. */
293#undef HAVE_RAW_DECL_DUPLOCALE
294
295/* Define to 1 if endusershell is declared even after undefining macros. */
296#undef HAVE_RAW_DECL_ENDUSERSHELL
297
298/* Define to 1 if environ is declared even after undefining macros. */
299#undef HAVE_RAW_DECL_ENVIRON
300
301/* Define to 1 if euidaccess is declared even after undefining macros. */
302#undef HAVE_RAW_DECL_EUIDACCESS
303
304/* Define to 1 if faccessat is declared even after undefining macros. */
305#undef HAVE_RAW_DECL_FACCESSAT
306
307/* Define to 1 if fchdir is declared even after undefining macros. */
308#undef HAVE_RAW_DECL_FCHDIR
309
310/* Define to 1 if fchmodat is declared even after undefining macros. */
311#undef HAVE_RAW_DECL_FCHMODAT
312
313/* Define to 1 if fchownat is declared even after undefining macros. */
314#undef HAVE_RAW_DECL_FCHOWNAT
315
316/* Define to 1 if fcntl is declared even after undefining macros. */
317#undef HAVE_RAW_DECL_FCNTL
318
319/* Define to 1 if fdatasync is declared even after undefining macros. */
320#undef HAVE_RAW_DECL_FDATASYNC
321
322/* Define to 1 if ffsl is declared even after undefining macros. */
323#undef HAVE_RAW_DECL_FFSL
324
325/* Define to 1 if ffsll is declared even after undefining macros. */
326#undef HAVE_RAW_DECL_FFSLL
327
328/* Define to 1 if fpurge is declared even after undefining macros. */
329#undef HAVE_RAW_DECL_FPURGE
330
331/* Define to 1 if fseeko is declared even after undefining macros. */
332#undef HAVE_RAW_DECL_FSEEKO
333
334/* Define to 1 if fstat is declared even after undefining macros. */
335#undef HAVE_RAW_DECL_FSTAT
336
337/* Define to 1 if fstatat is declared even after undefining macros. */
338#undef HAVE_RAW_DECL_FSTATAT
339
340/* Define to 1 if fsync is declared even after undefining macros. */
341#undef HAVE_RAW_DECL_FSYNC
342
343/* Define to 1 if ftello is declared even after undefining macros. */
344#undef HAVE_RAW_DECL_FTELLO
345
346/* Define to 1 if ftruncate is declared even after undefining macros. */
347#undef HAVE_RAW_DECL_FTRUNCATE
348
349/* Define to 1 if futimens is declared even after undefining macros. */
350#undef HAVE_RAW_DECL_FUTIMENS
351
352/* Define to 1 if getcwd is declared even after undefining macros. */
353#undef HAVE_RAW_DECL_GETCWD
354
355/* Define to 1 if getdelim is declared even after undefining macros. */
356#undef HAVE_RAW_DECL_GETDELIM
357
358/* Define to 1 if getdomainname is declared even after undefining macros. */
359#undef HAVE_RAW_DECL_GETDOMAINNAME
360
361/* Define to 1 if getdtablesize is declared even after undefining macros. */
362#undef HAVE_RAW_DECL_GETDTABLESIZE
363
364/* Define to 1 if getgroups is declared even after undefining macros. */
365#undef HAVE_RAW_DECL_GETGROUPS
366
367/* Define to 1 if gethostname is declared even after undefining macros. */
368#undef HAVE_RAW_DECL_GETHOSTNAME
369
370/* Define to 1 if getline is declared even after undefining macros. */
371#undef HAVE_RAW_DECL_GETLINE
372
373/* Define to 1 if getloadavg is declared even after undefining macros. */
374#undef HAVE_RAW_DECL_GETLOADAVG
375
376/* Define to 1 if getlogin is declared even after undefining macros. */
377#undef HAVE_RAW_DECL_GETLOGIN
378
379/* Define to 1 if getlogin_r is declared even after undefining macros. */
380#undef HAVE_RAW_DECL_GETLOGIN_R
381
382/* Define to 1 if getpagesize is declared even after undefining macros. */
383#undef HAVE_RAW_DECL_GETPAGESIZE
384
385/* Define to 1 if gets is declared even after undefining macros. */
386#undef HAVE_RAW_DECL_GETS
387
388/* Define to 1 if getsubopt is declared even after undefining macros. */
389#undef HAVE_RAW_DECL_GETSUBOPT
390
391/* Define to 1 if gettimeofday is declared even after undefining macros. */
392#undef HAVE_RAW_DECL_GETTIMEOFDAY
393
394/* Define to 1 if getusershell is declared even after undefining macros. */
395#undef HAVE_RAW_DECL_GETUSERSHELL
396
397/* Define to 1 if grantpt is declared even after undefining macros. */
398#undef HAVE_RAW_DECL_GRANTPT
399
400/* Define to 1 if group_member is declared even after undefining macros. */
401#undef HAVE_RAW_DECL_GROUP_MEMBER
402
403/* Define to 1 if imaxabs is declared even after undefining macros. */
404#undef HAVE_RAW_DECL_IMAXABS
405
406/* Define to 1 if imaxdiv is declared even after undefining macros. */
407#undef HAVE_RAW_DECL_IMAXDIV
408
409/* Define to 1 if initstate is declared even after undefining macros. */
410#undef HAVE_RAW_DECL_INITSTATE
411
412/* Define to 1 if initstate_r is declared even after undefining macros. */
413#undef HAVE_RAW_DECL_INITSTATE_R
414
415/* Define to 1 if isatty is declared even after undefining macros. */
416#undef HAVE_RAW_DECL_ISATTY
417
418/* Define to 1 if lchmod is declared even after undefining macros. */
419#undef HAVE_RAW_DECL_LCHMOD
420
421/* Define to 1 if lchown is declared even after undefining macros. */
422#undef HAVE_RAW_DECL_LCHOWN
423
424/* Define to 1 if link is declared even after undefining macros. */
425#undef HAVE_RAW_DECL_LINK
426
427/* Define to 1 if linkat is declared even after undefining macros. */
428#undef HAVE_RAW_DECL_LINKAT
429
430/* Define to 1 if lseek is declared even after undefining macros. */
431#undef HAVE_RAW_DECL_LSEEK
432
433/* Define to 1 if lstat is declared even after undefining macros. */
434#undef HAVE_RAW_DECL_LSTAT
435
436/* Define to 1 if mbrlen is declared even after undefining macros. */
437#undef HAVE_RAW_DECL_MBRLEN
438
439/* Define to 1 if mbrtowc is declared even after undefining macros. */
440#undef HAVE_RAW_DECL_MBRTOWC
441
442/* Define to 1 if mbsinit is declared even after undefining macros. */
443#undef HAVE_RAW_DECL_MBSINIT
444
445/* Define to 1 if mbsnrtowcs is declared even after undefining macros. */
446#undef HAVE_RAW_DECL_MBSNRTOWCS
447
448/* Define to 1 if mbsrtowcs is declared even after undefining macros. */
449#undef HAVE_RAW_DECL_MBSRTOWCS
450
451/* Define to 1 if memmem is declared even after undefining macros. */
452#undef HAVE_RAW_DECL_MEMMEM
453
454/* Define to 1 if mempcpy is declared even after undefining macros. */
455#undef HAVE_RAW_DECL_MEMPCPY
456
457/* Define to 1 if memrchr is declared even after undefining macros. */
458#undef HAVE_RAW_DECL_MEMRCHR
459
460/* Define to 1 if mkdirat is declared even after undefining macros. */
461#undef HAVE_RAW_DECL_MKDIRAT
462
463/* Define to 1 if mkdtemp is declared even after undefining macros. */
464#undef HAVE_RAW_DECL_MKDTEMP
465
466/* Define to 1 if mkfifo is declared even after undefining macros. */
467#undef HAVE_RAW_DECL_MKFIFO
468
469/* Define to 1 if mkfifoat is declared even after undefining macros. */
470#undef HAVE_RAW_DECL_MKFIFOAT
471
472/* Define to 1 if mknod is declared even after undefining macros. */
473#undef HAVE_RAW_DECL_MKNOD
474
475/* Define to 1 if mknodat is declared even after undefining macros. */
476#undef HAVE_RAW_DECL_MKNODAT
477
478/* Define to 1 if mkostemp is declared even after undefining macros. */
479#undef HAVE_RAW_DECL_MKOSTEMP
480
481/* Define to 1 if mkostemps is declared even after undefining macros. */
482#undef HAVE_RAW_DECL_MKOSTEMPS
483
484/* Define to 1 if mkstemp is declared even after undefining macros. */
485#undef HAVE_RAW_DECL_MKSTEMP
486
487/* Define to 1 if mkstemps is declared even after undefining macros. */
488#undef HAVE_RAW_DECL_MKSTEMPS
489
490/* Define to 1 if nl_langinfo is declared even after undefining macros. */
491#undef HAVE_RAW_DECL_NL_LANGINFO
492
493/* Define to 1 if openat is declared even after undefining macros. */
494#undef HAVE_RAW_DECL_OPENAT
495
496/* Define to 1 if pclose is declared even after undefining macros. */
497#undef HAVE_RAW_DECL_PCLOSE
498
499/* Define to 1 if pipe is declared even after undefining macros. */
500#undef HAVE_RAW_DECL_PIPE
501
502/* Define to 1 if pipe2 is declared even after undefining macros. */
503#undef HAVE_RAW_DECL_PIPE2
504
505/* Define to 1 if popen is declared even after undefining macros. */
506#undef HAVE_RAW_DECL_POPEN
507
508/* Define to 1 if posix_openpt is declared even after undefining macros. */
509#undef HAVE_RAW_DECL_POSIX_OPENPT
510
511/* Define to 1 if pread is declared even after undefining macros. */
512#undef HAVE_RAW_DECL_PREAD
513
514/* Define to 1 if ptsname is declared even after undefining macros. */
515#undef HAVE_RAW_DECL_PTSNAME
516
517/* Define to 1 if ptsname_r is declared even after undefining macros. */
518#undef HAVE_RAW_DECL_PTSNAME_R
519
520/* Define to 1 if pwrite is declared even after undefining macros. */
521#undef HAVE_RAW_DECL_PWRITE
522
523/* Define to 1 if random is declared even after undefining macros. */
524#undef HAVE_RAW_DECL_RANDOM
525
526/* Define to 1 if random_r is declared even after undefining macros. */
527#undef HAVE_RAW_DECL_RANDOM_R
528
529/* Define to 1 if rawmemchr is declared even after undefining macros. */
530#undef HAVE_RAW_DECL_RAWMEMCHR
531
532/* Define to 1 if readlink is declared even after undefining macros. */
533#undef HAVE_RAW_DECL_READLINK
534
535/* Define to 1 if readlinkat is declared even after undefining macros. */
536#undef HAVE_RAW_DECL_READLINKAT
537
538/* Define to 1 if realpath is declared even after undefining macros. */
539#undef HAVE_RAW_DECL_REALPATH
540
541/* Define to 1 if renameat is declared even after undefining macros. */
542#undef HAVE_RAW_DECL_RENAMEAT
543
544/* Define to 1 if rmdir is declared even after undefining macros. */
545#undef HAVE_RAW_DECL_RMDIR
546
547/* Define to 1 if rpmatch is declared even after undefining macros. */
548#undef HAVE_RAW_DECL_RPMATCH
549
550/* Define to 1 if secure_getenv is declared even after undefining macros. */
551#undef HAVE_RAW_DECL_SECURE_GETENV
552
553/* Define to 1 if setenv is declared even after undefining macros. */
554#undef HAVE_RAW_DECL_SETENV
555
556/* Define to 1 if sethostname is declared even after undefining macros. */
557#undef HAVE_RAW_DECL_SETHOSTNAME
558
559/* Define to 1 if setlocale is declared even after undefining macros. */
560#undef HAVE_RAW_DECL_SETLOCALE
561
562/* Define to 1 if setstate is declared even after undefining macros. */
563#undef HAVE_RAW_DECL_SETSTATE
564
565/* Define to 1 if setstate_r is declared even after undefining macros. */
566#undef HAVE_RAW_DECL_SETSTATE_R
567
568/* Define to 1 if setusershell is declared even after undefining macros. */
569#undef HAVE_RAW_DECL_SETUSERSHELL
570
571/* Define to 1 if sleep is declared even after undefining macros. */
572#undef HAVE_RAW_DECL_SLEEP
573
574/* Define to 1 if snprintf is declared even after undefining macros. */
575#undef HAVE_RAW_DECL_SNPRINTF
576
577/* Define to 1 if srandom is declared even after undefining macros. */
578#undef HAVE_RAW_DECL_SRANDOM
579
580/* Define to 1 if srandom_r is declared even after undefining macros. */
581#undef HAVE_RAW_DECL_SRANDOM_R
582
583/* Define to 1 if stat is declared even after undefining macros. */
584#undef HAVE_RAW_DECL_STAT
585
586/* Define to 1 if stpcpy is declared even after undefining macros. */
587#undef HAVE_RAW_DECL_STPCPY
588
589/* Define to 1 if stpncpy is declared even after undefining macros. */
590#undef HAVE_RAW_DECL_STPNCPY
591
592/* Define to 1 if strcasestr is declared even after undefining macros. */
593#undef HAVE_RAW_DECL_STRCASESTR
594
595/* Define to 1 if strchrnul is declared even after undefining macros. */
596#undef HAVE_RAW_DECL_STRCHRNUL
597
598/* Define to 1 if strdup is declared even after undefining macros. */
599#undef HAVE_RAW_DECL_STRDUP
600
601/* Define to 1 if strerror_r is declared even after undefining macros. */
602#undef HAVE_RAW_DECL_STRERROR_R
603
604/* Define to 1 if strncat is declared even after undefining macros. */
605#undef HAVE_RAW_DECL_STRNCAT
606
607/* Define to 1 if strndup is declared even after undefining macros. */
608#undef HAVE_RAW_DECL_STRNDUP
609
610/* Define to 1 if strnlen is declared even after undefining macros. */
611#undef HAVE_RAW_DECL_STRNLEN
612
613/* Define to 1 if strpbrk is declared even after undefining macros. */
614#undef HAVE_RAW_DECL_STRPBRK
615
616/* Define to 1 if strsep is declared even after undefining macros. */
617#undef HAVE_RAW_DECL_STRSEP
618
619/* Define to 1 if strsignal is declared even after undefining macros. */
620#undef HAVE_RAW_DECL_STRSIGNAL
621
622/* Define to 1 if strtod is declared even after undefining macros. */
623#undef HAVE_RAW_DECL_STRTOD
624
625/* Define to 1 if strtoimax is declared even after undefining macros. */
626#undef HAVE_RAW_DECL_STRTOIMAX
627
628/* Define to 1 if strtok_r is declared even after undefining macros. */
629#undef HAVE_RAW_DECL_STRTOK_R
630
631/* Define to 1 if strtoll is declared even after undefining macros. */
632#undef HAVE_RAW_DECL_STRTOLL
633
634/* Define to 1 if strtoull is declared even after undefining macros. */
635#undef HAVE_RAW_DECL_STRTOULL
636
637/* Define to 1 if strtoumax is declared even after undefining macros. */
638#undef HAVE_RAW_DECL_STRTOUMAX
639
640/* Define to 1 if strverscmp is declared even after undefining macros. */
641#undef HAVE_RAW_DECL_STRVERSCMP
642
643/* Define to 1 if symlink is declared even after undefining macros. */
644#undef HAVE_RAW_DECL_SYMLINK
645
646/* Define to 1 if symlinkat is declared even after undefining macros. */
647#undef HAVE_RAW_DECL_SYMLINKAT
648
649/* Define to 1 if tmpfile is declared even after undefining macros. */
650#undef HAVE_RAW_DECL_TMPFILE
651
652/* Define to 1 if ttyname_r is declared even after undefining macros. */
653#undef HAVE_RAW_DECL_TTYNAME_R
654
655/* Define to 1 if unlink is declared even after undefining macros. */
656#undef HAVE_RAW_DECL_UNLINK
657
658/* Define to 1 if unlinkat is declared even after undefining macros. */
659#undef HAVE_RAW_DECL_UNLINKAT
660
661/* Define to 1 if unlockpt is declared even after undefining macros. */
662#undef HAVE_RAW_DECL_UNLOCKPT
663
664/* Define to 1 if unsetenv is declared even after undefining macros. */
665#undef HAVE_RAW_DECL_UNSETENV
666
667/* Define to 1 if usleep is declared even after undefining macros. */
668#undef HAVE_RAW_DECL_USLEEP
669
670/* Define to 1 if utimensat is declared even after undefining macros. */
671#undef HAVE_RAW_DECL_UTIMENSAT
672
673/* Define to 1 if vdprintf is declared even after undefining macros. */
674#undef HAVE_RAW_DECL_VDPRINTF
675
676/* Define to 1 if vsnprintf is declared even after undefining macros. */
677#undef HAVE_RAW_DECL_VSNPRINTF
678
679/* Define to 1 if wcpcpy is declared even after undefining macros. */
680#undef HAVE_RAW_DECL_WCPCPY
681
682/* Define to 1 if wcpncpy is declared even after undefining macros. */
683#undef HAVE_RAW_DECL_WCPNCPY
684
685/* Define to 1 if wcrtomb is declared even after undefining macros. */
686#undef HAVE_RAW_DECL_WCRTOMB
687
688/* Define to 1 if wcscasecmp is declared even after undefining macros. */
689#undef HAVE_RAW_DECL_WCSCASECMP
690
691/* Define to 1 if wcscat is declared even after undefining macros. */
692#undef HAVE_RAW_DECL_WCSCAT
693
694/* Define to 1 if wcschr is declared even after undefining macros. */
695#undef HAVE_RAW_DECL_WCSCHR
696
697/* Define to 1 if wcscmp is declared even after undefining macros. */
698#undef HAVE_RAW_DECL_WCSCMP
699
700/* Define to 1 if wcscoll is declared even after undefining macros. */
701#undef HAVE_RAW_DECL_WCSCOLL
702
703/* Define to 1 if wcscpy is declared even after undefining macros. */
704#undef HAVE_RAW_DECL_WCSCPY
705
706/* Define to 1 if wcscspn is declared even after undefining macros. */
707#undef HAVE_RAW_DECL_WCSCSPN
708
709/* Define to 1 if wcsdup is declared even after undefining macros. */
710#undef HAVE_RAW_DECL_WCSDUP
711
712/* Define to 1 if wcslen is declared even after undefining macros. */
713#undef HAVE_RAW_DECL_WCSLEN
714
715/* Define to 1 if wcsncasecmp is declared even after undefining macros. */
716#undef HAVE_RAW_DECL_WCSNCASECMP
717
718/* Define to 1 if wcsncat is declared even after undefining macros. */
719#undef HAVE_RAW_DECL_WCSNCAT
720
721/* Define to 1 if wcsncmp is declared even after undefining macros. */
722#undef HAVE_RAW_DECL_WCSNCMP
723
724/* Define to 1 if wcsncpy is declared even after undefining macros. */
725#undef HAVE_RAW_DECL_WCSNCPY
726
727/* Define to 1 if wcsnlen is declared even after undefining macros. */
728#undef HAVE_RAW_DECL_WCSNLEN
729
730/* Define to 1 if wcsnrtombs is declared even after undefining macros. */
731#undef HAVE_RAW_DECL_WCSNRTOMBS
732
733/* Define to 1 if wcspbrk is declared even after undefining macros. */
734#undef HAVE_RAW_DECL_WCSPBRK
735
736/* Define to 1 if wcsrchr is declared even after undefining macros. */
737#undef HAVE_RAW_DECL_WCSRCHR
738
739/* Define to 1 if wcsrtombs is declared even after undefining macros. */
740#undef HAVE_RAW_DECL_WCSRTOMBS
741
742/* Define to 1 if wcsspn is declared even after undefining macros. */
743#undef HAVE_RAW_DECL_WCSSPN
744
745/* Define to 1 if wcsstr is declared even after undefining macros. */
746#undef HAVE_RAW_DECL_WCSSTR
747
748/* Define to 1 if wcstok is declared even after undefining macros. */
749#undef HAVE_RAW_DECL_WCSTOK
750
751/* Define to 1 if wcswidth is declared even after undefining macros. */
752#undef HAVE_RAW_DECL_WCSWIDTH
753
754/* Define to 1 if wcsxfrm is declared even after undefining macros. */
755#undef HAVE_RAW_DECL_WCSXFRM
756
757/* Define to 1 if wctob is declared even after undefining macros. */
758#undef HAVE_RAW_DECL_WCTOB
759
760/* Define to 1 if wcwidth is declared even after undefining macros. */
761#undef HAVE_RAW_DECL_WCWIDTH
762
763/* Define to 1 if wmemchr is declared even after undefining macros. */
764#undef HAVE_RAW_DECL_WMEMCHR
765
766/* Define to 1 if wmemcmp is declared even after undefining macros. */
767#undef HAVE_RAW_DECL_WMEMCMP
768
769/* Define to 1 if wmemcpy is declared even after undefining macros. */
770#undef HAVE_RAW_DECL_WMEMCPY
771
772/* Define to 1 if wmemmove is declared even after undefining macros. */
773#undef HAVE_RAW_DECL_WMEMMOVE
774
775/* Define to 1 if wmemset is declared even after undefining macros. */
776#undef HAVE_RAW_DECL_WMEMSET
777
778/* Define to 1 if _Exit is declared even after undefining macros. */
779#undef HAVE_RAW_DECL__EXIT
780
781/* Define to 1 if you have the <search.h> header file. */
782#undef HAVE_SEARCH_H
783
784/* Define to 1 if you have the `setdtablesize' function. */
785#undef HAVE_SETDTABLESIZE
786
787/* Define to 1 if you have the `setenv' function. */
788#undef HAVE_SETENV
789
790/* Define to 1 if you have the `setlocale' function. */
791#undef HAVE_SETLOCALE
792
793/* Define to 1 if 'sig_atomic_t' is a signed integer type. */
794#undef HAVE_SIGNED_SIG_ATOMIC_T
795
796/* Define to 1 if 'wchar_t' is a signed integer type. */
797#undef HAVE_SIGNED_WCHAR_T
798
799/* Define to 1 if 'wint_t' is a signed integer type. */
800#undef HAVE_SIGNED_WINT_T
801
802/* Define to 1 if you have the <stdint.h> header file. */
803#undef HAVE_STDINT_H
804
805/* Define to 1 if you have the <stdlib.h> header file. */
806#undef HAVE_STDLIB_H
807
808/* Define to 1 if you have the `strerror_r' function. */
809#undef HAVE_STRERROR_R
810
811/* Define to 1 if you have the <strings.h> header file. */
812#undef HAVE_STRINGS_H
813
814/* Define to 1 if you have the <string.h> header file. */
815#undef HAVE_STRING_H
816
817/* Define to 1 if you have the `strverscmp' function. */
818#undef HAVE_STRVERSCMP
819
820/* Define to 1 if you have the `symlink' function. */
821#undef HAVE_SYMLINK
822
823/* Define to 1 if you have the <sys/bitypes.h> header file. */
824#undef HAVE_SYS_BITYPES_H
825
826/* Define to 1 if you have the <sys/inttypes.h> header file. */
827#undef HAVE_SYS_INTTYPES_H
828
829/* Define to 1 if you have the <sys/param.h> header file. */
830#undef HAVE_SYS_PARAM_H
831
832/* Define to 1 if you have the <sys/socket.h> header file. */
833#undef HAVE_SYS_SOCKET_H
834
835/* Define to 1 if you have the <sys/stat.h> header file. */
836#undef HAVE_SYS_STAT_H
837
838/* Define to 1 if you have the <sys/timeb.h> header file. */
839#undef HAVE_SYS_TIMEB_H
840
841/* Define to 1 if you have the <sys/time.h> header file. */
842#undef HAVE_SYS_TIME_H
843
844/* Define to 1 if you have the <sys/types.h> header file. */
845#undef HAVE_SYS_TYPES_H
846
847/* Define to 1 if you have the `tsearch' function. */
848#undef HAVE_TSEARCH
849
850/* Define to 1 if you have the <unistd.h> header file. */
851#undef HAVE_UNISTD_H
852
853/* Define to 1 if you have the `unsetenv' function. */
854#undef HAVE_UNSETENV
855
856/* Define to 1 if the system has the type 'unsigned long long int'. */
857#undef HAVE_UNSIGNED_LONG_LONG_INT
858
859/* Define to 1 if you have the `uselocale' function. */
860#undef HAVE_USELOCALE
861
862/* Define to 1 or 0, depending whether the compiler supports simple visibility
863 declarations. */
864#undef HAVE_VISIBILITY
865
866/* Define to 1 if you have the <wchar.h> header file. */
867#undef HAVE_WCHAR_H
868
869/* Define if you have the 'wchar_t' type. */
870#undef HAVE_WCHAR_T
871
872/* Define to 1 if you have the <winsock2.h> header file. */
873#undef HAVE_WINSOCK2_H
874
875/* Define if you have the 'wint_t' type. */
876#undef HAVE_WINT_T
877
878/* Define to 1 if O_NOATIME works. */
879#undef HAVE_WORKING_O_NOATIME
880
881/* Define to 1 if O_NOFOLLOW works. */
882#undef HAVE_WORKING_O_NOFOLLOW
883
884/* Define to 1 if you have the <xlocale.h> header file. */
885#undef HAVE_XLOCALE_H
886
887/* Define to 1 if the system has the type `_Bool'. */
888#undef HAVE__BOOL
889
890/* Define to 1 if you have the `_ftime' function. */
891#undef HAVE__FTIME
892
893/* Define to 1 if you have the `_set_invalid_parameter_handler' function. */
894#undef HAVE__SET_INVALID_PARAMETER_HANDLER
895
896/* Define as const if the declaration of iconv() needs const. */
897#undef ICONV_CONST
898
899/* Define to a symbolic name denoting the flavor of iconv_open()
900 implementation. */
901#undef ICONV_FLAVOR
902
903/* Define to 1 if 'lstat' dereferences a symlink specified with a trailing
904 slash. */
905#undef LSTAT_FOLLOWS_SLASHED_SYMLINK
906
907/* Define to the sub-directory in which libtool stores uninstalled libraries.
908 */
909#undef LT_OBJDIR
910
911/* If malloc(0) is != NULL, define this to 1. Otherwise define this to 0. */
912#undef MALLOC_0_IS_NONNULL
913
914/* Define to 1 if open() fails to recognize a trailing slash. */
915#undef OPEN_TRAILING_SLASH_BUG
916
917/* Name of package */
918#undef PACKAGE
919
920/* Define to the address where bug reports for this package should be sent. */
921#undef PACKAGE_BUGREPORT
922
923/* Define to the full name of this package. */
924#undef PACKAGE_NAME
925
926/* String identifying the packager of this software */
927#undef PACKAGE_PACKAGER
928
929/* Packager info for bug reports (URL/e-mail/...) */
930#undef PACKAGE_PACKAGER_BUG_REPORTS
931
932/* Packager-specific version information */
933#undef PACKAGE_PACKAGER_VERSION
934
935/* Define to the full name and version of this package. */
936#undef PACKAGE_STRING
937
938/* Define to the one symbol short name of this package. */
939#undef PACKAGE_TARNAME
940
941/* Define to the home page for this package. */
942#undef PACKAGE_URL
943
944/* Define to the version of this package. */
945#undef PACKAGE_VERSION
946
947/* Define if <inttypes.h> exists and defines unusable PRI* macros. */
948#undef PRI_MACROS_BROKEN
949
950/* Define to the type that is the result of default argument promotions of
951 type mode_t. */
952#undef PROMOTED_MODE_T
953
954/* Define if the pthread_in_use() detection is hard. */
955#undef PTHREAD_IN_USE_DETECTION_HARD
956
957/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
958 'ptrdiff_t'. */
959#undef PTRDIFF_T_SUFFIX
960
961/* Define to 1 if stat needs help when passed a directory name with a trailing
962 slash */
963#undef REPLACE_FUNC_STAT_DIR
964
965/* Define to 1 if stat needs help when passed a file name with a trailing
966 slash */
967#undef REPLACE_FUNC_STAT_FILE
968
969/* Define to 1 if strerror(0) does not return a message implying success. */
970#undef REPLACE_STRERROR_0
971
972/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
973 'sig_atomic_t'. */
974#undef SIG_ATOMIC_T_SUFFIX
975
976/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
977 'size_t'. */
978#undef SIZE_T_SUFFIX
979
980/* If using the C implementation of alloca, define if you know the
981 direction of stack growth for your system; otherwise it will be
982 automatically deduced at runtime.
983 STACK_DIRECTION > 0 => grows toward higher addresses
984 STACK_DIRECTION < 0 => grows toward lower addresses
985 STACK_DIRECTION = 0 => direction of growth unknown */
986#undef STACK_DIRECTION
987
988/* Define to 1 if the `S_IS*' macros in <sys/stat.h> do not work properly. */
989#undef STAT_MACROS_BROKEN
990
991/* Define to 1 if you have the ANSI C header files. */
992#undef STDC_HEADERS
993
994/* Define to 1 if strerror_r returns char *. */
995#undef STRERROR_R_CHAR_P
996
997/* Define if the POSIX multithreading library can be used. */
998#undef USE_POSIX_THREADS
999
1000/* Define if references to the POSIX multithreading library should be made
1001 weak. */
1002#undef USE_POSIX_THREADS_WEAK
1003
1004/* Define if the GNU Pth multithreading library can be used. */
1005#undef USE_PTH_THREADS
1006
1007/* Define if references to the GNU Pth multithreading library should be made
1008 weak. */
1009#undef USE_PTH_THREADS_WEAK
1010
1011/* Define if the old Solaris multithreading library can be used. */
1012#undef USE_SOLARIS_THREADS
1013
1014/* Define if references to the old Solaris multithreading library should be
1015 made weak. */
1016#undef USE_SOLARIS_THREADS_WEAK
1017
1018/* Enable extensions on AIX 3, Interix. */
1019#ifndef _ALL_SOURCE
1020# undef _ALL_SOURCE
1021#endif
1022/* Enable general extensions on OS X. */
1023#ifndef _DARWIN_C_SOURCE
1024# undef _DARWIN_C_SOURCE
1025#endif
1026/* Enable GNU extensions on systems that have them. */
1027#ifndef _GNU_SOURCE
1028# undef _GNU_SOURCE
1029#endif
1030/* Use GNU style printf and scanf. */
1031#ifndef __USE_MINGW_ANSI_STDIO
1032# undef __USE_MINGW_ANSI_STDIO
1033#endif
1034/* Enable threading extensions on Solaris. */
1035#ifndef _POSIX_PTHREAD_SEMANTICS
1036# undef _POSIX_PTHREAD_SEMANTICS
1037#endif
1038/* Enable extensions on HP NonStop. */
1039#ifndef _TANDEM_SOURCE
1040# undef _TANDEM_SOURCE
1041#endif
1042/* Enable X/Open extensions if necessary. HP-UX 11.11 defines
1043 mbstate_t only if _XOPEN_SOURCE is defined to 500, regardless of
1044 whether compiling with -Ae or -D_HPUX_SOURCE=1. */
1045#ifndef _XOPEN_SOURCE
1046# undef _XOPEN_SOURCE
1047#endif
1048/* Enable general extensions on Solaris. */
1049#ifndef __EXTENSIONS__
1050# undef __EXTENSIONS__
1051#endif
1052
1053
1054/* Define if the native Windows multithreading API can be used. */
1055#undef USE_WINDOWS_THREADS
1056
1057/* Version number of package */
1058#undef VERSION
1059
1060/* Define to 1 if unsetenv returns void instead of int. */
1061#undef VOID_UNSETENV
1062
1063/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
1064 'wchar_t'. */
1065#undef WCHAR_T_SUFFIX
1066
1067/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
1068 'wint_t'. */
1069#undef WINT_T_SUFFIX
1070
1071/* Define to 1 if you want TLD code. */
1072#undef WITH_TLD
1073
1074/* Enable large inode numbers on Mac OS X 10.5. */
1075#undef _DARWIN_USE_64_BIT_INODE
1076
1077/* Number of bits in a file offset, on hosts where this is settable. */
1078#undef _FILE_OFFSET_BITS
1079
1080/* Define to 1 if Gnulib overrides 'struct stat' on Windows so that struct
1081 stat.st_size becomes 64-bit. */
1082#undef _GL_WINDOWS_64_BIT_ST_SIZE
1083
1084/* Define for large files, on AIX-style hosts. */
1085#undef _LARGE_FILES
1086
1087/* Define to 1 on Solaris. */
1088#undef _LCONV_C99
1089
1090/* Define to 1 if on MINIX. */
1091#undef _MINIX
1092
1093/* Define to 1 to make NetBSD features available. MINIX 3 needs this. */
1094#undef _NETBSD_SOURCE
1095
1096/* The _Noreturn keyword of C11. */
1097#if ! (defined _Noreturn \
1098 || (defined __STDC_VERSION__ && 201112 <= __STDC_VERSION__))
1099# if (3 <= __GNUC__ || (__GNUC__ == 2 && 8 <= __GNUC_MINOR__) \
1100 || 0x5110 <= __SUNPRO_C)
1101# define _Noreturn __attribute__ ((__noreturn__))
1102# elif defined _MSC_VER && 1200 <= _MSC_VER
1103# define _Noreturn __declspec (noreturn)
1104# else
1105# define _Noreturn
1106# endif
1107#endif
1108
1109
1110/* Define to 2 if the system does not provide POSIX.1 features except with
1111 this defined. */
1112#undef _POSIX_1_SOURCE
1113
1114/* Define to 1 if you need to in order for 'stat' and other things to work. */
1115#undef _POSIX_SOURCE
1116
1117/* Define to rpl_ if the getopt replacement functions and variables should be
1118 used. */
1119#undef __GETOPT_PREFIX
1120
1121/* Please see the Gnulib manual for how to use these macros.
1122
1123 Suppress extern inline with HP-UX cc, as it appears to be broken; see
1124 <http://lists.gnu.org/archive/html/bug-texinfo/2013-02/msg00030.html>.
1125
1126 Suppress extern inline with Sun C in standards-conformance mode, as it
1127 mishandles inline functions that call each other. E.g., for 'inline void f
1128 (void) { } inline void g (void) { f (); }', c99 incorrectly complains
1129 'reference to static identifier "f" in extern inline function'.
1130 This bug was observed with Sun C 5.12 SunOS_i386 2011/11/16.
1131
1132 Suppress extern inline (with or without __attribute__ ((__gnu_inline__)))
1133 on configurations that mistakenly use 'static inline' to implement
1134 functions or macros in standard C headers like <ctype.h>. For example,
1135 if isdigit is mistakenly implemented via a static inline function,
1136 a program containing an extern inline function that calls isdigit
1137 may not work since the C standard prohibits extern inline functions
1138 from calling static functions. This bug is known to occur on:
1139
1140 OS X 10.8 and earlier; see:
1141 http://lists.gnu.org/archive/html/bug-gnulib/2012-12/msg00023.html
1142
1143 DragonFly; see
1144 http://muscles.dragonflybsd.org/bulk/bleeding-edge-potential/latest-per-pkg/ah-tty-0.3.12.log
1145
1146 FreeBSD; see:
1147 http://lists.gnu.org/archive/html/bug-gnulib/2014-07/msg00104.html
1148
1149 OS X 10.9 has a macro __header_inline indicating the bug is fixed for C and
1150 for clang but remains for g++; see <http://trac.macports.org/ticket/41033>.
1151 Assume DragonFly and FreeBSD will be similar. */
1152#if (((defined __APPLE__ && defined __MACH__) \
1153 || defined __DragonFly__ || defined __FreeBSD__) \
1154 && (defined __header_inline \
1155 ? (defined __cplusplus && defined __GNUC_STDC_INLINE__ \
1156 && ! defined __clang__) \
1157 : ((! defined _DONT_USE_CTYPE_INLINE_ \
1158 && (defined __GNUC__ || defined __cplusplus)) \
1159 || (defined _FORTIFY_SOURCE && 0 < _FORTIFY_SOURCE \
1160 && defined __GNUC__ && ! defined __cplusplus))))
1161# define _GL_EXTERN_INLINE_STDHEADER_BUG
1162#endif
1163#if ((__GNUC__ \
1164 ? defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ \
1165 : (199901L <= __STDC_VERSION__ \
1166 && !defined __HP_cc \
1167 && !(defined __SUNPRO_C && __STDC__))) \
1168 && !defined _GL_EXTERN_INLINE_STDHEADER_BUG)
1169# define _GL_INLINE inline
1170# define _GL_EXTERN_INLINE extern inline
1171# define _GL_EXTERN_INLINE_IN_USE
1172#elif (2 < __GNUC__ + (7 <= __GNUC_MINOR__) && !defined __STRICT_ANSI__ \
1173 && !defined _GL_EXTERN_INLINE_STDHEADER_BUG)
1174# if defined __GNUC_GNU_INLINE__ && __GNUC_GNU_INLINE__
1175 /* __gnu_inline__ suppresses a GCC 4.2 diagnostic. */
1176# define _GL_INLINE extern inline __attribute__ ((__gnu_inline__))
1177# else
1178# define _GL_INLINE extern inline
1179# endif
1180# define _GL_EXTERN_INLINE extern
1181# define _GL_EXTERN_INLINE_IN_USE
1182#else
1183# define _GL_INLINE static _GL_UNUSED
1184# define _GL_EXTERN_INLINE static _GL_UNUSED
1185#endif
1186
1187#if 4 < __GNUC__ + (6 <= __GNUC_MINOR__)
1188# if defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__
1189# define _GL_INLINE_HEADER_CONST_PRAGMA
1190# else
1191# define _GL_INLINE_HEADER_CONST_PRAGMA \
1192 _Pragma ("GCC diagnostic ignored \"-Wsuggest-attribute=const\"")
1193# endif
1194 /* Suppress GCC's bogus "no previous prototype for 'FOO'"
1195 and "no previous declaration for 'FOO'" diagnostics,
1196 when FOO is an inline function in the header; see
1197 <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54113>. */
1198# define _GL_INLINE_HEADER_BEGIN \
1199 _Pragma ("GCC diagnostic push") \
1200 _Pragma ("GCC diagnostic ignored \"-Wmissing-prototypes\"") \
1201 _Pragma ("GCC diagnostic ignored \"-Wmissing-declarations\"") \
1202 _GL_INLINE_HEADER_CONST_PRAGMA
1203# define _GL_INLINE_HEADER_END \
1204 _Pragma ("GCC diagnostic pop")
1205#else
1206# define _GL_INLINE_HEADER_BEGIN
1207# define _GL_INLINE_HEADER_END
1208#endif
1209
1210/* A replacement for va_copy, if needed. */
1211#define gl_va_copy(a,b) ((a) = (b))
1212
1213/* Define to `__inline__' or `__inline' if that's what the C compiler
1214 calls it, or to nothing if 'inline' is not supported under any name. */
1215#ifndef __cplusplus
1216#undef inline
1217#endif
1218
1219/* Work around a bug in Apple GCC 4.0.1 build 5465: In C99 mode, it supports
1220 the ISO C 99 semantics of 'extern inline' (unlike the GNU C semantics of
1221 earlier versions), but does not display it by setting __GNUC_STDC_INLINE__.
1222 __APPLE__ && __MACH__ test for Mac OS X.
1223 __APPLE_CC__ tests for the Apple compiler and its version.
1224 __STDC_VERSION__ tests for the C99 mode. */
1225#if defined __APPLE__ && defined __MACH__ && __APPLE_CC__ >= 5465 && !defined __cplusplus && __STDC_VERSION__ >= 199901L && !defined __GNUC_STDC_INLINE__
1226# define __GNUC_STDC_INLINE__ 1
1227#endif
1228
1229/* Define to `int' if <sys/types.h> does not define. */
1230#undef mode_t
1231
1232/* Define to the type of st_nlink in struct stat, or a supertype. */
1233#undef nlink_t
1234
1235/* Define to `int' if <sys/types.h> does not define. */
1236#undef pid_t
1237
1238/* Define to the equivalent of the C99 'restrict' keyword, or to
1239 nothing if this is not supported. Do not define if restrict is
1240 supported directly. */
1241#undef restrict
1242/* Work around a bug in Sun C++: it does not support _Restrict or
1243 __restrict__, even though the corresponding Sun C compiler ends up with
1244 "#define restrict _Restrict" or "#define restrict __restrict__" in the
1245 previous line. Perhaps some future version of Sun C++ will work with
1246 restrict; if so, hopefully it defines __RESTRICT like Sun C does. */
1247#if defined __SUNPRO_CC && !defined __RESTRICT
1248# define _Restrict
1249# define __restrict__
1250#endif
1251
1252/* Define to `unsigned int' if <sys/types.h> does not define. */
1253#undef size_t
1254
1255/* Define as a signed type of the same size as size_t. */
1256#undef ssize_t
1257
1258/* Define as a marker that can be attached to declarations that might not
1259 be used. This helps to reduce warnings, such as from
1260 GCC -Wunused-parameter. */
1261#if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)
1262# define _GL_UNUSED __attribute__ ((__unused__))
1263#else
1264# define _GL_UNUSED
1265#endif
1266/* The name _UNUSED_PARAMETER_ is an earlier spelling, although the name
1267 is a misnomer outside of parameter lists. */
1268#define _UNUSED_PARAMETER_ _GL_UNUSED
1269
1270/* gcc supports the "unused" attribute on possibly unused labels, and
1271 g++ has since version 4.5. Note to support C++ as well as C,
1272 _GL_UNUSED_LABEL should be used with a trailing ; */
1273#if !defined __cplusplus || __GNUC__ > 4 \
1274 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)
1275# define _GL_UNUSED_LABEL _GL_UNUSED
1276#else
1277# define _GL_UNUSED_LABEL
1278#endif
1279
1280/* The __pure__ attribute was added in gcc 2.96. */
1281#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
1282# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
1283#else
1284# define _GL_ATTRIBUTE_PURE /* empty */
1285#endif
1286
1287/* The __const__ attribute was added in gcc 2.95. */
1288#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)
1289# define _GL_ATTRIBUTE_CONST __attribute__ ((__const__))
1290#else
1291# define _GL_ATTRIBUTE_CONST /* empty */
1292#endif
1293
1294
1295/* Define as a macro for copying va_list variables. */
1296#undef va_copy
diff --git a/3rdParty/LibIDN/src/gl/c-ctype.c b/3rdParty/LibIDN/src/gl/c-ctype.c
new file mode 100644
index 0000000..932d676
--- /dev/null
+++ b/3rdParty/LibIDN/src/gl/c-ctype.c
@@ -0,0 +1,395 @@
1/* Character handling in C locale.
2
3 Copyright 2000-2003, 2006, 2009-2015 Free Software Foundation, Inc.
4
5This program is free software; you can redistribute it and/or modify
6it under the terms of the GNU Lesser General Public License as published by
7the Free Software Foundation; either version 2.1 of the License, or
8(at your option) any later version.
9
10This program is distributed in the hope that it will be useful,
11but WITHOUT ANY WARRANTY; without even the implied warranty of
12MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13GNU Lesser General Public License for more details.
14
15You should have received a copy of the GNU Lesser General Public License
16along with this program; if not, see <http://www.gnu.org/licenses/>. */
17
18#include <config.h>
19
20/* Specification. */
21#define NO_C_CTYPE_MACROS
22#include "c-ctype.h"
23
24/* The function isascii is not locale dependent. Its use in EBCDIC is
25 questionable. */
26bool
27c_isascii (int c)
28{
29 return (c >= 0x00 && c <= 0x7f);
30}
31
32bool
33c_isalnum (int c)
34{
35#if C_CTYPE_CONSECUTIVE_DIGITS \
36 && C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
37#if C_CTYPE_ASCII
38 return ((c >= '0' && c <= '9')
39 || ((c & ~0x20) >= 'A' && (c & ~0x20) <= 'Z'));
40#else
41 return ((c >= '0' && c <= '9')
42 || (c >= 'A' && c <= 'Z')
43 || (c >= 'a' && c <= 'z'));
44#endif
45#else
46 switch (c)
47 {
48 case '0': case '1': case '2': case '3': case '4': case '5':
49 case '6': case '7': case '8': case '9':
50 case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
51 case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
52 case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
53 case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
54 case 'Y': case 'Z':
55 case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
56 case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
57 case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
58 case 's': case 't': case 'u': case 'v': case 'w': case 'x':
59 case 'y': case 'z':
60 return 1;
61 default:
62 return 0;
63 }
64#endif
65}
66
67bool
68c_isalpha (int c)
69{
70#if C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
71#if C_CTYPE_ASCII
72 return ((c & ~0x20) >= 'A' && (c & ~0x20) <= 'Z');
73#else
74 return ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z'));
75#endif
76#else
77 switch (c)
78 {
79 case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
80 case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
81 case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
82 case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
83 case 'Y': case 'Z':
84 case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
85 case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
86 case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
87 case 's': case 't': case 'u': case 'v': case 'w': case 'x':
88 case 'y': case 'z':
89 return 1;
90 default:
91 return 0;
92 }
93#endif
94}
95
96bool
97c_isblank (int c)
98{
99 return (c == ' ' || c == '\t');
100}
101
102bool
103c_iscntrl (int c)
104{
105#if C_CTYPE_ASCII
106 return ((c & ~0x1f) == 0 || c == 0x7f);
107#else
108 switch (c)
109 {
110 case ' ': case '!': case '"': case '#': case '$': case '%':
111 case '&': case '\'': case '(': case ')': case '*': case '+':
112 case ',': case '-': case '.': case '/':
113 case '0': case '1': case '2': case '3': case '4': case '5':
114 case '6': case '7': case '8': case '9':
115 case ':': case ';': case '<': case '=': case '>': case '?':
116 case '@':
117 case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
118 case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
119 case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
120 case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
121 case 'Y': case 'Z':
122 case '[': case '\\': case ']': case '^': case '_': case '`':
123 case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
124 case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
125 case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
126 case 's': case 't': case 'u': case 'v': case 'w': case 'x':
127 case 'y': case 'z':
128 case '{': case '|': case '}': case '~':
129 return 0;
130 default:
131 return 1;
132 }
133#endif
134}
135
136bool
137c_isdigit (int c)
138{
139#if C_CTYPE_CONSECUTIVE_DIGITS
140 return (c >= '0' && c <= '9');
141#else
142 switch (c)
143 {
144 case '0': case '1': case '2': case '3': case '4': case '5':
145 case '6': case '7': case '8': case '9':
146 return 1;
147 default:
148 return 0;
149 }
150#endif
151}
152
153bool
154c_islower (int c)
155{
156#if C_CTYPE_CONSECUTIVE_LOWERCASE
157 return (c >= 'a' && c <= 'z');
158#else
159 switch (c)
160 {
161 case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
162 case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
163 case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
164 case 's': case 't': case 'u': case 'v': case 'w': case 'x':
165 case 'y': case 'z':
166 return 1;
167 default:
168 return 0;
169 }
170#endif
171}
172
173bool
174c_isgraph (int c)
175{
176#if C_CTYPE_ASCII
177 return (c >= '!' && c <= '~');
178#else
179 switch (c)
180 {
181 case '!': case '"': case '#': case '$': case '%': case '&':
182 case '\'': case '(': case ')': case '*': case '+': case ',':
183 case '-': case '.': case '/':
184 case '0': case '1': case '2': case '3': case '4': case '5':
185 case '6': case '7': case '8': case '9':
186 case ':': case ';': case '<': case '=': case '>': case '?':
187 case '@':
188 case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
189 case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
190 case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
191 case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
192 case 'Y': case 'Z':
193 case '[': case '\\': case ']': case '^': case '_': case '`':
194 case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
195 case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
196 case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
197 case 's': case 't': case 'u': case 'v': case 'w': case 'x':
198 case 'y': case 'z':
199 case '{': case '|': case '}': case '~':
200 return 1;
201 default:
202 return 0;
203 }
204#endif
205}
206
207bool
208c_isprint (int c)
209{
210#if C_CTYPE_ASCII
211 return (c >= ' ' && c <= '~');
212#else
213 switch (c)
214 {
215 case ' ': case '!': case '"': case '#': case '$': case '%':
216 case '&': case '\'': case '(': case ')': case '*': case '+':
217 case ',': case '-': case '.': case '/':
218 case '0': case '1': case '2': case '3': case '4': case '5':
219 case '6': case '7': case '8': case '9':
220 case ':': case ';': case '<': case '=': case '>': case '?':
221 case '@':
222 case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
223 case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
224 case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
225 case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
226 case 'Y': case 'Z':
227 case '[': case '\\': case ']': case '^': case '_': case '`':
228 case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
229 case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
230 case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
231 case 's': case 't': case 'u': case 'v': case 'w': case 'x':
232 case 'y': case 'z':
233 case '{': case '|': case '}': case '~':
234 return 1;
235 default:
236 return 0;
237 }
238#endif
239}
240
241bool
242c_ispunct (int c)
243{
244#if C_CTYPE_ASCII
245 return ((c >= '!' && c <= '~')
246 && !((c >= '0' && c <= '9')
247 || ((c & ~0x20) >= 'A' && (c & ~0x20) <= 'Z')));
248#else
249 switch (c)
250 {
251 case '!': case '"': case '#': case '$': case '%': case '&':
252 case '\'': case '(': case ')': case '*': case '+': case ',':
253 case '-': case '.': case '/':
254 case ':': case ';': case '<': case '=': case '>': case '?':
255 case '@':
256 case '[': case '\\': case ']': case '^': case '_': case '`':
257 case '{': case '|': case '}': case '~':
258 return 1;
259 default:
260 return 0;
261 }
262#endif
263}
264
265bool
266c_isspace (int c)
267{
268 return (c == ' ' || c == '\t'
269 || c == '\n' || c == '\v' || c == '\f' || c == '\r');
270}
271
272bool
273c_isupper (int c)
274{
275#if C_CTYPE_CONSECUTIVE_UPPERCASE
276 return (c >= 'A' && c <= 'Z');
277#else
278 switch (c)
279 {
280 case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
281 case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
282 case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
283 case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
284 case 'Y': case 'Z':
285 return 1;
286 default:
287 return 0;
288 }
289#endif
290}
291
292bool
293c_isxdigit (int c)
294{
295#if C_CTYPE_CONSECUTIVE_DIGITS \
296 && C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
297#if C_CTYPE_ASCII
298 return ((c >= '0' && c <= '9')
299 || ((c & ~0x20) >= 'A' && (c & ~0x20) <= 'F'));
300#else
301 return ((c >= '0' && c <= '9')
302 || (c >= 'A' && c <= 'F')
303 || (c >= 'a' && c <= 'f'));
304#endif
305#else
306 switch (c)
307 {
308 case '0': case '1': case '2': case '3': case '4': case '5':
309 case '6': case '7': case '8': case '9':
310 case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
311 case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
312 return 1;
313 default:
314 return 0;
315 }
316#endif
317}
318
319int
320c_tolower (int c)
321{
322#if C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
323 return (c >= 'A' && c <= 'Z' ? c - 'A' + 'a' : c);
324#else
325 switch (c)
326 {
327 case 'A': return 'a';
328 case 'B': return 'b';
329 case 'C': return 'c';
330 case 'D': return 'd';
331 case 'E': return 'e';
332 case 'F': return 'f';
333 case 'G': return 'g';
334 case 'H': return 'h';
335 case 'I': return 'i';
336 case 'J': return 'j';
337 case 'K': return 'k';
338 case 'L': return 'l';
339 case 'M': return 'm';
340 case 'N': return 'n';
341 case 'O': return 'o';
342 case 'P': return 'p';
343 case 'Q': return 'q';
344 case 'R': return 'r';
345 case 'S': return 's';
346 case 'T': return 't';
347 case 'U': return 'u';
348 case 'V': return 'v';
349 case 'W': return 'w';
350 case 'X': return 'x';
351 case 'Y': return 'y';
352 case 'Z': return 'z';
353 default: return c;
354 }
355#endif
356}
357
358int
359c_toupper (int c)
360{
361#if C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
362 return (c >= 'a' && c <= 'z' ? c - 'a' + 'A' : c);
363#else
364 switch (c)
365 {
366 case 'a': return 'A';
367 case 'b': return 'B';
368 case 'c': return 'C';
369 case 'd': return 'D';
370 case 'e': return 'E';
371 case 'f': return 'F';
372 case 'g': return 'G';
373 case 'h': return 'H';
374 case 'i': return 'I';
375 case 'j': return 'J';
376 case 'k': return 'K';
377 case 'l': return 'L';
378 case 'm': return 'M';
379 case 'n': return 'N';
380 case 'o': return 'O';
381 case 'p': return 'P';
382 case 'q': return 'Q';
383 case 'r': return 'R';
384 case 's': return 'S';
385 case 't': return 'T';
386 case 'u': return 'U';
387 case 'v': return 'V';
388 case 'w': return 'W';
389 case 'x': return 'X';
390 case 'y': return 'Y';
391 case 'z': return 'Z';
392 default: return c;
393 }
394#endif
395}
diff --git a/3rdParty/LibIDN/src/gl/c-ctype.h b/3rdParty/LibIDN/src/gl/c-ctype.h
new file mode 100644
index 0000000..d57cf43
--- /dev/null
+++ b/3rdParty/LibIDN/src/gl/c-ctype.h
@@ -0,0 +1,295 @@
1/* Character handling in C locale.
2
3 These functions work like the corresponding functions in <ctype.h>,
4 except that they have the C (POSIX) locale hardwired, whereas the
5 <ctype.h> functions' behaviour depends on the current locale set via
6 setlocale.
7
8 Copyright (C) 2000-2003, 2006, 2008-2015 Free Software Foundation, Inc.
9
10This program is free software; you can redistribute it and/or modify
11it under the terms of the GNU Lesser General Public License as published by
12the Free Software Foundation; either version 2.1 of the License, or
13(at your option) any later version.
14
15This program is distributed in the hope that it will be useful,
16but WITHOUT ANY WARRANTY; without even the implied warranty of
17MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18GNU Lesser General Public License for more details.
19
20You should have received a copy of the GNU Lesser General Public License
21along with this program; if not, see <http://www.gnu.org/licenses/>. */
22
23#ifndef C_CTYPE_H
24#define C_CTYPE_H
25
26#include <stdbool.h>
27
28
29#ifdef __cplusplus
30extern "C" {
31#endif
32
33
34/* The functions defined in this file assume the "C" locale and a character
35 set without diacritics (ASCII-US or EBCDIC-US or something like that).
36 Even if the "C" locale on a particular system is an extension of the ASCII
37 character set (like on BeOS, where it is UTF-8, or on AmigaOS, where it
38 is ISO-8859-1), the functions in this file recognize only the ASCII
39 characters. */
40
41
42/* Check whether the ASCII optimizations apply. */
43
44/* ANSI C89 (and ISO C99 5.2.1.3 too) already guarantees that
45 '0', '1', ..., '9' have consecutive integer values. */
46#define C_CTYPE_CONSECUTIVE_DIGITS 1
47
48#if ('A' <= 'Z') \
49 && ('A' + 1 == 'B') && ('B' + 1 == 'C') && ('C' + 1 == 'D') \
50 && ('D' + 1 == 'E') && ('E' + 1 == 'F') && ('F' + 1 == 'G') \
51 && ('G' + 1 == 'H') && ('H' + 1 == 'I') && ('I' + 1 == 'J') \
52 && ('J' + 1 == 'K') && ('K' + 1 == 'L') && ('L' + 1 == 'M') \
53 && ('M' + 1 == 'N') && ('N' + 1 == 'O') && ('O' + 1 == 'P') \
54 && ('P' + 1 == 'Q') && ('Q' + 1 == 'R') && ('R' + 1 == 'S') \
55 && ('S' + 1 == 'T') && ('T' + 1 == 'U') && ('U' + 1 == 'V') \
56 && ('V' + 1 == 'W') && ('W' + 1 == 'X') && ('X' + 1 == 'Y') \
57 && ('Y' + 1 == 'Z')
58#define C_CTYPE_CONSECUTIVE_UPPERCASE 1
59#endif
60
61#if ('a' <= 'z') \
62 && ('a' + 1 == 'b') && ('b' + 1 == 'c') && ('c' + 1 == 'd') \
63 && ('d' + 1 == 'e') && ('e' + 1 == 'f') && ('f' + 1 == 'g') \
64 && ('g' + 1 == 'h') && ('h' + 1 == 'i') && ('i' + 1 == 'j') \
65 && ('j' + 1 == 'k') && ('k' + 1 == 'l') && ('l' + 1 == 'm') \
66 && ('m' + 1 == 'n') && ('n' + 1 == 'o') && ('o' + 1 == 'p') \
67 && ('p' + 1 == 'q') && ('q' + 1 == 'r') && ('r' + 1 == 's') \
68 && ('s' + 1 == 't') && ('t' + 1 == 'u') && ('u' + 1 == 'v') \
69 && ('v' + 1 == 'w') && ('w' + 1 == 'x') && ('x' + 1 == 'y') \
70 && ('y' + 1 == 'z')
71#define C_CTYPE_CONSECUTIVE_LOWERCASE 1
72#endif
73
74#if (' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
75 && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \
76 && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \
77 && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \
78 && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \
79 && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \
80 && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \
81 && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \
82 && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \
83 && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \
84 && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \
85 && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \
86 && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \
87 && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \
88 && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \
89 && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \
90 && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \
91 && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \
92 && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \
93 && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \
94 && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \
95 && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \
96 && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126)
97/* The character set is ASCII or one of its variants or extensions, not EBCDIC.
98 Testing the value of '\n' and '\r' is not relevant. */
99#define C_CTYPE_ASCII 1
100#endif
101
102
103/* Function declarations. */
104
105/* Unlike the functions in <ctype.h>, which require an argument in the range
106 of the 'unsigned char' type, the functions here operate on values that are
107 in the 'unsigned char' range or in the 'char' range. In other words,
108 when you have a 'char' value, you need to cast it before using it as
109 argument to a <ctype.h> function:
110
111 const char *s = ...;
112 if (isalpha ((unsigned char) *s)) ...
113
114 but you don't need to cast it for the functions defined in this file:
115
116 const char *s = ...;
117 if (c_isalpha (*s)) ...
118 */
119
120extern bool c_isascii (int c) _GL_ATTRIBUTE_CONST; /* not locale dependent */
121
122extern bool c_isalnum (int c) _GL_ATTRIBUTE_CONST;
123extern bool c_isalpha (int c) _GL_ATTRIBUTE_CONST;
124extern bool c_isblank (int c) _GL_ATTRIBUTE_CONST;
125extern bool c_iscntrl (int c) _GL_ATTRIBUTE_CONST;
126extern bool c_isdigit (int c) _GL_ATTRIBUTE_CONST;
127extern bool c_islower (int c) _GL_ATTRIBUTE_CONST;
128extern bool c_isgraph (int c) _GL_ATTRIBUTE_CONST;
129extern bool c_isprint (int c) _GL_ATTRIBUTE_CONST;
130extern bool c_ispunct (int c) _GL_ATTRIBUTE_CONST;
131extern bool c_isspace (int c) _GL_ATTRIBUTE_CONST;
132extern bool c_isupper (int c) _GL_ATTRIBUTE_CONST;
133extern bool c_isxdigit (int c) _GL_ATTRIBUTE_CONST;
134
135extern int c_tolower (int c) _GL_ATTRIBUTE_CONST;
136extern int c_toupper (int c) _GL_ATTRIBUTE_CONST;
137
138
139#if (defined __GNUC__ && !defined __STRICT_ANSI__ && defined __OPTIMIZE__ \
140 && !defined __OPTIMIZE_SIZE__ && !defined NO_C_CTYPE_MACROS)
141
142/* ASCII optimizations. */
143
144#undef c_isascii
145#define c_isascii(c) \
146 ({ int __c = (c); \
147 (__c >= 0x00 && __c <= 0x7f); \
148 })
149
150#if C_CTYPE_CONSECUTIVE_DIGITS \
151 && C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
152#if C_CTYPE_ASCII
153#undef c_isalnum
154#define c_isalnum(c) \
155 ({ int __c = (c); \
156 ((__c >= '0' && __c <= '9') \
157 || ((__c & ~0x20) >= 'A' && (__c & ~0x20) <= 'Z')); \
158 })
159#else
160#undef c_isalnum
161#define c_isalnum(c) \
162 ({ int __c = (c); \
163 ((__c >= '0' && __c <= '9') \
164 || (__c >= 'A' && __c <= 'Z') \
165 || (__c >= 'a' && __c <= 'z')); \
166 })
167#endif
168#endif
169
170#if C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
171#if C_CTYPE_ASCII
172#undef c_isalpha
173#define c_isalpha(c) \
174 ({ int __c = (c); \
175 ((__c & ~0x20) >= 'A' && (__c & ~0x20) <= 'Z'); \
176 })
177#else
178#undef c_isalpha
179#define c_isalpha(c) \
180 ({ int __c = (c); \
181 ((__c >= 'A' && __c <= 'Z') || (__c >= 'a' && __c <= 'z')); \
182 })
183#endif
184#endif
185
186#undef c_isblank
187#define c_isblank(c) \
188 ({ int __c = (c); \
189 (__c == ' ' || __c == '\t'); \
190 })
191
192#if C_CTYPE_ASCII
193#undef c_iscntrl
194#define c_iscntrl(c) \
195 ({ int __c = (c); \
196 ((__c & ~0x1f) == 0 || __c == 0x7f); \
197 })
198#endif
199
200#if C_CTYPE_CONSECUTIVE_DIGITS
201#undef c_isdigit
202#define c_isdigit(c) \
203 ({ int __c = (c); \
204 (__c >= '0' && __c <= '9'); \
205 })
206#endif
207
208#if C_CTYPE_CONSECUTIVE_LOWERCASE
209#undef c_islower
210#define c_islower(c) \
211 ({ int __c = (c); \
212 (__c >= 'a' && __c <= 'z'); \
213 })
214#endif
215
216#if C_CTYPE_ASCII
217#undef c_isgraph
218#define c_isgraph(c) \
219 ({ int __c = (c); \
220 (__c >= '!' && __c <= '~'); \
221 })
222#endif
223
224#if C_CTYPE_ASCII
225#undef c_isprint
226#define c_isprint(c) \
227 ({ int __c = (c); \
228 (__c >= ' ' && __c <= '~'); \
229 })
230#endif
231
232#if C_CTYPE_ASCII
233#undef c_ispunct
234#define c_ispunct(c) \
235 ({ int _c = (c); \
236 (c_isgraph (_c) && ! c_isalnum (_c)); \
237 })
238#endif
239
240#undef c_isspace
241#define c_isspace(c) \
242 ({ int __c = (c); \
243 (__c == ' ' || __c == '\t' \
244 || __c == '\n' || __c == '\v' || __c == '\f' || __c == '\r'); \
245 })
246
247#if C_CTYPE_CONSECUTIVE_UPPERCASE
248#undef c_isupper
249#define c_isupper(c) \
250 ({ int __c = (c); \
251 (__c >= 'A' && __c <= 'Z'); \
252 })
253#endif
254
255#if C_CTYPE_CONSECUTIVE_DIGITS \
256 && C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
257#if C_CTYPE_ASCII
258#undef c_isxdigit
259#define c_isxdigit(c) \
260 ({ int __c = (c); \
261 ((__c >= '0' && __c <= '9') \
262 || ((__c & ~0x20) >= 'A' && (__c & ~0x20) <= 'F')); \
263 })
264#else
265#undef c_isxdigit
266#define c_isxdigit(c) \
267 ({ int __c = (c); \
268 ((__c >= '0' && __c <= '9') \
269 || (__c >= 'A' && __c <= 'F') \
270 || (__c >= 'a' && __c <= 'f')); \
271 })
272#endif
273#endif
274
275#if C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
276#undef c_tolower
277#define c_tolower(c) \
278 ({ int __c = (c); \
279 (__c >= 'A' && __c <= 'Z' ? __c - 'A' + 'a' : __c); \
280 })
281#undef c_toupper
282#define c_toupper(c) \
283 ({ int __c = (c); \
284 (__c >= 'a' && __c <= 'z' ? __c - 'a' + 'A' : __c); \
285 })
286#endif
287
288#endif /* optimizing for speed */
289
290
291#ifdef __cplusplus
292}
293#endif
294
295#endif /* C_CTYPE_H */
diff --git a/3rdParty/LibIDN/src/gl/c-strcase.h b/3rdParty/LibIDN/src/gl/c-strcase.h
new file mode 100644
index 0000000..5292a0a
--- /dev/null
+++ b/3rdParty/LibIDN/src/gl/c-strcase.h
@@ -0,0 +1,56 @@
1/* Case-insensitive string comparison functions in C locale.
2 Copyright (C) 1995-1996, 2001, 2003, 2005, 2009-2015 Free Software
3 Foundation, Inc.
4
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU Lesser General Public License as published by
7 the Free Software Foundation; either version 2.1, or (at your option)
8 any later version.
9
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU Lesser General Public License for more details.
14
15 You should have received a copy of the GNU Lesser General Public License
16 along with this program; if not, see <http://www.gnu.org/licenses/>. */
17
18#ifndef C_STRCASE_H
19#define C_STRCASE_H
20
21#include <stddef.h>
22
23
24/* The functions defined in this file assume the "C" locale and a character
25 set without diacritics (ASCII-US or EBCDIC-US or something like that).
26 Even if the "C" locale on a particular system is an extension of the ASCII
27 character set (like on BeOS, where it is UTF-8, or on AmigaOS, where it
28 is ISO-8859-1), the functions in this file recognize only the ASCII
29 characters. More precisely, one of the string arguments must be an ASCII
30 string; the other one can also contain non-ASCII characters (but then
31 the comparison result will be nonzero). */
32
33
34#ifdef __cplusplus
35extern "C" {
36#endif
37
38
39/* Compare strings S1 and S2, ignoring case, returning less than, equal to or
40 greater than zero if S1 is lexicographically less than, equal to or greater
41 than S2. */
42extern int c_strcasecmp (const char *s1, const char *s2) _GL_ATTRIBUTE_PURE;
43
44/* Compare no more than N characters of strings S1 and S2, ignoring case,
45 returning less than, equal to or greater than zero if S1 is
46 lexicographically less than, equal to or greater than S2. */
47extern int c_strncasecmp (const char *s1, const char *s2, size_t n)
48 _GL_ATTRIBUTE_PURE;
49
50
51#ifdef __cplusplus
52}
53#endif
54
55
56#endif /* C_STRCASE_H */
diff --git a/3rdParty/LibIDN/src/gl/c-strcasecmp.c b/3rdParty/LibIDN/src/gl/c-strcasecmp.c
new file mode 100644
index 0000000..afff3e5
--- /dev/null
+++ b/3rdParty/LibIDN/src/gl/c-strcasecmp.c
@@ -0,0 +1,56 @@
1/* c-strcasecmp.c -- case insensitive string comparator in C locale
2 Copyright (C) 1998-1999, 2005-2006, 2009-2015 Free Software Foundation, Inc.
3
4 This program is free software; you can redistribute it and/or modify
5 it under the terms of the GNU Lesser General Public License as published by
6 the Free Software Foundation; either version 2.1, or (at your option)
7 any later version.
8
9 This program 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
12 GNU Lesser General Public License for more details.
13
14 You should have received a copy of the GNU Lesser General Public License
15 along with this program; if not, see <http://www.gnu.org/licenses/>. */
16
17#include <config.h>
18
19/* Specification. */
20#include "c-strcase.h"
21
22#include <limits.h>
23
24#include "c-ctype.h"
25
26int
27c_strcasecmp (const char *s1, const char *s2)
28{
29 register const unsigned char *p1 = (const unsigned char *) s1;
30 register const unsigned char *p2 = (const unsigned char *) s2;
31 unsigned char c1, c2;
32
33 if (p1 == p2)
34 return 0;
35
36 do
37 {
38 c1 = c_tolower (*p1);
39 c2 = c_tolower (*p2);
40
41 if (c1 == '\0')
42 break;
43
44 ++p1;
45 ++p2;
46 }
47 while (c1 == c2);
48
49 if (UCHAR_MAX <= INT_MAX)
50 return c1 - c2;
51 else
52 /* On machines where 'char' and 'int' are types of the same size, the
53 difference of two 'unsigned char' values - including the sign bit -
54 doesn't fit in an 'int'. */
55 return (c1 > c2 ? 1 : c1 < c2 ? -1 : 0);
56}
diff --git a/3rdParty/LibIDN/src/gl/c-strncasecmp.c b/3rdParty/LibIDN/src/gl/c-strncasecmp.c
new file mode 100644
index 0000000..9bd6689
--- /dev/null
+++ b/3rdParty/LibIDN/src/gl/c-strncasecmp.c
@@ -0,0 +1,56 @@
1/* c-strncasecmp.c -- case insensitive string comparator in C locale
2 Copyright (C) 1998-1999, 2005-2006, 2009-2015 Free Software Foundation, Inc.
3
4 This program is free software; you can redistribute it and/or modify
5 it under the terms of the GNU Lesser General Public License as published by
6 the Free Software Foundation; either version 2.1, or (at your option)
7 any later version.
8
9 This program 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
12 GNU Lesser General Public License for more details.
13
14 You should have received a copy of the GNU Lesser General Public License
15 along with this program; if not, see <http://www.gnu.org/licenses/>. */
16
17#include <config.h>
18
19/* Specification. */
20#include "c-strcase.h"
21
22#include <limits.h>
23
24#include "c-ctype.h"
25
26int
27c_strncasecmp (const char *s1, const char *s2, size_t n)
28{
29 register const unsigned char *p1 = (const unsigned char *) s1;
30 register const unsigned char *p2 = (const unsigned char *) s2;
31 unsigned char c1, c2;
32
33 if (p1 == p2 || n == 0)
34 return 0;
35
36 do
37 {
38 c1 = c_tolower (*p1);
39 c2 = c_tolower (*p2);
40
41 if (--n == 0 || c1 == '\0')
42 break;
43
44 ++p1;
45 ++p2;
46 }
47 while (c1 == c2);
48
49 if (UCHAR_MAX <= INT_MAX)
50 return c1 - c2;
51 else
52 /* On machines where 'char' and 'int' are types of the same size, the
53 difference of two 'unsigned char' values - including the sign bit -
54 doesn't fit in an 'int'. */
55 return (c1 > c2 ? 1 : c1 < c2 ? -1 : 0);
56}
diff --git a/3rdParty/LibIDN/src/gl/unistr.h b/3rdParty/LibIDN/src/gl/unistr.h
new file mode 100644
index 0000000..89e9a56
--- /dev/null
+++ b/3rdParty/LibIDN/src/gl/unistr.h
@@ -0,0 +1,750 @@
1/* Elementary Unicode string functions.
2 Copyright (C) 2001-2002, 2005-2015 Free Software Foundation, Inc.
3
4 This program is free software: you can redistribute it and/or modify it
5 under the terms of the GNU Lesser General Public License as published
6 by the Free Software Foundation; either version 2.1 of the License, or
7 (at your option) any later version.
8
9 This program 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 License
15 along with this program. If not, see <http://www.gnu.org/licenses/>. */
16
17#ifndef _UNISTR_H
18#define _UNISTR_H
19
20#include "unitypes.h"
21
22/* Get common macros for C. */
23#include "unused-parameter.h"
24
25/* Get bool. */
26#include <stdbool.h>
27
28/* Get size_t. */
29#include <stddef.h>
30
31#ifdef __cplusplus
32extern "C" {
33#endif
34
35
36/* Conventions:
37
38 All functions prefixed with u8_ operate on UTF-8 encoded strings.
39 Their unit is an uint8_t (1 byte).
40
41 All functions prefixed with u16_ operate on UTF-16 encoded strings.
42 Their unit is an uint16_t (a 2-byte word).
43
44 All functions prefixed with u32_ operate on UCS-4 encoded strings.
45 Their unit is an uint32_t (a 4-byte word).
46
47 All argument pairs (s, n) denote a Unicode string s[0..n-1] with exactly
48 n units.
49
50 All arguments starting with "str" and the arguments of functions starting
51 with u8_str/u16_str/u32_str denote a NUL terminated string, i.e. a string
52 which terminates at the first NUL unit. This termination unit is
53 considered part of the string for all memory allocation purposes, but
54 is not considered part of the string for all other logical purposes.
55
56 Functions returning a string result take a (resultbuf, lengthp) argument
57 pair. If resultbuf is not NULL and the result fits into *lengthp units,
58 it is put in resultbuf, and resultbuf is returned. Otherwise, a freshly
59 allocated string is returned. In both cases, *lengthp is set to the
60 length (number of units) of the returned string. In case of error,
61 NULL is returned and errno is set. */
62
63
64/* Elementary string checks. */
65
66/* Check whether an UTF-8 string is well-formed.
67 Return NULL if valid, or a pointer to the first invalid unit otherwise. */
68extern const uint8_t *
69 u8_check (const uint8_t *s, size_t n)
70 _UC_ATTRIBUTE_PURE;
71
72/* Check whether an UTF-16 string is well-formed.
73 Return NULL if valid, or a pointer to the first invalid unit otherwise. */
74extern const uint16_t *
75 u16_check (const uint16_t *s, size_t n)
76 _UC_ATTRIBUTE_PURE;
77
78/* Check whether an UCS-4 string is well-formed.
79 Return NULL if valid, or a pointer to the first invalid unit otherwise. */
80extern const uint32_t *
81 u32_check (const uint32_t *s, size_t n)
82 _UC_ATTRIBUTE_PURE;
83
84
85/* Elementary string conversions. */
86
87/* Convert an UTF-8 string to an UTF-16 string. */
88extern uint16_t *
89 u8_to_u16 (const uint8_t *s, size_t n, uint16_t *resultbuf,
90 size_t *lengthp);
91
92/* Convert an UTF-8 string to an UCS-4 string. */
93extern uint32_t *
94 u8_to_u32 (const uint8_t *s, size_t n, uint32_t *resultbuf,
95 size_t *lengthp);
96
97/* Convert an UTF-16 string to an UTF-8 string. */
98extern uint8_t *
99 u16_to_u8 (const uint16_t *s, size_t n, uint8_t *resultbuf,
100 size_t *lengthp);
101
102/* Convert an UTF-16 string to an UCS-4 string. */
103extern uint32_t *
104 u16_to_u32 (const uint16_t *s, size_t n, uint32_t *resultbuf,
105 size_t *lengthp);
106
107/* Convert an UCS-4 string to an UTF-8 string. */
108extern uint8_t *
109 u32_to_u8 (const uint32_t *s, size_t n, uint8_t *resultbuf,
110 size_t *lengthp);
111
112/* Convert an UCS-4 string to an UTF-16 string. */
113extern uint16_t *
114 u32_to_u16 (const uint32_t *s, size_t n, uint16_t *resultbuf,
115 size_t *lengthp);
116
117
118/* Elementary string functions. */
119
120/* Return the length (number of units) of the first character in S, which is
121 no longer than N. Return 0 if it is the NUL character. Return -1 upon
122 failure. */
123/* Similar to mblen(), except that s must not be NULL. */
124extern int
125 u8_mblen (const uint8_t *s, size_t n)
126 _UC_ATTRIBUTE_PURE;
127extern int
128 u16_mblen (const uint16_t *s, size_t n)
129 _UC_ATTRIBUTE_PURE;
130extern int
131 u32_mblen (const uint32_t *s, size_t n)
132 _UC_ATTRIBUTE_PURE;
133
134/* Return the length (number of units) of the first character in S, putting
135 its 'ucs4_t' representation in *PUC. Upon failure, *PUC is set to 0xfffd,
136 and an appropriate number of units is returned.
137 The number of available units, N, must be > 0. */
138/* Similar to mbtowc(), except that puc and s must not be NULL, n must be > 0,
139 and the NUL character is not treated specially. */
140/* The variants with _safe suffix are safe, even if the library is compiled
141 without --enable-safety. */
142
143#if GNULIB_UNISTR_U8_MBTOUC_UNSAFE || HAVE_LIBUNISTRING
144# if !HAVE_INLINE
145extern int
146 u8_mbtouc_unsafe (ucs4_t *puc, const uint8_t *s, size_t n);
147# else
148extern int
149 u8_mbtouc_unsafe_aux (ucs4_t *puc, const uint8_t *s, size_t n);
150static inline int
151u8_mbtouc_unsafe (ucs4_t *puc, const uint8_t *s, size_t n)
152{
153 uint8_t c = *s;
154
155 if (c < 0x80)
156 {
157 *puc = c;
158 return 1;
159 }
160 else
161 return u8_mbtouc_unsafe_aux (puc, s, n);
162}
163# endif
164#endif
165
166#if GNULIB_UNISTR_U16_MBTOUC_UNSAFE || HAVE_LIBUNISTRING
167# if !HAVE_INLINE
168extern int
169 u16_mbtouc_unsafe (ucs4_t *puc, const uint16_t *s, size_t n);
170# else
171extern int
172 u16_mbtouc_unsafe_aux (ucs4_t *puc, const uint16_t *s, size_t n);
173static inline int
174u16_mbtouc_unsafe (ucs4_t *puc, const uint16_t *s, size_t n)
175{
176 uint16_t c = *s;
177
178 if (c < 0xd800 || c >= 0xe000)
179 {
180 *puc = c;
181 return 1;
182 }
183 else
184 return u16_mbtouc_unsafe_aux (puc, s, n);
185}
186# endif
187#endif
188
189#if GNULIB_UNISTR_U32_MBTOUC_UNSAFE || HAVE_LIBUNISTRING
190# if !HAVE_INLINE
191extern int
192 u32_mbtouc_unsafe (ucs4_t *puc, const uint32_t *s, size_t n);
193# else
194static inline int
195u32_mbtouc_unsafe (ucs4_t *puc,
196 const uint32_t *s, size_t n _GL_UNUSED_PARAMETER)
197{
198 uint32_t c = *s;
199
200# if CONFIG_UNICODE_SAFETY
201 if (c < 0xd800 || (c >= 0xe000 && c < 0x110000))
202# endif
203 *puc = c;
204# if CONFIG_UNICODE_SAFETY
205 else
206 /* invalid multibyte character */
207 *puc = 0xfffd;
208# endif
209 return 1;
210}
211# endif
212#endif
213
214#if GNULIB_UNISTR_U8_MBTOUC || HAVE_LIBUNISTRING
215# if !HAVE_INLINE
216extern int
217 u8_mbtouc (ucs4_t *puc, const uint8_t *s, size_t n);
218# else
219extern int
220 u8_mbtouc_aux (ucs4_t *puc, const uint8_t *s, size_t n);
221static inline int
222u8_mbtouc (ucs4_t *puc, const uint8_t *s, size_t n)
223{
224 uint8_t c = *s;
225
226 if (c < 0x80)
227 {
228 *puc = c;
229 return 1;
230 }
231 else
232 return u8_mbtouc_aux (puc, s, n);
233}
234# endif
235#endif
236
237#if GNULIB_UNISTR_U16_MBTOUC || HAVE_LIBUNISTRING
238# if !HAVE_INLINE
239extern int
240 u16_mbtouc (ucs4_t *puc, const uint16_t *s, size_t n);
241# else
242extern int
243 u16_mbtouc_aux (ucs4_t *puc, const uint16_t *s, size_t n);
244static inline int
245u16_mbtouc (ucs4_t *puc, const uint16_t *s, size_t n)
246{
247 uint16_t c = *s;
248
249 if (c < 0xd800 || c >= 0xe000)
250 {
251 *puc = c;
252 return 1;
253 }
254 else
255 return u16_mbtouc_aux (puc, s, n);
256}
257# endif
258#endif
259
260#if GNULIB_UNISTR_U32_MBTOUC || HAVE_LIBUNISTRING
261# if !HAVE_INLINE
262extern int
263 u32_mbtouc (ucs4_t *puc, const uint32_t *s, size_t n);
264# else
265static inline int
266u32_mbtouc (ucs4_t *puc, const uint32_t *s, size_t n _GL_UNUSED_PARAMETER)
267{
268 uint32_t c = *s;
269
270 if (c < 0xd800 || (c >= 0xe000 && c < 0x110000))
271 *puc = c;
272 else
273 /* invalid multibyte character */
274 *puc = 0xfffd;
275 return 1;
276}
277# endif
278#endif
279
280/* Return the length (number of units) of the first character in S, putting
281 its 'ucs4_t' representation in *PUC. Upon failure, *PUC is set to 0xfffd,
282 and -1 is returned for an invalid sequence of units, -2 is returned for an
283 incomplete sequence of units.
284 The number of available units, N, must be > 0. */
285/* Similar to u*_mbtouc(), except that the return value gives more details
286 about the failure, similar to mbrtowc(). */
287
288#if GNULIB_UNISTR_U8_MBTOUCR || HAVE_LIBUNISTRING
289extern int
290 u8_mbtoucr (ucs4_t *puc, const uint8_t *s, size_t n);
291#endif
292
293#if GNULIB_UNISTR_U16_MBTOUCR || HAVE_LIBUNISTRING
294extern int
295 u16_mbtoucr (ucs4_t *puc, const uint16_t *s, size_t n);
296#endif
297
298#if GNULIB_UNISTR_U32_MBTOUCR || HAVE_LIBUNISTRING
299extern int
300 u32_mbtoucr (ucs4_t *puc, const uint32_t *s, size_t n);
301#endif
302
303/* Put the multibyte character represented by UC in S, returning its
304 length. Return -1 upon failure, -2 if the number of available units, N,
305 is too small. The latter case cannot occur if N >= 6/2/1, respectively. */
306/* Similar to wctomb(), except that s must not be NULL, and the argument n
307 must be specified. */
308
309#if GNULIB_UNISTR_U8_UCTOMB || HAVE_LIBUNISTRING
310/* Auxiliary function, also used by u8_chr, u8_strchr, u8_strrchr. */
311extern int
312 u8_uctomb_aux (uint8_t *s, ucs4_t uc, int n);
313# if !HAVE_INLINE
314extern int
315 u8_uctomb (uint8_t *s, ucs4_t uc, int n);
316# else
317static inline int
318u8_uctomb (uint8_t *s, ucs4_t uc, int n)
319{
320 if (uc < 0x80 && n > 0)
321 {
322 s[0] = uc;
323 return 1;
324 }
325 else
326 return u8_uctomb_aux (s, uc, n);
327}
328# endif
329#endif
330
331#if GNULIB_UNISTR_U16_UCTOMB || HAVE_LIBUNISTRING
332/* Auxiliary function, also used by u16_chr, u16_strchr, u16_strrchr. */
333extern int
334 u16_uctomb_aux (uint16_t *s, ucs4_t uc, int n);
335# if !HAVE_INLINE
336extern int
337 u16_uctomb (uint16_t *s, ucs4_t uc, int n);
338# else
339static inline int
340u16_uctomb (uint16_t *s, ucs4_t uc, int n)
341{
342 if (uc < 0xd800 && n > 0)
343 {
344 s[0] = uc;
345 return 1;
346 }
347 else
348 return u16_uctomb_aux (s, uc, n);
349}
350# endif
351#endif
352
353#if GNULIB_UNISTR_U32_UCTOMB || HAVE_LIBUNISTRING
354# if !HAVE_INLINE
355extern int
356 u32_uctomb (uint32_t *s, ucs4_t uc, int n);
357# else
358static inline int
359u32_uctomb (uint32_t *s, ucs4_t uc, int n)
360{
361 if (uc < 0xd800 || (uc >= 0xe000 && uc < 0x110000))
362 {
363 if (n > 0)
364 {
365 *s = uc;
366 return 1;
367 }
368 else
369 return -2;
370 }
371 else
372 return -1;
373}
374# endif
375#endif
376
377/* Copy N units from SRC to DEST. */
378/* Similar to memcpy(). */
379extern uint8_t *
380 u8_cpy (uint8_t *dest, const uint8_t *src, size_t n);
381extern uint16_t *
382 u16_cpy (uint16_t *dest, const uint16_t *src, size_t n);
383extern uint32_t *
384 u32_cpy (uint32_t *dest, const uint32_t *src, size_t n);
385
386/* Copy N units from SRC to DEST, guaranteeing correct behavior for
387 overlapping memory areas. */
388/* Similar to memmove(). */
389extern uint8_t *
390 u8_move (uint8_t *dest, const uint8_t *src, size_t n);
391extern uint16_t *
392 u16_move (uint16_t *dest, const uint16_t *src, size_t n);
393extern uint32_t *
394 u32_move (uint32_t *dest, const uint32_t *src, size_t n);
395
396/* Set the first N characters of S to UC. UC should be a character that
397 occupies only 1 unit. */
398/* Similar to memset(). */
399extern uint8_t *
400 u8_set (uint8_t *s, ucs4_t uc, size_t n);
401extern uint16_t *
402 u16_set (uint16_t *s, ucs4_t uc, size_t n);
403extern uint32_t *
404 u32_set (uint32_t *s, ucs4_t uc, size_t n);
405
406/* Compare S1 and S2, each of length N. */
407/* Similar to memcmp(). */
408extern int
409 u8_cmp (const uint8_t *s1, const uint8_t *s2, size_t n)
410 _UC_ATTRIBUTE_PURE;
411extern int
412 u16_cmp (const uint16_t *s1, const uint16_t *s2, size_t n)
413 _UC_ATTRIBUTE_PURE;
414extern int
415 u32_cmp (const uint32_t *s1, const uint32_t *s2, size_t n)
416 _UC_ATTRIBUTE_PURE;
417
418/* Compare S1 and S2. */
419/* Similar to the gnulib function memcmp2(). */
420extern int
421 u8_cmp2 (const uint8_t *s1, size_t n1, const uint8_t *s2, size_t n2)
422 _UC_ATTRIBUTE_PURE;
423extern int
424 u16_cmp2 (const uint16_t *s1, size_t n1, const uint16_t *s2, size_t n2)
425 _UC_ATTRIBUTE_PURE;
426extern int
427 u32_cmp2 (const uint32_t *s1, size_t n1, const uint32_t *s2, size_t n2)
428 _UC_ATTRIBUTE_PURE;
429
430/* Search the string at S for UC. */
431/* Similar to memchr(). */
432extern uint8_t *
433 u8_chr (const uint8_t *s, size_t n, ucs4_t uc)
434 _UC_ATTRIBUTE_PURE;
435extern uint16_t *
436 u16_chr (const uint16_t *s, size_t n, ucs4_t uc)
437 _UC_ATTRIBUTE_PURE;
438extern uint32_t *
439 u32_chr (const uint32_t *s, size_t n, ucs4_t uc)
440 _UC_ATTRIBUTE_PURE;
441
442/* Count the number of Unicode characters in the N units from S. */
443/* Similar to mbsnlen(). */
444extern size_t
445 u8_mbsnlen (const uint8_t *s, size_t n)
446 _UC_ATTRIBUTE_PURE;
447extern size_t
448 u16_mbsnlen (const uint16_t *s, size_t n)
449 _UC_ATTRIBUTE_PURE;
450extern size_t
451 u32_mbsnlen (const uint32_t *s, size_t n)
452 _UC_ATTRIBUTE_PURE;
453
454/* Elementary string functions with memory allocation. */
455
456/* Make a freshly allocated copy of S, of length N. */
457extern uint8_t *
458 u8_cpy_alloc (const uint8_t *s, size_t n);
459extern uint16_t *
460 u16_cpy_alloc (const uint16_t *s, size_t n);
461extern uint32_t *
462 u32_cpy_alloc (const uint32_t *s, size_t n);
463
464/* Elementary string functions on NUL terminated strings. */
465
466/* Return the length (number of units) of the first character in S.
467 Return 0 if it is the NUL character. Return -1 upon failure. */
468extern int
469 u8_strmblen (const uint8_t *s)
470 _UC_ATTRIBUTE_PURE;
471extern int
472 u16_strmblen (const uint16_t *s)
473 _UC_ATTRIBUTE_PURE;
474extern int
475 u32_strmblen (const uint32_t *s)
476 _UC_ATTRIBUTE_PURE;
477
478/* Return the length (number of units) of the first character in S, putting
479 its 'ucs4_t' representation in *PUC. Return 0 if it is the NUL
480 character. Return -1 upon failure. */
481extern int
482 u8_strmbtouc (ucs4_t *puc, const uint8_t *s);
483extern int
484 u16_strmbtouc (ucs4_t *puc, const uint16_t *s);
485extern int
486 u32_strmbtouc (ucs4_t *puc, const uint32_t *s);
487
488/* Forward iteration step. Advances the pointer past the next character,
489 or returns NULL if the end of the string has been reached. Puts the
490 character's 'ucs4_t' representation in *PUC. */
491extern const uint8_t *
492 u8_next (ucs4_t *puc, const uint8_t *s);
493extern const uint16_t *
494 u16_next (ucs4_t *puc, const uint16_t *s);
495extern const uint32_t *
496 u32_next (ucs4_t *puc, const uint32_t *s);
497
498/* Backward iteration step. Advances the pointer to point to the previous
499 character, or returns NULL if the beginning of the string had been reached.
500 Puts the character's 'ucs4_t' representation in *PUC. */
501extern const uint8_t *
502 u8_prev (ucs4_t *puc, const uint8_t *s, const uint8_t *start);
503extern const uint16_t *
504 u16_prev (ucs4_t *puc, const uint16_t *s, const uint16_t *start);
505extern const uint32_t *
506 u32_prev (ucs4_t *puc, const uint32_t *s, const uint32_t *start);
507
508/* Return the number of units in S. */
509/* Similar to strlen(), wcslen(). */
510extern size_t
511 u8_strlen (const uint8_t *s)
512 _UC_ATTRIBUTE_PURE;
513extern size_t
514 u16_strlen (const uint16_t *s)
515 _UC_ATTRIBUTE_PURE;
516extern size_t
517 u32_strlen (const uint32_t *s)
518 _UC_ATTRIBUTE_PURE;
519
520/* Return the number of units in S, but at most MAXLEN. */
521/* Similar to strnlen(), wcsnlen(). */
522extern size_t
523 u8_strnlen (const uint8_t *s, size_t maxlen)
524 _UC_ATTRIBUTE_PURE;
525extern size_t
526 u16_strnlen (const uint16_t *s, size_t maxlen)
527 _UC_ATTRIBUTE_PURE;
528extern size_t
529 u32_strnlen (const uint32_t *s, size_t maxlen)
530 _UC_ATTRIBUTE_PURE;
531
532/* Copy SRC to DEST. */
533/* Similar to strcpy(), wcscpy(). */
534extern uint8_t *
535 u8_strcpy (uint8_t *dest, const uint8_t *src);
536extern uint16_t *
537 u16_strcpy (uint16_t *dest, const uint16_t *src);
538extern uint32_t *
539 u32_strcpy (uint32_t *dest, const uint32_t *src);
540
541/* Copy SRC to DEST, returning the address of the terminating NUL in DEST. */
542/* Similar to stpcpy(). */
543extern uint8_t *
544 u8_stpcpy (uint8_t *dest, const uint8_t *src);
545extern uint16_t *
546 u16_stpcpy (uint16_t *dest, const uint16_t *src);
547extern uint32_t *
548 u32_stpcpy (uint32_t *dest, const uint32_t *src);
549
550/* Copy no more than N units of SRC to DEST. */
551/* Similar to strncpy(), wcsncpy(). */
552extern uint8_t *
553 u8_strncpy (uint8_t *dest, const uint8_t *src, size_t n);
554extern uint16_t *
555 u16_strncpy (uint16_t *dest, const uint16_t *src, size_t n);
556extern uint32_t *
557 u32_strncpy (uint32_t *dest, const uint32_t *src, size_t n);
558
559/* Copy no more than N units of SRC to DEST. Return a pointer past the last
560 non-NUL unit written into DEST. */
561/* Similar to stpncpy(). */
562extern uint8_t *
563 u8_stpncpy (uint8_t *dest, const uint8_t *src, size_t n);
564extern uint16_t *
565 u16_stpncpy (uint16_t *dest, const uint16_t *src, size_t n);
566extern uint32_t *
567 u32_stpncpy (uint32_t *dest, const uint32_t *src, size_t n);
568
569/* Append SRC onto DEST. */
570/* Similar to strcat(), wcscat(). */
571extern uint8_t *
572 u8_strcat (uint8_t *dest, const uint8_t *src);
573extern uint16_t *
574 u16_strcat (uint16_t *dest, const uint16_t *src);
575extern uint32_t *
576 u32_strcat (uint32_t *dest, const uint32_t *src);
577
578/* Append no more than N units of SRC onto DEST. */
579/* Similar to strncat(), wcsncat(). */
580extern uint8_t *
581 u8_strncat (uint8_t *dest, const uint8_t *src, size_t n);
582extern uint16_t *
583 u16_strncat (uint16_t *dest, const uint16_t *src, size_t n);
584extern uint32_t *
585 u32_strncat (uint32_t *dest, const uint32_t *src, size_t n);
586
587/* Compare S1 and S2. */
588/* Similar to strcmp(), wcscmp(). */
589#ifdef __sun
590/* Avoid a collision with the u8_strcmp() function in Solaris 11 libc. */
591extern int
592 u8_strcmp_gnu (const uint8_t *s1, const uint8_t *s2)
593 _UC_ATTRIBUTE_PURE;
594# define u8_strcmp u8_strcmp_gnu
595#else
596extern int
597 u8_strcmp (const uint8_t *s1, const uint8_t *s2)
598 _UC_ATTRIBUTE_PURE;
599#endif
600extern int
601 u16_strcmp (const uint16_t *s1, const uint16_t *s2)
602 _UC_ATTRIBUTE_PURE;
603extern int
604 u32_strcmp (const uint32_t *s1, const uint32_t *s2)
605 _UC_ATTRIBUTE_PURE;
606
607/* Compare S1 and S2 using the collation rules of the current locale.
608 Return -1 if S1 < S2, 0 if S1 = S2, 1 if S1 > S2.
609 Upon failure, set errno and return any value. */
610/* Similar to strcoll(), wcscoll(). */
611extern int
612 u8_strcoll (const uint8_t *s1, const uint8_t *s2);
613extern int
614 u16_strcoll (const uint16_t *s1, const uint16_t *s2);
615extern int
616 u32_strcoll (const uint32_t *s1, const uint32_t *s2);
617
618/* Compare no more than N units of S1 and S2. */
619/* Similar to strncmp(), wcsncmp(). */
620extern int
621 u8_strncmp (const uint8_t *s1, const uint8_t *s2, size_t n)
622 _UC_ATTRIBUTE_PURE;
623extern int
624 u16_strncmp (const uint16_t *s1, const uint16_t *s2, size_t n)
625 _UC_ATTRIBUTE_PURE;
626extern int
627 u32_strncmp (const uint32_t *s1, const uint32_t *s2, size_t n)
628 _UC_ATTRIBUTE_PURE;
629
630/* Duplicate S, returning an identical malloc'd string. */
631/* Similar to strdup(), wcsdup(). */
632extern uint8_t *
633 u8_strdup (const uint8_t *s);
634extern uint16_t *
635 u16_strdup (const uint16_t *s);
636extern uint32_t *
637 u32_strdup (const uint32_t *s);
638
639/* Find the first occurrence of UC in STR. */
640/* Similar to strchr(), wcschr(). */
641extern uint8_t *
642 u8_strchr (const uint8_t *str, ucs4_t uc)
643 _UC_ATTRIBUTE_PURE;
644extern uint16_t *
645 u16_strchr (const uint16_t *str, ucs4_t uc)
646 _UC_ATTRIBUTE_PURE;
647extern uint32_t *
648 u32_strchr (const uint32_t *str, ucs4_t uc)
649 _UC_ATTRIBUTE_PURE;
650
651/* Find the last occurrence of UC in STR. */
652/* Similar to strrchr(), wcsrchr(). */
653extern uint8_t *
654 u8_strrchr (const uint8_t *str, ucs4_t uc)
655 _UC_ATTRIBUTE_PURE;
656extern uint16_t *
657 u16_strrchr (const uint16_t *str, ucs4_t uc)
658 _UC_ATTRIBUTE_PURE;
659extern uint32_t *
660 u32_strrchr (const uint32_t *str, ucs4_t uc)
661 _UC_ATTRIBUTE_PURE;
662
663/* Return the length of the initial segment of STR which consists entirely
664 of Unicode characters not in REJECT. */
665/* Similar to strcspn(), wcscspn(). */
666extern size_t
667 u8_strcspn (const uint8_t *str, const uint8_t *reject)
668 _UC_ATTRIBUTE_PURE;
669extern size_t
670 u16_strcspn (const uint16_t *str, const uint16_t *reject)
671 _UC_ATTRIBUTE_PURE;
672extern size_t
673 u32_strcspn (const uint32_t *str, const uint32_t *reject)
674 _UC_ATTRIBUTE_PURE;
675
676/* Return the length of the initial segment of STR which consists entirely
677 of Unicode characters in ACCEPT. */
678/* Similar to strspn(), wcsspn(). */
679extern size_t
680 u8_strspn (const uint8_t *str, const uint8_t *accept)
681 _UC_ATTRIBUTE_PURE;
682extern size_t
683 u16_strspn (const uint16_t *str, const uint16_t *accept)
684 _UC_ATTRIBUTE_PURE;
685extern size_t
686 u32_strspn (const uint32_t *str, const uint32_t *accept)
687 _UC_ATTRIBUTE_PURE;
688
689/* Find the first occurrence in STR of any character in ACCEPT. */
690/* Similar to strpbrk(), wcspbrk(). */
691extern uint8_t *
692 u8_strpbrk (const uint8_t *str, const uint8_t *accept)
693 _UC_ATTRIBUTE_PURE;
694extern uint16_t *
695 u16_strpbrk (const uint16_t *str, const uint16_t *accept)
696 _UC_ATTRIBUTE_PURE;
697extern uint32_t *
698 u32_strpbrk (const uint32_t *str, const uint32_t *accept)
699 _UC_ATTRIBUTE_PURE;
700
701/* Find the first occurrence of NEEDLE in HAYSTACK. */
702/* Similar to strstr(), wcsstr(). */
703extern uint8_t *
704 u8_strstr (const uint8_t *haystack, const uint8_t *needle)
705 _UC_ATTRIBUTE_PURE;
706extern uint16_t *
707 u16_strstr (const uint16_t *haystack, const uint16_t *needle)
708 _UC_ATTRIBUTE_PURE;
709extern uint32_t *
710 u32_strstr (const uint32_t *haystack, const uint32_t *needle)
711 _UC_ATTRIBUTE_PURE;
712
713/* Test whether STR starts with PREFIX. */
714extern bool
715 u8_startswith (const uint8_t *str, const uint8_t *prefix)
716 _UC_ATTRIBUTE_PURE;
717extern bool
718 u16_startswith (const uint16_t *str, const uint16_t *prefix)
719 _UC_ATTRIBUTE_PURE;
720extern bool
721 u32_startswith (const uint32_t *str, const uint32_t *prefix)
722 _UC_ATTRIBUTE_PURE;
723
724/* Test whether STR ends with SUFFIX. */
725extern bool
726 u8_endswith (const uint8_t *str, const uint8_t *suffix)
727 _UC_ATTRIBUTE_PURE;
728extern bool
729 u16_endswith (const uint16_t *str, const uint16_t *suffix)
730 _UC_ATTRIBUTE_PURE;
731extern bool
732 u32_endswith (const uint32_t *str, const uint32_t *suffix)
733 _UC_ATTRIBUTE_PURE;
734
735/* Divide STR into tokens separated by characters in DELIM.
736 This interface is actually more similar to wcstok than to strtok. */
737/* Similar to strtok_r(), wcstok(). */
738extern uint8_t *
739 u8_strtok (uint8_t *str, const uint8_t *delim, uint8_t **ptr);
740extern uint16_t *
741 u16_strtok (uint16_t *str, const uint16_t *delim, uint16_t **ptr);
742extern uint32_t *
743 u32_strtok (uint32_t *str, const uint32_t *delim, uint32_t **ptr);
744
745
746#ifdef __cplusplus
747}
748#endif
749
750#endif /* _UNISTR_H */
diff --git a/3rdParty/LibIDN/src/gl/unistr/u8-check.c b/3rdParty/LibIDN/src/gl/unistr/u8-check.c
new file mode 100644
index 0000000..0e87f11
--- /dev/null
+++ b/3rdParty/LibIDN/src/gl/unistr/u8-check.c
@@ -0,0 +1,105 @@
1/* Check UTF-8 string.
2 Copyright (C) 2002, 2006-2007, 2009-2015 Free Software Foundation, Inc.
3 Written by Bruno Haible <bruno@clisp.org>, 2002.
4
5 This program is free software: you can redistribute it and/or modify it
6 under the terms of the GNU Lesser General Public License as published
7 by the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version.
9
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Lesser General Public License for more details.
14
15 You should have received a copy of the GNU Lesser General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>. */
17
18#include <config.h>
19
20/* Specification. */
21#include "unistr.h"
22
23const uint8_t *
24u8_check (const uint8_t *s, size_t n)
25{
26 const uint8_t *s_end = s + n;
27
28 while (s < s_end)
29 {
30 /* Keep in sync with unistr.h and u8-mbtouc-aux.c. */
31 uint8_t c = *s;
32
33 if (c < 0x80)
34 {
35 s++;
36 continue;
37 }
38 if (c >= 0xc2)
39 {
40 if (c < 0xe0)
41 {
42 if (s + 2 <= s_end
43 && (s[1] ^ 0x80) < 0x40)
44 {
45 s += 2;
46 continue;
47 }
48 }
49 else if (c < 0xf0)
50 {
51 if (s + 3 <= s_end
52 && (s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40
53 && (c >= 0xe1 || s[1] >= 0xa0)
54 && (c != 0xed || s[1] < 0xa0))
55 {
56 s += 3;
57 continue;
58 }
59 }
60 else if (c < 0xf8)
61 {
62 if (s + 4 <= s_end
63 && (s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40
64 && (s[3] ^ 0x80) < 0x40
65 && (c >= 0xf1 || s[1] >= 0x90)
66#if 1
67 && (c < 0xf4 || (c == 0xf4 && s[1] < 0x90))
68#endif
69 )
70 {
71 s += 4;
72 continue;
73 }
74 }
75#if 0
76 else if (c < 0xfc)
77 {
78 if (s + 5 <= s_end
79 && (s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40
80 && (s[3] ^ 0x80) < 0x40 && (s[4] ^ 0x80) < 0x40
81 && (c >= 0xf9 || s[1] >= 0x88))
82 {
83 s += 5;
84 continue;
85 }
86 }
87 else if (c < 0xfe)
88 {
89 if (s + 6 <= s_end
90 && (s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40
91 && (s[3] ^ 0x80) < 0x40 && (s[4] ^ 0x80) < 0x40
92 && (s[5] ^ 0x80) < 0x40
93 && (c >= 0xfd || s[1] >= 0x84))
94 {
95 s += 6;
96 continue;
97 }
98 }
99#endif
100 }
101 /* invalid or incomplete multibyte character */
102 return s;
103 }
104 return NULL;
105}
diff --git a/3rdParty/LibIDN/src/gl/unitypes.h b/3rdParty/LibIDN/src/gl/unitypes.h
new file mode 100644
index 0000000..21c0c3e
--- /dev/null
+++ b/3rdParty/LibIDN/src/gl/unitypes.h
@@ -0,0 +1,46 @@
1/* Elementary types and macros for the GNU UniString library.
2 Copyright (C) 2002, 2005-2006, 2009-2015 Free Software Foundation, Inc.
3
4 This program is free software: you can redistribute it and/or modify it
5 under the terms of the GNU Lesser General Public License as published
6 by the Free Software Foundation; either version 2.1 of the License, or
7 (at your option) any later version.
8
9 This program 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 License
15 along with this program. If not, see <http://www.gnu.org/licenses/>. */
16
17#ifndef _UNITYPES_H
18#define _UNITYPES_H
19
20/* Get uint8_t, uint16_t, uint32_t. */
21#include <stdint.h>
22
23/* Type representing a Unicode character. */
24typedef uint32_t ucs4_t;
25
26/* Attribute of a function whose result depends only on the arguments
27 (not pointers!) and which has no side effects. */
28#ifndef _UC_ATTRIBUTE_CONST
29# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)
30# define _UC_ATTRIBUTE_CONST __attribute__ ((__const__))
31# else
32# define _UC_ATTRIBUTE_CONST
33# endif
34#endif
35
36/* Attribute of a function whose result depends only on the arguments
37 (possibly pointers) and global memory, and which has no side effects. */
38#ifndef _UC_ATTRIBUTE_PURE
39# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
40# define _UC_ATTRIBUTE_PURE __attribute__ ((__pure__))
41# else
42# define _UC_ATTRIBUTE_PURE
43# endif
44#endif
45
46#endif /* _UNITYPES_H */
diff --git a/3rdParty/LibIDN/src/gunicomp.h b/3rdParty/LibIDN/src/gunicomp.h
index b5fa880..8e61cb1 100644
--- a/3rdParty/LibIDN/src/gunicomp.h
+++ b/3rdParty/LibIDN/src/gunicomp.h
@@ -1,7 +1,8 @@
1/* This file is automatically generated. DO NOT EDIT! 1/* This file is automatically generated. DO NOT EDIT!
2 Instead, edit gen-unicode-tables.pl and re-run. */ 2 Instead, edit gen-unicode-tables.pl and re-run.
3 Note that gen-unicode-tables.pl doesn't work with Perl 5.10 or later.. */
3 4
4#define COMPOSE_FIRST_START 1 5#define COMPOSE_FIRST_START 1
5#define COMPOSE_FIRST_SINGLE_START 147 6#define COMPOSE_FIRST_SINGLE_START 147
6#define COMPOSE_SECOND_START 357 7#define COMPOSE_SECOND_START 357
7#define COMPOSE_SECOND_SINGLE_START 388 8#define COMPOSE_SECOND_SINGLE_START 388
diff --git a/3rdParty/LibIDN/src/gunidecomp.h b/3rdParty/LibIDN/src/gunidecomp.h
index 1c48c21..a5ad7d7 100644
--- a/3rdParty/LibIDN/src/gunidecomp.h
+++ b/3rdParty/LibIDN/src/gunidecomp.h
@@ -1,7 +1,8 @@
1/* This file is automatically generated. DO NOT EDIT! 1/* This file is automatically generated. DO NOT EDIT!
2 Instead, edit gen-unicode-tables.pl and re-run. */ 2 Instead, edit gen-unicode-tables.pl and re-run.
3 Note that gen-unicode-tables.pl doesn't work with Perl 5.10 or later.. */
3 4
4#ifndef DECOMP_H 5#ifndef DECOMP_H
5#define DECOMP_H 6#define DECOMP_H
6 7
7#define G_UNICODE_LAST_CHAR 0x10ffff 8#define G_UNICODE_LAST_CHAR 0x10ffff
diff --git a/3rdParty/LibIDN/src/idna.c b/3rdParty/LibIDN/src/idna.c
index 8061086..5107d73 100644
--- a/3rdParty/LibIDN/src/idna.c
+++ b/3rdParty/LibIDN/src/idna.c
@@ -1,25 +1,33 @@
1/* idna.c --- Convert to or from IDN strings. 1/* idna.c --- Prototypes for Internationalized Domain Name library.
2 * Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008 Simon Josefsson 2 Copyright (C) 2002-2015 Simon Josefsson
3 * 3
4 * This file is part of GNU Libidn. 4 This file is part of GNU Libidn.
5 * 5
6 * GNU Libidn is free software; you can redistribute it and/or 6 GNU Libidn is free software: you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public 7 modify it under the terms of either:
8 * License as published by the Free Software Foundation; either 8
9 * version 2.1 of the License, or (at your option) any later version. 9 * the GNU Lesser General Public License as published by the Free
10 * 10 Software Foundation; either version 3 of the License, or (at
11 * GNU Libidn is distributed in the hope that it will be useful, 11 your option) any later version.
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 or
14 * Lesser General Public License for more details. 14
15 * 15 * the GNU General Public License as published by the Free
16 * You should have received a copy of the GNU Lesser General Public 16 Software Foundation; either version 2 of the License, or (at
17 * License along with GNU Libidn; if not, write to the Free Software 17 your option) any later version.
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA 18
19 * 19 or both in parallel, as here.
20 */ 20
21 GNU Libidn is distributed in the hope that it will be useful,
22 but WITHOUT ANY WARRANTY; without even the implied warranty of
23 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
24 General Public License for more details.
25
26 You should have received copies of the GNU General Public License and
27 the GNU Lesser General Public License along with this program. If
28 not, see <http://www.gnu.org/licenses/>. */
21 29
22#ifdef HAVE_CONFIG_H 30#ifdef HAVE_CONFIG_H
23# include "config.h" 31# include "config.h"
24#endif 32#endif
25 33
@@ -28,17 +36,20 @@
28#include <stringprep.h> 36#include <stringprep.h>
29#include <punycode.h> 37#include <punycode.h>
30 38
31#include "idna.h" 39#include "idna.h"
32 40
41/* Get c_strcasecmp. */
42#include <c-strcase.h>
43
33#define DOTP(c) ((c) == 0x002E || (c) == 0x3002 || \ 44#define DOTP(c) ((c) == 0x002E || (c) == 0x3002 || \
34 (c) == 0xFF0E || (c) == 0xFF61) 45 (c) == 0xFF0E || (c) == 0xFF61)
35 46
36/* Core functions */ 47/* Core functions */
37 48
38/** 49/**
39 * idna_to_ascii_4i - convert Unicode domain name label to text 50 * idna_to_ascii_4i:
40 * @in: input array with unicode code points. 51 * @in: input array with unicode code points.
41 * @inlen: length of input array with unicode code points. 52 * @inlen: length of input array with unicode code points.
42 * @out: output zero terminated string that must have room for at 53 * @out: output zero terminated string that must have room for at
43 * least 63 characters plus the terminating zero. 54 * least 63 characters plus the terminating zero.
44 * @flags: an #Idna_flags value, e.g., %IDNA_ALLOW_UNASSIGNED or 55 * @flags: an #Idna_flags value, e.g., %IDNA_ALLOW_UNASSIGNED or
@@ -107,11 +118,11 @@ idna_to_ascii_4i (const uint32_t * in, size_t inlen, char *out, int flags)
107 */ 118 */
108 119
109 { 120 {
110 char *p; 121 char *p;
111 122
112 p = stringprep_ucs4_to_utf8 (in, inlen, NULL, NULL); 123 p = stringprep_ucs4_to_utf8 (in, (ssize_t) inlen, NULL, NULL);
113 if (p == NULL) 124 if (p == NULL)
114 return IDNA_MALLOC_ERROR; 125 return IDNA_MALLOC_ERROR;
115 126
116 len = strlen (p); 127 len = strlen (p);
117 do 128 do
@@ -141,10 +152,13 @@ idna_to_ascii_4i (const uint32_t * in, size_t inlen, char *out, int flags)
141 } 152 }
142 153
143 src = stringprep_utf8_to_ucs4 (p, -1, NULL); 154 src = stringprep_utf8_to_ucs4 (p, -1, NULL);
144 155
145 free (p); 156 free (p);
157
158 if (!src)
159 return IDNA_MALLOC_ERROR;
146 } 160 }
147 161
148step3: 162step3:
149 /* 163 /*
150 * 3. If the UseSTD3ASCIIRules flag is set, then perform these checks: 164 * 3. If the UseSTD3ASCIIRules flag is set, then perform these checks:
@@ -316,14 +330,16 @@ idna_to_unicode_internal (char *utf8in,
316 return IDNA_STRINGPREP_ERROR; 330 return IDNA_STRINGPREP_ERROR;
317 } 331 }
318 332
319 /* 3. Verify that the sequence begins with the ACE prefix, and save a 333 /* 3. Verify that the sequence begins with the ACE prefix, and save a
320 * copy of the sequence. 334 * copy of the sequence.
335 * ... The ToASCII and ToUnicode operations MUST recognize the ACE
336 prefix in a case-insensitive manner.
321 */ 337 */
322 338
323step3: 339step3:
324 if (memcmp (IDNA_ACE_PREFIX, utf8in, strlen (IDNA_ACE_PREFIX)) != 0) 340 if (c_strncasecmp (utf8in, IDNA_ACE_PREFIX, strlen (IDNA_ACE_PREFIX)) != 0)
325 { 341 {
326 free (utf8in); 342 free (utf8in);
327 return IDNA_NO_ACE_PREFIX; 343 return IDNA_NO_ACE_PREFIX;
328 } 344 }
329 345
@@ -361,11 +377,11 @@ step3:
361 377
362 /* 7. Verify that the result of step 6 matches the saved copy from 378 /* 7. Verify that the result of step 6 matches the saved copy from
363 * step 3, using a case-insensitive ASCII comparison. 379 * step 3, using a case-insensitive ASCII comparison.
364 */ 380 */
365 381
366 if (strcasecmp (utf8in, tmpout + strlen (IDNA_ACE_PREFIX)) != 0) 382 if (c_strcasecmp (utf8in, tmpout + strlen (IDNA_ACE_PREFIX)) != 0)
367 { 383 {
368 free (utf8in); 384 free (utf8in);
369 return IDNA_ROUNDTRIP_VERIFY_ERROR; 385 return IDNA_ROUNDTRIP_VERIFY_ERROR;
370 } 386 }
371 387
@@ -375,11 +391,11 @@ step3:
375 free (utf8in); 391 free (utf8in);
376 return IDNA_SUCCESS; 392 return IDNA_SUCCESS;
377} 393}
378 394
379/** 395/**
380 * idna_to_unicode_44i - convert domain name label to Unicode 396 * idna_to_unicode_44i:
381 * @in: input array with unicode code points. 397 * @in: input array with unicode code points.
382 * @inlen: length of input array with unicode code points. 398 * @inlen: length of input array with unicode code points.
383 * @out: output array with unicode code points. 399 * @out: output array with unicode code points.
384 * @outlen: on input, maximum size of output array with unicode code points, 400 * @outlen: on input, maximum size of output array with unicode code points,
385 * on exit, actual size of output array with unicode code points. 401 * on exit, actual size of output array with unicode code points.
@@ -417,11 +433,11 @@ idna_to_unicode_44i (const uint32_t * in, size_t inlen,
417{ 433{
418 int rc; 434 int rc;
419 size_t outlensave = *outlen; 435 size_t outlensave = *outlen;
420 char *p; 436 char *p;
421 437
422 p = stringprep_ucs4_to_utf8 (in, inlen, NULL, NULL); 438 p = stringprep_ucs4_to_utf8 (in, (ssize_t) inlen, NULL, NULL);
423 if (p == NULL) 439 if (p == NULL)
424 return IDNA_MALLOC_ERROR; 440 return IDNA_MALLOC_ERROR;
425 441
426 rc = idna_to_unicode_internal (p, out, outlen, flags); 442 rc = idna_to_unicode_internal (p, out, outlen, flags);
427 if (rc != IDNA_SUCCESS) 443 if (rc != IDNA_SUCCESS)
@@ -437,11 +453,11 @@ idna_to_unicode_44i (const uint32_t * in, size_t inlen,
437} 453}
438 454
439/* Wrappers that handle several labels */ 455/* Wrappers that handle several labels */
440 456
441/** 457/**
442 * idna_to_ascii_4z - convert Unicode domain name to text 458 * idna_to_ascii_4z:
443 * @input: zero terminated input Unicode string. 459 * @input: zero terminated input Unicode string.
444 * @output: pointer to newly allocated output string. 460 * @output: pointer to newly allocated output string.
445 * @flags: an #Idna_flags value, e.g., %IDNA_ALLOW_UNASSIGNED or 461 * @flags: an #Idna_flags value, e.g., %IDNA_ALLOW_UNASSIGNED or
446 * %IDNA_USE_STD3_ASCII_RULES. 462 * %IDNA_USE_STD3_ASCII_RULES.
447 * 463 *
@@ -453,11 +469,11 @@ idna_to_unicode_44i (const uint32_t * in, size_t inlen,
453 **/ 469 **/
454int 470int
455idna_to_ascii_4z (const uint32_t * input, char **output, int flags) 471idna_to_ascii_4z (const uint32_t * input, char **output, int flags)
456{ 472{
457 const uint32_t *start = input; 473 const uint32_t *start = input;
458 const uint32_t *end = input; 474 const uint32_t *end;
459 char buf[64]; 475 char buf[64];
460 char *out = NULL; 476 char *out = NULL;
461 int rc; 477 int rc;
462 478
463 /* 1) Whenever dots are used as label separators, the following 479 /* 1) Whenever dots are used as label separators, the following
@@ -498,18 +514,22 @@ idna_to_ascii_4z (const uint32_t * input, char **output, int flags)
498 /* Handle explicit zero-length root label. */ 514 /* Handle explicit zero-length root label. */
499 buf[0] = '\0'; 515 buf[0] = '\0';
500 } 516 }
501 else 517 else
502 { 518 {
503 rc = idna_to_ascii_4i (start, end - start, buf, flags); 519 rc = idna_to_ascii_4i (start, (size_t) (end - start), buf, flags);
504 if (rc != IDNA_SUCCESS) 520 if (rc != IDNA_SUCCESS)
505 return rc; 521 {
522 free (out);
523 return rc;
524 }
506 } 525 }
507 526
508 if (out) 527 if (out)
509 { 528 {
510 char *newp = realloc (out, strlen (out) + 1 + strlen (buf) + 1); 529 size_t l = strlen (out) + 1 + strlen (buf) + 1;
530 char *newp = realloc (out, l);
511 if (!newp) 531 if (!newp)
512 { 532 {
513 free (out); 533 free (out);
514 return IDNA_MALLOC_ERROR; 534 return IDNA_MALLOC_ERROR;
515 } 535 }
@@ -517,14 +537,13 @@ idna_to_ascii_4z (const uint32_t * input, char **output, int flags)
517 strcat (out, "."); 537 strcat (out, ".");
518 strcat (out, buf); 538 strcat (out, buf);
519 } 539 }
520 else 540 else
521 { 541 {
522 out = (char *) malloc (strlen (buf) + 1); 542 out = strdup (buf);
523 if (!out) 543 if (!out)
524 return IDNA_MALLOC_ERROR; 544 return IDNA_MALLOC_ERROR;
525 strcpy (out, buf);
526 } 545 }
527 546
528 start = end + 1; 547 start = end + 1;
529 } 548 }
530 while (*end); 549 while (*end);
@@ -533,11 +552,11 @@ idna_to_ascii_4z (const uint32_t * input, char **output, int flags)
533 552
534 return IDNA_SUCCESS; 553 return IDNA_SUCCESS;
535} 554}
536 555
537/** 556/**
538 * idna_to_ascii_8z - convert Unicode domain name to text 557 * idna_to_ascii_8z:
539 * @input: zero terminated input UTF-8 string. 558 * @input: zero terminated input UTF-8 string.
540 * @output: pointer to newly allocated output string. 559 * @output: pointer to newly allocated output string.
541 * @flags: an #Idna_flags value, e.g., %IDNA_ALLOW_UNASSIGNED or 560 * @flags: an #Idna_flags value, e.g., %IDNA_ALLOW_UNASSIGNED or
542 * %IDNA_USE_STD3_ASCII_RULES. 561 * %IDNA_USE_STD3_ASCII_RULES.
543 * 562 *
@@ -565,11 +584,11 @@ idna_to_ascii_8z (const char *input, char **output, int flags)
565 return rc; 584 return rc;
566 585
567} 586}
568 587
569/** 588/**
570 * idna_to_ascii_lz - convert Unicode domain name to text 589 * idna_to_ascii_lz:
571 * @input: zero terminated input string encoded in the current locale's 590 * @input: zero terminated input string encoded in the current locale's
572 * character set. 591 * character set.
573 * @output: pointer to newly allocated output string. 592 * @output: pointer to newly allocated output string.
574 * @flags: an #Idna_flags value, e.g., %IDNA_ALLOW_UNASSIGNED or 593 * @flags: an #Idna_flags value, e.g., %IDNA_ALLOW_UNASSIGNED or
575 * %IDNA_USE_STD3_ASCII_RULES. 594 * %IDNA_USE_STD3_ASCII_RULES.
@@ -596,11 +615,11 @@ idna_to_ascii_lz (const char *input, char **output, int flags)
596 615
597 return rc; 616 return rc;
598} 617}
599 618
600/** 619/**
601 * idna_to_unicode_4z4z - convert domain name to Unicode 620 * idna_to_unicode_4z4z:
602 * @input: zero-terminated Unicode string. 621 * @input: zero-terminated Unicode string.
603 * @output: pointer to newly allocated output Unicode string. 622 * @output: pointer to newly allocated output Unicode string.
604 * @flags: an #Idna_flags value, e.g., %IDNA_ALLOW_UNASSIGNED or 623 * @flags: an #Idna_flags value, e.g., %IDNA_ALLOW_UNASSIGNED or
605 * %IDNA_USE_STD3_ASCII_RULES. 624 * %IDNA_USE_STD3_ASCII_RULES.
606 * 625 *
@@ -613,33 +632,33 @@ idna_to_ascii_lz (const char *input, char **output, int flags)
613 **/ 632 **/
614int 633int
615idna_to_unicode_4z4z (const uint32_t * input, uint32_t ** output, int flags) 634idna_to_unicode_4z4z (const uint32_t * input, uint32_t ** output, int flags)
616{ 635{
617 const uint32_t *start = input; 636 const uint32_t *start = input;
618 const uint32_t *end = input; 637 const uint32_t *end;
619 uint32_t *buf; 638 uint32_t *buf;
620 size_t buflen; 639 size_t buflen;
621 uint32_t *out = NULL; 640 uint32_t *out = NULL;
622 size_t outlen = 0; 641 size_t outlen = 0;
623 int rc;
624 642
625 *output = NULL; 643 *output = NULL;
626 644
627 do 645 do
628 { 646 {
629 end = start; 647 end = start;
630 648
631 for (; *end && !DOTP (*end); end++) 649 for (; *end && !DOTP (*end); end++)
632 ; 650 ;
633 651
634 buflen = end - start; 652 buflen = (size_t) (end - start);
635 buf = malloc (sizeof (buf[0]) * (buflen + 1)); 653 buf = malloc (sizeof (buf[0]) * (buflen + 1));
636 if (!buf) 654 if (!buf)
637 return IDNA_MALLOC_ERROR; 655 return IDNA_MALLOC_ERROR;
638 656
639 rc = idna_to_unicode_44i (start, end - start, buf, &buflen, flags); 657 /* don't check return code as per specification! */
640 /* don't check rc as per specification! */ 658 idna_to_unicode_44i (start, (size_t) (end - start),
659 buf, &buflen, flags);
641 660
642 if (out) 661 if (out)
643 { 662 {
644 uint32_t *newp = realloc (out, 663 uint32_t *newp = realloc (out,
645 sizeof (out[0]) 664 sizeof (out[0])
@@ -672,11 +691,11 @@ idna_to_unicode_4z4z (const uint32_t * input, uint32_t ** output, int flags)
672 691
673 return IDNA_SUCCESS; 692 return IDNA_SUCCESS;
674} 693}
675 694
676/** 695/**
677 * idna_to_unicode_8z4z - convert domain name to Unicode 696 * idna_to_unicode_8z4z:
678 * @input: zero-terminated UTF-8 string. 697 * @input: zero-terminated UTF-8 string.
679 * @output: pointer to newly allocated output Unicode string. 698 * @output: pointer to newly allocated output Unicode string.
680 * @flags: an #Idna_flags value, e.g., %IDNA_ALLOW_UNASSIGNED or 699 * @flags: an #Idna_flags value, e.g., %IDNA_ALLOW_UNASSIGNED or
681 * %IDNA_USE_STD3_ASCII_RULES. 700 * %IDNA_USE_STD3_ASCII_RULES.
682 * 701 *
@@ -703,11 +722,11 @@ idna_to_unicode_8z4z (const char *input, uint32_t ** output, int flags)
703 722
704 return rc; 723 return rc;
705} 724}
706 725
707/** 726/**
708 * idna_to_unicode_8z8z - convert domain name to Unicode 727 * idna_to_unicode_8z8z:
709 * @input: zero-terminated UTF-8 string. 728 * @input: zero-terminated UTF-8 string.
710 * @output: pointer to newly allocated output UTF-8 string. 729 * @output: pointer to newly allocated output UTF-8 string.
711 * @flags: an #Idna_flags value, e.g., %IDNA_ALLOW_UNASSIGNED or 730 * @flags: an #Idna_flags value, e.g., %IDNA_ALLOW_UNASSIGNED or
712 * %IDNA_USE_STD3_ASCII_RULES. 731 * %IDNA_USE_STD3_ASCII_RULES.
713 * 732 *
@@ -723,21 +742,24 @@ idna_to_unicode_8z8z (const char *input, char **output, int flags)
723{ 742{
724 uint32_t *ucs4; 743 uint32_t *ucs4;
725 int rc; 744 int rc;
726 745
727 rc = idna_to_unicode_8z4z (input, &ucs4, flags); 746 rc = idna_to_unicode_8z4z (input, &ucs4, flags);
747 if (rc != IDNA_SUCCESS)
748 return rc;
749
728 *output = stringprep_ucs4_to_utf8 (ucs4, -1, NULL, NULL); 750 *output = stringprep_ucs4_to_utf8 (ucs4, -1, NULL, NULL);
729 free (ucs4); 751 free (ucs4);
730 752
731 if (!*output) 753 if (!*output)
732 return IDNA_ICONV_ERROR; 754 return IDNA_ICONV_ERROR;
733 755
734 return rc; 756 return IDNA_SUCCESS;
735} 757}
736 758
737/** 759/**
738 * idna_to_unicode_8zlz - convert domain name to Unicode 760 * idna_to_unicode_8zlz:
739 * @input: zero-terminated UTF-8 string. 761 * @input: zero-terminated UTF-8 string.
740 * @output: pointer to newly allocated output string encoded in the 762 * @output: pointer to newly allocated output string encoded in the
741 * current locale's character set. 763 * current locale's character set.
742 * @flags: an #Idna_flags value, e.g., %IDNA_ALLOW_UNASSIGNED or 764 * @flags: an #Idna_flags value, e.g., %IDNA_ALLOW_UNASSIGNED or
743 * %IDNA_USE_STD3_ASCII_RULES. 765 * %IDNA_USE_STD3_ASCII_RULES.
@@ -754,21 +776,24 @@ idna_to_unicode_8zlz (const char *input, char **output, int flags)
754{ 776{
755 char *utf8; 777 char *utf8;
756 int rc; 778 int rc;
757 779
758 rc = idna_to_unicode_8z8z (input, &utf8, flags); 780 rc = idna_to_unicode_8z8z (input, &utf8, flags);
781 if (rc != IDNA_SUCCESS)
782 return rc;
783
759 *output = stringprep_utf8_to_locale (utf8); 784 *output = stringprep_utf8_to_locale (utf8);
760 free (utf8); 785 free (utf8);
761 786
762 if (!*output) 787 if (!*output)
763 return IDNA_ICONV_ERROR; 788 return IDNA_ICONV_ERROR;
764 789
765 return rc; 790 return IDNA_SUCCESS;
766} 791}
767 792
768/** 793/**
769 * idna_to_unicode_lzlz - convert domain name to Unicode 794 * idna_to_unicode_lzlz:
770 * @input: zero-terminated string encoded in the current locale's 795 * @input: zero-terminated string encoded in the current locale's
771 * character set. 796 * character set.
772 * @output: pointer to newly allocated output string encoded in the 797 * @output: pointer to newly allocated output string encoded in the
773 * current locale's character set. 798 * current locale's character set.
774 * @flags: an #Idna_flags value, e.g., %IDNA_ALLOW_UNASSIGNED or 799 * @flags: an #Idna_flags value, e.g., %IDNA_ALLOW_UNASSIGNED or
@@ -810,10 +835,12 @@ idna_to_unicode_lzlz (const char *input, char **output, int flags)
810 * non-zero values, for logical comparison purposes. 835 * non-zero values, for logical comparison purposes.
811 * @IDNA_STRINGPREP_ERROR: Error during string preparation. 836 * @IDNA_STRINGPREP_ERROR: Error during string preparation.
812 * @IDNA_PUNYCODE_ERROR: Error during punycode operation. 837 * @IDNA_PUNYCODE_ERROR: Error during punycode operation.
813 * @IDNA_CONTAINS_NON_LDH: For IDNA_USE_STD3_ASCII_RULES, indicate that 838 * @IDNA_CONTAINS_NON_LDH: For IDNA_USE_STD3_ASCII_RULES, indicate that
814 * the string contains non-LDH ASCII characters. 839 * the string contains non-LDH ASCII characters.
840 * @IDNA_CONTAINS_LDH: Same as @IDNA_CONTAINS_NON_LDH, for compatibility
841 * with typo in earlier versions.
815 * @IDNA_CONTAINS_MINUS: For IDNA_USE_STD3_ASCII_RULES, indicate that 842 * @IDNA_CONTAINS_MINUS: For IDNA_USE_STD3_ASCII_RULES, indicate that
816 * the string contains a leading or trailing hyphen-minus (U+002D). 843 * the string contains a leading or trailing hyphen-minus (U+002D).
817 * @IDNA_INVALID_LENGTH: The final output string is not within the 844 * @IDNA_INVALID_LENGTH: The final output string is not within the
818 * (inclusive) range 1 to 63 characters. 845 * (inclusive) range 1 to 63 characters.
819 * @IDNA_NO_ACE_PREFIX: The string does not contain the ACE prefix 846 * @IDNA_NO_ACE_PREFIX: The string does not contain the ACE prefix
diff --git a/3rdParty/LibIDN/src/idna.h b/3rdParty/LibIDN/src/idna.h
index f6b24ac..f214075 100644
--- a/3rdParty/LibIDN/src/idna.h
+++ b/3rdParty/LibIDN/src/idna.h
@@ -1,37 +1,57 @@
1/* idna.h --- Declarations for Internationalized Domain Name in Applications. 1/* idna.h --- Prototypes for Internationalized Domain Name library.
2 * Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Simon Josefsson 2 Copyright (C) 2002-2015 Simon Josefsson
3 *
4 * This file is part of GNU Libidn.
5 *
6 * GNU Libidn is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
10 *
11 * GNU Libidn is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with GNU Libidn; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
19 *
20 */
21
22#ifndef _IDNA_H
23# define _IDNA_H
24 3
25# ifdef __cplusplus 4 This file is part of GNU Libidn.
26extern "C" 5
27{ 6 GNU Libidn is free software: you can redistribute it and/or
7 modify it under the terms of either:
8
9 * the GNU Lesser General Public License as published by the Free
10 Software Foundation; either version 3 of the License, or (at
11 your option) any later version.
12
13 or
14
15 * the GNU General Public License as published by the Free
16 Software Foundation; either version 2 of the License, or (at
17 your option) any later version.
18
19 or both in parallel, as here.
20
21 GNU Libidn is distributed in the hope that it will be useful,
22 but WITHOUT ANY WARRANTY; without even the implied warranty of
23 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
24 General Public License for more details.
25
26 You should have received copies of the GNU General Public License and
27 the GNU Lesser General Public License along with this program. If
28 not, see <http://www.gnu.org/licenses/>. */
29
30#ifndef IDNA_H
31# define IDNA_H
32
33# ifndef IDNAPI
34# if defined LIBIDN_BUILDING && defined HAVE_VISIBILITY && HAVE_VISIBILITY
35# define IDNAPI __attribute__((__visibility__("default")))
36# elif defined LIBIDN_BUILDING && defined _MSC_VER && ! defined LIBIDN_STATIC
37# define IDNAPI __declspec(dllexport)
38# elif defined _MSC_VER && ! defined LIBIDN_STATIC
39# define IDNAPI __declspec(dllimport)
40# else
41# define IDNAPI
42# endif
28# endif 43# endif
29 44
30# include <stddef.h> /* size_t */ 45# include <stddef.h> /* size_t */
31# include <idn-int.h> /* uint32_t */ 46# include <idn-int.h> /* uint32_t */
32 47
48# ifdef __cplusplus
49extern "C"
50{
51# endif
52
33 /* Error codes. */ 53 /* Error codes. */
34 typedef enum 54 typedef enum
35 { 55 {
36 IDNA_SUCCESS = 0, 56 IDNA_SUCCESS = 0,
37 IDNA_STRINGPREP_ERROR = 1, 57 IDNA_STRINGPREP_ERROR = 1,
@@ -59,42 +79,45 @@ extern "C"
59 79
60# ifndef IDNA_ACE_PREFIX 80# ifndef IDNA_ACE_PREFIX
61# define IDNA_ACE_PREFIX "xn--" 81# define IDNA_ACE_PREFIX "xn--"
62# endif 82# endif
63 83
64 extern const char *idna_strerror (Idna_rc rc); 84 extern IDNAPI const char *idna_strerror (Idna_rc rc);
65 85
66 /* Core functions */ 86 /* Core functions */
67 extern int idna_to_ascii_4i (const uint32_t * in, size_t inlen, 87 extern IDNAPI int idna_to_ascii_4i (const uint32_t * in, size_t inlen,
68 char *out, int flags); 88 char *out, int flags);
69 extern int idna_to_unicode_44i (const uint32_t * in, size_t inlen, 89 extern IDNAPI int idna_to_unicode_44i (const uint32_t * in, size_t inlen,
70 uint32_t * out, size_t * outlen, int flags); 90 uint32_t * out, size_t * outlen,
91 int flags);
71 92
72 /* Wrappers that handle several labels */ 93 /* Wrappers that handle several labels */
73 94
74 extern int idna_to_ascii_4z (const uint32_t * input, 95 extern IDNAPI int idna_to_ascii_4z (const uint32_t * input,
75 char **output, int flags); 96 char **output, int flags);
76 97
77 extern int idna_to_ascii_8z (const char *input, char **output, int flags); 98 extern IDNAPI int idna_to_ascii_8z (const char *input, char **output,
99 int flags);
78 100
79 extern int idna_to_ascii_lz (const char *input, char **output, int flags); 101 extern IDNAPI int idna_to_ascii_lz (const char *input, char **output,
102 int flags);
80 103
104 extern IDNAPI int idna_to_unicode_4z4z (const uint32_t * input,
105 uint32_t ** output, int flags);
81 106
82 extern int idna_to_unicode_4z4z (const uint32_t * input, 107 extern IDNAPI int idna_to_unicode_8z4z (const char *input,
83 uint32_t ** output, int flags); 108 uint32_t ** output, int flags);
84 109
85 extern int idna_to_unicode_8z4z (const char *input, 110 extern IDNAPI int idna_to_unicode_8z8z (const char *input,
86 uint32_t ** output, int flags); 111 char **output, int flags);
87 112
88 extern int idna_to_unicode_8z8z (const char *input, 113 extern IDNAPI int idna_to_unicode_8zlz (const char *input,
89 char **output, int flags); 114 char **output, int flags);
90 115
91 extern int idna_to_unicode_8zlz (const char *input, 116 extern IDNAPI int idna_to_unicode_lzlz (const char *input,
92 char **output, int flags); 117 char **output, int flags);
93
94 extern int idna_to_unicode_lzlz (const char *input,
95 char **output, int flags);
96 118
97# ifdef __cplusplus 119# ifdef __cplusplus
98} 120}
99# endif 121# endif
100#endif /* _IDNA_H */ 122
123#endif /* IDNA_H */
diff --git a/3rdParty/LibIDN/src/nfkc.c b/3rdParty/LibIDN/src/nfkc.c
index 621f749..4992074 100644
--- a/3rdParty/LibIDN/src/nfkc.c
+++ b/3rdParty/LibIDN/src/nfkc.c
@@ -1,42 +1,43 @@
1/* nfkc.c --- Unicode normalization utilities. 1/* nfkc.c --- Unicode normalization utilities.
2 * Copyright (C) 2002, 2003, 2004, 2006, 2007 Simon Josefsson 2 Copyright (C) 2002-2015 Simon Josefsson
3 * 3
4 * This file is part of GNU Libidn. 4 This file is part of GNU Libidn.
5 * 5
6 * GNU Libidn is free software; you can redistribute it and/or 6 GNU Libidn is free software: you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public 7 modify it under the terms of either:
8 * License as published by the Free Software Foundation; either 8
9 * version 2.1 of the License, or (at your option) any later version. 9 * the GNU Lesser General Public License as published by the Free
10 * 10 Software Foundation; either version 3 of the License, or (at
11 * GNU Libidn is distributed in the hope that it will be useful, 11 your option) any later version.
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 or
14 * Lesser General Public License for more details. 14
15 * 15 * the GNU General Public License as published by the Free
16 * You should have received a copy of the GNU Lesser General Public 16 Software Foundation; either version 2 of the License, or (at
17 * License along with GNU Libidn; if not, write to the Free Software 17 your option) any later version.
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA 18
19 * 19 or both in parallel, as here.
20 */ 20
21 GNU Libidn is distributed in the hope that it will be useful,
22 but WITHOUT ANY WARRANTY; without even the implied warranty of
23 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
24 General Public License for more details.
25
26 You should have received copies of the GNU General Public License and
27 the GNU Lesser General Public License along with this program. If
28 not, see <http://www.gnu.org/licenses/>. */
21 29
22#ifdef HAVE_CONFIG_H 30#ifdef HAVE_CONFIG_H
23# include "config.h" 31#include "config.h"
24#endif 32#endif
25 33
26#include <stdlib.h> 34#include <stdlib.h>
27#include <string.h> 35#include <string.h>
28 36
29#include "stringprep.h" 37#include "stringprep.h"
30 38
31/* This file contains functions from GLIB, including gutf8.c and
32 * gunidecomp.c, all licensed under LGPL and copyright hold by:
33 *
34 * Copyright (C) 1999, 2000 Tom Tromey
35 * Copyright 2000 Red Hat, Inc.
36 */
37
38/* Hacks to make syncing with GLIB code easier. */ 39/* Hacks to make syncing with GLIB code easier. */
39#define gboolean int 40#define gboolean int
40#define gchar char 41#define gchar char
41#define guchar unsigned char 42#define guchar unsigned char
42#define glong long 43#define glong long
@@ -48,33 +49,71 @@
48#define gunichar uint32_t 49#define gunichar uint32_t
49#define gsize size_t 50#define gsize size_t
50#define gssize ssize_t 51#define gssize ssize_t
51#define g_malloc malloc 52#define g_malloc malloc
52#define g_free free 53#define g_free free
53#define GError void 54#define g_return_val_if_fail(expr,val) { \
54#define g_set_error(a,b,c,d) ((void) 0) 55 if (!(expr)) \
55#define g_new(struct_type, n_structs) \ 56 return (val); \
56 ((struct_type *) g_malloc (((gsize) sizeof (struct_type)) * ((gsize) (n_structs)))) 57 }
57# if defined (__GNUC__) && !defined (__STRICT_ANSI__) && !defined (__cplusplus) 58
58# define G_STMT_START (void)( 59/* Code from GLIB gmacros.h starts here. */
59# define G_STMT_END ) 60
60# else 61/* GLIB - Library of useful routines for C programming
61# if (defined (sun) || defined (__sun__)) 62 * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
62# define G_STMT_START if (1) 63 *
63# define G_STMT_END else (void)0 64 * This library is free software; you can redistribute it and/or
64# else 65 * modify it under the terms of the GNU Lesser General Public
65# define G_STMT_START do 66 * License as published by the Free Software Foundation; either
66# define G_STMT_END while (0) 67 * version 2 of the License, or (at your option) any later version.
67# endif 68 *
68# endif 69 * This library is distributed in the hope that it will be useful,
69#define g_return_val_if_fail(expr,val) G_STMT_START{ (void)0; }G_STMT_END 70 * but WITHOUT ANY WARRANTY; without even the implied warranty of
71 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
72 * Lesser General Public License for more details.
73 *
74 * You should have received a copy of the GNU Lesser General Public
75 * License along with this library; if not, write to the
76 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
77 * Boston, MA 02111-1307, USA.
78 */
79
80#ifndef FALSE
81#define FALSE (0)
82#endif
83
84#ifndef TRUE
85#define TRUE (!FALSE)
86#endif
87
70#define G_N_ELEMENTS(arr) (sizeof (arr) / sizeof ((arr)[0])) 88#define G_N_ELEMENTS(arr) (sizeof (arr) / sizeof ((arr)[0]))
71#define TRUE 1 89
72#define FALSE 0 90#define G_UNLIKELY(expr) (expr)
73 91
74/* Code from GLIB gunicode.h starts here. */ 92/* Code from GLIB gunicode.h starts here. */
75 93
94/* gunicode.h - Unicode manipulation functions
95 *
96 * Copyright (C) 1999, 2000 Tom Tromey
97 * Copyright 2000, 2005 Red Hat, Inc.
98 *
99 * The Gnome Library is free software; you can redistribute it and/or
100 * modify it under the terms of the GNU Lesser General Public License as
101 * published by the Free Software Foundation; either version 2 of the
102 * License, or (at your option) any later version.
103 *
104 * The Gnome Library is distributed in the hope that it will be useful,
105 * but WITHOUT ANY WARRANTY; without even the implied warranty of
106 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
107 * Lesser General Public License for more details.
108 *
109 * You should have received a copy of the GNU Lesser General Public
110 * License along with the Gnome Library; see the file COPYING.LIB. If not,
111 * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
112 * Boston, MA 02111-1307, USA.
113 */
114
76typedef enum 115typedef enum
77{ 116{
78 G_NORMALIZE_DEFAULT, 117 G_NORMALIZE_DEFAULT,
79 G_NORMALIZE_NFD = G_NORMALIZE_DEFAULT, 118 G_NORMALIZE_NFD = G_NORMALIZE_DEFAULT,
80 G_NORMALIZE_DEFAULT_COMPOSE, 119 G_NORMALIZE_DEFAULT_COMPOSE,
@@ -84,12 +123,35 @@ typedef enum
84 G_NORMALIZE_ALL_COMPOSE, 123 G_NORMALIZE_ALL_COMPOSE,
85 G_NORMALIZE_NFKC = G_NORMALIZE_ALL_COMPOSE 124 G_NORMALIZE_NFKC = G_NORMALIZE_ALL_COMPOSE
86} 125}
87GNormalizeMode; 126GNormalizeMode;
88 127
128#define g_utf8_next_char(p) ((p) + g_utf8_skip[*(const guchar *)(p)])
129
89/* Code from GLIB gutf8.c starts here. */ 130/* Code from GLIB gutf8.c starts here. */
90 131
132/* gutf8.c - Operations on UTF-8 strings.
133 *
134 * Copyright (C) 1999 Tom Tromey
135 * Copyright (C) 2000 Red Hat, Inc.
136 *
137 * This library is free software; you can redistribute it and/or
138 * modify it under the terms of the GNU Lesser General Public
139 * License as published by the Free Software Foundation; either
140 * version 2 of the License, or (at your option) any later version.
141 *
142 * This library is distributed in the hope that it will be useful,
143 * but WITHOUT ANY WARRANTY; without even the implied warranty of
144 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
145 * Lesser General Public License for more details.
146 *
147 * You should have received a copy of the GNU Lesser General Public
148 * License along with this library; if not, write to the
149 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
150 * Boston, MA 02111-1307, USA.
151 */
152
91#define UTF8_COMPUTE(Char, Mask, Len) \ 153#define UTF8_COMPUTE(Char, Mask, Len) \
92 if (Char < 128) \ 154 if (Char < 128) \
93 { \ 155 { \
94 Len = 1; \ 156 Len = 1; \
95 Mask = 0x7f; \ 157 Mask = 0x7f; \
@@ -127,31 +189,23 @@ GNormalizeMode;
127 ((Char) < 0x800 ? 2 : \ 189 ((Char) < 0x800 ? 2 : \
128 ((Char) < 0x10000 ? 3 : \ 190 ((Char) < 0x10000 ? 3 : \
129 ((Char) < 0x200000 ? 4 : \ 191 ((Char) < 0x200000 ? 4 : \
130 ((Char) < 0x4000000 ? 5 : 6))))) 192 ((Char) < 0x4000000 ? 5 : 6)))))
131 193
132 194#define UTF8_GET(Result, Chars, Count, Mask, Len) \
133#define UTF8_GET(Result, Chars, Count, Mask, Len) \ 195 (Result) = (Chars)[0] & (Mask); \
134 (Result) = (Chars)[0] & (Mask); \ 196 for ((Count) = 1; (Count) < (Len); ++(Count)) \
135 for ((Count) = 1; (Count) < (Len); ++(Count)) \ 197 { \
136 { \ 198 if (((Chars)[(Count)] & 0xc0) != 0x80) \
137 if (((Chars)[(Count)] & 0xc0) != 0x80) \ 199 { \
138 { \ 200 (Result) = -1; \
139 (Result) = -1; \ 201 break; \
140 break; \ 202 } \
141 } \ 203 (Result) <<= 6; \
142 (Result) <<= 6; \ 204 (Result) |= ((Chars)[(Count)] & 0x3f); \
143 (Result) |= ((Chars)[(Count)] & 0x3f); \
144 } 205 }
145 206
146#define UNICODE_VALID(Char) \
147 ((Char) < 0x110000 && \
148 (((Char) & 0xFFFFF800) != 0xD800) && \
149 ((Char) < 0xFDD0 || (Char) > 0xFDEF) && \
150 ((Char) & 0xFFFE) != 0xFFFE)
151
152
153static const gchar utf8_skip_data[256] = { 207static const gchar utf8_skip_data[256] = {
154 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 208 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
155 1, 1, 1, 1, 1, 1, 1, 209 1, 1, 1, 1, 1, 1, 1,
156 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 210 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
157 1, 1, 1, 1, 1, 1, 1, 211 1, 1, 1, 1, 1, 1, 1,
@@ -169,21 +223,20 @@ static const gchar utf8_skip_data[256] = {
169 5, 5, 5, 6, 6, 1, 1 223 5, 5, 5, 6, 6, 1, 1
170}; 224};
171 225
172static const gchar *const g_utf8_skip = utf8_skip_data; 226static const gchar *const g_utf8_skip = utf8_skip_data;
173 227
174#define g_utf8_next_char(p) (char *)((p) + g_utf8_skip[*(guchar *)(p)])
175
176/* 228/*
177 * g_utf8_strlen: 229 * g_utf8_strlen:
178 * @p: pointer to the start of a UTF-8 encoded string. 230 * @p: pointer to the start of a UTF-8 encoded string
179 * @max: the maximum number of bytes to examine. If @max 231 * @max: the maximum number of bytes to examine. If @max
180 * is less than 0, then the string is assumed to be 232 * is less than 0, then the string is assumed to be
181 * nul-terminated. If @max is 0, @p will not be examined and 233 * nul-terminated. If @max is 0, @p will not be examined and
182 * may be %NULL. 234 * may be %NULL.
183 * 235 *
184 * Returns the length of the string in characters. 236 * Computes the length of the string in characters, not including
237 * the terminating nul character.
185 * 238 *
186 * Return value: the length of the string in characters 239 * Return value: the length of the string in characters
187 **/ 240 **/
188static glong 241static glong
189g_utf8_strlen (const gchar * p, gssize max) 242g_utf8_strlen (const gchar * p, gssize max)
@@ -214,11 +267,11 @@ g_utf8_strlen (const gchar * p, gssize max)
214 } 267 }
215 268
216 /* only do the last len increment if we got a complete 269 /* only do the last len increment if we got a complete
217 * char (don't count partial chars) 270 * char (don't count partial chars)
218 */ 271 */
219 if (p - start == max) 272 if (p - start <= max)
220 ++len; 273 ++len;
221 } 274 }
222 275
223 return len; 276 return len;
224} 277}
@@ -250,11 +303,11 @@ g_utf8_get_char (const gchar * p)
250 return result; 303 return result;
251} 304}
252 305
253/* 306/*
254 * g_unichar_to_utf8: 307 * g_unichar_to_utf8:
255 * @c: a ISO10646 character code 308 * @c: a Unicode character code
256 * @outbuf: output buffer, must have at least 6 bytes of space. 309 * @outbuf: output buffer, must have at least 6 bytes of space.
257 * If %NULL, the length will be computed and returned 310 * If %NULL, the length will be computed and returned
258 * and nothing will be written to @outbuf. 311 * and nothing will be written to @outbuf.
259 * 312 *
260 * Converts a single character to UTF-8. 313 * Converts a single character to UTF-8.
@@ -262,10 +315,11 @@ g_utf8_get_char (const gchar * p)
262 * Return value: number of bytes written 315 * Return value: number of bytes written
263 **/ 316 **/
264static int 317static int
265g_unichar_to_utf8 (gunichar c, gchar * outbuf) 318g_unichar_to_utf8 (gunichar c, gchar * outbuf)
266{ 319{
320 /* If this gets modified, also update the copy in g_string_insert_unichar() */
267 guint len = 0; 321 guint len = 0;
268 int first; 322 int first;
269 int i; 323 int i;
270 324
271 if (c < 0x80) 325 if (c < 0x80)
@@ -313,29 +367,29 @@ g_unichar_to_utf8 (gunichar c, gchar * outbuf)
313} 367}
314 368
315/* 369/*
316 * g_utf8_to_ucs4_fast: 370 * g_utf8_to_ucs4_fast:
317 * @str: a UTF-8 encoded string 371 * @str: a UTF-8 encoded string
318 * @len: the maximum length of @str to use. If @len < 0, then 372 * @len: the maximum length of @str to use, in bytes. If @len < 0,
319 * the string is nul-terminated. 373 * then the string is nul-terminated.
320 * @items_written: location to store the number of characters in the 374 * @items_written: location to store the number of characters in the
321 * result, or %NULL. 375 * result, or %NULL.
322 * 376 *
323 * Convert a string from UTF-8 to a 32-bit fixed width 377 * Convert a string from UTF-8 to a 32-bit fixed width
324 * representation as UCS-4, assuming valid UTF-8 input. 378 * representation as UCS-4, assuming valid UTF-8 input.
325 * This function is roughly twice as fast as g_utf8_to_ucs4() 379 * This function is roughly twice as fast as g_utf8_to_ucs4()
326 * but does no error checking on the input. 380 * but does no error checking on the input. A trailing 0 character
381 * will be added to the string after the converted text.
327 * 382 *
328 * Return value: a pointer to a newly allocated UCS-4 string. 383 * Return value: a pointer to a newly allocated UCS-4 string.
329 * This value must be freed with g_free(). 384 * This value must be freed with g_free().
330 **/ 385 **/
331static gunichar * 386static gunichar *
332g_utf8_to_ucs4_fast (const gchar * str, glong len, glong * items_written) 387g_utf8_to_ucs4_fast (const gchar * str, glong len, glong * items_written)
333{ 388{
334 gint j, charlen;
335 gunichar *result; 389 gunichar *result;
336 gint n_chars, i; 390 gsize n_chars, i;
337 const gchar *p; 391 const gchar *p;
338 392
339 g_return_val_if_fail (str != NULL, NULL); 393 g_return_val_if_fail (str != NULL, NULL);
340 394
341 p = str; 395 p = str;
@@ -355,60 +409,48 @@ g_utf8_to_ucs4_fast (const gchar * str, glong len, glong * items_written)
355 p = g_utf8_next_char (p); 409 p = g_utf8_next_char (p);
356 ++n_chars; 410 ++n_chars;
357 } 411 }
358 } 412 }
359 413
360 result = g_new (gunichar, n_chars + 1); 414 result = g_malloc (sizeof (gunichar) * (n_chars + 1));
361 if (!result) 415 if (!result)
362 return NULL; 416 return NULL;
363 417
364 p = str; 418 p = str;
365 for (i = 0; i < n_chars; i++) 419 for (i = 0; i < n_chars; i++)
366 { 420 {
367 gunichar wc = ((unsigned char *) p)[0]; 421 gunichar wc = (guchar) * p++;
368 422
369 if (wc < 0x80) 423 if (wc < 0x80)
370 { 424 {
371 result[i] = wc; 425 result[i] = wc;
372 p++;
373 } 426 }
374 else 427 else
375 { 428 {
376 if (wc < 0xe0) 429 gunichar mask = 0x40;
377 { 430
378 charlen = 2; 431 if (G_UNLIKELY ((wc & mask) == 0))
379 wc &= 0x1f;
380 }
381 else if (wc < 0xf0)
382 {
383 charlen = 3;
384 wc &= 0x0f;
385 }
386 else if (wc < 0xf8)
387 {
388 charlen = 4;
389 wc &= 0x07;
390 }
391 else if (wc < 0xfc)
392 {
393 charlen = 5;
394 wc &= 0x03;
395 }
396 else
397 { 432 {
398 charlen = 6; 433 /* It's an out-of-sequence 10xxxxxxx byte.
399 wc &= 0x01; 434 * Rather than making an ugly hash of this and the next byte
435 * and overrunning the buffer, it's more useful to treat it
436 * with a replacement character */
437 result[i] = 0xfffd;
438 continue;
400 } 439 }
401 440
402 for (j = 1; j < charlen; j++) 441 do
403 { 442 {
404 wc <<= 6; 443 wc <<= 6;
405 wc |= ((unsigned char *) p)[j] & 0x3f; 444 wc |= (guchar) (*p++) & 0x3f;
445 mask <<= 5;
406 } 446 }
447 while ((wc & mask) != 0);
448
449 wc &= mask - 1;
407 450
408 result[i] = wc; 451 result[i] = wc;
409 p += charlen;
410 } 452 }
411 } 453 }
412 result[i] = 0; 454 result[i] = 0;
413 455
414 if (items_written) 456 if (items_written)
@@ -418,32 +460,34 @@ g_utf8_to_ucs4_fast (const gchar * str, glong len, glong * items_written)
418} 460}
419 461
420/* 462/*
421 * g_ucs4_to_utf8: 463 * g_ucs4_to_utf8:
422 * @str: a UCS-4 encoded string 464 * @str: a UCS-4 encoded string
423 * @len: the maximum length of @str to use. If @len < 0, then 465 * @len: the maximum length (number of characters) of @str to use.
424 * the string is terminated with a 0 character. 466 * If @len < 0, then the string is nul-terminated.
425 * @items_read: location to store number of characters read read, or %NULL. 467 * @items_read: location to store number of characters read, or %NULL.
426 * @items_written: location to store number of bytes written or %NULL. 468 * @items_written: location to store number of bytes written or %NULL.
427 * The value here stored does not include the trailing 0 469 * The value here stored does not include the trailing 0
428 * byte. 470 * byte.
429 * @error: location to store the error occuring, or %NULL to ignore 471 * @error: location to store the error occurring, or %NULL to ignore
430 * errors. Any of the errors in #GConvertError other than 472 * errors. Any of the errors in #GConvertError other than
431 * %G_CONVERT_ERROR_NO_CONVERSION may occur. 473 * %G_CONVERT_ERROR_NO_CONVERSION may occur.
432 * 474 *
433 * Convert a string from a 32-bit fixed width representation as UCS-4. 475 * Convert a string from a 32-bit fixed width representation as UCS-4.
434 * to UTF-8. The result will be terminated with a 0 byte. 476 * to UTF-8. The result will be terminated with a 0 byte.
435 * 477 *
436 * Return value: a pointer to a newly allocated UTF-8 string. 478 * Return value: a pointer to a newly allocated UTF-8 string.
437 * This value must be freed with g_free(). If an 479 * This value must be freed with g_free(). If an
438 * error occurs, %NULL will be returned and 480 * error occurs, %NULL will be returned and
439 * @error set. 481 * @error set. In that case, @items_read will be
482 * set to the position of the first invalid input
483 * character.
440 **/ 484 **/
441static gchar * 485static gchar *
442g_ucs4_to_utf8 (const gunichar * str, 486g_ucs4_to_utf8 (const gunichar * str,
443 glong len, 487 glong len,
444 glong * items_read, glong * items_written, GError ** error) 488 glong * items_read, glong * items_written)
445{ 489{
446 gint result_length; 490 gint result_length;
447 gchar *result = NULL; 491 gchar *result = NULL;
448 gchar *p; 492 gchar *p;
449 gint i; 493 gint i;
@@ -453,19 +497,11 @@ g_ucs4_to_utf8 (const gunichar * str,
453 { 497 {
454 if (!str[i]) 498 if (!str[i])
455 break; 499 break;
456 500
457 if (str[i] >= 0x80000000) 501 if (str[i] >= 0x80000000)
458 { 502 goto err_out;
459 if (items_read)
460 *items_read = i;
461
462 g_set_error (error, G_CONVERT_ERROR,
463 G_CONVERT_ERROR_ILLEGAL_SEQUENCE,
464 _("Character out of range for UTF-8"));
465 goto err_out;
466 }
467 503
468 result_length += UTF8_LENGTH (str[i]); 504 result_length += UTF8_LENGTH (str[i]);
469 } 505 }
470 506
471 result = g_malloc (result_length + 1); 507 result = g_malloc (result_length + 1);
@@ -489,28 +525,49 @@ err_out:
489 return result; 525 return result;
490} 526}
491 527
492/* Code from GLIB gunidecomp.c starts here. */ 528/* Code from GLIB gunidecomp.c starts here. */
493 529
530/* decomp.c - Character decomposition.
531 *
532 * Copyright (C) 1999, 2000 Tom Tromey
533 * Copyright 2000 Red Hat, Inc.
534 *
535 * The Gnome Library is free software; you can redistribute it and/or
536 * modify it under the terms of the GNU Lesser General Public License as
537 * published by the Free Software Foundation; either version 2 of the
538 * License, or (at your option) any later version.
539 *
540 * The Gnome Library is distributed in the hope that it will be useful,
541 * but WITHOUT ANY WARRANTY; without even the implied warranty of
542 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
543 * Lesser General Public License for more details.
544 *
545 * You should have received a copy of the GNU Lesser General Public
546 * License along with the Gnome Library; see the file COPYING.LIB. If not,
547 * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
548 * Boston, MA 02111-1307, USA.
549 */
550
494#include "gunidecomp.h" 551#include "gunidecomp.h"
495#include "gunicomp.h" 552#include "gunicomp.h"
496 553
497#define CC_PART1(Page, Char) \ 554#define CC_PART1(Page, Char) \
498 ((combining_class_table_part1[Page] >= G_UNICODE_MAX_TABLE_INDEX) \ 555 ((combining_class_table_part1[Page] >= G_UNICODE_MAX_TABLE_INDEX) \
499 ? (combining_class_table_part1[Page] - G_UNICODE_MAX_TABLE_INDEX) \ 556 ? (combining_class_table_part1[Page] - G_UNICODE_MAX_TABLE_INDEX) \
500 : (cclass_data[combining_class_table_part1[Page]][Char])) 557 : (cclass_data[combining_class_table_part1[Page]][Char]))
501 558
502#define CC_PART2(Page, Char) \ 559#define CC_PART2(Page, Char) \
503 ((combining_class_table_part2[Page] >= G_UNICODE_MAX_TABLE_INDEX) \ 560 ((combining_class_table_part2[Page] >= G_UNICODE_MAX_TABLE_INDEX) \
504 ? (combining_class_table_part2[Page] - G_UNICODE_MAX_TABLE_INDEX) \ 561 ? (combining_class_table_part2[Page] - G_UNICODE_MAX_TABLE_INDEX) \
505 : (cclass_data[combining_class_table_part2[Page]][Char])) 562 : (cclass_data[combining_class_table_part2[Page]][Char]))
506 563
507#define COMBINING_CLASS(Char) \ 564#define COMBINING_CLASS(Char) \
508 (((Char) <= G_UNICODE_LAST_CHAR_PART1) \ 565 (((Char) <= G_UNICODE_LAST_CHAR_PART1) \
509 ? CC_PART1 ((Char) >> 8, (Char) & 0xff) \ 566 ? CC_PART1 ((Char) >> 8, (Char) & 0xff) \
510 : (((Char) >= 0xe0000 && (Char) <= G_UNICODE_LAST_CHAR) \ 567 : (((Char) >= 0xe0000 && (Char) <= G_UNICODE_LAST_CHAR) \
511 ? CC_PART2 (((Char) - 0xe0000) >> 8, (Char) & 0xff) \ 568 ? CC_PART2 (((Char) - 0xe0000) >> 8, (Char) & 0xff) \
512 : 0)) 569 : 0))
513 570
514/* constants for hangul syllable [de]composition */ 571/* constants for hangul syllable [de]composition */
515#define SBase 0xAC00 572#define SBase 0xAC00
516#define LBase 0x1100 573#define LBase 0x1100
@@ -575,39 +632,26 @@ g_unicode_canonical_ordering (gunichar * string, gsize len)
575 * characters will always be big enough. */ 632 * characters will always be big enough. */
576static void 633static void
577decompose_hangul (gunichar s, gunichar * r, gsize * result_len) 634decompose_hangul (gunichar s, gunichar * r, gsize * result_len)
578{ 635{
579 gint SIndex = s - SBase; 636 gint SIndex = s - SBase;
637 gint TIndex = SIndex % TCount;
580 638
581 /* not a hangul syllable */ 639 if (r)
582 if (SIndex < 0 || SIndex >= SCount)
583 { 640 {
584 if (r) 641 r[0] = LBase + SIndex / NCount;
585 r[0] = s; 642 r[1] = VBase + (SIndex % NCount) / TCount;
586 *result_len = 1;
587 } 643 }
588 else
589 {
590 gunichar L = LBase + SIndex / NCount;
591 gunichar V = VBase + (SIndex % NCount) / TCount;
592 gunichar T = TBase + SIndex % TCount;
593 644
645 if (TIndex)
646 {
594 if (r) 647 if (r)
595 { 648 r[2] = TBase + TIndex;
596 r[0] = L; 649 *result_len = 3;
597 r[1] = V;
598 }
599
600 if (T != TBase)
601 {
602 if (r)
603 r[2] = T;
604 *result_len = 3;
605 }
606 else
607 *result_len = 2;
608 } 650 }
651 else
652 *result_len = 2;
609} 653}
610 654
611/* returns a pointer to a null-terminated UTF-8 string */ 655/* returns a pointer to a null-terminated UTF-8 string */
612static const gchar * 656static const gchar *
613find_decomposition (gunichar ch, gboolean compat) 657find_decomposition (gunichar ch, gboolean compat)
@@ -665,26 +709,26 @@ combine_hangul (gunichar a, gunichar b, gunichar * result)
665 { 709 {
666 *result = SBase + (LIndex * VCount + VIndex) * TCount; 710 *result = SBase + (LIndex * VCount + VIndex) * TCount;
667 return TRUE; 711 return TRUE;
668 } 712 }
669 else if (0 <= SIndex && SIndex < SCount && (SIndex % TCount) == 0 713 else if (0 <= SIndex && SIndex < SCount && (SIndex % TCount) == 0
670 && 0 <= TIndex && TIndex <= TCount) 714 && 0 < TIndex && TIndex < TCount)
671 { 715 {
672 *result = a + TIndex; 716 *result = a + TIndex;
673 return TRUE; 717 return TRUE;
674 } 718 }
675 719
676 return FALSE; 720 return FALSE;
677} 721}
678 722
679#define CI(Page, Char) \ 723#define CI(Page, Char) \
680 ((compose_table[Page] >= G_UNICODE_MAX_TABLE_INDEX) \ 724 ((compose_table[Page] >= G_UNICODE_MAX_TABLE_INDEX) \
681 ? (compose_table[Page] - G_UNICODE_MAX_TABLE_INDEX) \ 725 ? (compose_table[Page] - G_UNICODE_MAX_TABLE_INDEX) \
682 : (compose_data[compose_table[Page]][Char])) 726 : (compose_data[compose_table[Page]][Char]))
683 727
684#define COMPOSE_INDEX(Char) \ 728#define COMPOSE_INDEX(Char) \
685 ((((Char) >> 8) > (COMPOSE_TABLE_LAST)) ? 0 : CI((Char) >> 8, (Char) & 0xff)) 729 (((Char >> 8) > (COMPOSE_TABLE_LAST)) ? 0 : CI((Char) >> 8, (Char) & 0xff))
686 730
687static gboolean 731static gboolean
688combine (gunichar a, gunichar b, gunichar * result) 732combine (gunichar a, gunichar b, gunichar * result)
689{ 733{
690 gushort index_a, index_b; 734 gushort index_a, index_b;
@@ -754,11 +798,11 @@ _g_utf8_normalize_wc (const gchar * str, gssize max_len, GNormalizeMode mode)
754 while ((max_len < 0 || p < str + max_len) && *p) 798 while ((max_len < 0 || p < str + max_len) && *p)
755 { 799 {
756 const gchar *decomp; 800 const gchar *decomp;
757 gunichar wc = g_utf8_get_char (p); 801 gunichar wc = g_utf8_get_char (p);
758 802
759 if (wc >= 0xac00 && wc <= 0xd7af) 803 if (wc >= SBase && wc < SBase + SCount)
760 { 804 {
761 gsize result_len; 805 gsize result_len;
762 decompose_hangul (wc, NULL, &result_len); 806 decompose_hangul (wc, NULL, &result_len);
763 n_wc += result_len; 807 n_wc += result_len;
764 } 808 }
@@ -773,11 +817,11 @@ _g_utf8_normalize_wc (const gchar * str, gssize max_len, GNormalizeMode mode)
773 } 817 }
774 818
775 p = g_utf8_next_char (p); 819 p = g_utf8_next_char (p);
776 } 820 }
777 821
778 wc_buffer = g_new (gunichar, n_wc + 1); 822 wc_buffer = g_malloc (sizeof (gunichar) * (n_wc + 1));
779 if (!wc_buffer) 823 if (!wc_buffer)
780 return NULL; 824 return NULL;
781 825
782 last_start = 0; 826 last_start = 0;
783 n_wc = 0; 827 n_wc = 0;
@@ -787,11 +831,11 @@ _g_utf8_normalize_wc (const gchar * str, gssize max_len, GNormalizeMode mode)
787 gunichar wc = g_utf8_get_char (p); 831 gunichar wc = g_utf8_get_char (p);
788 const gchar *decomp; 832 const gchar *decomp;
789 int cc; 833 int cc;
790 gsize old_n_wc = n_wc; 834 gsize old_n_wc = n_wc;
791 835
792 if (wc >= 0xac00 && wc <= 0xd7af) 836 if (wc >= SBase && wc < SBase + SCount)
793 { 837 {
794 gsize result_len; 838 gsize result_len;
795 decompose_hangul (wc, wc_buffer + n_wc, &result_len); 839 decompose_hangul (wc, wc_buffer + n_wc, &result_len);
796 n_wc += result_len; 840 n_wc += result_len;
797 } 841 }
@@ -826,11 +870,11 @@ _g_utf8_normalize_wc (const gchar * str, gssize max_len, GNormalizeMode mode)
826 870
827 if (n_wc > 0) 871 if (n_wc > 0)
828 { 872 {
829 g_unicode_canonical_ordering (wc_buffer + last_start, 873 g_unicode_canonical_ordering (wc_buffer + last_start,
830 n_wc - last_start); 874 n_wc - last_start);
831 last_start = n_wc; 875 // dead assignment: last_start = n_wc;
832 } 876 }
833 877
834 wc_buffer[n_wc] = 0; 878 wc_buffer[n_wc] = 0;
835 879
836 /* All decomposed and reordered */ 880 /* All decomposed and reordered */
@@ -882,53 +926,53 @@ _g_utf8_normalize_wc (const gchar * str, gssize max_len, GNormalizeMode mode)
882 * @mode: the type of normalization to perform. 926 * @mode: the type of normalization to perform.
883 * 927 *
884 * Converts a string into canonical form, standardizing 928 * Converts a string into canonical form, standardizing
885 * such issues as whether a character with an accent 929 * such issues as whether a character with an accent
886 * is represented as a base character and combining 930 * is represented as a base character and combining
887 * accent or as a single precomposed character. You 931 * accent or as a single precomposed character. The
888 * should generally call g_utf8_normalize() before 932 * string has to be valid UTF-8, otherwise %NULL is
889 * comparing two Unicode strings. 933 * returned. You should generally call g_utf8_normalize()
934 * before comparing two Unicode strings.
890 * 935 *
891 * The normalization mode %G_NORMALIZE_DEFAULT only 936 * The normalization mode %G_NORMALIZE_DEFAULT only
892 * standardizes differences that do not affect the 937 * standardizes differences that do not affect the
893 * text content, such as the above-mentioned accent 938 * text content, such as the above-mentioned accent
894 * representation. %G_NORMALIZE_ALL also standardizes 939 * representation. %G_NORMALIZE_ALL also standardizes
895 * the "compatibility" characters in Unicode, such 940 * the "compatibility" characters in Unicode, such
896 * as SUPERSCRIPT THREE to the standard forms 941 * as SUPERSCRIPT THREE to the standard forms
897 * (in this case DIGIT THREE). Formatting information 942 * (in this case DIGIT THREE). Formatting information
898 * may be lost but for most text operations such 943 * may be lost but for most text operations such
899 * characters should be considered the same. 944 * characters should be considered the same.
900 * For example, g_utf8_collate() normalizes
901 * with %G_NORMALIZE_ALL as its first step.
902 * 945 *
903 * %G_NORMALIZE_DEFAULT_COMPOSE and %G_NORMALIZE_ALL_COMPOSE 946 * %G_NORMALIZE_DEFAULT_COMPOSE and %G_NORMALIZE_ALL_COMPOSE
904 * are like %G_NORMALIZE_DEFAULT and %G_NORMALIZE_ALL, 947 * are like %G_NORMALIZE_DEFAULT and %G_NORMALIZE_ALL,
905 * but returned a result with composed forms rather 948 * but returned a result with composed forms rather
906 * than a maximally decomposed form. This is often 949 * than a maximally decomposed form. This is often
907 * useful if you intend to convert the string to 950 * useful if you intend to convert the string to
908 * a legacy encoding or pass it to a system with 951 * a legacy encoding or pass it to a system with
909 * less capable Unicode handling. 952 * less capable Unicode handling.
910 * 953 *
911 * Return value: a newly allocated string, that is the 954 * Return value: a newly allocated string, that is the
912 * normalized form of @str. 955 * normalized form of @str, or %NULL if @str is not
956 * valid UTF-8.
913 **/ 957 **/
914static gchar * 958static gchar *
915g_utf8_normalize (const gchar * str, gssize len, GNormalizeMode mode) 959g_utf8_normalize (const gchar * str, gssize len, GNormalizeMode mode)
916{ 960{
917 gunichar *result_wc = _g_utf8_normalize_wc (str, len, mode); 961 gunichar *result_wc = _g_utf8_normalize_wc (str, len, mode);
918 gchar *result; 962 gchar *result;
919 963
920 result = g_ucs4_to_utf8 (result_wc, -1, NULL, NULL, NULL); 964 result = g_ucs4_to_utf8 (result_wc, -1, NULL, NULL);
921 g_free (result_wc); 965 g_free (result_wc);
922 966
923 return result; 967 return result;
924} 968}
925 969
926/* Public Libidn API starts here. */ 970/* Public Libidn API starts here. */
927 971
928/** 972/**
929 * stringprep_utf8_to_unichar - convert UTF-8 to Unicode code point 973 * stringprep_utf8_to_unichar:
930 * @p: a pointer to Unicode character encoded as UTF-8 974 * @p: a pointer to Unicode character encoded as UTF-8
931 * 975 *
932 * Converts a sequence of bytes encoded as UTF-8 to a Unicode character. 976 * Converts a sequence of bytes encoded as UTF-8 to a Unicode character.
933 * If @p does not point to a valid UTF-8 encoded character, results are 977 * If @p does not point to a valid UTF-8 encoded character, results are
934 * undefined. 978 * undefined.
@@ -940,11 +984,11 @@ stringprep_utf8_to_unichar (const char *p)
940{ 984{
941 return g_utf8_get_char (p); 985 return g_utf8_get_char (p);
942} 986}
943 987
944/** 988/**
945 * stringprep_unichar_to_utf8 - convert Unicode code point to UTF-8 989 * stringprep_unichar_to_utf8:
946 * @c: a ISO10646 character code 990 * @c: a ISO10646 character code
947 * @outbuf: output buffer, must have at least 6 bytes of space. 991 * @outbuf: output buffer, must have at least 6 bytes of space.
948 * If %NULL, the length will be computed and returned 992 * If %NULL, the length will be computed and returned
949 * and nothing will be written to @outbuf. 993 * and nothing will be written to @outbuf.
950 * 994 *
@@ -956,33 +1000,46 @@ int
956stringprep_unichar_to_utf8 (uint32_t c, char *outbuf) 1000stringprep_unichar_to_utf8 (uint32_t c, char *outbuf)
957{ 1001{
958 return g_unichar_to_utf8 (c, outbuf); 1002 return g_unichar_to_utf8 (c, outbuf);
959} 1003}
960 1004
1005#include <unistr.h>
1006
961/** 1007/**
962 * stringprep_utf8_to_ucs4 - convert UTF-8 string to UCS-4 1008 * stringprep_utf8_to_ucs4:
963 * @str: a UTF-8 encoded string 1009 * @str: a UTF-8 encoded string
964 * @len: the maximum length of @str to use. If @len < 0, then 1010 * @len: the maximum length of @str to use. If @len < 0, then
965 * the string is nul-terminated. 1011 * the string is nul-terminated.
966 * @items_written: location to store the number of characters in the 1012 * @items_written: location to store the number of characters in the
967 * result, or %NULL. 1013 * result, or %NULL.
968 * 1014 *
969 * Convert a string from UTF-8 to a 32-bit fixed width 1015 * Convert a string from UTF-8 to a 32-bit fixed width representation
970 * representation as UCS-4, assuming valid UTF-8 input. 1016 * as UCS-4. The function now performs error checking to verify that
971 * This function does no error checking on the input. 1017 * the input is valid UTF-8 (before it was documented to not do error
1018 * checking).
972 * 1019 *
973 * Return value: a pointer to a newly allocated UCS-4 string. 1020 * Return value: a pointer to a newly allocated UCS-4 string.
974 * This value must be freed with free(). 1021 * This value must be deallocated by the caller.
975 **/ 1022 **/
976uint32_t * 1023uint32_t *
977stringprep_utf8_to_ucs4 (const char *str, ssize_t len, size_t * items_written) 1024stringprep_utf8_to_ucs4 (const char *str, ssize_t len, size_t * items_written)
978{ 1025{
1026 size_t n;
1027
1028 if (len < 0)
1029 n = strlen (str);
1030 else
1031 n = len;
1032
1033 if (u8_check ((const uint8_t *) str, n))
1034 return NULL;
1035
979 return g_utf8_to_ucs4_fast (str, (glong) len, (glong *) items_written); 1036 return g_utf8_to_ucs4_fast (str, (glong) len, (glong *) items_written);
980} 1037}
981 1038
982/** 1039/**
983 * stringprep_ucs4_to_utf8 - convert UCS-4 string to UTF-8 1040 * stringprep_ucs4_to_utf8:
984 * @str: a UCS-4 encoded string 1041 * @str: a UCS-4 encoded string
985 * @len: the maximum length of @str to use. If @len < 0, then 1042 * @len: the maximum length of @str to use. If @len < 0, then
986 * the string is terminated with a 0 character. 1043 * the string is terminated with a 0 character.
987 * @items_read: location to store number of characters read read, or %NULL. 1044 * @items_read: location to store number of characters read read, or %NULL.
988 * @items_written: location to store number of bytes written or %NULL. 1045 * @items_written: location to store number of bytes written or %NULL.
@@ -991,24 +1048,23 @@ stringprep_utf8_to_ucs4 (const char *str, ssize_t len, size_t * items_written)
991 * 1048 *
992 * Convert a string from a 32-bit fixed width representation as UCS-4. 1049 * Convert a string from a 32-bit fixed width representation as UCS-4.
993 * to UTF-8. The result will be terminated with a 0 byte. 1050 * to UTF-8. The result will be terminated with a 0 byte.
994 * 1051 *
995 * Return value: a pointer to a newly allocated UTF-8 string. 1052 * Return value: a pointer to a newly allocated UTF-8 string.
996 * This value must be freed with free(). If an 1053 * This value must be deallocated by the caller.
997 * error occurs, %NULL will be returned and 1054 * If an error occurs, %NULL will be returned.
998 * @error set.
999 **/ 1055 **/
1000char * 1056char *
1001stringprep_ucs4_to_utf8 (const uint32_t * str, ssize_t len, 1057stringprep_ucs4_to_utf8 (const uint32_t * str, ssize_t len,
1002 size_t * items_read, size_t * items_written) 1058 size_t * items_read, size_t * items_written)
1003{ 1059{
1004 return g_ucs4_to_utf8 (str, len, (glong *) items_read, 1060 return g_ucs4_to_utf8 (str, len, (glong *) items_read,
1005 (glong *) items_written, NULL); 1061 (glong *) items_written);
1006} 1062}
1007 1063
1008/** 1064/**
1009 * stringprep_utf8_nfkc_normalize - normalize Unicode string 1065 * stringprep_utf8_nfkc_normalize:
1010 * @str: a UTF-8 encoded string. 1066 * @str: a UTF-8 encoded string.
1011 * @len: length of @str, in bytes, or -1 if @str is nul-terminated. 1067 * @len: length of @str, in bytes, or -1 if @str is nul-terminated.
1012 * 1068 *
1013 * Converts a string into canonical form, standardizing 1069 * Converts a string into canonical form, standardizing
1014 * such issues as whether a character with an accent 1070 * such issues as whether a character with an accent
@@ -1032,22 +1088,22 @@ stringprep_utf8_nfkc_normalize (const char *str, ssize_t len)
1032{ 1088{
1033 return g_utf8_normalize (str, len, G_NORMALIZE_NFKC); 1089 return g_utf8_normalize (str, len, G_NORMALIZE_NFKC);
1034} 1090}
1035 1091
1036/** 1092/**
1037 * stringprep_ucs4_nfkc_normalize - normalize Unicode string 1093 * stringprep_ucs4_nfkc_normalize:
1038 * @str: a Unicode string. 1094 * @str: a Unicode string.
1039 * @len: length of @str array, or -1 if @str is nul-terminated. 1095 * @len: length of @str array, or -1 if @str is nul-terminated.
1040 * 1096 *
1041 * Converts UCS4 string into UTF-8 and runs 1097 * Converts a UCS4 string into canonical form, see
1042 * stringprep_utf8_nfkc_normalize(). 1098 * stringprep_utf8_nfkc_normalize() for more information.
1043 * 1099 *
1044 * Return value: a newly allocated Unicode string, that is the NFKC 1100 * Return value: a newly allocated Unicode string, that is the NFKC
1045 * normalized form of @str. 1101 * normalized form of @str.
1046 **/ 1102 **/
1047uint32_t * 1103uint32_t *
1048stringprep_ucs4_nfkc_normalize (uint32_t * str, ssize_t len) 1104stringprep_ucs4_nfkc_normalize (const uint32_t * str, ssize_t len)
1049{ 1105{
1050 char *p; 1106 char *p;
1051 uint32_t *result_wc; 1107 uint32_t *result_wc;
1052 1108
1053 p = stringprep_ucs4_to_utf8 (str, len, 0, 0); 1109 p = stringprep_ucs4_to_utf8 (str, len, 0, 0);
diff --git a/3rdParty/LibIDN/src/profiles.c b/3rdParty/LibIDN/src/profiles.c
index f59305f..66c209a 100644
--- a/3rdParty/LibIDN/src/profiles.c
+++ b/3rdParty/LibIDN/src/profiles.c
@@ -1,26 +1,35 @@
1/* profiles.c --- Definitions of stringprep profiles. 1/* profiles.c --- Definitions of stringprep profiles.
2 * Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Simon Josefsson 2 Copyright (C) 2002-2015 Simon Josefsson
3 *
4 * This file is part of GNU Libidn.
5 *
6 * GNU Libidn is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
10 *
11 * GNU Libidn is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with GNU Libidn; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
19 *
20 */
21 3
4 This file is part of GNU Libidn.
5
6 GNU Libidn is free software: you can redistribute it and/or
7 modify it under the terms of either:
8
9 * the GNU Lesser General Public License as published by the Free
10 Software Foundation; either version 3 of the License, or (at
11 your option) any later version.
12
13 or
14
15 * the GNU General Public License as published by the Free
16 Software Foundation; either version 2 of the License, or (at
17 your option) any later version.
18
19 or both in parallel, as here.
20
21 GNU Libidn is distributed in the hope that it will be useful,
22 but WITHOUT ANY WARRANTY; without even the implied warranty of
23 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
24 General Public License for more details.
25
26 You should have received copies of the GNU General Public License and
27 the GNU Lesser General Public License along with this program. If
28 not, see <http://www.gnu.org/licenses/>. */
29
30#include <config.h>
22#include "stringprep.h" 31#include "stringprep.h"
23 32
24const Stringprep_profiles stringprep_profiles[] = { 33const Stringprep_profiles stringprep_profiles[] = {
25 {"Nameprep", stringprep_nameprep}, 34 {"Nameprep", stringprep_nameprep},
26 {"KRBprep", stringprep_kerberos5}, /* Deprecate? */ 35 {"KRBprep", stringprep_kerberos5}, /* Deprecate? */
diff --git a/3rdParty/LibIDN/src/punycode.c b/3rdParty/LibIDN/src/punycode.c
index 36ffee0..166569b 100644
--- a/3rdParty/LibIDN/src/punycode.c
+++ b/3rdParty/LibIDN/src/punycode.c
@@ -1,66 +1,74 @@
1/* punycode.c --- Implementation of punycode used to ASCII encode IDN's. 1/* punycode.c --- Implementation of punycode used to ASCII encode IDN's.
2 * Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Simon Josefsson 2 Copyright (C) 2002-2015 Simon Josefsson
3 * 3
4 * This file is part of GNU Libidn. 4 This file is part of GNU Libidn.
5
6 GNU Libidn is free software: you can redistribute it and/or
7 modify it under the terms of either:
8
9 * the GNU Lesser General Public License as published by the Free
10 Software Foundation; either version 3 of the License, or (at
11 your option) any later version.
12
13 or
14
15 * the GNU General Public License as published by the Free
16 Software Foundation; either version 2 of the License, or (at
17 your option) any later version.
18
19 or both in parallel, as here.
20
21 GNU Libidn is distributed in the hope that it will be useful,
22 but WITHOUT ANY WARRANTY; without even the implied warranty of
23 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
24 General Public License for more details.
25
26 You should have received copies of the GNU General Public License and
27 the GNU Lesser General Public License along with this program. If
28 not, see <http://www.gnu.org/licenses/>. */
29
30/*
31 * This file is derived from RFC 3492bis written by Adam M. Costello,
32 * downloaded from http://www.nicemice.net/idn/punycode-spec.gz on
33 * 2015-03-02 with SHA1 a966a8017f6be579d74a50a226accc7607c40133, a
34 * copy of which is stored in the GNU Libidn version controlled
35 * repository under doc/specification/punycode-spec.gz.
5 * 36 *
6 * GNU Libidn is free software; you can redistribute it and/or 37 * The changes compared to Adam's file include: re-indentation, adding
7 * modify it under the terms of the GNU Lesser General Public 38 * the license boilerplate and this comment, #include of config.h and
8 * License as published by the Free Software Foundation; either 39 * punycode.h, adding GTK-DOC comments, changing the return code of
9 * version 2.1 of the License, or (at your option) any later version. 40 * punycode_encode and punycode_decode from enum to int, renaming the
41 * input_length_orig function input variable to input_length (and
42 * renaming the internal input_length variable to input_len) in
43 * punycode_encode.
10 * 44 *
11 * GNU Libidn is distributed in the hope that it will be useful, 45 * Adam's file contains the following:
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 * 46 *
16 * You should have received a copy of the GNU Lesser General Public 47 * punycode-sample.c 2.0.0 (2004-Mar-21-Sun)
17 * License along with GNU Libidn; if not, write to the Free Software 48 * http://www.nicemice.net/idn/
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA 49 * Adam M. Costello
50 * http://www.nicemice.net/amc/
19 * 51 *
20 */ 52 * This is ANSI C code (C89) implementing Punycode 1.0.x.
21
22/*
23 * This file is derived from RFC 3492bis written by Adam M. Costello.
24 * 53 *
25 * Disclaimer and license: Regarding this entire document or any 54 * Disclaimer and license: Regarding this entire document or any
26 * portion of it (including the pseudocode and C code), the author 55 * portion of it (including the pseudocode and C code), the author
27 * makes no guarantees and is not responsible for any damage resulting 56 * makes no guarantees and is not responsible for any damage resulting
28 * from its use. The author grants irrevocable permission to anyone 57 * from its use. The author grants irrevocable permission to anyone
29 * to use, modify, and distribute it in any way that does not diminish 58 * to use, modify, and distribute it in any way that does not diminish
30 * the rights of anyone else to use, modify, and distribute it, 59 * the rights of anyone else to use, modify, and distribute it,
31 * provided that redistributed derivative works do not contain 60 * provided that redistributed derivative works do not contain
32 * misleading author or version information. Derivative works need 61 * misleading author or version information. Derivative works need
33 * not be licensed under similar terms. 62 * not be licensed under similar terms.
34 *
35 * Copyright (C) The Internet Society (2003). All Rights Reserved.
36 *
37 * This document and translations of it may be copied and furnished to
38 * others, and derivative works that comment on or otherwise explain it
39 * or assist in its implementation may be prepared, copied, published
40 * and distributed, in whole or in part, without restriction of any
41 * kind, provided that the above copyright notice and this paragraph are
42 * included on all such copies and derivative works. However, this
43 * document itself may not be modified in any way, such as by removing
44 * the copyright notice or references to the Internet Society or other
45 * Internet organizations, except as needed for the purpose of
46 * developing Internet standards in which case the procedures for
47 * copyrights defined in the Internet Standards process must be
48 * followed, or as required to translate it into languages other than
49 * English.
50 *
51 * The limited permissions granted above are perpetual and will not be
52 * revoked by the Internet Society or its successors or assigns.
53 *
54 * This document and the information contained herein is provided on an
55 * "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
56 * TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
57 * BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
58 * HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
59 * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
60 */ 63 */
61 64
65#include <config.h>
66
67/**********************************************************/
68/* Implementation (would normally go in its own .c file): */
69
62#include <string.h> 70#include <string.h>
63 71
64#include "punycode.h" 72#include "punycode.h"
65 73
66/*** Bootstring parameters for Punycode ***/ 74/*** Bootstring parameters for Punycode ***/
@@ -146,11 +154,11 @@ adapt (punycode_uint delta, punycode_uint numpoints, int firsttime)
146} 154}
147 155
148/*** Main encode function ***/ 156/*** Main encode function ***/
149 157
150/** 158/**
151 * punycode_encode - encode Unicode to Punycode 159 * punycode_encode:
152 * @input_length: The number of code points in the @input array and 160 * @input_length: The number of code points in the @input array and
153 * the number of flags in the @case_flags array. 161 * the number of flags in the @case_flags array.
154 * @input: An array of code points. They are presumed to be Unicode 162 * @input: An array of code points. They are presumed to be Unicode
155 * code points, but that is not strictly REQUIRED. The array 163 * code points, but that is not strictly REQUIRED. The array
156 * contains code points, not code units. UTF-16 uses code units 164 * contains code points, not code units. UTF-16 uses code units
@@ -297,11 +305,11 @@ punycode_encode (size_t input_length,
297} 305}
298 306
299/*** Main decode function ***/ 307/*** Main decode function ***/
300 308
301/** 309/**
302 * punycode_decode - decode Punycode to Unicode 310 * punycode_decode:
303 * @input_length: The number of ASCII code points in the @input array. 311 * @input_length: The number of ASCII code points in the @input array.
304 * @input: An array of ASCII code points (0..7F). 312 * @input: An array of ASCII code points (0..7F).
305 * @output_length: The caller passes in the maximum number of code 313 * @output_length: The caller passes in the maximum number of code
306 * points that it can receive into the @output array (which is also 314 * points that it can receive into the @output array (which is also
307 * the maximum number of flags that it can receive into the 315 * the maximum number of flags that it can receive into the
@@ -413,11 +421,11 @@ punycode_decode (size_t input_length,
413 i %= (out + 1); 421 i %= (out + 1);
414 422
415 /* Insert n at position i of the output: */ 423 /* Insert n at position i of the output: */
416 424
417 /* not needed for Punycode: */ 425 /* not needed for Punycode: */
418 /* if (basic(n)) return punycode_invalid_input; */ 426 /* if (basic(n)) return punycode_bad_input; */
419 if (out >= max_out) 427 if (out >= max_out)
420 return punycode_big_output; 428 return punycode_big_output;
421 429
422 if (case_flags) 430 if (case_flags)
423 { 431 {
diff --git a/3rdParty/LibIDN/src/punycode.h b/3rdParty/LibIDN/src/punycode.h
index 4872417..dff2105 100644
--- a/3rdParty/LibIDN/src/punycode.h
+++ b/3rdParty/LibIDN/src/punycode.h
@@ -1,74 +1,93 @@
1/* punycode.h --- Declarations for punycode functions. 1/* punycode.h --- Declarations for punycode functions.
2 * Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Simon Josefsson 2 Copyright (C) 2002-2015 Simon Josefsson
3 * 3
4 * This file is part of GNU Libidn. 4 This file is part of GNU Libidn.
5
6 GNU Libidn is free software: you can redistribute it and/or
7 modify it under the terms of either:
8
9 * the GNU Lesser General Public License as published by the Free
10 Software Foundation; either version 3 of the License, or (at
11 your option) any later version.
12
13 or
14
15 * the GNU General Public License as published by the Free
16 Software Foundation; either version 2 of the License, or (at
17 your option) any later version.
18
19 or both in parallel, as here.
20
21 GNU Libidn is distributed in the hope that it will be useful,
22 but WITHOUT ANY WARRANTY; without even the implied warranty of
23 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
24 General Public License for more details.
25
26 You should have received copies of the GNU General Public License and
27 the GNU Lesser General Public License along with this program. If
28 not, see <http://www.gnu.org/licenses/>. */
29
30/*
31 * This file is derived from RFC 3492bis written by Adam M. Costello,
32 * downloaded from http://www.nicemice.net/idn/punycode-spec.gz on
33 * 2015-03-02 with SHA1 a966a8017f6be579d74a50a226accc7607c40133, a
34 * copy of which is stored in the GNU Libidn version controlled
35 * repository under doc/specification/punycode-spec.gz.
5 * 36 *
6 * GNU Libidn is free software; you can redistribute it and/or 37 * The changes compared to Adam's file include: re-indentation, adding
7 * modify it under the terms of the GNU Lesser General Public 38 * the license boilerplate and this comment, adding the #ifndef
8 * License as published by the Free Software Foundation; either 39 * PUNYCODE_H and IDNAPI blocks, changing the return code of
9 * version 2.1 of the License, or (at your option) any later version. 40 * punycode_encode and punycode_decode from enum to int, simplifying
41 * the definition of punycode_uint by #include'ing idn-int.h and using
42 * uint32_t instead of limit.h-based code, adding Punycode_status and
43 * punycode_strerror, adding 'extern IDNAPI' declarations to function
44 * prototypes, and mentioning variable names in function prototypes.
10 * 45 *
11 * GNU Libidn is distributed in the hope that it will be useful, 46 * Adam's file contains the following:
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 * 47 *
16 * You should have received a copy of the GNU Lesser General Public 48 * punycode-sample.c 2.0.0 (2004-Mar-21-Sun)
17 * License along with GNU Libidn; if not, write to the Free Software 49 * http://www.nicemice.net/idn/
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA 50 * Adam M. Costello
51 * http://www.nicemice.net/amc/
19 * 52 *
20 */ 53 * This is ANSI C code (C89) implementing Punycode 1.0.x.
21
22/*
23 * This file is derived from RFC 3492bis written by Adam M. Costello.
24 * 54 *
25 * Disclaimer and license: Regarding this entire document or any 55 * Disclaimer and license: Regarding this entire document or any
26 * portion of it (including the pseudocode and C code), the author 56 * portion of it (including the pseudocode and C code), the author
27 * makes no guarantees and is not responsible for any damage resulting 57 * makes no guarantees and is not responsible for any damage resulting
28 * from its use. The author grants irrevocable permission to anyone 58 * from its use. The author grants irrevocable permission to anyone
29 * to use, modify, and distribute it in any way that does not diminish 59 * to use, modify, and distribute it in any way that does not diminish
30 * the rights of anyone else to use, modify, and distribute it, 60 * the rights of anyone else to use, modify, and distribute it,
31 * provided that redistributed derivative works do not contain 61 * provided that redistributed derivative works do not contain
32 * misleading author or version information. Derivative works need 62 * misleading author or version information. Derivative works need
33 * not be licensed under similar terms. 63 * not be licensed under similar terms.
34 *
35 * Copyright (C) The Internet Society (2003). All Rights Reserved.
36 *
37 * This document and translations of it may be copied and furnished to
38 * others, and derivative works that comment on or otherwise explain it
39 * or assist in its implementation may be prepared, copied, published
40 * and distributed, in whole or in part, without restriction of any
41 * kind, provided that the above copyright notice and this paragraph are
42 * included on all such copies and derivative works. However, this
43 * document itself may not be modified in any way, such as by removing
44 * the copyright notice or references to the Internet Society or other
45 * Internet organizations, except as needed for the purpose of
46 * developing Internet standards in which case the procedures for
47 * copyrights defined in the Internet Standards process must be
48 * followed, or as required to translate it into languages other than
49 * English.
50 *
51 * The limited permissions granted above are perpetual and will not be
52 * revoked by the Internet Society or its successors or assigns.
53 *
54 * This document and the information contained herein is provided on an
55 * "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
56 * TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
57 * BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
58 * HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
59 * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
60 */ 64 */
61 65
62#ifndef _PUNYCODE_H 66#ifndef PUNYCODE_H
63#define _PUNYCODE_H 67# define PUNYCODE_H
68
69# ifndef IDNAPI
70# if defined LIBIDN_BUILDING && defined HAVE_VISIBILITY && HAVE_VISIBILITY
71# define IDNAPI __attribute__((__visibility__("default")))
72# elif defined LIBIDN_BUILDING && defined _MSC_VER && ! defined LIBIDN_STATIC
73# define IDNAPI __declspec(dllexport)
74# elif defined _MSC_VER && ! defined LIBIDN_STATIC
75# define IDNAPI __declspec(dllimport)
76# else
77# define IDNAPI
78# endif
79# endif
64 80
65#ifdef __cplusplus 81#ifdef __cplusplus
66extern "C" 82extern "C"
67{ 83{
68#endif 84#endif
69 85
86/************************************************************/
87/* Public interface (would normally go in its own .h file): */
88
70#include <stddef.h> /* size_t */ 89#include <stddef.h> /* size_t */
71#include <idn-int.h> /* uint32_t */ 90#include <idn-int.h> /* uint32_t */
72 91
73 enum punycode_status 92 enum punycode_status
74 { 93 {
@@ -84,21 +103,23 @@ extern "C"
84 PUNYCODE_BAD_INPUT = punycode_bad_input, 103 PUNYCODE_BAD_INPUT = punycode_bad_input,
85 PUNYCODE_BIG_OUTPUT = punycode_big_output, 104 PUNYCODE_BIG_OUTPUT = punycode_big_output,
86 PUNYCODE_OVERFLOW = punycode_overflow 105 PUNYCODE_OVERFLOW = punycode_overflow
87 } Punycode_status; 106 } Punycode_status;
88 107
89 extern const char *punycode_strerror (Punycode_status rc); 108 extern IDNAPI const char *punycode_strerror (Punycode_status rc);
90 109
91/* punycode_uint needs to be unsigned and needs to be */ 110/* punycode_uint needs to be unsigned and needs to be */
92/* at least 26 bits wide. */ 111/* at least 26 bits wide. The particular type can be */
112/* specified by defining PUNYCODE_UINT, otherwise a */
113/* suitable type will be chosen automatically. */
93 114
94 typedef uint32_t punycode_uint; 115 typedef uint32_t punycode_uint;
95 116
96 extern int punycode_encode (size_t input_length, 117 extern IDNAPI int punycode_encode (size_t input_length,
97 const punycode_uint input[], 118 const punycode_uint input[],
98 const unsigned char case_flags[], 119 const unsigned char case_flags[],
99 size_t * output_length, char output[]); 120 size_t * output_length, char output[]);
100 121
101/* 122/*
102 punycode_encode() converts a sequence of code points (presumed to be 123 punycode_encode() converts a sequence of code points (presumed to be
103 Unicode code points) to Punycode. 124 Unicode code points) to Punycode.
104 125
@@ -108,11 +129,11 @@ extern "C"
108 The number of code points in the input array and the number 129 The number of code points in the input array and the number
109 of flags in the case_flags array. 130 of flags in the case_flags array.
110 131
111 input 132 input
112 An array of code points. They are presumed to be Unicode 133 An array of code points. They are presumed to be Unicode
113 code points, but that is not strictly REQUIRED. The 134 code points, but that is not strictly necessary. The
114 array contains code points, not code units. UTF-16 uses 135 array contains code points, not code units. UTF-16 uses
115 code units D800 through DFFF to refer to code points 136 code units D800 through DFFF to refer to code points
116 10000..10FFFF. The code points D800..DFFF do not occur in 137 10000..10FFFF. The code points D800..DFFF do not occur in
117 any valid Unicode string. The code points that can occur in 138 any valid Unicode string. The code points that can occur in
118 Unicode strings (0..D7FF and E000..10FFFF) are also called 139 Unicode strings (0..D7FF and E000..10FFFF) are also called
@@ -151,15 +172,15 @@ extern "C"
151 Can be any of the punycode_status values defined above except 172 Can be any of the punycode_status values defined above except
152 punycode_bad_input. If not punycode_success, then output_size 173 punycode_bad_input. If not punycode_success, then output_size
153 and output might contain garbage. 174 and output might contain garbage.
154*/ 175*/
155 176
156 extern int punycode_decode (size_t input_length, 177 extern IDNAPI int punycode_decode (size_t input_length,
157 const char input[], 178 const char input[],
158 size_t * output_length, 179 size_t * output_length,
159 punycode_uint output[], 180 punycode_uint output[],
160 unsigned char case_flags[]); 181 unsigned char case_flags[]);
161 182
162/* 183/*
163 punycode_decode() converts Punycode to a sequence of code points 184 punycode_decode() converts Punycode to a sequence of code points
164 (presumed to be Unicode code points). 185 (presumed to be Unicode code points).
165 186
@@ -213,6 +234,6 @@ extern "C"
213*/ 234*/
214 235
215#ifdef __cplusplus 236#ifdef __cplusplus
216} 237}
217#endif 238#endif
218#endif /* _PUNYCODE_H */ 239#endif /* PUNYCODE_H */
diff --git a/3rdParty/LibIDN/src/rfc3454.c b/3rdParty/LibIDN/src/rfc3454.c
index 856b67a..f4e411f 100644
--- a/3rdParty/LibIDN/src/rfc3454.c
+++ b/3rdParty/LibIDN/src/rfc3454.c
@@ -1,8 +1,9 @@
1/* This file is automatically generated. DO NOT EDIT! 1/* This file is automatically generated. DO NOT EDIT!
2 Instead, edit gen-stringprep-tables.pl and re-run. */ 2 Instead, edit gen-stringprep-tables.pl and re-run. */
3 3
4#include <config.h>
4#include "stringprep.h" 5#include "stringprep.h"
5 6
6/* 7/*
7 * So we can use this material. There may be other legal analysis that 8 * So we can use this material. There may be other legal analysis that
8 * also reach the same conclusion. 9 * also reach the same conclusion.
diff --git a/3rdParty/LibIDN/src/stringprep.c b/3rdParty/LibIDN/src/stringprep.c
index 96fa316..8ff28e6 100644
--- a/3rdParty/LibIDN/src/stringprep.c
+++ b/3rdParty/LibIDN/src/stringprep.c
@@ -1,25 +1,33 @@
1/* stringprep.c --- Core stringprep implementation. 1/* stringprep.c --- Core stringprep implementation.
2 * Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008 Simon Josefsson 2 Copyright (C) 2002-2015 Simon Josefsson
3 * 3
4 * This file is part of GNU Libidn. 4 This file is part of GNU Libidn.
5 * 5
6 * GNU Libidn is free software; you can redistribute it and/or 6 GNU Libidn is free software: you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public 7 modify it under the terms of either:
8 * License as published by the Free Software Foundation; either 8
9 * version 2.1 of the License, or (at your option) any later version. 9 * the GNU Lesser General Public License as published by the Free
10 * 10 Software Foundation; either version 3 of the License, or (at
11 * GNU Libidn is distributed in the hope that it will be useful, 11 your option) any later version.
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 or
14 * Lesser General Public License for more details. 14
15 * 15 * the GNU General Public License as published by the Free
16 * You should have received a copy of the GNU Lesser General Public 16 Software Foundation; either version 2 of the License, or (at
17 * License along with GNU Libidn; if not, write to the Free Software 17 your option) any later version.
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA 18
19 * 19 or both in parallel, as here.
20 */ 20
21 GNU Libidn is distributed in the hope that it will be useful,
22 but WITHOUT ANY WARRANTY; without even the implied warranty of
23 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
24 General Public License for more details.
25
26 You should have received copies of the GNU General Public License and
27 the GNU Lesser General Public License along with this program. If
28 not, see <http://www.gnu.org/licenses/>. */
21 29
22#ifdef HAVE_CONFIG_H 30#ifdef HAVE_CONFIG_H
23# include "config.h" 31# include "config.h"
24#endif 32#endif
25 33
@@ -102,11 +110,11 @@ stringprep_apply_table_to_string (uint32_t * ucs4,
102#define UNAPPLICAPLEFLAGS(flags, profileflags) \ 110#define UNAPPLICAPLEFLAGS(flags, profileflags) \
103 ((!INVERTED(profileflags) && !(profileflags & flags) && profileflags) || \ 111 ((!INVERTED(profileflags) && !(profileflags & flags) && profileflags) || \
104 ( INVERTED(profileflags) && (profileflags & flags))) 112 ( INVERTED(profileflags) && (profileflags & flags)))
105 113
106/** 114/**
107 * stringprep_4i - prepare internationalized string 115 * stringprep_4i:
108 * @ucs4: input/output array with string to prepare. 116 * @ucs4: input/output array with string to prepare.
109 * @len: on input, length of input array with Unicode code points, 117 * @len: on input, length of input array with Unicode code points,
110 * on exit, length of output array with Unicode code points. 118 * on exit, length of output array with Unicode code points.
111 * @maxucs4len: maximum length of input/output array. 119 * @maxucs4len: maximum length of input/output array.
112 * @flags: a #Stringprep_profile_flags value, or 0. 120 * @flags: a #Stringprep_profile_flags value, or 0.
@@ -290,11 +298,11 @@ stringprep_4zi_1 (uint32_t * ucs4, size_t ucs4len, size_t maxucs4len,
290 298
291 return STRINGPREP_OK; 299 return STRINGPREP_OK;
292} 300}
293 301
294/** 302/**
295 * stringprep_4zi - prepare internationalized string 303 * stringprep_4zi:
296 * @ucs4: input/output array with zero terminated string to prepare. 304 * @ucs4: input/output array with zero terminated string to prepare.
297 * @maxucs4len: maximum length of input/output array. 305 * @maxucs4len: maximum length of input/output array.
298 * @flags: a #Stringprep_profile_flags value, or 0. 306 * @flags: a #Stringprep_profile_flags value, or 0.
299 * @profile: pointer to #Stringprep_profile to use. 307 * @profile: pointer to #Stringprep_profile to use.
300 * 308 *
@@ -327,11 +335,11 @@ stringprep_4zi (uint32_t * ucs4, size_t maxucs4len,
327 335
328 return stringprep_4zi_1 (ucs4, ucs4len, maxucs4len, flags, profile); 336 return stringprep_4zi_1 (ucs4, ucs4len, maxucs4len, flags, profile);
329} 337}
330 338
331/** 339/**
332 * stringprep - prepare internationalized string 340 * stringprep:
333 * @in: input/ouput array with string to prepare. 341 * @in: input/ouput array with string to prepare.
334 * @maxlen: maximum length of input/output array. 342 * @maxlen: maximum length of input/output array.
335 * @flags: a #Stringprep_profile_flags value, or 0. 343 * @flags: a #Stringprep_profile_flags value, or 0.
336 * @profile: pointer to #Stringprep_profile to use. 344 * @profile: pointer to #Stringprep_profile to use.
337 * 345 *
@@ -368,13 +376,14 @@ stringprep (char *in,
368 376
369 do 377 do
370 { 378 {
371 uint32_t *newp; 379 uint32_t *newp;
372 380
373 if (ucs4) 381 free (ucs4);
374 free (ucs4);
375 ucs4 = stringprep_utf8_to_ucs4 (in, -1, &ucs4len); 382 ucs4 = stringprep_utf8_to_ucs4 (in, -1, &ucs4len);
383 if (ucs4 == NULL)
384 return STRINGPREP_ICONV_ERROR;
376 maxucs4len = ucs4len + adducs4len; 385 maxucs4len = ucs4len + adducs4len;
377 newp = realloc (ucs4, maxucs4len * sizeof (uint32_t)); 386 newp = realloc (ucs4, maxucs4len * sizeof (uint32_t));
378 if (!newp) 387 if (!newp)
379 { 388 {
380 free (ucs4); 389 free (ucs4);
@@ -393,11 +402,11 @@ stringprep (char *in,
393 } 402 }
394 403
395 utf8 = stringprep_ucs4_to_utf8 (ucs4, ucs4len, 0, 0); 404 utf8 = stringprep_ucs4_to_utf8 (ucs4, ucs4len, 0, 0);
396 free (ucs4); 405 free (ucs4);
397 if (!utf8) 406 if (!utf8)
398 return STRINGPREP_MALLOC_ERROR; 407 return STRINGPREP_ICONV_ERROR;
399 408
400 if (strlen (utf8) >= maxlen) 409 if (strlen (utf8) >= maxlen)
401 { 410 {
402 free (utf8); 411 free (utf8);
403 return STRINGPREP_TOO_SMALL_BUFFER; 412 return STRINGPREP_TOO_SMALL_BUFFER;
@@ -409,11 +418,11 @@ stringprep (char *in,
409 418
410 return STRINGPREP_OK; 419 return STRINGPREP_OK;
411} 420}
412 421
413/** 422/**
414 * stringprep_profile - prepare internationalized string 423 * stringprep_profile:
415 * @in: input array with UTF-8 string to prepare. 424 * @in: input array with UTF-8 string to prepare.
416 * @out: output variable with pointer to newly allocate string. 425 * @out: output variable with pointer to newly allocate string.
417 * @profile: name of stringprep profile to use. 426 * @profile: name of stringprep profile to use.
418 * @flags: a #Stringprep_profile_flags value, or 0. 427 * @flags: a #Stringprep_profile_flags value, or 0.
419 * 428 *
@@ -451,12 +460,11 @@ stringprep_profile (const char *in,
451 if (!p || !p->name || !p->tables) 460 if (!p || !p->name || !p->tables)
452 return STRINGPREP_UNKNOWN_PROFILE; 461 return STRINGPREP_UNKNOWN_PROFILE;
453 462
454 do 463 do
455 { 464 {
456 if (str) 465 free (str);
457 free (str);
458 str = (char *) malloc (len); 466 str = (char *) malloc (len);
459 if (str == NULL) 467 if (str == NULL)
460 return STRINGPREP_MALLOC_ERROR; 468 return STRINGPREP_MALLOC_ERROR;
461 469
462 strcpy (str, in); 470 strcpy (str, in);
@@ -582,10 +590,11 @@ stringprep_profile (const char *in,
582 * This usually indicate an internal error in the library. 590 * This usually indicate an internal error in the library.
583 * @STRINGPREP_FLAG_ERROR: The supplied flag conflicted with profile. 591 * @STRINGPREP_FLAG_ERROR: The supplied flag conflicted with profile.
584 * This usually indicate a problem in the calling application. 592 * This usually indicate a problem in the calling application.
585 * @STRINGPREP_UNKNOWN_PROFILE: The supplied profile name was not 593 * @STRINGPREP_UNKNOWN_PROFILE: The supplied profile name was not
586 * known to the library. 594 * known to the library.
595 * @STRINGPREP_ICONV_ERROR: Could not convert string in locale encoding.
587 * @STRINGPREP_NFKC_FAILED: The Unicode NFKC operation failed. This 596 * @STRINGPREP_NFKC_FAILED: The Unicode NFKC operation failed. This
588 * usually indicate an internal error in the library. 597 * usually indicate an internal error in the library.
589 * @STRINGPREP_MALLOC_ERROR: The malloc() was out of memory. This is 598 * @STRINGPREP_MALLOC_ERROR: The malloc() was out of memory. This is
590 * usually a fatal error. 599 * usually a fatal error.
591 * 600 *
@@ -609,10 +618,18 @@ stringprep_profile (const char *in,
609 * Stringprep profile flags. 618 * Stringprep profile flags.
610 */ 619 */
611 620
612/** 621/**
613 * Stringprep_profile_steps: 622 * Stringprep_profile_steps:
623 * @STRINGPREP_NFKC: The NFKC step.
624 * @STRINGPREP_BIDI: The BIDI step.
625 * @STRINGPREP_MAP_TABLE: The MAP step.
626 * @STRINGPREP_UNASSIGNED_TABLE: The Unassigned step.
627 * @STRINGPREP_PROHIBIT_TABLE: The Prohibited step.
628 * @STRINGPREP_BIDI_PROHIBIT_TABLE: The BIDI-Prohibited step.
629 * @STRINGPREP_BIDI_RAL_TABLE: The BIDI-RAL step.
630 * @STRINGPREP_BIDI_L_TABLE: The BIDI-L step.
614 * 631 *
615 * Various steps in the stringprep algorithm. You really want to 632 * Various steps in the stringprep algorithm. You really want to
616 * study the source code to understand this one. Only useful if you 633 * study the source code to understand this one. Only useful if you
617 * want to add another profile. 634 * want to add another profile.
618 */ 635 */
diff --git a/3rdParty/LibIDN/src/stringprep.h b/3rdParty/LibIDN/src/stringprep.h
index fa822e8..d69faa7 100644
--- a/3rdParty/LibIDN/src/stringprep.h
+++ b/3rdParty/LibIDN/src/stringprep.h
@@ -1,53 +1,59 @@
1/* stringprep.h --- Header file for stringprep functions. 1/* stringprep.h --- Header file for stringprep functions.
2 * Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008 Simon Josefsson 2 Copyright (C) 2002-2015 Simon Josefsson
3 * 3
4 * This file is part of GNU Libidn. 4 This file is part of GNU Libidn.
5 * 5
6 * GNU Libidn is free software; you can redistribute it and/or 6 GNU Libidn is free software: you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public 7 modify it under the terms of either:
8 * License as published by the Free Software Foundation; either 8
9 * version 2.1 of the License, or (at your option) any later version. 9 * the GNU Lesser General Public License as published by the Free
10 * 10 Software Foundation; either version 3 of the License, or (at
11 * GNU Libidn is distributed in the hope that it will be useful, 11 your option) any later version.
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 or
14 * Lesser General Public License for more details. 14
15 * 15 * the GNU General Public License as published by the Free
16 * You should have received a copy of the GNU Lesser General Public 16 Software Foundation; either version 2 of the License, or (at
17 * License along with GNU Libidn; if not, write to the Free Software 17 your option) any later version.
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA 18
19 * 19 or both in parallel, as here.
20 */ 20
21 GNU Libidn is distributed in the hope that it will be useful,
22 but WITHOUT ANY WARRANTY; without even the implied warranty of
23 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
24 General Public License for more details.
25
26 You should have received copies of the GNU General Public License and
27 the GNU Lesser General Public License along with this program. If
28 not, see <http://www.gnu.org/licenses/>. */
21 29
22#ifndef STRINGPREP_H 30#ifndef STRINGPREP_H
23# define STRINGPREP_H 31# define STRINGPREP_H
24 32
25# include <stddef.h> /* size_t */ 33# ifndef IDNAPI
26# include <unistd.h> /* ssize_t */ 34# if defined LIBIDN_BUILDING && defined HAVE_VISIBILITY && HAVE_VISIBILITY
27# include <idn-int.h> /* uint32_t */ 35# define IDNAPI __attribute__((__visibility__("default")))
28 36# elif defined LIBIDN_BUILDING && defined _MSC_VER && ! defined LIBIDN_STATIC
29/* Libidn Windows DLL. Only needed when this file is used in Visual 37# define IDNAPI __declspec(dllexport)
30 Studio. Export and import happens automatically in MinGW. */ 38# elif defined _MSC_VER && ! defined LIBIDN_STATIC
31# ifndef IDNA_API 39# define IDNAPI __declspec(dllimport)
32# if defined(_MSC_VER) && !defined(IDNA_STATIC)
33# ifdef IDNA_EXPORTS
34# define IDNA_API __declspec(dllexport)
35# else
36# define IDNA_API __declspec(dllimport)
37# endif
38# else 40# else
39# define IDNA_API 41# define IDNAPI
40# endif 42# endif
41# endif 43# endif
42 44
45# include <stddef.h> /* size_t */
46# include <sys/types.h> /* ssize_t */
47# include <idn-int.h> /* uint32_t */
48
43# ifdef __cplusplus 49# ifdef __cplusplus
44extern "C" 50extern "C"
45{ 51{
46# endif 52# endif
47 53
48# define STRINGPREP_VERSION "1.11" 54# define STRINGPREP_VERSION "1.32"
49 55
50/* Error codes. */ 56/* Error codes. */
51 typedef enum 57 typedef enum
52 { 58 {
53 STRINGPREP_OK = 0, 59 STRINGPREP_OK = 0,
@@ -60,10 +66,11 @@ extern "C"
60 /* Error in calling application. */ 66 /* Error in calling application. */
61 STRINGPREP_TOO_SMALL_BUFFER = 100, 67 STRINGPREP_TOO_SMALL_BUFFER = 100,
62 STRINGPREP_PROFILE_ERROR = 101, 68 STRINGPREP_PROFILE_ERROR = 101,
63 STRINGPREP_FLAG_ERROR = 102, 69 STRINGPREP_FLAG_ERROR = 102,
64 STRINGPREP_UNKNOWN_PROFILE = 103, 70 STRINGPREP_UNKNOWN_PROFILE = 103,
71 STRINGPREP_ICONV_ERROR = 104,
65 /* Internal errors. */ 72 /* Internal errors. */
66 STRINGPREP_NFKC_FAILED = 200, 73 STRINGPREP_NFKC_FAILED = 200,
67 STRINGPREP_MALLOC_ERROR = 201 74 STRINGPREP_MALLOC_ERROR = 201
68 } Stringprep_rc; 75 } Stringprep_rc;
69 76
@@ -111,122 +118,124 @@ extern "C"
111 const char *name; 118 const char *name;
112 const Stringprep_profile *tables; 119 const Stringprep_profile *tables;
113 }; 120 };
114 typedef struct Stringprep_profiles Stringprep_profiles; 121 typedef struct Stringprep_profiles Stringprep_profiles;
115 122
116 extern IDNA_API const Stringprep_profiles stringprep_profiles[]; 123 extern IDNAPI const Stringprep_profiles stringprep_profiles[];
117 124
118/* Profiles */ 125/* Profiles */
119 extern IDNA_API const Stringprep_table_element stringprep_rfc3454_A_1[]; 126 extern IDNAPI const Stringprep_table_element stringprep_rfc3454_A_1[];
120 extern IDNA_API const Stringprep_table_element stringprep_rfc3454_B_1[]; 127 extern IDNAPI const Stringprep_table_element stringprep_rfc3454_B_1[];
121 extern IDNA_API const Stringprep_table_element stringprep_rfc3454_B_2[]; 128 extern IDNAPI const Stringprep_table_element stringprep_rfc3454_B_2[];
122 extern IDNA_API const Stringprep_table_element stringprep_rfc3454_B_3[]; 129 extern IDNAPI const Stringprep_table_element stringprep_rfc3454_B_3[];
123 extern IDNA_API const Stringprep_table_element stringprep_rfc3454_C_1_1[]; 130 extern IDNAPI const Stringprep_table_element stringprep_rfc3454_C_1_1[];
124 extern IDNA_API const Stringprep_table_element stringprep_rfc3454_C_1_2[]; 131 extern IDNAPI const Stringprep_table_element stringprep_rfc3454_C_1_2[];
125 extern IDNA_API const Stringprep_table_element stringprep_rfc3454_C_2_1[]; 132 extern IDNAPI const Stringprep_table_element stringprep_rfc3454_C_2_1[];
126 extern IDNA_API const Stringprep_table_element stringprep_rfc3454_C_2_2[]; 133 extern IDNAPI const Stringprep_table_element stringprep_rfc3454_C_2_2[];
127 extern IDNA_API const Stringprep_table_element stringprep_rfc3454_C_3[]; 134 extern IDNAPI const Stringprep_table_element stringprep_rfc3454_C_3[];
128 extern IDNA_API const Stringprep_table_element stringprep_rfc3454_C_4[]; 135 extern IDNAPI const Stringprep_table_element stringprep_rfc3454_C_4[];
129 extern IDNA_API const Stringprep_table_element stringprep_rfc3454_C_5[]; 136 extern IDNAPI const Stringprep_table_element stringprep_rfc3454_C_5[];
130 extern IDNA_API const Stringprep_table_element stringprep_rfc3454_C_6[]; 137 extern IDNAPI const Stringprep_table_element stringprep_rfc3454_C_6[];
131 extern IDNA_API const Stringprep_table_element stringprep_rfc3454_C_7[]; 138 extern IDNAPI const Stringprep_table_element stringprep_rfc3454_C_7[];
132 extern IDNA_API const Stringprep_table_element stringprep_rfc3454_C_8[]; 139 extern IDNAPI const Stringprep_table_element stringprep_rfc3454_C_8[];
133 extern IDNA_API const Stringprep_table_element stringprep_rfc3454_C_9[]; 140 extern IDNAPI const Stringprep_table_element stringprep_rfc3454_C_9[];
134 extern IDNA_API const Stringprep_table_element stringprep_rfc3454_D_1[]; 141 extern IDNAPI const Stringprep_table_element stringprep_rfc3454_D_1[];
135 extern IDNA_API const Stringprep_table_element stringprep_rfc3454_D_2[]; 142 extern IDNAPI const Stringprep_table_element stringprep_rfc3454_D_2[];
136 143
137 /* Nameprep */ 144 /* Nameprep */
138 145
139 extern IDNA_API const Stringprep_profile stringprep_nameprep[]; 146 extern IDNAPI const Stringprep_profile stringprep_nameprep[];
140 147
141# define stringprep_nameprep(in, maxlen) \ 148# define stringprep_nameprep(in, maxlen) \
142 stringprep(in, maxlen, 0, stringprep_nameprep) 149 stringprep(in, maxlen, 0, stringprep_nameprep)
143 150
144# define stringprep_nameprep_no_unassigned(in, maxlen) \ 151# define stringprep_nameprep_no_unassigned(in, maxlen) \
145 stringprep(in, maxlen, STRINGPREP_NO_UNASSIGNED, stringprep_nameprep) 152 stringprep(in, maxlen, STRINGPREP_NO_UNASSIGNED, stringprep_nameprep)
146 153
147 /* SASL */ 154 /* SASL */
148 155
149 extern IDNA_API const Stringprep_profile stringprep_saslprep[]; 156 extern IDNAPI const Stringprep_profile stringprep_saslprep[];
150 extern IDNA_API const Stringprep_profile stringprep_plain[]; 157 extern IDNAPI const Stringprep_table_element stringprep_saslprep_space_map[];
151 extern IDNA_API const Stringprep_profile stringprep_trace[]; 158 extern IDNAPI const Stringprep_profile stringprep_plain[];
159 extern IDNAPI const Stringprep_profile stringprep_trace[];
152 160
153# define stringprep_plain(in, maxlen) \ 161# define stringprep_plain(in, maxlen) \
154 stringprep(in, maxlen, 0, stringprep_plain) 162 stringprep(in, maxlen, 0, stringprep_plain)
155 163
156 /* Kerberos */ 164 /* Kerberos */
157 165
158 extern IDNA_API const Stringprep_profile stringprep_kerberos5[]; 166 extern IDNAPI const Stringprep_profile stringprep_kerberos5[];
159 167
160# define stringprep_kerberos5(in, maxlen) \ 168# define stringprep_kerberos5(in, maxlen) \
161 stringprep(in, maxlen, 0, stringprep_kerberos5) 169 stringprep(in, maxlen, 0, stringprep_kerberos5)
162 170
163 /* XMPP */ 171 /* XMPP */
164 172
165 extern IDNA_API const Stringprep_profile stringprep_xmpp_nodeprep[]; 173 extern IDNAPI const Stringprep_profile stringprep_xmpp_nodeprep[];
166 extern IDNA_API const Stringprep_profile stringprep_xmpp_resourceprep[]; 174 extern IDNAPI const Stringprep_profile stringprep_xmpp_resourceprep[];
167 extern IDNA_API const Stringprep_table_element stringprep_xmpp_nodeprep_prohibit[]; 175 extern IDNAPI const Stringprep_table_element stringprep_xmpp_nodeprep_prohibit[];
168 176
169# define stringprep_xmpp_nodeprep(in, maxlen) \ 177# define stringprep_xmpp_nodeprep(in, maxlen) \
170 stringprep(in, maxlen, 0, stringprep_xmpp_nodeprep) 178 stringprep(in, maxlen, 0, stringprep_xmpp_nodeprep)
171# define stringprep_xmpp_resourceprep(in, maxlen) \ 179# define stringprep_xmpp_resourceprep(in, maxlen) \
172 stringprep(in, maxlen, 0, stringprep_xmpp_resourceprep) 180 stringprep(in, maxlen, 0, stringprep_xmpp_resourceprep)
173 181
174 /* iSCSI */ 182 /* iSCSI */
175 183
176 extern IDNA_API const Stringprep_profile stringprep_iscsi[]; 184 extern IDNAPI const Stringprep_profile stringprep_iscsi[];
185 extern IDNAPI const Stringprep_table_element stringprep_iscsi_prohibit[];
177 186
178# define stringprep_iscsi(in, maxlen) \ 187# define stringprep_iscsi(in, maxlen) \
179 stringprep(in, maxlen, 0, stringprep_iscsi) 188 stringprep(in, maxlen, 0, stringprep_iscsi)
180 189
181 /* API */ 190 /* API */
182 191
183 extern IDNA_API int stringprep_4i (uint32_t * ucs4, size_t * len, 192 extern IDNAPI int stringprep_4i (uint32_t * ucs4, size_t * len,
184 size_t maxucs4len, 193 size_t maxucs4len,
185 Stringprep_profile_flags flags, 194 Stringprep_profile_flags flags,
186 const Stringprep_profile * profile); 195 const Stringprep_profile * profile);
187 extern IDNA_API int stringprep_4zi (uint32_t * ucs4, size_t maxucs4len, 196 extern IDNAPI int stringprep_4zi (uint32_t * ucs4, size_t maxucs4len,
188 Stringprep_profile_flags flags, 197 Stringprep_profile_flags flags,
189 const Stringprep_profile * profile); 198 const Stringprep_profile * profile);
190 extern IDNA_API int stringprep (char *in, size_t maxlen, 199 extern IDNAPI int stringprep (char *in, size_t maxlen,
191 Stringprep_profile_flags flags, 200 Stringprep_profile_flags flags,
192 const Stringprep_profile * profile); 201 const Stringprep_profile * profile);
193 202
194 extern IDNA_API int stringprep_profile (const char *in, 203 extern IDNAPI int stringprep_profile (const char *in,
195 char **out, 204 char **out,
196 const char *profile, 205 const char *profile,
197 Stringprep_profile_flags flags); 206 Stringprep_profile_flags flags);
198 207
199 extern IDNA_API const char *stringprep_strerror (Stringprep_rc rc); 208 extern IDNAPI const char *stringprep_strerror (Stringprep_rc rc);
200 209
201 extern IDNA_API const char *stringprep_check_version (const char 210 extern IDNAPI const char *stringprep_check_version (const char
202 *req_version); 211 *req_version);
203 212
204/* Utility */ 213/* Utility */
205 214
206 extern IDNA_API int stringprep_unichar_to_utf8 (uint32_t c, char *outbuf); 215 extern IDNAPI int stringprep_unichar_to_utf8 (uint32_t c, char *outbuf);
207 extern IDNA_API uint32_t stringprep_utf8_to_unichar (const char *p); 216 extern IDNAPI uint32_t stringprep_utf8_to_unichar (const char *p);
208 217
209 extern IDNA_API uint32_t *stringprep_utf8_to_ucs4 (const char *str, 218 extern IDNAPI uint32_t *stringprep_utf8_to_ucs4 (const char *str,
210 ssize_t len, 219 ssize_t len,
211 size_t * items_written); 220 size_t * items_written);
212 extern IDNA_API char *stringprep_ucs4_to_utf8 (const uint32_t * str, 221 extern IDNAPI char *stringprep_ucs4_to_utf8 (const uint32_t * str,
213 ssize_t len, 222 ssize_t len,
214 size_t * items_read, 223 size_t * items_read,
215 size_t * items_written); 224 size_t * items_written);
216 225
217 extern IDNA_API char *stringprep_utf8_nfkc_normalize (const char *str, 226 extern IDNAPI char *stringprep_utf8_nfkc_normalize (const char *str,
218 ssize_t len); 227 ssize_t len);
219 extern IDNA_API uint32_t *stringprep_ucs4_nfkc_normalize (uint32_t * str, 228 extern IDNAPI uint32_t *stringprep_ucs4_nfkc_normalize (const uint32_t * str,
220 ssize_t len); 229 ssize_t len);
221 230
222 extern IDNA_API const char *stringprep_locale_charset (void); 231 extern IDNAPI const char *stringprep_locale_charset (void);
223 extern IDNA_API char *stringprep_convert (const char *str, 232 extern IDNAPI char *stringprep_convert (const char *str,
224 const char *to_codeset, 233 const char *to_codeset,
225 const char *from_codeset); 234 const char *from_codeset);
226 extern IDNA_API char *stringprep_locale_to_utf8 (const char *str); 235 extern IDNAPI char *stringprep_locale_to_utf8 (const char *str);
227 extern IDNA_API char *stringprep_utf8_to_locale (const char *str); 236 extern IDNAPI char *stringprep_utf8_to_locale (const char *str);
228 237
229# ifdef __cplusplus 238# ifdef __cplusplus
230} 239}
231# endif 240# endif
232 241
diff --git a/3rdParty/LibIDN/src/toutf8.c b/3rdParty/LibIDN/src/toutf8.c
index 0d82717..b7126e2 100644
--- a/3rdParty/LibIDN/src/toutf8.c
+++ b/3rdParty/LibIDN/src/toutf8.c
@@ -1,25 +1,33 @@
1/* toutf8.c --- Convert strings from system locale into UTF-8. 1/* toutf8.c --- Convert strings from system locale into UTF-8.
2 * Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Simon Josefsson 2 Copyright (C) 2002-2015 Simon Josefsson
3 * 3
4 * This file is part of GNU Libidn. 4 This file is part of GNU Libidn.
5 * 5
6 * GNU Libidn is free software; you can redistribute it and/or 6 GNU Libidn is free software: you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public 7 modify it under the terms of either:
8 * License as published by the Free Software Foundation; either 8
9 * version 2.1 of the License, or (at your option) any later version. 9 * the GNU Lesser General Public License as published by the Free
10 * 10 Software Foundation; either version 3 of the License, or (at
11 * GNU Libidn is distributed in the hope that it will be useful, 11 your option) any later version.
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 or
14 * Lesser General Public License for more details. 14
15 * 15 * the GNU General Public License as published by the Free
16 * You should have received a copy of the GNU Lesser General Public 16 Software Foundation; either version 2 of the License, or (at
17 * License along with GNU Libidn; if not, write to the Free Software 17 your option) any later version.
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA 18
19 * 19 or both in parallel, as here.
20 */ 20
21 GNU Libidn is distributed in the hope that it will be useful,
22 but WITHOUT ANY WARRANTY; without even the implied warranty of
23 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
24 General Public License for more details.
25
26 You should have received copies of the GNU General Public License and
27 the GNU Lesser General Public License along with this program. If
28 not, see <http://www.gnu.org/licenses/>. */
21 29
22#ifdef HAVE_CONFIG_H 30#ifdef HAVE_CONFIG_H
23# include "config.h" 31# include "config.h"
24#endif 32#endif
25 33
@@ -42,23 +50,21 @@
42# define HAVE_ICONV 1 50# define HAVE_ICONV 1
43# define HAVE_LOCALE_H 1 51# define HAVE_LOCALE_H 1
44# define HAVE_LANGINFO_CODESET 1 52# define HAVE_LANGINFO_CODESET 1
45#endif 53#endif
46 54
47#if HAVE_LOCALE_H 55#include <locale.h>
48# include <locale.h>
49#endif
50 56
51#if HAVE_LANGINFO_CODESET 57#ifdef HAVE_LANGINFO_CODESET
52# include <langinfo.h> 58# include <langinfo.h>
53#endif 59#endif
54 60
55#ifdef _LIBC 61#ifdef _LIBC
56# define stringprep_locale_charset() nl_langinfo (CODESET) 62# define stringprep_locale_charset() nl_langinfo (CODESET)
57#else 63#else
58/** 64/**
59 * stringprep_locale_charset - return charset used in current locale 65 * stringprep_locale_charset:
60 * 66 *
61 * Find out current locale charset. The function respect the CHARSET 67 * Find out current locale charset. The function respect the CHARSET
62 * environment variable, but typically uses nl_langinfo(CODESET) when 68 * environment variable, but typically uses nl_langinfo(CODESET) when
63 * it is supported. It fall back on "ASCII" if CHARSET isn't set and 69 * it is supported. It fall back on "ASCII" if CHARSET isn't set and
64 * nl_langinfo isn't supported or return anything. 70 * nl_langinfo isn't supported or return anything.
@@ -93,11 +99,11 @@ stringprep_locale_charset (void)
93 return "ASCII"; 99 return "ASCII";
94} 100}
95#endif 101#endif
96 102
97/** 103/**
98 * stringprep_convert - encode string using new character set 104 * stringprep_convert:
99 * @str: input zero-terminated string. 105 * @str: input zero-terminated string.
100 * @to_codeset: name of destination character set. 106 * @to_codeset: name of destination character set.
101 * @from_codeset: name of origin character set, as used by @str. 107 * @from_codeset: name of origin character set, as used by @str.
102 * 108 *
103 * Convert the string from one character set to another using the 109 * Convert the string from one character set to another using the
@@ -122,11 +128,11 @@ stringprep_convert (const char *str,
122 return strcpy (p, str); 128 return strcpy (p, str);
123#endif 129#endif
124} 130}
125 131
126/** 132/**
127 * stringprep_locale_to_utf8 - convert locale encoded string to UTF-8 133 * stringprep_locale_to_utf8:
128 * @str: input zero terminated string. 134 * @str: input zero terminated string.
129 * 135 *
130 * Convert string encoded in the locale's character set into UTF-8 by 136 * Convert string encoded in the locale's character set into UTF-8 by
131 * using stringprep_convert(). 137 * using stringprep_convert().
132 * 138 *
@@ -138,11 +144,11 @@ stringprep_locale_to_utf8 (const char *str)
138{ 144{
139 return stringprep_convert (str, "UTF-8", stringprep_locale_charset ()); 145 return stringprep_convert (str, "UTF-8", stringprep_locale_charset ());
140} 146}
141 147
142/** 148/**
143 * stringprep_utf8_to_locale - encode UTF-8 string to locale encoding 149 * stringprep_utf8_to_locale:
144 * @str: input zero terminated string. 150 * @str: input zero terminated string.
145 * 151 *
146 * Convert string encoded in UTF-8 into the locale's character set by 152 * Convert string encoded in UTF-8 into the locale's character set by
147 * using stringprep_convert(). 153 * using stringprep_convert().
148 * 154 *
diff --git a/3rdParty/LibIDN/stubs/unused-parameter.h b/3rdParty/LibIDN/stubs/unused-parameter.h
new file mode 100644
index 0000000..2bea489
--- /dev/null
+++ b/3rdParty/LibIDN/stubs/unused-parameter.h
@@ -0,0 +1,3 @@
1#ifndef _GL_UNUSED_PARAMETER
2#define _GL_UNUSED_PARAMETER
3#endif
diff --git a/3rdParty/LibIDN/stubs/win32/stdbool.h b/3rdParty/LibIDN/stubs/win32/stdbool.h
new file mode 100644
index 0000000..c789c92
--- /dev/null
+++ b/3rdParty/LibIDN/stubs/win32/stdbool.h
@@ -0,0 +1,40 @@
1/* Copyright (C) 2008-2015 Free Software Foundation, Inc.
2 Written by Adam Strzelecki <ono@java.pl>
3
4 This file is part of GNU Libidn.
5
6 GNU Libidn is free software: you can redistribute it and/or
7 modify it under the terms of either:
8
9 * the GNU Lesser General Public License as published by the Free
10 Software Foundation; either version 3 of the License, or (at
11 your option) any later version.
12
13 or
14
15 * the GNU General Public License as published by the Free
16 Software Foundation; either version 2 of the License, or (at
17 your option) any later version.
18
19 or both in parallel, as here.
20
21 GNU Libidn is distributed in the hope that it will be useful,
22 but WITHOUT ANY WARRANTY; without even the implied warranty of
23 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
24 General Public License for more details.
25
26 You should have received copies of the GNU General Public License and
27 the GNU Lesser General Public License along with this program. If
28 not, see <http://www.gnu.org/licenses/>. */
29
30#ifndef _STDBOOL_H
31#define _STDBOOL_H
32
33#define _Bool signed char
34enum { false = 0, true = 1 };
35#define bool _Bool
36#define false 0
37#define true 1
38#define __bool_true_false_are_defined 1
39
40#endif /* _STDBOOL_H */