source: code/trunk/vendor/modernc.org/libc/musl_freebsd_arm.go@ 823

Last change on this file since 823 was 822, checked in by yakumo.izuru, 22 months ago

Prefer immortal.run over runit and rc.d, use vendored modules
for convenience.

Signed-off-by: Izuru Yakumo <yakumo.izuru@…>

File size: 178.1 KB
Line 
1// Code generated by 'ccgo -export-externs X -export-fields F -hide __syscall0,__syscall1,__syscall2,__syscall3,__syscall4,__syscall5,__syscall6,getnameinfo,gethostbyaddr_r, -nostdinc -nostdlib -o ../musl_freebsd_arm.go -pkgname libc -static-locals-prefix _s -Iarch/arm -Iarch/generic -Iobj/src/internal -Isrc/include -Isrc/internal -Iobj/include -Iinclude copyright.c ../freebsd/table.cpp.c src/ctype/isalnum.c src/ctype/isalpha.c src/ctype/isdigit.c src/ctype/islower.c src/ctype/isprint.c src/ctype/isspace.c src/ctype/isupper.c src/ctype/isxdigit.c src/internal/floatscan.c src/internal/intscan.c src/internal/shgetc.c src/math/copysignl.c src/math/fabsl.c src/math/fmodl.c src/math/rint.c src/math/scalbn.c src/math/scalbnl.c src/network/freeaddrinfo.c src/network/getaddrinfo.c src/network/gethostbyaddr.c src/network/gethostbyaddr_r.c src/network/gethostbyname.c src/network/gethostbyname2.c src/network/gethostbyname2_r.c src/network/getnameinfo.c src/network/h_errno.c src/network/inet_aton.c src/network/inet_ntop.c src/network/inet_pton.c src/network/lookup_ipliteral.c src/network/lookup_name.c src/network/lookup_serv.c src/stdio/__toread.c src/stdio/__uflow.c src/stdlib/bsearch.c src/stdlib/strtod.c src/stdlib/strtol.c src/string/strdup.c src/string/strnlen.c src/string/strspn.c', DO NOT EDIT.
2
3package libc
4
5import (
6 "math"
7 "reflect"
8 "sync/atomic"
9 "unsafe"
10)
11
12var _ = math.Pi
13var _ reflect.Kind
14var _ atomic.Value
15var _ unsafe.Pointer
16
17// musl as a whole is licensed under the following standard MIT license:
18//
19// ----------------------------------------------------------------------
20// Copyright © 2005-2020 Rich Felker, et al.
21//
22// Permission is hereby granted, free of charge, to any person obtaining
23// a copy of this software and associated documentation files (the
24// "Software"), to deal in the Software without restriction, including
25// without limitation the rights to use, copy, modify, merge, publish,
26// distribute, sublicense, and/or sell copies of the Software, and to
27// permit persons to whom the Software is furnished to do so, subject to
28// the following conditions:
29//
30// The above copyright notice and this permission notice shall be
31// included in all copies or substantial portions of the Software.
32//
33// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
34// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
35// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
36// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
37// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
38// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
39// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
40// ----------------------------------------------------------------------
41//
42// Authors/contributors include:
43//
44// A. Wilcox
45// Ada Worcester
46// Alex Dowad
47// Alex Suykov
48// Alexander Monakov
49// Andre McCurdy
50// Andrew Kelley
51// Anthony G. Basile
52// Aric Belsito
53// Arvid Picciani
54// Bartosz Brachaczek
55// Benjamin Peterson
56// Bobby Bingham
57// Boris Brezillon
58// Brent Cook
59// Chris Spiegel
60// Clément Vasseur
61// Daniel Micay
62// Daniel Sabogal
63// Daurnimator
64// David Carlier
65// David Edelsohn
66// Denys Vlasenko
67// Dmitry Ivanov
68// Dmitry V. Levin
69// Drew DeVault
70// Emil Renner Berthing
71// Fangrui Song
72// Felix Fietkau
73// Felix Janda
74// Gianluca Anzolin
75// Hauke Mehrtens
76// He X
77// Hiltjo Posthuma
78// Isaac Dunham
79// Jaydeep Patil
80// Jens Gustedt
81// Jeremy Huntwork
82// Jo-Philipp Wich
83// Joakim Sindholt
84// John Spencer
85// Julien Ramseier
86// Justin Cormack
87// Kaarle Ritvanen
88// Khem Raj
89// Kylie McClain
90// Leah Neukirchen
91// Luca Barbato
92// Luka Perkov
93// M Farkas-Dyck (Strake)
94// Mahesh Bodapati
95// Markus Wichmann
96// Masanori Ogino
97// Michael Clark
98// Michael Forney
99// Mikhail Kremnyov
100// Natanael Copa
101// Nicholas J. Kain
102// orc
103// Pascal Cuoq
104// Patrick Oppenlander
105// Petr Hosek
106// Petr Skocik
107// Pierre Carrier
108// Reini Urban
109// Rich Felker
110// Richard Pennington
111// Ryan Fairfax
112// Samuel Holland
113// Segev Finer
114// Shiz
115// sin
116// Solar Designer
117// Stefan Kristiansson
118// Stefan O'Rear
119// Szabolcs Nagy
120// Timo Teräs
121// Trutz Behn
122// Valentin Ochs
123// Will Dietz
124// William Haddon
125// William Pitcock
126//
127// Portions of this software are derived from third-party works licensed
128// under terms compatible with the above MIT license:
129//
130// The TRE regular expression implementation (src/regex/reg* and
131// src/regex/tre*) is Copyright © 2001-2008 Ville Laurikari and licensed
132// under a 2-clause BSD license (license text in the source files). The
133// included version has been heavily modified by Rich Felker in 2012, in
134// the interests of size, simplicity, and namespace cleanliness.
135//
136// Much of the math library code (src/math/* and src/complex/*) is
137// Copyright © 1993,2004 Sun Microsystems or
138// Copyright © 2003-2011 David Schultz or
139// Copyright © 2003-2009 Steven G. Kargl or
140// Copyright © 2003-2009 Bruce D. Evans or
141// Copyright © 2008 Stephen L. Moshier or
142// Copyright © 2017-2018 Arm Limited
143// and labelled as such in comments in the individual source files. All
144// have been licensed under extremely permissive terms.
145//
146// The ARM memcpy code (src/string/arm/memcpy.S) is Copyright © 2008
147// The Android Open Source Project and is licensed under a two-clause BSD
148// license. It was taken from Bionic libc, used on Android.
149//
150// The AArch64 memcpy and memset code (src/string/aarch64/*) are
151// Copyright © 1999-2019, Arm Limited.
152//
153// The implementation of DES for crypt (src/crypt/crypt_des.c) is
154// Copyright © 1994 David Burren. It is licensed under a BSD license.
155//
156// The implementation of blowfish crypt (src/crypt/crypt_blowfish.c) was
157// originally written by Solar Designer and placed into the public
158// domain. The code also comes with a fallback permissive license for use
159// in jurisdictions that may not recognize the public domain.
160//
161// The smoothsort implementation (src/stdlib/qsort.c) is Copyright © 2011
162// Valentin Ochs and is licensed under an MIT-style license.
163//
164// The x86_64 port was written by Nicholas J. Kain and is licensed under
165// the standard MIT terms.
166//
167// The mips and microblaze ports were originally written by Richard
168// Pennington for use in the ellcc project. The original code was adapted
169// by Rich Felker for build system and code conventions during upstream
170// integration. It is licensed under the standard MIT terms.
171//
172// The mips64 port was contributed by Imagination Technologies and is
173// licensed under the standard MIT terms.
174//
175// The powerpc port was also originally written by Richard Pennington,
176// and later supplemented and integrated by John Spencer. It is licensed
177// under the standard MIT terms.
178//
179// All other files which have no copyright comments are original works
180// produced specifically for use as part of this library, written either
181// by Rich Felker, the main author of the library, or by one or more
182// contibutors listed above. Details on authorship of individual files
183// can be found in the git version control history of the project. The
184// omission of copyright and license comments in each file is in the
185// interest of source tree size.
186//
187// In addition, permission is hereby granted for all public header files
188// (include/* and arch/*/bits/*) and crt files intended to be linked into
189// applications (crt/*, ldso/dlstart.c, and arch/*/crt_arch.h) to omit
190// the copyright notice and permission notice otherwise required by the
191// license, and to use these files without any requirement of
192// attribution. These files include substantial contributions from:
193//
194// Bobby Bingham
195// John Spencer
196// Nicholas J. Kain
197// Rich Felker
198// Richard Pennington
199// Stefan Kristiansson
200// Szabolcs Nagy
201//
202// all of whom have explicitly granted such permission.
203//
204// This file previously contained text expressing a belief that most of
205// the files covered by the above exception were sufficiently trivial not
206// to be subject to copyright, resulting in confusion over whether it
207// negated the permissions granted in the license. In the spirit of
208// permissive licensing, and of not having licensing issues being an
209// obstacle to adoption, that text has been removed.
210const ( /* copyright.c:194:1: */
211 __musl__copyright__ = 0
212)
213
214const ( /* nameser.h:117:1: */
215 ns_uop_delete = 0
216 ns_uop_add = 1
217 ns_uop_max = 2
218)
219
220const ( /* nameser.h:147:1: */
221 ns_t_invalid = 0
222 ns_t_a = 1
223 ns_t_ns = 2
224 ns_t_md = 3
225 ns_t_mf = 4
226 ns_t_cname = 5
227 ns_t_soa = 6
228 ns_t_mb = 7
229 ns_t_mg = 8
230 ns_t_mr = 9
231 ns_t_null = 10
232 ns_t_wks = 11
233 ns_t_ptr = 12
234 ns_t_hinfo = 13
235 ns_t_minfo = 14
236 ns_t_mx = 15
237 ns_t_txt = 16
238 ns_t_rp = 17
239 ns_t_afsdb = 18
240 ns_t_x25 = 19
241 ns_t_isdn = 20
242 ns_t_rt = 21
243 ns_t_nsap = 22
244 ns_t_nsap_ptr = 23
245 ns_t_sig = 24
246 ns_t_key = 25
247 ns_t_px = 26
248 ns_t_gpos = 27
249 ns_t_aaaa = 28
250 ns_t_loc = 29
251 ns_t_nxt = 30
252 ns_t_eid = 31
253 ns_t_nimloc = 32
254 ns_t_srv = 33
255 ns_t_atma = 34
256 ns_t_naptr = 35
257 ns_t_kx = 36
258 ns_t_cert = 37
259 ns_t_a6 = 38
260 ns_t_dname = 39
261 ns_t_sink = 40
262 ns_t_opt = 41
263 ns_t_apl = 42
264 ns_t_tkey = 249
265 ns_t_tsig = 250
266 ns_t_ixfr = 251
267 ns_t_axfr = 252
268 ns_t_mailb = 253
269 ns_t_maila = 254
270 ns_t_any = 255
271 ns_t_zxfr = 256
272 ns_t_max = 65536
273)
274
275const ( /* nameser.h:210:1: */
276 ns_c_invalid = 0
277 ns_c_in = 1
278 ns_c_2 = 2
279 ns_c_chaos = 3
280 ns_c_hs = 4
281 ns_c_none = 254
282 ns_c_any = 255
283 ns_c_max = 65536
284)
285
286const ( /* nameser.h:221:1: */
287 ns_kt_rsa = 1
288 ns_kt_dh = 2
289 ns_kt_dsa = 3
290 ns_kt_private = 254
291)
292
293const ( /* nameser.h:228:1: */
294 cert_t_pkix = 1
295 cert_t_spki = 2
296 cert_t_pgp = 3
297 cert_t_url = 253
298 cert_t_oid = 254
299)
300
301const ( /* nameser.h:28:1: */
302 ns_s_qd = 0
303 ns_s_zn = 0
304 ns_s_an = 1
305 ns_s_pr = 1
306 ns_s_ns = 2
307 ns_s_ud = 2
308 ns_s_ar = 3
309 ns_s_max = 4
310)
311
312const ( /* nameser.h:75:1: */
313 ns_f_qr = 0
314 ns_f_opcode = 1
315 ns_f_aa = 2
316 ns_f_tc = 3
317 ns_f_rd = 4
318 ns_f_ra = 5
319 ns_f_z = 6
320 ns_f_ad = 7
321 ns_f_cd = 8
322 ns_f_rcode = 9
323 ns_f_max = 10
324)
325
326const ( /* nameser.h:89:1: */
327 ns_o_query = 0
328 ns_o_iquery = 1
329 ns_o_status = 2
330 ns_o_notify = 4
331 ns_o_update = 5
332 ns_o_max = 6
333)
334
335const ( /* nameser.h:98:1: */
336 ns_r_noerror = 0
337 ns_r_formerr = 1
338 ns_r_servfail = 2
339 ns_r_nxdomain = 3
340 ns_r_notimpl = 4
341 ns_r_refused = 5
342 ns_r_yxdomain = 6
343 ns_r_yxrrset = 7
344 ns_r_nxrrset = 8
345 ns_r_notauth = 9
346 ns_r_notzone = 10
347 ns_r_max = 11
348 ns_r_badvers = 16
349 ns_r_badsig = 16
350 ns_r_badkey = 17
351 ns_r_badtime = 18
352)
353
354type ptrdiff_t = int32 /* <builtin>:3:26 */
355
356type size_t = uint32 /* <builtin>:9:23 */
357
358type wchar_t = uint32 /* <builtin>:15:24 */
359
360/// typedef __ct_rune_t __wint_t;
361///
362///
363///
364/// typedef __uint_least16_t __char16_t;
365/// typedef __uint_least32_t __char32_t;
366///
367///
368///
369///
370///
371///
372///
373/// typedef struct {
374/// long long __max_align1 __attribute__((__aligned__(_Alignof(long long))));
375///
376/// long double __max_align2 __attribute__((__aligned__(_Alignof(long double))));
377///
378/// } __max_align_t;
379///
380/// typedef __uint64_t __dev_t;
381///
382/// typedef __uint32_t __fixpt_t;
383///
384///
385///
386///
387///
388/// typedef union {
389/// char __mbstate8[128];
390/// __int64_t _mbstateL;
391/// } __mbstate_t;
392///
393/// typedef __uintmax_t __rman_res_t;
394///
395///
396///
397///
398///
399///
400/// typedef __builtin_va_list __va_list;
401///
402///
403///
404///
405///
406///
407/// typedef __va_list __gnuc_va_list;
408///
409///
410///
411///
412/// unsigned long ___runetype(__ct_rune_t) __attribute__((__pure__));
413/// __ct_rune_t ___tolower(__ct_rune_t) __attribute__((__pure__));
414/// __ct_rune_t ___toupper(__ct_rune_t) __attribute__((__pure__));
415///
416///
417/// extern int __mb_sb_limit;
418
419type _RuneEntry = struct {
420 F__min int32
421 F__max int32
422 F__map int32
423 F__types uintptr
424} /* table.cpp.c:290:3 */
425
426type _RuneRange = struct {
427 F__nranges int32
428 F__ranges uintptr
429} /* table.cpp.c:295:3 */
430
431type _RuneLocale = struct {
432 F__magic [8]uint8
433 F__encoding [32]uint8
434 F__sgetrune uintptr
435 F__sputrune uintptr
436 F__invalid_rune int32
437 F__runetype [256]uint32
438 F__maplower [256]int32
439 F__mapupper [256]int32
440 F__runetype_ext _RuneRange
441 F__maplower_ext _RuneRange
442 F__mapupper_ext _RuneRange
443 F__variable uintptr
444 F__variable_len int32
445} /* table.cpp.c:320:3 */
446///
447/// extern const _RuneLocale _DefaultRuneLocale;
448/// extern const _RuneLocale *_CurrentRuneLocale;
449///
450///
451///
452/// extern _Thread_local const _RuneLocale *_ThreadRuneLocale;
453/// static __inline const _RuneLocale *__getCurrentRuneLocale(void)
454/// {
455///
456/// if (_ThreadRuneLocale)
457/// return _ThreadRuneLocale;
458/// return _CurrentRuneLocale;
459/// }
460///
461///
462///
463///
464///
465/// static __inline int
466/// __maskrune(__ct_rune_t _c, unsigned long _f)
467/// {
468/// return ((_c < 0 || _c >= (1 <<8 )) ? ___runetype(_c) :
469/// (__getCurrentRuneLocale())->__runetype[_c]) & _f;
470/// }
471///
472/// static __inline int
473/// __sbmaskrune(__ct_rune_t _c, unsigned long _f)
474/// {
475/// return (_c < 0 || _c >= __mb_sb_limit) ? 0 :
476/// (__getCurrentRuneLocale())->__runetype[_c] & _f;
477/// }
478///
479/// static __inline int
480/// __istype(__ct_rune_t _c, unsigned long _f)
481/// {
482/// return (!!__maskrune(_c, _f));
483/// }
484///
485/// static __inline int
486/// __sbistype(__ct_rune_t _c, unsigned long _f)
487/// {
488/// return (!!__sbmaskrune(_c, _f));
489/// }
490///
491/// static __inline int
492/// __isctype(__ct_rune_t _c, unsigned long _f)
493/// {
494/// return (_c < 0 || _c >= 128) ? 0 :
495/// !!(_DefaultRuneLocale.__runetype[_c] & _f);
496/// }
497///
498/// static __inline __ct_rune_t
499/// __toupper(__ct_rune_t _c)
500/// {
501/// return (_c < 0 || _c >= (1 <<8 )) ? ___toupper(_c) :
502/// (__getCurrentRuneLocale())->__mapupper[_c];
503/// }
504///
505/// static __inline __ct_rune_t
506/// __sbtoupper(__ct_rune_t _c)
507/// {
508/// return (_c < 0 || _c >= __mb_sb_limit) ? _c :
509/// (__getCurrentRuneLocale())->__mapupper[_c];
510/// }
511///
512/// static __inline __ct_rune_t
513/// __tolower(__ct_rune_t _c)
514/// {
515/// return (_c < 0 || _c >= (1 <<8 )) ? ___tolower(_c) :
516/// (__getCurrentRuneLocale())->__maplower[_c];
517/// }
518///
519/// static __inline __ct_rune_t
520/// __sbtolower(__ct_rune_t _c)
521/// {
522/// return (_c < 0 || _c >= __mb_sb_limit) ? _c :
523/// (__getCurrentRuneLocale())->__maplower[_c];
524/// }
525///
526/// static __inline int
527/// __wcwidth(__ct_rune_t _c)
528/// {
529/// unsigned int _x;
530///
531/// if (_c == 0)
532/// return (0);
533/// _x = (unsigned int)__maskrune(_c, 0xe0000000L|0x00040000L);
534/// if ((_x & 0xe0000000L) != 0)
535/// return ((_x & 0xe0000000L) >> 30);
536/// return ((_x & 0x00040000L) != 0 ? 1 : -1);
537/// }
538///
539///
540///
541/// int isalnum(int);
542/// int isalpha(int);
543/// int iscntrl(int);
544/// int isdigit(int);
545/// int isgraph(int);
546/// int islower(int);
547/// int isprint(int);
548/// int ispunct(int);
549/// int isspace(int);
550/// int isupper(int);
551/// int isxdigit(int);
552/// int tolower(int);
553/// int toupper(int);
554///
555///
556/// int isascii(int);
557/// int toascii(int);
558///
559///
560///
561/// int isblank(int);
562///
563///
564///
565/// int digittoint(int);
566/// int ishexnumber(int);
567/// int isideogram(int);
568/// int isnumber(int);
569/// int isphonogram(int);
570/// int isrune(int);
571/// int isspecial(int);
572///
573///
574///
575///
576///
577/// typedef struct _xlocale *locale_t;
578///
579///
580///
581///
582/// unsigned long ___runetype_l(__ct_rune_t, locale_t) __attribute__((__pure__));
583/// __ct_rune_t ___tolower_l(__ct_rune_t, locale_t) __attribute__((__pure__));
584/// __ct_rune_t ___toupper_l(__ct_rune_t, locale_t) __attribute__((__pure__));
585/// _RuneLocale *__runes_for_locale(locale_t, int*);
586///
587/// inline int
588/// __sbmaskrune_l(__ct_rune_t __c, unsigned long __f, locale_t __loc);
589/// inline int
590/// __sbistype_l(__ct_rune_t __c, unsigned long __f, locale_t __loc);
591///
592/// inline int
593/// __sbmaskrune_l(__ct_rune_t __c, unsigned long __f, locale_t __loc)
594/// {
595/// int __limit;
596/// _RuneLocale *runes = __runes_for_locale(__loc, &__limit);
597/// return (__c < 0 || __c >= __limit) ? 0 :
598/// runes->__runetype[__c] & __f;
599/// }
600///
601/// inline int
602/// __sbistype_l(__ct_rune_t __c, unsigned long __f, locale_t __loc)
603/// {
604/// return (!!__sbmaskrune_l(__c, __f, __loc));
605/// }
606///
607///
608///
609///
610///
611///
612///
613/// inline int isalnum_l(int, locale_t); inline int isalnum_l(int __c, locale_t __l) { return __sbistype_l(__c, 0x00000100L|0x00000400L|0x00400000L, __l); }
614/// inline int isalpha_l(int, locale_t); inline int isalpha_l(int __c, locale_t __l) { return __sbistype_l(__c, 0x00000100L, __l); }
615/// inline int isblank_l(int, locale_t); inline int isblank_l(int __c, locale_t __l) { return __sbistype_l(__c, 0x00020000L, __l); }
616/// inline int iscntrl_l(int, locale_t); inline int iscntrl_l(int __c, locale_t __l) { return __sbistype_l(__c, 0x00000200L, __l); }
617/// inline int isdigit_l(int, locale_t); inline int isdigit_l(int __c, locale_t __l) { return __sbistype_l(__c, 0x00000400L, __l); }
618/// inline int isgraph_l(int, locale_t); inline int isgraph_l(int __c, locale_t __l) { return __sbistype_l(__c, 0x00000800L, __l); }
619/// inline int ishexnumber_l(int, locale_t); inline int ishexnumber_l(int __c, locale_t __l) { return __sbistype_l(__c, 0x00010000L, __l); }
620/// inline int isideogram_l(int, locale_t); inline int isideogram_l(int __c, locale_t __l) { return __sbistype_l(__c, 0x00080000L, __l); }
621/// inline int islower_l(int, locale_t); inline int islower_l(int __c, locale_t __l) { return __sbistype_l(__c, 0x00001000L, __l); }
622/// inline int isnumber_l(int, locale_t); inline int isnumber_l(int __c, locale_t __l) { return __sbistype_l(__c, 0x00000400L|0x00400000L, __l); }
623/// inline int isphonogram_l(int, locale_t); inline int isphonogram_l(int __c, locale_t __l) { return __sbistype_l(__c, 0x00200000L, __l); }
624/// inline int isprint_l(int, locale_t); inline int isprint_l(int __c, locale_t __l) { return __sbistype_l(__c, 0x00040000L, __l); }
625/// inline int ispunct_l(int, locale_t); inline int ispunct_l(int __c, locale_t __l) { return __sbistype_l(__c, 0x00002000L, __l); }
626/// inline int isrune_l(int, locale_t); inline int isrune_l(int __c, locale_t __l) { return __sbistype_l(__c, 0xFFFFFF00L, __l); }
627/// inline int isspace_l(int, locale_t); inline int isspace_l(int __c, locale_t __l) { return __sbistype_l(__c, 0x00004000L, __l); }
628/// inline int isspecial_l(int, locale_t); inline int isspecial_l(int __c, locale_t __l) { return __sbistype_l(__c, 0x00100000L, __l); }
629/// inline int isupper_l(int, locale_t); inline int isupper_l(int __c, locale_t __l) { return __sbistype_l(__c, 0x00008000L, __l); }
630/// inline int isxdigit_l(int, locale_t); inline int isxdigit_l(int __c, locale_t __l) { return __sbistype_l(__c, 0x00010000L, __l); }
631///
632/// inline int digittoint_l(int, locale_t);
633/// inline int tolower_l(int, locale_t);
634/// inline int toupper_l(int, locale_t);
635///
636/// inline int digittoint_l(int __c, locale_t __l)
637/// { return __sbmaskrune_l((__c), 0xFF, __l); }
638///
639/// inline int tolower_l(int __c, locale_t __l)
640/// {
641/// int __limit;
642/// _RuneLocale *__runes = __runes_for_locale(__l, &__limit);
643/// return (__c < 0 || __c >= __limit) ? __c :
644/// __runes->__maplower[__c];
645/// }
646/// inline int toupper_l(int __c, locale_t __l)
647/// {
648/// int __limit;
649/// _RuneLocale *__runes = __runes_for_locale(__l, &__limit);
650/// return (__c < 0 || __c >= __limit) ? __c :
651/// __runes->__mapupper[__c];
652/// }
653///
654///
655///
656///
657///
658///
659///
660///
661///
662///
663///
664///
665///
666///
667///
668/// typedef __mbstate_t mbstate_t;
669///
670///
671///
672///
673/// typedef __size_t size_t;
674///
675///
676///
677///
678///
679/// typedef __va_list va_list;
680///
681///
682///
683///
684///
685///
686/// typedef ___wchar_t wchar_t;
687///
688///
689///
690///
691///
692/// typedef __wint_t wint_t;
693///
694/// typedef struct __sFILE FILE;
695///
696/// struct tm;
697///
698///
699/// wint_t btowc(int);
700/// wint_t fgetwc(FILE *);
701/// wchar_t *
702/// fgetws(wchar_t * restrict, int, FILE * restrict);
703/// wint_t fputwc(wchar_t, FILE *);
704/// int fputws(const wchar_t * restrict, FILE * restrict);
705/// int fwide(FILE *, int);
706/// int fwprintf(FILE * restrict, const wchar_t * restrict, ...);
707/// int fwscanf(FILE * restrict, const wchar_t * restrict, ...);
708/// wint_t getwc(FILE *);
709/// wint_t getwchar(void);
710/// size_t mbrlen(const char * restrict, size_t, mbstate_t * restrict);
711/// size_t mbrtowc(wchar_t * restrict, const char * restrict, size_t,
712/// mbstate_t * restrict);
713/// int mbsinit(const mbstate_t *);
714/// size_t mbsrtowcs(wchar_t * restrict, const char ** restrict, size_t,
715/// mbstate_t * restrict);
716/// wint_t putwc(wchar_t, FILE *);
717/// wint_t putwchar(wchar_t);
718/// int swprintf(wchar_t * restrict, size_t n, const wchar_t * restrict,
719/// ...);
720/// int swscanf(const wchar_t * restrict, const wchar_t * restrict, ...);
721/// wint_t ungetwc(wint_t, FILE *);
722/// int vfwprintf(FILE * restrict, const wchar_t * restrict,
723/// __va_list);
724/// int vswprintf(wchar_t * restrict, size_t n, const wchar_t * restrict,
725/// __va_list);
726/// int vwprintf(const wchar_t * restrict, __va_list);
727/// size_t wcrtomb(char * restrict, wchar_t, mbstate_t * restrict);
728/// wchar_t *wcscat(wchar_t * restrict, const wchar_t * restrict);
729/// wchar_t *wcschr(const wchar_t *, wchar_t) __attribute__((__pure__));
730/// int wcscmp(const wchar_t *, const wchar_t *) __attribute__((__pure__));
731/// int wcscoll(const wchar_t *, const wchar_t *);
732/// wchar_t *wcscpy(wchar_t * restrict, const wchar_t * restrict);
733/// size_t wcscspn(const wchar_t *, const wchar_t *) __attribute__((__pure__));
734/// size_t wcsftime(wchar_t * restrict, size_t, const wchar_t * restrict,
735/// const struct tm * restrict);
736/// size_t wcslen(const wchar_t *) __attribute__((__pure__));
737/// wchar_t *wcsncat(wchar_t * restrict, const wchar_t * restrict,
738/// size_t);
739/// int wcsncmp(const wchar_t *, const wchar_t *, size_t) __attribute__((__pure__));
740/// wchar_t *wcsncpy(wchar_t * restrict , const wchar_t * restrict, size_t);
741/// wchar_t *wcspbrk(const wchar_t *, const wchar_t *) __attribute__((__pure__));
742/// wchar_t *wcsrchr(const wchar_t *, wchar_t) __attribute__((__pure__));
743/// size_t wcsrtombs(char * restrict, const wchar_t ** restrict, size_t,
744/// mbstate_t * restrict);
745/// size_t wcsspn(const wchar_t *, const wchar_t *) __attribute__((__pure__));
746/// wchar_t *wcsstr(const wchar_t * restrict, const wchar_t * restrict)
747/// __attribute__((__pure__));
748/// size_t wcsxfrm(wchar_t * restrict, const wchar_t * restrict, size_t);
749/// int wctob(wint_t);
750/// double wcstod(const wchar_t * restrict, wchar_t ** restrict);
751/// wchar_t *wcstok(wchar_t * restrict, const wchar_t * restrict,
752/// wchar_t ** restrict);
753/// long wcstol(const wchar_t * restrict, wchar_t ** restrict, int);
754/// unsigned long
755/// wcstoul(const wchar_t * restrict, wchar_t ** restrict, int);
756/// wchar_t *wmemchr(const wchar_t *, wchar_t, size_t) __attribute__((__pure__));
757/// int wmemcmp(const wchar_t *, const wchar_t *, size_t) __attribute__((__pure__));
758/// wchar_t *wmemcpy(wchar_t * restrict, const wchar_t * restrict, size_t);
759/// wchar_t *wmemmove(wchar_t *, const wchar_t *, size_t);
760/// wchar_t *wmemset(wchar_t *, wchar_t, size_t);
761/// int wprintf(const wchar_t * restrict, ...);
762/// int wscanf(const wchar_t * restrict, ...);
763///
764///
765/// extern FILE *__stdinp;
766/// extern FILE *__stdoutp;
767/// extern FILE *__stderrp;
768///
769/// int vfwscanf(FILE * restrict, const wchar_t * restrict,
770/// __va_list);
771/// int vswscanf(const wchar_t * restrict, const wchar_t * restrict,
772/// __va_list);
773/// int vwscanf(const wchar_t * restrict, __va_list);
774/// float wcstof(const wchar_t * restrict, wchar_t ** restrict);
775/// long double
776/// wcstold(const wchar_t * restrict, wchar_t ** restrict);
777///
778///
779/// long long
780/// wcstoll(const wchar_t * restrict, wchar_t ** restrict, int);
781///
782/// unsigned long long
783/// wcstoull(const wchar_t * restrict, wchar_t ** restrict, int);
784///
785///
786///
787///
788/// int wcswidth(const wchar_t *, size_t);
789/// int wcwidth(wchar_t);
790///
791///
792///
793///
794/// size_t mbsnrtowcs(wchar_t * restrict, const char ** restrict, size_t,
795/// size_t, mbstate_t * restrict);
796/// FILE *open_wmemstream(wchar_t **, size_t *);
797/// wchar_t *wcpcpy(wchar_t * restrict, const wchar_t * restrict);
798/// wchar_t *wcpncpy(wchar_t * restrict, const wchar_t * restrict, size_t);
799/// wchar_t *wcsdup(const wchar_t *) __attribute__((__malloc__));
800/// int wcscasecmp(const wchar_t *, const wchar_t *);
801/// int wcsncasecmp(const wchar_t *, const wchar_t *, size_t n);
802/// size_t wcsnlen(const wchar_t *, size_t) __attribute__((__pure__));
803/// size_t wcsnrtombs(char * restrict, const wchar_t ** restrict, size_t,
804/// size_t, mbstate_t * restrict);
805///
806///
807///
808/// wchar_t *fgetwln(FILE * restrict, size_t * restrict);
809/// size_t wcslcat(wchar_t *, const wchar_t *, size_t);
810/// size_t wcslcpy(wchar_t *, const wchar_t *, size_t);
811///
812///
813///
814///
815///
816/// int wcscasecmp_l(const wchar_t *, const wchar_t *,
817/// locale_t);
818/// int wcsncasecmp_l(const wchar_t *, const wchar_t *, size_t,
819/// locale_t);
820/// int wcscoll_l(const wchar_t *, const wchar_t *, locale_t);
821/// size_t wcsxfrm_l(wchar_t * restrict,
822/// const wchar_t * restrict, size_t, locale_t);
823///
824///
825///
826///
827///
828///
829///
830///
831///
832///
833///
834///
835/// struct lconv {
836/// char *decimal_point;
837/// char *thousands_sep;
838/// char *grouping;
839/// char *int_curr_symbol;
840/// char *currency_symbol;
841/// char *mon_decimal_point;
842/// char *mon_thousands_sep;
843/// char *mon_grouping;
844/// char *positive_sign;
845/// char *negative_sign;
846/// char int_frac_digits;
847/// char frac_digits;
848/// char p_cs_precedes;
849/// char p_sep_by_space;
850/// char n_cs_precedes;
851/// char n_sep_by_space;
852/// char p_sign_posn;
853/// char n_sign_posn;
854/// char int_p_cs_precedes;
855/// char int_n_cs_precedes;
856/// char int_p_sep_by_space;
857/// char int_n_sep_by_space;
858/// char int_p_sign_posn;
859/// char int_n_sign_posn;
860/// };
861///
862///
863/// struct lconv *localeconv(void);
864/// char *setlocale(int, const char *);
865///
866///
867///
868///
869/// locale_t duplocale(locale_t base);
870/// void freelocale(locale_t loc);
871/// locale_t newlocale(int mask, const char *locale, locale_t base);
872/// const char *querylocale(int mask, locale_t loc);
873/// locale_t uselocale(locale_t loc);
874///
875///
876///
877///
878///
879///
880///
881///
882///
883///
884///
885/// wint_t btowc_l(int, locale_t);
886/// wint_t fgetwc_l(FILE *, locale_t);
887/// wchar_t *fgetws_l(wchar_t * restrict, int, FILE * restrict,
888/// locale_t);
889/// wint_t fputwc_l(wchar_t, FILE *, locale_t);
890/// int fputws_l(const wchar_t * restrict, FILE * restrict,
891/// locale_t);
892/// int fwprintf_l(FILE * restrict, locale_t,
893/// const wchar_t * restrict, ...);
894/// int fwscanf_l(FILE * restrict, locale_t,
895/// const wchar_t * restrict, ...);
896/// wint_t getwc_l(FILE *, locale_t);
897/// wint_t getwchar_l(locale_t);
898/// size_t mbrlen_l(const char * restrict, size_t,
899/// mbstate_t * restrict, locale_t);
900/// size_t mbrtowc_l(wchar_t * restrict,
901/// const char * restrict, size_t,
902/// mbstate_t * restrict, locale_t);
903/// int mbsinit_l(const mbstate_t *, locale_t);
904/// size_t mbsrtowcs_l(wchar_t * restrict,
905/// const char ** restrict, size_t,
906/// mbstate_t * restrict, locale_t);
907/// wint_t putwc_l(wchar_t, FILE *, locale_t);
908/// wint_t putwchar_l(wchar_t, locale_t);
909/// int swprintf_l(wchar_t * restrict, size_t n, locale_t,
910/// const wchar_t * restrict, ...);
911/// int swscanf_l(const wchar_t * restrict, locale_t,
912/// const wchar_t * restrict, ...);
913/// wint_t ungetwc_l(wint_t, FILE *, locale_t);
914/// int vfwprintf_l(FILE * restrict, locale_t,
915/// const wchar_t * restrict, __va_list);
916/// int vswprintf_l(wchar_t * restrict, size_t n, locale_t,
917/// const wchar_t * restrict, __va_list);
918/// int vwprintf_l(locale_t, const wchar_t * restrict,
919/// __va_list);
920/// size_t wcrtomb_l(char * restrict, wchar_t,
921/// mbstate_t * restrict, locale_t);
922/// size_t wcsftime_l(wchar_t * restrict, size_t,
923/// const wchar_t * restrict,
924/// const struct tm * restrict, locale_t);
925/// size_t wcsrtombs_l(char * restrict,
926/// const wchar_t ** restrict, size_t,
927/// mbstate_t * restrict, locale_t);
928/// double wcstod_l(const wchar_t * restrict,
929/// wchar_t ** restrict, locale_t);
930/// long wcstol_l(const wchar_t * restrict,
931/// wchar_t ** restrict, int, locale_t);
932/// unsigned long wcstoul_l(const wchar_t * restrict,
933/// wchar_t ** restrict, int, locale_t);
934/// int wcswidth_l(const wchar_t *, size_t, locale_t);
935/// int wctob_l(wint_t, locale_t);
936/// int wcwidth_l(wchar_t, locale_t);
937/// int wprintf_l(locale_t, const wchar_t * restrict, ...);
938/// int wscanf_l(locale_t, const wchar_t * restrict, ...);
939/// int vfwscanf_l(FILE * restrict, locale_t,
940/// const wchar_t * restrict, __va_list);
941/// int vswscanf_l(const wchar_t * restrict, locale_t,
942/// const wchar_t *restrict, __va_list);
943/// int vwscanf_l(locale_t, const wchar_t * restrict,
944/// __va_list);
945/// float wcstof_l(const wchar_t * restrict,
946/// wchar_t ** restrict, locale_t);
947/// long double wcstold_l(const wchar_t * restrict,
948/// wchar_t ** restrict, locale_t);
949/// long long wcstoll_l(const wchar_t * restrict,
950/// wchar_t ** restrict, int, locale_t);
951/// unsigned long long wcstoull_l(const wchar_t * restrict,
952/// wchar_t ** restrict, int, locale_t);
953/// size_t mbsnrtowcs_l(wchar_t * restrict,
954/// const char ** restrict, size_t, size_t,
955/// mbstate_t * restrict, locale_t);
956/// size_t wcsnrtombs_l(char * restrict,
957/// const wchar_t ** restrict, size_t, size_t,
958/// mbstate_t * restrict, locale_t);
959///
960///
961///
962///
963///
964/// struct lconv *localeconv_l(locale_t);
965///
966///
967///
968///
969///
970///
971///
972///
973///
974/// typedef __rune_t rune_t;
975///
976/// typedef struct {
977/// int quot;
978/// int rem;
979/// } div_t;
980///
981/// typedef struct {
982/// long quot;
983/// long rem;
984/// } ldiv_t;
985///
986///
987///
988///
989///
990/// double atof_l(const char *, locale_t);
991/// int atoi_l(const char *, locale_t);
992/// long atol_l(const char *, locale_t);
993/// long long atoll_l(const char *, locale_t);
994/// int mblen_l(const char *, size_t, locale_t);
995/// size_t mbstowcs_l(wchar_t * restrict,
996/// const char * restrict, size_t, locale_t);
997/// int mbtowc_l(wchar_t * restrict,
998/// const char * restrict, size_t, locale_t);
999/// double strtod_l(const char *, char **, locale_t);
1000/// float strtof_l(const char *, char **, locale_t);
1001/// long strtol_l(const char *, char **, int, locale_t);
1002/// long double strtold_l(const char *, char **, locale_t);
1003/// long long strtoll_l(const char *, char **, int, locale_t);
1004/// unsigned long strtoul_l(const char *, char **, int, locale_t);
1005/// unsigned long long strtoull_l(const char *, char **, int, locale_t);
1006/// size_t wcstombs_l(char * restrict,
1007/// const wchar_t * restrict, size_t, locale_t);
1008/// int wctomb_l(char *, wchar_t, locale_t);
1009///
1010/// int ___mb_cur_max_l(locale_t);
1011///
1012///
1013/// extern int __mb_cur_max;
1014/// extern int ___mb_cur_max(void);
1015///
1016///
1017/// _Noreturn void abort(void);
1018/// int abs(int) __attribute__((__const__));
1019/// int atexit(void (* )(void));
1020/// double atof(const char *);
1021/// int atoi(const char *);
1022/// long atol(const char *);
1023/// void *bsearch(const void *, const void *, size_t,
1024/// size_t, int (*)(const void * , const void *));
1025/// void *calloc(size_t, size_t) __attribute__((__malloc__)) __attribute__((__warn_unused_result__))
1026/// __attribute__((__alloc_size__(1, 2)));
1027/// div_t div(int, int) __attribute__((__const__));
1028/// _Noreturn void exit(int);
1029/// void free(void *);
1030/// char *getenv(const char *);
1031/// long labs(long) __attribute__((__const__));
1032/// ldiv_t ldiv(long, long) __attribute__((__const__));
1033/// void *malloc(size_t) __attribute__((__malloc__)) __attribute__((__warn_unused_result__)) __attribute__((__alloc_size__(1)));
1034/// int mblen(const char *, size_t);
1035/// size_t mbstowcs(wchar_t * restrict , const char * restrict, size_t);
1036/// int mbtowc(wchar_t * restrict, const char * restrict, size_t);
1037/// void qsort(void *, size_t, size_t,
1038/// int (* )(const void *, const void *));
1039/// int rand(void);
1040/// void *realloc(void *, size_t) __attribute__((__warn_unused_result__)) __attribute__((__alloc_size__(2)));
1041/// void srand(unsigned);
1042/// double strtod(const char * restrict, char ** restrict);
1043/// float strtof(const char * restrict, char ** restrict);
1044/// long strtol(const char * restrict, char ** restrict, int);
1045/// long double
1046/// strtold(const char * restrict, char ** restrict);
1047/// unsigned long
1048/// strtoul(const char * restrict, char ** restrict, int);
1049/// int system(const char *);
1050/// int wctomb(char *, wchar_t);
1051/// size_t wcstombs(char * restrict, const wchar_t * restrict, size_t);
1052///
1053/// typedef struct {
1054/// long long quot;
1055/// long long rem;
1056/// } lldiv_t;
1057///
1058///
1059/// long long
1060/// atoll(const char *);
1061///
1062/// long long
1063/// llabs(long long) __attribute__((__const__));
1064///
1065/// lldiv_t lldiv(long long, long long) __attribute__((__const__));
1066///
1067/// long long
1068/// strtoll(const char * restrict, char ** restrict, int);
1069///
1070/// unsigned long long
1071/// strtoull(const char * restrict, char ** restrict, int);
1072///
1073///
1074/// _Noreturn void _Exit(int);
1075///
1076///
1077///
1078///
1079///
1080///
1081/// void * aligned_alloc(size_t, size_t) __attribute__((__malloc__)) __attribute__((__alloc_align__(1)))
1082/// __attribute__((__alloc_size__(2)));
1083/// int at_quick_exit(void (*)(void));
1084/// _Noreturn void
1085/// quick_exit(int);
1086///
1087///
1088///
1089///
1090///
1091/// char *realpath(const char * restrict, char * restrict);
1092///
1093///
1094/// int rand_r(unsigned *);
1095///
1096///
1097/// int posix_memalign(void **, size_t, size_t);
1098/// int setenv(const char *, const char *, int);
1099/// int unsetenv(const char *);
1100///
1101///
1102///
1103/// int getsubopt(char **, char *const *, char **);
1104///
1105/// char *mkdtemp(char *);
1106///
1107///
1108///
1109/// int mkstemp(char *);
1110///
1111/// long a64l(const char *);
1112/// double drand48(void);
1113///
1114/// double erand48(unsigned short[3]);
1115///
1116///
1117/// char *initstate(unsigned int, char *, size_t);
1118/// long jrand48(unsigned short[3]);
1119/// char *l64a(long);
1120/// void lcong48(unsigned short[7]);
1121/// long lrand48(void);
1122///
1123/// char *mktemp(char *);
1124///
1125///
1126/// long mrand48(void);
1127/// long nrand48(unsigned short[3]);
1128/// int putenv(char *);
1129/// long random(void);
1130/// unsigned short
1131/// *seed48(unsigned short[3]);
1132/// char *setstate( char *);
1133/// void srand48(long);
1134/// void srandom(unsigned int);
1135///
1136///
1137///
1138/// int grantpt(int);
1139/// int posix_openpt(int);
1140/// char *ptsname(int);
1141/// int unlockpt(int);
1142///
1143///
1144///
1145/// int ptsname_r(int, char *, size_t);
1146///
1147///
1148///
1149/// extern const char *malloc_conf;
1150/// extern void (*malloc_message)(void *, const char *);
1151///
1152/// void abort2(const char *, int, void **) __attribute__((__noreturn__));
1153/// __uint32_t
1154/// arc4random(void);
1155/// void arc4random_buf(void *, size_t);
1156/// __uint32_t
1157/// arc4random_uniform(__uint32_t);
1158///
1159///
1160///
1161///
1162///
1163///
1164/// char *getbsize(int *, long *);
1165///
1166/// char *cgetcap(char *, const char *, int);
1167/// int cgetclose(void);
1168/// int cgetent(char **, char **, const char *);
1169/// int cgetfirst(char **, char **);
1170/// int cgetmatch(const char *, const char *);
1171/// int cgetnext(char **, char **);
1172/// int cgetnum(char *, const char *, long *);
1173/// int cgetset(const char *);
1174/// int cgetstr(char *, const char *, char **);
1175/// int cgetustr(char *, const char *, char **);
1176///
1177/// int daemon(int, int);
1178/// int daemonfd(int, int);
1179/// char *devname(__dev_t, __mode_t);
1180/// char *devname_r(__dev_t, __mode_t, char *, int);
1181/// char *fdevname(int);
1182/// char *fdevname_r(int, char *, int);
1183/// int getloadavg(double [], int);
1184/// const char *
1185/// getprogname(void);
1186///
1187/// int heapsort(void *, size_t, size_t,
1188/// int (* )(const void *, const void *));
1189///
1190///
1191///
1192///
1193///
1194///
1195/// int l64a_r(long, char *, int);
1196/// int mergesort(void *, size_t, size_t, int (*)(const void *, const void *));
1197///
1198///
1199///
1200/// int mkostemp(char *, int);
1201/// int mkostemps(char *, int, int);
1202/// int mkostempsat(int, char *, int, int);
1203/// void qsort_r(void *, size_t, size_t, void *,
1204/// int (*)(void *, const void *, const void *));
1205/// int radixsort(const unsigned char **, int, const unsigned char *,
1206/// unsigned);
1207/// void *reallocarray(void *, size_t, size_t) __attribute__((__warn_unused_result__))
1208/// __attribute__((__alloc_size__(2, 3)));
1209/// void *reallocf(void *, size_t) __attribute__((__warn_unused_result__)) __attribute__((__alloc_size__(2)));
1210/// int rpmatch(const char *);
1211/// void setprogname(const char *);
1212/// int sradixsort(const unsigned char **, int, const unsigned char *,
1213/// unsigned);
1214/// void srandomdev(void);
1215/// long long
1216/// strtonum(const char *, long long, long long, const char **);
1217///
1218///
1219/// __int64_t
1220/// strtoq(const char *, char **, int);
1221/// __uint64_t
1222/// strtouq(const char *, char **, int);
1223///
1224/// extern char *suboptarg;
1225///
1226///
1227///
1228///
1229///
1230///
1231/// typedef size_t rsize_t;
1232///
1233///
1234///
1235///
1236/// typedef int errno_t;
1237///
1238///
1239///
1240/// typedef void (*constraint_handler_t)(const char * restrict,
1241/// void * restrict, errno_t);
1242///
1243/// constraint_handler_t set_constraint_handler_s(constraint_handler_t handler);
1244///
1245/// _Noreturn void abort_handler_s(const char * restrict, void * restrict,
1246/// errno_t);
1247///
1248/// void ignore_handler_s(const char * restrict, void * restrict, errno_t);
1249///
1250/// errno_t qsort_s(void *, rsize_t, rsize_t,
1251/// int (*)(const void *, const void *, void *), void *);
1252///
1253///
1254///
1255///
1256///
1257///
1258///
1259///
1260///
1261///
1262///
1263///
1264///
1265///
1266///
1267///
1268///
1269///
1270///
1271///
1272///
1273///
1274///
1275/// typedef __int8_t int8_t;
1276///
1277///
1278///
1279///
1280/// typedef __int16_t int16_t;
1281///
1282///
1283///
1284///
1285/// typedef __int32_t int32_t;
1286///
1287///
1288///
1289///
1290/// typedef __int64_t int64_t;
1291///
1292///
1293///
1294///
1295/// typedef __uint8_t uint8_t;
1296///
1297///
1298///
1299///
1300/// typedef __uint16_t uint16_t;
1301///
1302///
1303///
1304///
1305/// typedef __uint32_t uint32_t;
1306///
1307///
1308///
1309///
1310/// typedef __uint64_t uint64_t;
1311///
1312///
1313///
1314///
1315/// typedef __intptr_t intptr_t;
1316///
1317///
1318///
1319/// typedef __uintptr_t uintptr_t;
1320///
1321///
1322///
1323/// typedef __intmax_t intmax_t;
1324///
1325///
1326///
1327/// typedef __uintmax_t uintmax_t;
1328///
1329///
1330/// typedef __int_least8_t int_least8_t;
1331/// typedef __int_least16_t int_least16_t;
1332/// typedef __int_least32_t int_least32_t;
1333/// typedef __int_least64_t int_least64_t;
1334///
1335/// typedef __uint_least8_t uint_least8_t;
1336/// typedef __uint_least16_t uint_least16_t;
1337/// typedef __uint_least32_t uint_least32_t;
1338/// typedef __uint_least64_t uint_least64_t;
1339///
1340/// typedef __int_fast8_t int_fast8_t;
1341/// typedef __int_fast16_t int_fast16_t;
1342/// typedef __int_fast32_t int_fast32_t;
1343/// typedef __int_fast64_t int_fast64_t;
1344///
1345/// typedef __uint_fast8_t uint_fast8_t;
1346/// typedef __uint_fast16_t uint_fast16_t;
1347/// typedef __uint_fast32_t uint_fast32_t;
1348/// typedef __uint_fast64_t uint_fast64_t;
1349///
1350///
1351///
1352///
1353///
1354///
1355///
1356///
1357///
1358///
1359///
1360///
1361///
1362///
1363///
1364///
1365///
1366/// struct pthread;
1367/// struct pthread_attr;
1368/// struct pthread_cond;
1369/// struct pthread_cond_attr;
1370/// struct pthread_mutex;
1371/// struct pthread_mutex_attr;
1372/// struct pthread_once;
1373/// struct pthread_rwlock;
1374/// struct pthread_rwlockattr;
1375/// struct pthread_barrier;
1376/// struct pthread_barrier_attr;
1377/// struct pthread_spinlock;
1378///
1379/// typedef struct pthread *pthread_t;
1380///
1381///
1382/// typedef struct pthread_attr *pthread_attr_t;
1383/// typedef struct pthread_mutex *pthread_mutex_t;
1384/// typedef struct pthread_mutex_attr *pthread_mutexattr_t;
1385/// typedef struct pthread_cond *pthread_cond_t;
1386/// typedef struct pthread_cond_attr *pthread_condattr_t;
1387/// typedef int pthread_key_t;
1388/// typedef struct pthread_once pthread_once_t;
1389/// typedef struct pthread_rwlock *pthread_rwlock_t;
1390/// typedef struct pthread_rwlockattr *pthread_rwlockattr_t;
1391/// typedef struct pthread_barrier *pthread_barrier_t;
1392/// typedef struct pthread_barrierattr *pthread_barrierattr_t;
1393/// typedef struct pthread_spinlock *pthread_spinlock_t;
1394///
1395///
1396///
1397///
1398///
1399///
1400///
1401/// typedef void *pthread_addr_t;
1402/// typedef void *(*pthread_startroutine_t)(void *);
1403///
1404///
1405///
1406///
1407/// struct pthread_once {
1408/// int state;
1409/// pthread_mutex_t mutex;
1410/// };
1411///
1412///
1413///
1414/// typedef unsigned char u_char;
1415/// typedef unsigned short u_short;
1416/// typedef unsigned int u_int;
1417/// typedef unsigned long u_long;
1418///
1419/// typedef unsigned short ushort;
1420/// typedef unsigned int uint;
1421///
1422/// typedef __uint8_t u_int8_t;
1423/// typedef __uint16_t u_int16_t;
1424/// typedef __uint32_t u_int32_t;
1425/// typedef __uint64_t u_int64_t;
1426///
1427/// typedef __uint64_t u_quad_t;
1428/// typedef __int64_t quad_t;
1429/// typedef quad_t * qaddr_t;
1430///
1431/// typedef char * caddr_t;
1432/// typedef const char * c_caddr_t;
1433///
1434///
1435/// typedef __blksize_t blksize_t;
1436///
1437///
1438///
1439/// typedef __cpuwhich_t cpuwhich_t;
1440/// typedef __cpulevel_t cpulevel_t;
1441/// typedef __cpusetid_t cpusetid_t;
1442///
1443///
1444/// typedef __blkcnt_t blkcnt_t;
1445///
1446///
1447///
1448///
1449/// typedef __clock_t clock_t;
1450///
1451///
1452///
1453///
1454/// typedef __clockid_t clockid_t;
1455///
1456///
1457///
1458/// typedef __critical_t critical_t;
1459/// typedef __daddr_t daddr_t;
1460///
1461///
1462/// typedef __dev_t dev_t;
1463///
1464///
1465///
1466///
1467/// typedef __fflags_t fflags_t;
1468///
1469///
1470///
1471/// typedef __fixpt_t fixpt_t;
1472///
1473///
1474/// typedef __fsblkcnt_t fsblkcnt_t;
1475/// typedef __fsfilcnt_t fsfilcnt_t;
1476///
1477///
1478///
1479///
1480/// typedef __gid_t gid_t;
1481///
1482///
1483///
1484///
1485/// typedef __uint32_t in_addr_t;
1486///
1487///
1488///
1489///
1490/// typedef __uint16_t in_port_t;
1491///
1492///
1493///
1494///
1495/// typedef __id_t id_t;
1496///
1497///
1498///
1499///
1500/// typedef __ino_t ino_t;
1501///
1502///
1503///
1504///
1505/// typedef __key_t key_t;
1506///
1507///
1508///
1509///
1510/// typedef __lwpid_t lwpid_t;
1511///
1512///
1513///
1514///
1515/// typedef __mode_t mode_t;
1516///
1517///
1518///
1519///
1520/// typedef __accmode_t accmode_t;
1521///
1522///
1523///
1524///
1525/// typedef __nlink_t nlink_t;
1526///
1527///
1528///
1529///
1530/// typedef __off_t off_t;
1531///
1532///
1533///
1534///
1535/// typedef __off64_t off64_t;
1536///
1537///
1538///
1539///
1540/// typedef __pid_t pid_t;
1541///
1542///
1543///
1544/// typedef __register_t register_t;
1545///
1546///
1547/// typedef __rlim_t rlim_t;
1548///
1549///
1550///
1551/// typedef __int64_t sbintime_t;
1552///
1553/// typedef __segsz_t segsz_t;
1554///
1555///
1556///
1557///
1558///
1559///
1560///
1561/// typedef __ssize_t ssize_t;
1562///
1563///
1564///
1565///
1566/// typedef __suseconds_t suseconds_t;
1567///
1568///
1569///
1570///
1571/// typedef __time_t time_t;
1572///
1573///
1574///
1575///
1576/// typedef __timer_t timer_t;
1577///
1578///
1579///
1580///
1581/// typedef __mqd_t mqd_t;
1582///
1583///
1584///
1585/// typedef __u_register_t u_register_t;
1586///
1587///
1588/// typedef __uid_t uid_t;
1589///
1590///
1591///
1592///
1593/// typedef __useconds_t useconds_t;
1594///
1595///
1596///
1597///
1598///
1599/// typedef unsigned long cap_ioctl_t;
1600///
1601///
1602///
1603///
1604/// struct cap_rights;
1605///
1606/// typedef struct cap_rights cap_rights_t;
1607///
1608/// typedef __uint64_t kpaddr_t;
1609/// typedef __uint64_t kvaddr_t;
1610/// typedef __uint64_t ksize_t;
1611/// typedef __int64_t kssize_t;
1612///
1613/// typedef __vm_offset_t vm_offset_t;
1614/// typedef __uint64_t vm_ooffset_t;
1615/// typedef __vm_paddr_t vm_paddr_t;
1616/// typedef __uint64_t vm_pindex_t;
1617/// typedef __vm_size_t vm_size_t;
1618///
1619/// typedef __rman_res_t rman_res_t;
1620///
1621/// static __inline __uint16_t
1622/// __bitcount16(__uint16_t _x)
1623/// {
1624///
1625/// _x = (_x & 0x5555) + ((_x & 0xaaaa) >> 1);
1626/// _x = (_x & 0x3333) + ((_x & 0xcccc) >> 2);
1627/// _x = (_x + (_x >> 4)) & 0x0f0f;
1628/// _x = (_x + (_x >> 8)) & 0x00ff;
1629/// return (_x);
1630/// }
1631///
1632/// static __inline __uint32_t
1633/// __bitcount32(__uint32_t _x)
1634/// {
1635///
1636/// _x = (_x & 0x55555555) + ((_x & 0xaaaaaaaa) >> 1);
1637/// _x = (_x & 0x33333333) + ((_x & 0xcccccccc) >> 2);
1638/// _x = (_x + (_x >> 4)) & 0x0f0f0f0f;
1639/// _x = (_x + (_x >> 8));
1640/// _x = (_x + (_x >> 16)) & 0x000000ff;
1641/// return (_x);
1642/// }
1643///
1644///
1645/// static __inline __uint64_t
1646/// __bitcount64(__uint64_t _x)
1647/// {
1648///
1649/// _x = (_x & 0x5555555555555555) + ((_x & 0xaaaaaaaaaaaaaaaa) >> 1);
1650/// _x = (_x & 0x3333333333333333) + ((_x & 0xcccccccccccccccc) >> 2);
1651/// _x = (_x + (_x >> 4)) & 0x0f0f0f0f0f0f0f0f;
1652/// _x = (_x + (_x >> 8));
1653/// _x = (_x + (_x >> 16));
1654/// _x = (_x + (_x >> 32)) & 0x000000ff;
1655/// return (_x);
1656/// }
1657///
1658///
1659///
1660///
1661///
1662/// typedef struct __sigset {
1663/// __uint32_t __bits[4];
1664/// } __sigset_t;
1665///
1666///
1667///
1668/// struct timeval {
1669/// time_t tv_sec;
1670/// suseconds_t tv_usec;
1671/// };
1672///
1673///
1674///
1675///
1676///
1677/// struct timespec {
1678/// time_t tv_sec;
1679/// long tv_nsec;
1680/// };
1681///
1682///
1683/// struct itimerspec {
1684/// struct timespec it_interval;
1685/// struct timespec it_value;
1686/// };
1687///
1688///
1689/// typedef unsigned long __fd_mask;
1690///
1691/// typedef __fd_mask fd_mask;
1692///
1693///
1694///
1695///
1696/// typedef __sigset_t sigset_t;
1697///
1698/// typedef struct fd_set {
1699/// __fd_mask __fds_bits[(((1024) + (((sizeof(__fd_mask) * 8)) - 1)) / ((sizeof(__fd_mask) * 8)))];
1700/// } fd_set;
1701///
1702///
1703/// int pselect(int, fd_set *restrict, fd_set *restrict, fd_set *restrict,
1704/// const struct timespec *restrict, const sigset_t *restrict);
1705///
1706///
1707///
1708/// int select(int, fd_set *, fd_set *, fd_set *, struct timeval *);
1709///
1710///
1711///
1712///
1713/// static __inline int
1714/// __major(dev_t _d)
1715/// {
1716/// return (((_d >> 32) & 0xffffff00) | ((_d >> 8) & 0xff));
1717/// }
1718///
1719/// static __inline int
1720/// __minor(dev_t _d)
1721/// {
1722/// return (((_d >> 24) & 0xff00) | (_d & 0xffff00ff));
1723/// }
1724///
1725/// static __inline dev_t
1726/// __makedev(int _Major, int _Minor)
1727/// {
1728/// return (((dev_t)(_Major & 0xffffff00) << 32) | ((_Major & 0xff) << 8) |
1729/// ((dev_t)(_Minor & 0xff00) << 24) | (_Minor & 0xffff00ff));
1730/// }
1731///
1732///
1733///
1734///
1735///
1736///
1737///
1738///
1739///
1740///
1741/// int ftruncate(int, off_t);
1742///
1743///
1744///
1745/// off_t lseek(int, off_t, int);
1746///
1747///
1748///
1749/// void * mmap(void *, size_t, int, int, int, off_t);
1750///
1751///
1752///
1753/// int truncate(const char *, off_t);
1754///
1755///
1756///
1757///
1758///
1759///
1760///
1761///
1762/// static __inline int atomic_cmpset_char(volatile u_char *dst, u_char expect, u_char src) { u_char res; __asm volatile( " " "lock ; " " " " cmpxchg %3,%1 ; " "# atomic_cmpset_" "char" " " : "=@cce" (res), "+m" (*dst), "+a" (expect) : "r" (src) : "memory", "cc"); return (res); } static __inline int atomic_fcmpset_char(volatile u_char *dst, u_char *expect, u_char src) { u_char res; __asm volatile( " " "lock ; " " " " cmpxchg %3,%1 ; " "# atomic_fcmpset_" "char" " " : "=@cce" (res), "+m" (*dst), "+a" (*expect) : "r" (src) : "memory", "cc"); return (res); };
1763/// static __inline int atomic_cmpset_short(volatile u_short *dst, u_short expect, u_short src) { u_char res; __asm volatile( " " "lock ; " " " " cmpxchg %3,%1 ; " "# atomic_cmpset_" "short" " " : "=@cce" (res), "+m" (*dst), "+a" (expect) : "r" (src) : "memory", "cc"); return (res); } static __inline int atomic_fcmpset_short(volatile u_short *dst, u_short *expect, u_short src) { u_char res; __asm volatile( " " "lock ; " " " " cmpxchg %3,%1 ; " "# atomic_fcmpset_" "short" " " : "=@cce" (res), "+m" (*dst), "+a" (*expect) : "r" (src) : "memory", "cc"); return (res); };
1764/// static __inline int atomic_cmpset_int(volatile u_int *dst, u_int expect, u_int src) { u_char res; __asm volatile( " " "lock ; " " " " cmpxchg %3,%1 ; " "# atomic_cmpset_" "int" " " : "=@cce" (res), "+m" (*dst), "+a" (expect) : "r" (src) : "memory", "cc"); return (res); } static __inline int atomic_fcmpset_int(volatile u_int *dst, u_int *expect, u_int src) { u_char res; __asm volatile( " " "lock ; " " " " cmpxchg %3,%1 ; " "# atomic_fcmpset_" "int" " " : "=@cce" (res), "+m" (*dst), "+a" (*expect) : "r" (src) : "memory", "cc"); return (res); };
1765/// static __inline int atomic_cmpset_long(volatile u_long *dst, u_long expect, u_long src) { u_char res; __asm volatile( " " "lock ; " " " " cmpxchg %3,%1 ; " "# atomic_cmpset_" "long" " " : "=@cce" (res), "+m" (*dst), "+a" (expect) : "r" (src) : "memory", "cc"); return (res); } static __inline int atomic_fcmpset_long(volatile u_long *dst, u_long *expect, u_long src) { u_char res; __asm volatile( " " "lock ; " " " " cmpxchg %3,%1 ; " "# atomic_fcmpset_" "long" " " : "=@cce" (res), "+m" (*dst), "+a" (*expect) : "r" (src) : "memory", "cc"); return (res); };
1766///
1767///
1768///
1769///
1770///
1771/// static __inline u_int
1772/// atomic_fetchadd_int(volatile u_int *p, u_int v)
1773/// {
1774///
1775/// __asm volatile(
1776/// " " "lock ; " " "
1777/// " xaddl %0,%1 ; "
1778/// "# atomic_fetchadd_int"
1779/// : "+r" (v),
1780/// "+m" (*p)
1781/// : : "cc");
1782/// return (v);
1783/// }
1784///
1785///
1786///
1787///
1788///
1789/// static __inline u_long
1790/// atomic_fetchadd_long(volatile u_long *p, u_long v)
1791/// {
1792///
1793/// __asm volatile(
1794/// " " "lock ; " " "
1795/// " xaddq %0,%1 ; "
1796/// "# atomic_fetchadd_long"
1797/// : "+r" (v),
1798/// "+m" (*p)
1799/// : : "cc");
1800/// return (v);
1801/// }
1802///
1803/// static __inline int
1804/// atomic_testandset_int(volatile u_int *p, u_int v)
1805/// {
1806/// u_char res;
1807///
1808/// __asm volatile(
1809/// " " "lock ; " " "
1810/// " btsl %2,%1 ; "
1811/// "# atomic_testandset_int"
1812/// : "=@ccc" (res),
1813/// "+m" (*p)
1814/// : "Ir" (v & 0x1f)
1815/// : "cc");
1816/// return (res);
1817/// }
1818///
1819/// static __inline int
1820/// atomic_testandset_long(volatile u_long *p, u_int v)
1821/// {
1822/// u_char res;
1823///
1824/// __asm volatile(
1825/// " " "lock ; " " "
1826/// " btsq %2,%1 ; "
1827/// "# atomic_testandset_long"
1828/// : "=@ccc" (res),
1829/// "+m" (*p)
1830/// : "Jr" ((u_long)(v & 0x3f))
1831/// : "cc");
1832/// return (res);
1833/// }
1834///
1835/// static __inline int
1836/// atomic_testandclear_int(volatile u_int *p, u_int v)
1837/// {
1838/// u_char res;
1839///
1840/// __asm volatile(
1841/// " " "lock ; " " "
1842/// " btrl %2,%1 ; "
1843/// "# atomic_testandclear_int"
1844/// : "=@ccc" (res),
1845/// "+m" (*p)
1846/// : "Ir" (v & 0x1f)
1847/// : "cc");
1848/// return (res);
1849/// }
1850///
1851/// static __inline int
1852/// atomic_testandclear_long(volatile u_long *p, u_int v)
1853/// {
1854/// u_char res;
1855///
1856/// __asm volatile(
1857/// " " "lock ; " " "
1858/// " btrq %2,%1 ; "
1859/// "# atomic_testandclear_long"
1860/// : "=@ccc" (res),
1861/// "+m" (*p)
1862/// : "Jr" ((u_long)(v & 0x3f))
1863/// : "cc");
1864/// return (res);
1865/// }
1866///
1867/// static __inline void
1868/// __storeload_barrier(void)
1869/// {
1870///
1871/// __asm volatile("lock; addl $0,-8(%%rsp)" : : : "memory", "cc");
1872/// }
1873///
1874/// static __inline void
1875/// atomic_thread_fence_acq(void)
1876/// {
1877///
1878/// __asm volatile(" " : : : "memory");
1879/// }
1880///
1881/// static __inline void
1882/// atomic_thread_fence_rel(void)
1883/// {
1884///
1885/// __asm volatile(" " : : : "memory");
1886/// }
1887///
1888/// static __inline void
1889/// atomic_thread_fence_acq_rel(void)
1890/// {
1891///
1892/// __asm volatile(" " : : : "memory");
1893/// }
1894///
1895/// static __inline void
1896/// atomic_thread_fence_seq_cst(void)
1897/// {
1898///
1899/// __storeload_barrier();
1900/// }
1901///
1902///
1903///
1904/// static __inline void atomic_set_char(volatile u_char *p, u_char v){ __asm volatile("lock ; " "orb %b1,%0" : "+m" (*p) : "iq" (v) : "cc"); } static __inline void atomic_set_barr_char(volatile u_char *p, u_char v){ __asm volatile("lock ; " "orb %b1,%0" : "+m" (*p) : "iq" (v) : "memory", "cc"); } struct __hack;
1905/// static __inline void atomic_clear_char(volatile u_char *p, u_char v){ __asm volatile("lock ; " "andb %b1,%0" : "+m" (*p) : "iq" (~v) : "cc"); } static __inline void atomic_clear_barr_char(volatile u_char *p, u_char v){ __asm volatile("lock ; " "andb %b1,%0" : "+m" (*p) : "iq" (~v) : "memory", "cc"); } struct __hack;
1906/// static __inline void atomic_add_char(volatile u_char *p, u_char v){ __asm volatile("lock ; " "addb %b1,%0" : "+m" (*p) : "iq" (v) : "cc"); } static __inline void atomic_add_barr_char(volatile u_char *p, u_char v){ __asm volatile("lock ; " "addb %b1,%0" : "+m" (*p) : "iq" (v) : "memory", "cc"); } struct __hack;
1907/// static __inline void atomic_subtract_char(volatile u_char *p, u_char v){ __asm volatile("lock ; " "subb %b1,%0" : "+m" (*p) : "iq" (v) : "cc"); } static __inline void atomic_subtract_barr_char(volatile u_char *p, u_char v){ __asm volatile("lock ; " "subb %b1,%0" : "+m" (*p) : "iq" (v) : "memory", "cc"); } struct __hack;
1908///
1909/// static __inline void atomic_set_short(volatile u_short *p, u_short v){ __asm volatile("lock ; " "orw %w1,%0" : "+m" (*p) : "ir" (v) : "cc"); } static __inline void atomic_set_barr_short(volatile u_short *p, u_short v){ __asm volatile("lock ; " "orw %w1,%0" : "+m" (*p) : "ir" (v) : "memory", "cc"); } struct __hack;
1910/// static __inline void atomic_clear_short(volatile u_short *p, u_short v){ __asm volatile("lock ; " "andw %w1,%0" : "+m" (*p) : "ir" (~v) : "cc"); } static __inline void atomic_clear_barr_short(volatile u_short *p, u_short v){ __asm volatile("lock ; " "andw %w1,%0" : "+m" (*p) : "ir" (~v) : "memory", "cc"); } struct __hack;
1911/// static __inline void atomic_add_short(volatile u_short *p, u_short v){ __asm volatile("lock ; " "addw %w1,%0" : "+m" (*p) : "ir" (v) : "cc"); } static __inline void atomic_add_barr_short(volatile u_short *p, u_short v){ __asm volatile("lock ; " "addw %w1,%0" : "+m" (*p) : "ir" (v) : "memory", "cc"); } struct __hack;
1912/// static __inline void atomic_subtract_short(volatile u_short *p, u_short v){ __asm volatile("lock ; " "subw %w1,%0" : "+m" (*p) : "ir" (v) : "cc"); } static __inline void atomic_subtract_barr_short(volatile u_short *p, u_short v){ __asm volatile("lock ; " "subw %w1,%0" : "+m" (*p) : "ir" (v) : "memory", "cc"); } struct __hack;
1913///
1914/// static __inline void atomic_set_int(volatile u_int *p, u_int v){ __asm volatile("lock ; " "orl %1,%0" : "+m" (*p) : "ir" (v) : "cc"); } static __inline void atomic_set_barr_int(volatile u_int *p, u_int v){ __asm volatile("lock ; " "orl %1,%0" : "+m" (*p) : "ir" (v) : "memory", "cc"); } struct __hack;
1915/// static __inline void atomic_clear_int(volatile u_int *p, u_int v){ __asm volatile("lock ; " "andl %1,%0" : "+m" (*p) : "ir" (~v) : "cc"); } static __inline void atomic_clear_barr_int(volatile u_int *p, u_int v){ __asm volatile("lock ; " "andl %1,%0" : "+m" (*p) : "ir" (~v) : "memory", "cc"); } struct __hack;
1916/// static __inline void atomic_add_int(volatile u_int *p, u_int v){ __asm volatile("lock ; " "addl %1,%0" : "+m" (*p) : "ir" (v) : "cc"); } static __inline void atomic_add_barr_int(volatile u_int *p, u_int v){ __asm volatile("lock ; " "addl %1,%0" : "+m" (*p) : "ir" (v) : "memory", "cc"); } struct __hack;
1917/// static __inline void atomic_subtract_int(volatile u_int *p, u_int v){ __asm volatile("lock ; " "subl %1,%0" : "+m" (*p) : "ir" (v) : "cc"); } static __inline void atomic_subtract_barr_int(volatile u_int *p, u_int v){ __asm volatile("lock ; " "subl %1,%0" : "+m" (*p) : "ir" (v) : "memory", "cc"); } struct __hack;
1918///
1919/// static __inline void atomic_set_long(volatile u_long *p, u_long v){ __asm volatile("lock ; " "orq %1,%0" : "+m" (*p) : "er" (v) : "cc"); } static __inline void atomic_set_barr_long(volatile u_long *p, u_long v){ __asm volatile("lock ; " "orq %1,%0" : "+m" (*p) : "er" (v) : "memory", "cc"); } struct __hack;
1920/// static __inline void atomic_clear_long(volatile u_long *p, u_long v){ __asm volatile("lock ; " "andq %1,%0" : "+m" (*p) : "er" (~v) : "cc"); } static __inline void atomic_clear_barr_long(volatile u_long *p, u_long v){ __asm volatile("lock ; " "andq %1,%0" : "+m" (*p) : "er" (~v) : "memory", "cc"); } struct __hack;
1921/// static __inline void atomic_add_long(volatile u_long *p, u_long v){ __asm volatile("lock ; " "addq %1,%0" : "+m" (*p) : "er" (v) : "cc"); } static __inline void atomic_add_barr_long(volatile u_long *p, u_long v){ __asm volatile("lock ; " "addq %1,%0" : "+m" (*p) : "er" (v) : "memory", "cc"); } struct __hack;
1922/// static __inline void atomic_subtract_long(volatile u_long *p, u_long v){ __asm volatile("lock ; " "subq %1,%0" : "+m" (*p) : "er" (v) : "cc"); } static __inline void atomic_subtract_barr_long(volatile u_long *p, u_long v){ __asm volatile("lock ; " "subq %1,%0" : "+m" (*p) : "er" (v) : "memory", "cc"); } struct __hack;
1923///
1924///
1925///
1926///
1927///
1928/// static __inline u_char atomic_load_acq_char(volatile u_char *p) { u_char res; res = *p; __asm volatile(" " : : : "memory"); return (res); } struct __hack; static __inline void atomic_store_rel_char(volatile u_char *p, u_char v) { __asm volatile(" " : : : "memory"); *p = v; } struct __hack;
1929/// static __inline u_short atomic_load_acq_short(volatile u_short *p) { u_short res; res = *p; __asm volatile(" " : : : "memory"); return (res); } struct __hack; static __inline void atomic_store_rel_short(volatile u_short *p, u_short v) { __asm volatile(" " : : : "memory"); *p = v; } struct __hack;
1930/// static __inline u_int atomic_load_acq_int(volatile u_int *p) { u_int res; res = *p; __asm volatile(" " : : : "memory"); return (res); } struct __hack; static __inline void atomic_store_rel_int(volatile u_int *p, u_int v) { __asm volatile(" " : : : "memory"); *p = v; } struct __hack;
1931/// static __inline u_long atomic_load_acq_long(volatile u_long *p) { u_long res; res = *p; __asm volatile(" " : : : "memory"); return (res); } struct __hack; static __inline void atomic_store_rel_long(volatile u_long *p, u_long v) { __asm volatile(" " : : : "memory"); *p = v; } struct __hack;
1932///
1933/// static __inline u_int
1934/// atomic_swap_int(volatile u_int *p, u_int v)
1935/// {
1936///
1937/// __asm volatile(
1938/// " xchgl %1,%0 ; "
1939/// "# atomic_swap_int"
1940/// : "+r" (v),
1941/// "+m" (*p));
1942/// return (v);
1943/// }
1944///
1945/// static __inline u_long
1946/// atomic_swap_long(volatile u_long *p, u_long v)
1947/// {
1948///
1949/// __asm volatile(
1950/// " xchgq %1,%0 ; "
1951/// "# atomic_swap_long"
1952/// : "+r" (v),
1953/// "+m" (*p));
1954/// return (v);
1955/// }
1956///
1957///
1958///
1959///
1960///
1961/// extern char *_PathLocale;
1962///
1963/// int __detect_path_locale(void);
1964/// int __wrap_setrunelocale(const char *);
1965///
1966///
1967/// enum {
1968/// XLC_COLLATE = 0,
1969/// XLC_CTYPE,
1970/// XLC_MONETARY,
1971/// XLC_NUMERIC,
1972/// XLC_TIME,
1973/// XLC_MESSAGES,
1974/// XLC_LAST
1975/// };
1976///
1977/// _Static_assert(XLC_LAST - XLC_COLLATE == 6, "XLC values should be contiguous");
1978/// _Static_assert(XLC_COLLATE ==
1979///
1980/// 1
1981///
1982/// - 1,
1983/// "XLC_COLLATE doesn't match the LC_COLLATE value.");
1984/// _Static_assert(XLC_CTYPE ==
1985///
1986/// 2
1987///
1988/// - 1,
1989/// "XLC_CTYPE doesn't match the LC_CTYPE value.");
1990/// _Static_assert(XLC_MONETARY ==
1991///
1992/// 3
1993///
1994/// - 1,
1995/// "XLC_MONETARY doesn't match the LC_MONETARY value.");
1996/// _Static_assert(XLC_NUMERIC ==
1997///
1998/// 4
1999///
2000/// - 1,
2001/// "XLC_NUMERIC doesn't match the LC_NUMERIC value.");
2002/// _Static_assert(XLC_TIME ==
2003///
2004/// 5
2005///
2006/// - 1,
2007/// "XLC_TIME doesn't match the LC_TIME value.");
2008/// _Static_assert(XLC_MESSAGES ==
2009///
2010/// 6
2011///
2012/// - 1,
2013/// "XLC_MESSAGES doesn't match the LC_MESSAGES value.");
2014///
2015/// struct xlocale_refcounted {
2016///
2017/// long retain_count;
2018///
2019/// void(*destructor)(void*);
2020/// };
2021///
2022///
2023///
2024///
2025///
2026///
2027///
2028/// struct xlocale_component {
2029/// struct xlocale_refcounted header;
2030///
2031/// char locale[31 +1];
2032///
2033/// char version[12];
2034/// };
2035///
2036///
2037///
2038///
2039/// struct _xlocale {
2040/// struct xlocale_refcounted header;
2041///
2042/// struct xlocale_component *components[XLC_LAST];
2043///
2044///
2045/// int monetary_locale_changed;
2046///
2047///
2048/// int using_monetary_locale;
2049///
2050///
2051/// int numeric_locale_changed;
2052///
2053///
2054/// int using_numeric_locale;
2055///
2056///
2057/// int using_time_locale;
2058///
2059///
2060/// int using_messages_locale;
2061///
2062/// struct lconv lconv;
2063///
2064/// char *csym;
2065/// };
2066///
2067///
2068///
2069///
2070/// __attribute__((unused)) static void*
2071/// xlocale_retain(void *val)
2072/// {
2073/// struct xlocale_refcounted *obj = val;
2074/// atomic_add_long(&(obj->retain_count), 1);
2075/// return (val);
2076/// }
2077///
2078///
2079///
2080///
2081/// __attribute__((unused)) static void
2082/// xlocale_release(void *val)
2083/// {
2084/// struct xlocale_refcounted *obj = val;
2085/// long count;
2086///
2087/// count = atomic_fetchadd_long(&(obj->retain_count), -1) - 1;
2088/// if (count < 0 && obj->destructor !=
2089///
2090/// ((void *)0)
2091///
2092/// )
2093/// obj->destructor(obj);
2094/// }
2095///
2096///
2097///
2098///
2099///
2100/// extern void* __collate_load(const char*, locale_t);
2101/// extern void* __ctype_load(const char*, locale_t);
2102/// extern void* __messages_load(const char*, locale_t);
2103/// extern void* __monetary_load(const char*, locale_t);
2104/// extern void* __numeric_load(const char*, locale_t);
2105/// extern void* __time_load(const char*, locale_t);
2106///
2107/// extern struct _xlocale __xlocale_global_locale;
2108/// extern struct _xlocale __xlocale_C_locale;
2109///
2110///
2111///
2112///
2113/// void __set_thread_rune_locale(locale_t loc);
2114///
2115///
2116///
2117///
2118/// extern int __has_thread_locale;
2119///
2120///
2121///
2122///
2123///
2124/// extern _Thread_local locale_t __thread_locale;
2125///
2126///
2127///
2128///
2129///
2130///
2131///
2132/// static inline locale_t __get_locale(void)
2133/// {
2134///
2135/// if (!__has_thread_locale) {
2136/// return (&__xlocale_global_locale);
2137/// }
2138/// return (__thread_locale ? __thread_locale : &__xlocale_global_locale);
2139/// }
2140///
2141///
2142///
2143///
2144///
2145/// static inline locale_t get_real_locale(locale_t locale)
2146/// {
2147/// switch ((intptr_t)locale) {
2148/// case 0: return (&__xlocale_C_locale);
2149/// case -1: return (&__xlocale_global_locale);
2150/// default: return (locale);
2151/// }
2152/// }
2153///
2154///
2155///
2156///
2157///
2158///
2159///
2160///
2161/// struct xlocale_ctype {
2162/// struct xlocale_component header;
2163/// _RuneLocale *runes;
2164/// size_t (*__mbrtowc)(wchar_t *
2165///
2166/// restrict
2167///
2168/// , const char *
2169///
2170/// restrict
2171///
2172/// ,
2173/// size_t, mbstate_t *
2174///
2175/// restrict
2176///
2177/// );
2178/// int (*__mbsinit)(const mbstate_t *);
2179/// size_t (*__mbsnrtowcs)(wchar_t *
2180///
2181/// restrict
2182///
2183/// , const char **
2184///
2185/// restrict
2186///
2187/// ,
2188/// size_t, size_t, mbstate_t *
2189///
2190/// restrict
2191///
2192/// );
2193/// size_t (*__wcrtomb)(char *
2194///
2195/// restrict
2196///
2197/// , wchar_t, mbstate_t *
2198///
2199/// restrict
2200///
2201/// );
2202/// size_t (*__wcsnrtombs)(char *
2203///
2204/// restrict
2205///
2206/// , const wchar_t **
2207///
2208/// restrict
2209///
2210/// ,
2211/// size_t, size_t, mbstate_t *
2212///
2213/// restrict
2214///
2215/// );
2216/// int __mb_cur_max;
2217/// int __mb_sb_limit;
2218///
2219/// __mbstate_t mblen;
2220///
2221/// __mbstate_t mbrlen;
2222///
2223/// __mbstate_t mbrtoc16;
2224///
2225/// __mbstate_t mbrtoc32;
2226///
2227/// __mbstate_t mbrtowc;
2228///
2229/// __mbstate_t mbsnrtowcs;
2230///
2231/// __mbstate_t mbsrtowcs;
2232///
2233/// __mbstate_t mbtowc;
2234///
2235/// __mbstate_t c16rtomb;
2236///
2237/// __mbstate_t c32rtomb;
2238///
2239/// __mbstate_t wcrtomb;
2240///
2241/// __mbstate_t wcsnrtombs;
2242///
2243/// __mbstate_t wcsrtombs;
2244///
2245/// __mbstate_t wctomb;
2246/// };
2247///
2248/// extern struct xlocale_ctype __xlocale_global_ctype;
2249///
2250///
2251///
2252///
2253/// int _none_init(struct xlocale_ctype *, _RuneLocale *)
2254///
2255/// __attribute__((__visibility__("hidden")))
2256///
2257/// ;
2258/// int _UTF8_init(struct xlocale_ctype *, _RuneLocale *)
2259///
2260/// __attribute__((__visibility__("hidden")))
2261///
2262/// ;
2263/// int _EUC_CN_init(struct xlocale_ctype *, _RuneLocale *)
2264///
2265/// __attribute__((__visibility__("hidden")))
2266///
2267/// ;
2268/// int _EUC_JP_init(struct xlocale_ctype *, _RuneLocale *)
2269///
2270/// __attribute__((__visibility__("hidden")))
2271///
2272/// ;
2273/// int _EUC_KR_init(struct xlocale_ctype *, _RuneLocale *)
2274///
2275/// __attribute__((__visibility__("hidden")))
2276///
2277/// ;
2278/// int _EUC_TW_init(struct xlocale_ctype *, _RuneLocale *)
2279///
2280/// __attribute__((__visibility__("hidden")))
2281///
2282/// ;
2283/// int _GB18030_init(struct xlocale_ctype *, _RuneLocale *)
2284///
2285/// __attribute__((__visibility__("hidden")))
2286///
2287/// ;
2288/// int _GB2312_init(struct xlocale_ctype *, _RuneLocale *)
2289///
2290/// __attribute__((__visibility__("hidden")))
2291///
2292/// ;
2293/// int _GBK_init(struct xlocale_ctype *, _RuneLocale *)
2294///
2295/// __attribute__((__visibility__("hidden")))
2296///
2297/// ;
2298/// int _BIG5_init(struct xlocale_ctype *, _RuneLocale *)
2299///
2300/// __attribute__((__visibility__("hidden")))
2301///
2302/// ;
2303/// int _MSKanji_init(struct xlocale_ctype *, _RuneLocale *)
2304///
2305/// __attribute__((__visibility__("hidden")))
2306///
2307/// ;
2308/// int _ascii_init(struct xlocale_ctype *, _RuneLocale *)
2309///
2310/// __attribute__((__visibility__("hidden")))
2311///
2312/// ;
2313///
2314/// typedef size_t (*mbrtowc_pfn_t)(wchar_t *
2315///
2316/// restrict
2317///
2318/// ,
2319/// const char *
2320///
2321/// restrict
2322///
2323/// , size_t, mbstate_t *
2324///
2325/// restrict
2326///
2327/// );
2328/// typedef size_t (*wcrtomb_pfn_t)(char *
2329///
2330/// restrict
2331///
2332/// , wchar_t,
2333/// mbstate_t *
2334///
2335/// restrict
2336///
2337/// );
2338/// size_t __mbsnrtowcs_std(wchar_t *
2339///
2340/// restrict
2341///
2342/// , const char **
2343///
2344/// restrict
2345///
2346/// ,
2347/// size_t, size_t, mbstate_t *
2348///
2349/// restrict
2350///
2351/// , mbrtowc_pfn_t);
2352/// size_t __wcsnrtombs_std(char *
2353///
2354/// restrict
2355///
2356/// , const wchar_t **
2357///
2358/// restrict
2359///
2360/// ,
2361/// size_t, size_t, mbstate_t *
2362///
2363/// restrict
2364///
2365/// , wcrtomb_pfn_t);
2366///
2367
2368var X_DefaultRuneLocale = _RuneLocale{
2369
2370 F__magic: *(*[8]uint8)(unsafe.Pointer(ts)),
2371 F__encoding: *(*[32]uint8)(unsafe.Pointer(ts + 9)),
2372 F__invalid_rune: 0xFFFD,
2373
2374 F__runetype: [256]uint32{
2375
2376 0: uint32(0x00000200),
2377
2378 1: uint32(0x00000200),
2379
2380 2: uint32(0x00000200),
2381
2382 3: uint32(0x00000200),
2383
2384 4: uint32(0x00000200),
2385
2386 5: uint32(0x00000200),
2387
2388 6: uint32(0x00000200),
2389
2390 7: uint32(0x00000200),
2391
2392 8: uint32(0x00000200),
2393
2394 9: uint32(0x00000200 |
2395
2396 0x00004000 |
2397
2398 0x00020000),
2399
2400 10: uint32(0x00000200 |
2401
2402 0x00004000),
2403
2404 11: uint32(0x00000200 |
2405
2406 0x00004000),
2407
2408 12: uint32(0x00000200 |
2409
2410 0x00004000),
2411
2412 13: uint32(0x00000200 |
2413
2414 0x00004000),
2415
2416 14: uint32(0x00000200),
2417
2418 15: uint32(0x00000200),
2419
2420 16: uint32(0x00000200),
2421
2422 17: uint32(0x00000200),
2423
2424 18: uint32(0x00000200),
2425
2426 19: uint32(0x00000200),
2427
2428 20: uint32(0x00000200),
2429
2430 21: uint32(0x00000200),
2431
2432 22: uint32(0x00000200),
2433
2434 23: uint32(0x00000200),
2435
2436 24: uint32(0x00000200),
2437
2438 25: uint32(0x00000200),
2439
2440 26: uint32(0x00000200),
2441
2442 27: uint32(0x00000200),
2443
2444 28: uint32(0x00000200),
2445
2446 29: uint32(0x00000200),
2447
2448 30: uint32(0x00000200),
2449
2450 31: uint32(0x00000200),
2451
2452 32: uint32(0x00004000 |
2453
2454 0x00020000 |
2455
2456 0x00040000),
2457
2458 33: uint32(0x00002000 |
2459
2460 0x00040000 |
2461
2462 0x00000800),
2463
2464 34: uint32(0x00002000 |
2465
2466 0x00040000 |
2467
2468 0x00000800),
2469
2470 35: uint32(0x00002000 |
2471
2472 0x00040000 |
2473
2474 0x00000800),
2475
2476 36: uint32(0x00002000 |
2477
2478 0x00040000 |
2479
2480 0x00000800),
2481
2482 37: uint32(0x00002000 |
2483
2484 0x00040000 |
2485
2486 0x00000800),
2487
2488 38: uint32(0x00002000 |
2489
2490 0x00040000 |
2491
2492 0x00000800),
2493
2494 39: uint32(0x00002000 |
2495
2496 0x00040000 |
2497
2498 0x00000800),
2499
2500 40: uint32(0x00002000 |
2501
2502 0x00040000 |
2503
2504 0x00000800),
2505
2506 41: uint32(0x00002000 |
2507
2508 0x00040000 |
2509
2510 0x00000800),
2511
2512 42: uint32(0x00002000 |
2513
2514 0x00040000 |
2515
2516 0x00000800),
2517
2518 43: uint32(0x00002000 |
2519
2520 0x00040000 |
2521
2522 0x00000800),
2523
2524 44: uint32(0x00002000 |
2525
2526 0x00040000 |
2527
2528 0x00000800),
2529
2530 45: uint32(0x00002000 |
2531
2532 0x00040000 |
2533
2534 0x00000800),
2535
2536 46: uint32(0x00002000 |
2537
2538 0x00040000 |
2539
2540 0x00000800),
2541
2542 47: uint32(0x00002000 |
2543
2544 0x00040000 |
2545
2546 0x00000800),
2547
2548 48: uint32(0x00000400 |
2549
2550 0x00040000 |
2551
2552 0x00000800 |
2553
2554 0x00010000 |
2555
2556 0x00400000 |
2557
2558 0),
2559
2560 49: uint32(0x00000400 |
2561
2562 0x00040000 |
2563
2564 0x00000800 |
2565
2566 0x00010000 |
2567
2568 0x00400000 |
2569
2570 1),
2571
2572 50: uint32(0x00000400 |
2573
2574 0x00040000 |
2575
2576 0x00000800 |
2577
2578 0x00010000 |
2579
2580 0x00400000 |
2581
2582 2),
2583
2584 51: uint32(0x00000400 |
2585
2586 0x00040000 |
2587
2588 0x00000800 |
2589
2590 0x00010000 |
2591
2592 0x00400000 |
2593
2594 3),
2595
2596 52: uint32(0x00000400 |
2597
2598 0x00040000 |
2599
2600 0x00000800 |
2601
2602 0x00010000 |
2603
2604 0x00400000 |
2605
2606 4),
2607
2608 53: uint32(0x00000400 |
2609
2610 0x00040000 |
2611
2612 0x00000800 |
2613
2614 0x00010000 |
2615
2616 0x00400000 |
2617
2618 5),
2619
2620 54: uint32(0x00000400 |
2621
2622 0x00040000 |
2623
2624 0x00000800 |
2625
2626 0x00010000 |
2627
2628 0x00400000 |
2629
2630 6),
2631
2632 55: uint32(0x00000400 |
2633
2634 0x00040000 |
2635
2636 0x00000800 |
2637
2638 0x00010000 |
2639
2640 0x00400000 |
2641
2642 7),
2643
2644 56: uint32(0x00000400 |
2645
2646 0x00040000 |
2647
2648 0x00000800 |
2649
2650 0x00010000 |
2651
2652 0x00400000 |
2653
2654 8),
2655
2656 57: uint32(0x00000400 |
2657
2658 0x00040000 |
2659
2660 0x00000800 |
2661
2662 0x00010000 |
2663
2664 0x00400000 |
2665
2666 9),
2667
2668 58: uint32(0x00002000 |
2669
2670 0x00040000 |
2671
2672 0x00000800),
2673
2674 59: uint32(0x00002000 |
2675
2676 0x00040000 |
2677
2678 0x00000800),
2679
2680 60: uint32(0x00002000 |
2681
2682 0x00040000 |
2683
2684 0x00000800),
2685
2686 61: uint32(0x00002000 |
2687
2688 0x00040000 |
2689
2690 0x00000800),
2691
2692 62: uint32(0x00002000 |
2693
2694 0x00040000 |
2695
2696 0x00000800),
2697
2698 63: uint32(0x00002000 |
2699
2700 0x00040000 |
2701
2702 0x00000800),
2703
2704 64: uint32(0x00002000 |
2705
2706 0x00040000 |
2707
2708 0x00000800),
2709
2710 65: uint32(0x00008000 |
2711
2712 0x00010000 |
2713
2714 0x00040000 |
2715
2716 0x00000800 |
2717
2718 0x00000100 |
2719
2720 10),
2721
2722 66: uint32(0x00008000 |
2723
2724 0x00010000 |
2725
2726 0x00040000 |
2727
2728 0x00000800 |
2729
2730 0x00000100 |
2731
2732 11),
2733
2734 67: uint32(0x00008000 |
2735
2736 0x00010000 |
2737
2738 0x00040000 |
2739
2740 0x00000800 |
2741
2742 0x00000100 |
2743
2744 12),
2745
2746 68: uint32(0x00008000 |
2747
2748 0x00010000 |
2749
2750 0x00040000 |
2751
2752 0x00000800 |
2753
2754 0x00000100 |
2755
2756 13),
2757
2758 69: uint32(0x00008000 |
2759
2760 0x00010000 |
2761
2762 0x00040000 |
2763
2764 0x00000800 |
2765
2766 0x00000100 |
2767
2768 14),
2769
2770 70: uint32(0x00008000 |
2771
2772 0x00010000 |
2773
2774 0x00040000 |
2775
2776 0x00000800 |
2777
2778 0x00000100 |
2779
2780 15),
2781
2782 71: uint32(0x00008000 |
2783
2784 0x00040000 |
2785
2786 0x00000800 |
2787
2788 0x00000100),
2789
2790 72: uint32(0x00008000 |
2791
2792 0x00040000 |
2793
2794 0x00000800 |
2795
2796 0x00000100),
2797
2798 73: uint32(0x00008000 |
2799
2800 0x00040000 |
2801
2802 0x00000800 |
2803
2804 0x00000100),
2805
2806 74: uint32(0x00008000 |
2807
2808 0x00040000 |
2809
2810 0x00000800 |
2811
2812 0x00000100),
2813
2814 75: uint32(0x00008000 |
2815
2816 0x00040000 |
2817
2818 0x00000800 |
2819
2820 0x00000100),
2821
2822 76: uint32(0x00008000 |
2823
2824 0x00040000 |
2825
2826 0x00000800 |
2827
2828 0x00000100),
2829
2830 77: uint32(0x00008000 |
2831
2832 0x00040000 |
2833
2834 0x00000800 |
2835
2836 0x00000100),
2837
2838 78: uint32(0x00008000 |
2839
2840 0x00040000 |
2841
2842 0x00000800 |
2843
2844 0x00000100),
2845
2846 79: uint32(0x00008000 |
2847
2848 0x00040000 |
2849
2850 0x00000800 |
2851
2852 0x00000100),
2853
2854 80: uint32(0x00008000 |
2855
2856 0x00040000 |
2857
2858 0x00000800 |
2859
2860 0x00000100),
2861
2862 81: uint32(0x00008000 |
2863
2864 0x00040000 |
2865
2866 0x00000800 |
2867
2868 0x00000100),
2869
2870 82: uint32(0x00008000 |
2871
2872 0x00040000 |
2873
2874 0x00000800 |
2875
2876 0x00000100),
2877
2878 83: uint32(0x00008000 |
2879
2880 0x00040000 |
2881
2882 0x00000800 |
2883
2884 0x00000100),
2885
2886 84: uint32(0x00008000 |
2887
2888 0x00040000 |
2889
2890 0x00000800 |
2891
2892 0x00000100),
2893
2894 85: uint32(0x00008000 |
2895
2896 0x00040000 |
2897
2898 0x00000800 |
2899
2900 0x00000100),
2901
2902 86: uint32(0x00008000 |
2903
2904 0x00040000 |
2905
2906 0x00000800 |
2907
2908 0x00000100),
2909
2910 87: uint32(0x00008000 |
2911
2912 0x00040000 |
2913
2914 0x00000800 |
2915
2916 0x00000100),
2917
2918 88: uint32(0x00008000 |
2919
2920 0x00040000 |
2921
2922 0x00000800 |
2923
2924 0x00000100),
2925
2926 89: uint32(0x00008000 |
2927
2928 0x00040000 |
2929
2930 0x00000800 |
2931
2932 0x00000100),
2933
2934 90: uint32(0x00008000 |
2935
2936 0x00040000 |
2937
2938 0x00000800 |
2939
2940 0x00000100),
2941
2942 91: uint32(0x00002000 |
2943
2944 0x00040000 |
2945
2946 0x00000800),
2947
2948 92: uint32(0x00002000 |
2949
2950 0x00040000 |
2951
2952 0x00000800),
2953
2954 93: uint32(0x00002000 |
2955
2956 0x00040000 |
2957
2958 0x00000800),
2959
2960 94: uint32(0x00002000 |
2961
2962 0x00040000 |
2963
2964 0x00000800),
2965
2966 95: uint32(0x00002000 |
2967
2968 0x00040000 |
2969
2970 0x00000800),
2971
2972 96: uint32(0x00002000 |
2973
2974 0x00040000 |
2975
2976 0x00000800),
2977
2978 97: uint32(0x00001000 |
2979
2980 0x00010000 |
2981
2982 0x00040000 |
2983
2984 0x00000800 |
2985
2986 0x00000100 |
2987
2988 10),
2989
2990 98: uint32(0x00001000 |
2991
2992 0x00010000 |
2993
2994 0x00040000 |
2995
2996 0x00000800 |
2997
2998 0x00000100 |
2999
3000 11),
3001
3002 99: uint32(0x00001000 |
3003
3004 0x00010000 |
3005
3006 0x00040000 |
3007
3008 0x00000800 |
3009
3010 0x00000100 |
3011
3012 12),
3013
3014 100: uint32(0x00001000 |
3015
3016 0x00010000 |
3017
3018 0x00040000 |
3019
3020 0x00000800 |
3021
3022 0x00000100 |
3023
3024 13),
3025
3026 101: uint32(0x00001000 |
3027
3028 0x00010000 |
3029
3030 0x00040000 |
3031
3032 0x00000800 |
3033
3034 0x00000100 |
3035
3036 14),
3037
3038 102: uint32(0x00001000 |
3039
3040 0x00010000 |
3041
3042 0x00040000 |
3043
3044 0x00000800 |
3045
3046 0x00000100 |
3047
3048 15),
3049
3050 103: uint32(0x00001000 |
3051
3052 0x00040000 |
3053
3054 0x00000800 |
3055
3056 0x00000100),
3057
3058 104: uint32(0x00001000 |
3059
3060 0x00040000 |
3061
3062 0x00000800 |
3063
3064 0x00000100),
3065
3066 105: uint32(0x00001000 |
3067
3068 0x00040000 |
3069
3070 0x00000800 |
3071
3072 0x00000100),
3073
3074 106: uint32(0x00001000 |
3075
3076 0x00040000 |
3077
3078 0x00000800 |
3079
3080 0x00000100),
3081
3082 107: uint32(0x00001000 |
3083
3084 0x00040000 |
3085
3086 0x00000800 |
3087
3088 0x00000100),
3089
3090 108: uint32(0x00001000 |
3091
3092 0x00040000 |
3093
3094 0x00000800 |
3095
3096 0x00000100),
3097
3098 109: uint32(0x00001000 |
3099
3100 0x00040000 |
3101
3102 0x00000800 |
3103
3104 0x00000100),
3105
3106 110: uint32(0x00001000 |
3107
3108 0x00040000 |
3109
3110 0x00000800 |
3111
3112 0x00000100),
3113
3114 111: uint32(0x00001000 |
3115
3116 0x00040000 |
3117
3118 0x00000800 |
3119
3120 0x00000100),
3121
3122 112: uint32(0x00001000 |
3123
3124 0x00040000 |
3125
3126 0x00000800 |
3127
3128 0x00000100),
3129
3130 113: uint32(0x00001000 |
3131
3132 0x00040000 |
3133
3134 0x00000800 |
3135
3136 0x00000100),
3137
3138 114: uint32(0x00001000 |
3139
3140 0x00040000 |
3141
3142 0x00000800 |
3143
3144 0x00000100),
3145
3146 115: uint32(0x00001000 |
3147
3148 0x00040000 |
3149
3150 0x00000800 |
3151
3152 0x00000100),
3153
3154 116: uint32(0x00001000 |
3155
3156 0x00040000 |
3157
3158 0x00000800 |
3159
3160 0x00000100),
3161
3162 117: uint32(0x00001000 |
3163
3164 0x00040000 |
3165
3166 0x00000800 |
3167
3168 0x00000100),
3169
3170 118: uint32(0x00001000 |
3171
3172 0x00040000 |
3173
3174 0x00000800 |
3175
3176 0x00000100),
3177
3178 119: uint32(0x00001000 |
3179
3180 0x00040000 |
3181
3182 0x00000800 |
3183
3184 0x00000100),
3185
3186 120: uint32(0x00001000 |
3187
3188 0x00040000 |
3189
3190 0x00000800 |
3191
3192 0x00000100),
3193
3194 121: uint32(0x00001000 |
3195
3196 0x00040000 |
3197
3198 0x00000800 |
3199
3200 0x00000100),
3201
3202 122: uint32(0x00001000 |
3203
3204 0x00040000 |
3205
3206 0x00000800 |
3207
3208 0x00000100),
3209
3210 123: uint32(0x00002000 |
3211
3212 0x00040000 |
3213
3214 0x00000800),
3215
3216 124: uint32(0x00002000 |
3217
3218 0x00040000 |
3219
3220 0x00000800),
3221
3222 125: uint32(0x00002000 |
3223
3224 0x00040000 |
3225
3226 0x00000800),
3227
3228 126: uint32(0x00002000 |
3229
3230 0x00040000 |
3231
3232 0x00000800),
3233
3234 127: uint32(0x00000200),
3235 },
3236 F__maplower: [256]int32{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
3237 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
3238 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
3239 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
3240 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
3241 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
3242 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
3243 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
3244 0x40, 'a', 'b', 'c', 'd', 'e', 'f', 'g',
3245 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
3246 'p', 'q', 'r', 's', 't', 'u', 'v', 'w',
3247 'x', 'y', 'z', 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
3248 0x60, 'a', 'b', 'c', 'd', 'e', 'f', 'g',
3249 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
3250 'p', 'q', 'r', 's', 't', 'u', 'v', 'w',
3251 'x', 'y', 'z', 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
3252 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
3253 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
3254 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
3255 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
3256 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
3257 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
3258 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
3259 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
3260 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
3261 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
3262 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
3263 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
3264 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
3265 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
3266 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
3267 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
3268 },
3269 F__mapupper: [256]int32{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
3270 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
3271 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
3272 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
3273 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
3274 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
3275 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
3276 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
3277 0x40, 'A', 'B', 'C', 'D', 'E', 'F', 'G',
3278 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
3279 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
3280 'X', 'Y', 'Z', 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
3281 0x60, 'A', 'B', 'C', 'D', 'E', 'F', 'G',
3282 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
3283 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
3284 'X', 'Y', 'Z', 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
3285 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
3286 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
3287 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
3288 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
3289 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
3290 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
3291 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
3292 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
3293 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
3294 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
3295 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
3296 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
3297 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
3298 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
3299 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
3300 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
3301 },
3302} /* table.cpp.c:2243:19 */
3303
3304var X_CurrentRuneLocale uintptr = 0 /* table.cpp.c:4092:19 */
3305
3306/// _RuneLocale *
3307/// __runes_for_locale(locale_t locale, int *mb_sb_limit)
3308/// {
3309/// (locale = get_real_locale(locale));
3310/// struct xlocale_ctype *c = ((struct xlocale_ctype*)(locale)->components[XLC_CTYPE]);
3311/// *mb_sb_limit = c->__mb_sb_limit;
3312/// return c->runes;
3313/// }
3314
3315func __isspace(tls *TLS, _c int32) int32 { /* ctype.h:26:21: */
3316 return Bool32(_c == ' ' || uint32(_c)-uint32('\t') < uint32(5))
3317}
3318
3319type locale_t = uintptr /* alltypes.h:336:32 */
3320
3321func Xisalnum(tls *TLS, c int32) int32 { /* isalnum.c:3:5: */
3322 return Bool32(func() int32 {
3323 if 0 != 0 {
3324 return Xisalpha(tls, c)
3325 }
3326 return Bool32(uint32(c)|uint32(32)-uint32('a') < uint32(26))
3327 }() != 0 || func() int32 {
3328 if 0 != 0 {
3329 return Xisdigit(tls, c)
3330 }
3331 return Bool32(uint32(c)-uint32('0') < uint32(10))
3332 }() != 0)
3333}
3334
3335func X__isalnum_l(tls *TLS, c int32, l locale_t) int32 { /* isalnum.c:8:5: */
3336 return Xisalnum(tls, c)
3337}
3338
3339func Xisalpha(tls *TLS, c int32) int32 { /* isalpha.c:4:5: */
3340 return Bool32(uint32(c)|uint32(32)-uint32('a') < uint32(26))
3341}
3342
3343func X__isalpha_l(tls *TLS, c int32, l locale_t) int32 { /* isalpha.c:9:5: */
3344 return Xisalpha(tls, c)
3345}
3346
3347func Xisdigit(tls *TLS, c int32) int32 { /* isdigit.c:4:5: */
3348 return Bool32(uint32(c)-uint32('0') < uint32(10))
3349}
3350
3351func X__isdigit_l(tls *TLS, c int32, l locale_t) int32 { /* isdigit.c:9:5: */
3352 return Xisdigit(tls, c)
3353}
3354
3355func Xislower(tls *TLS, c int32) int32 { /* islower.c:4:5: */
3356 return Bool32(uint32(c)-uint32('a') < uint32(26))
3357}
3358
3359func X__islower_l(tls *TLS, c int32, l locale_t) int32 { /* islower.c:9:5: */
3360 return Xislower(tls, c)
3361}
3362
3363func Xisprint(tls *TLS, c int32) int32 { /* isprint.c:4:5: */
3364 return Bool32(uint32(c)-uint32(0x20) < uint32(0x5f))
3365}
3366
3367func X__isprint_l(tls *TLS, c int32, l locale_t) int32 { /* isprint.c:9:5: */
3368 return Xisprint(tls, c)
3369}
3370
3371func Xisspace(tls *TLS, c int32) int32 { /* isspace.c:4:5: */
3372 return Bool32(c == ' ' || uint32(c)-uint32('\t') < uint32(5))
3373}
3374
3375func X__isspace_l(tls *TLS, c int32, l locale_t) int32 { /* isspace.c:9:5: */
3376 return Xisspace(tls, c)
3377}
3378
3379func Xisupper(tls *TLS, c int32) int32 { /* isupper.c:4:5: */
3380 return Bool32(uint32(c)-uint32('A') < uint32(26))
3381}
3382
3383func X__isupper_l(tls *TLS, c int32, l locale_t) int32 { /* isupper.c:9:5: */
3384 return Xisupper(tls, c)
3385}
3386
3387func Xisxdigit(tls *TLS, c int32) int32 { /* isxdigit.c:3:5: */
3388 return Bool32(func() int32 {
3389 if 0 != 0 {
3390 return Xisdigit(tls, c)
3391 }
3392 return Bool32(uint32(c)-uint32('0') < uint32(10))
3393 }() != 0 || uint32(c)|uint32(32)-uint32('a') < uint32(6))
3394}
3395
3396func X__isxdigit_l(tls *TLS, c int32, l locale_t) int32 { /* isxdigit.c:8:5: */
3397 return Xisxdigit(tls, c)
3398}
3399
3400type uintptr_t = uint32 /* alltypes.h:48:24 */
3401
3402type intptr_t = int32 /* alltypes.h:63:15 */
3403
3404type int8_t = int8 /* alltypes.h:89:25 */
3405
3406type int16_t = int16 /* alltypes.h:94:25 */
3407
3408type int32_t = int32 /* alltypes.h:99:25 */
3409
3410type int64_t = int64 /* alltypes.h:104:25 */
3411
3412type intmax_t = int64 /* alltypes.h:109:25 */
3413
3414type uint8_t = uint8 /* alltypes.h:114:25 */
3415
3416type uint16_t = uint16 /* alltypes.h:119:25 */
3417
3418type uint32_t = uint32 /* alltypes.h:124:25 */
3419
3420type uint64_t = uint64 /* alltypes.h:129:25 */
3421
3422type uintmax_t = uint64 /* alltypes.h:139:25 */
3423
3424type int_fast8_t = int8_t /* stdint.h:22:16 */
3425type int_fast64_t = int64_t /* stdint.h:23:17 */
3426
3427type int_least8_t = int8_t /* stdint.h:25:17 */
3428type int_least16_t = int16_t /* stdint.h:26:17 */
3429type int_least32_t = int32_t /* stdint.h:27:17 */
3430type int_least64_t = int64_t /* stdint.h:28:17 */
3431
3432type uint_fast8_t = uint8_t /* stdint.h:30:17 */
3433type uint_fast64_t = uint64_t /* stdint.h:31:18 */
3434
3435type uint_least8_t = uint8_t /* stdint.h:33:18 */
3436type uint_least16_t = uint16_t /* stdint.h:34:18 */
3437type uint_least32_t = uint32_t /* stdint.h:35:18 */
3438type uint_least64_t = uint64_t /* stdint.h:36:18 */
3439
3440type int_fast16_t = int32_t /* stdint.h:1:17 */
3441type int_fast32_t = int32_t /* stdint.h:2:17 */
3442type uint_fast16_t = uint32_t /* stdint.h:3:18 */
3443type uint_fast32_t = uint32_t /* stdint.h:4:18 */
3444
3445type ssize_t = int32 /* alltypes.h:58:15 */
3446
3447type off_t = int64 /* alltypes.h:155:16 */
3448
3449type _IO_FILE = struct {
3450 Fflags uint32
3451 Frpos uintptr
3452 Frend uintptr
3453 Fclose uintptr
3454 Fwend uintptr
3455 Fwpos uintptr
3456 Fmustbezero_1 uintptr
3457 Fwbase uintptr
3458 Fread uintptr
3459 Fwrite uintptr
3460 Fseek uintptr
3461 Fbuf uintptr
3462 Fbuf_size size_t
3463 Fprev uintptr
3464 Fnext uintptr
3465 Ffd int32
3466 Fpipe_pid int32
3467 Flockcount int32
3468 Fmode int32
3469 Flock int32
3470 Flbf int32
3471 Fcookie uintptr
3472 Foff off_t
3473 Fgetln_buf uintptr
3474 Fmustbezero_2 uintptr
3475 Fshend uintptr
3476 F__ccgo_pad1 [4]byte
3477 Fshlim off_t
3478 Fshcnt off_t
3479 Fprev_locked uintptr
3480 Fnext_locked uintptr
3481 Flocale uintptr
3482 F__ccgo_pad2 [4]byte
3483} /* alltypes.h:313:9 */
3484
3485type FILE = _IO_FILE /* alltypes.h:313:25 */
3486
3487type va_list = uintptr /* alltypes.h:319:27 */
3488
3489type _G_fpos64_t = struct {
3490 F__ccgo_pad1 [0]uint64
3491 F__opaque [16]uint8
3492} /* stdio.h:54:9 */
3493
3494type fpos_t = _G_fpos64_t /* stdio.h:58:3 */
3495
3496type float_t = float32 /* alltypes.h:23:15 */
3497
3498type double_t = float64 /* alltypes.h:28:16 */
3499
3500func __FLOAT_BITS(tls *TLS, __f float32) uint32 { /* math.h:55:26: */
3501 bp := tls.Alloc(4)
3502 defer tls.Free(4)
3503
3504 // var __u struct {F__f float32;} at bp, 4
3505
3506 *(*float32)(unsafe.Pointer(bp)) = __f
3507 return *(*uint32)(unsafe.Pointer(bp))
3508}
3509
3510func __DOUBLE_BITS(tls *TLS, __f float64) uint64 { /* math.h:61:36: */
3511 bp := tls.Alloc(8)
3512 defer tls.Free(8)
3513
3514 // var __u struct {F__f float64;} at bp, 8
3515
3516 *(*float64)(unsafe.Pointer(bp)) = __f
3517 return *(*uint64)(unsafe.Pointer(bp))
3518}
3519
3520type syscall_arg_t = int32 /* syscall.h:22:14 */
3521
3522func scanexp(tls *TLS, f uintptr, pok int32) int64 { /* floatscan.c:37:18: */
3523 var c int32
3524 var x int32
3525 var y int64
3526 var neg int32 = 0
3527
3528 c = func() int32 {
3529 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend {
3530 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1))))
3531 }
3532 return X__shgetc(tls, f)
3533 }()
3534 if c == '+' || c == '-' {
3535 neg = Bool32(c == '-')
3536 c = func() int32 {
3537 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend {
3538 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1))))
3539 }
3540 return X__shgetc(tls, f)
3541 }()
3542 if uint32(c-'0') >= 10 && pok != 0 {
3543 if (*FILE)(unsafe.Pointer(f)).Fshlim >= int64(0) {
3544 (*FILE)(unsafe.Pointer(f)).Frpos--
3545 } else {
3546 }
3547 }
3548 }
3549 if uint32(c-'0') >= 10 {
3550 if (*FILE)(unsafe.Pointer(f)).Fshlim >= int64(0) {
3551 (*FILE)(unsafe.Pointer(f)).Frpos--
3552 } else {
3553 }
3554 return -0x7fffffffffffffff - int64(1)
3555 }
3556 for x = 0; uint32(c-'0') < 10 && x < 0x7fffffff/10; c = func() int32 {
3557 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend {
3558 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1))))
3559 }
3560 return X__shgetc(tls, f)
3561 }() {
3562 x = 10*x + c - '0'
3563 }
3564 for y = int64(x); uint32(c-'0') < 10 && y < 0x7fffffffffffffff/int64(100); c = func() int32 {
3565 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend {
3566 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1))))
3567 }
3568 return X__shgetc(tls, f)
3569 }() {
3570 y = int64(10)*y + int64(c) - int64('0')
3571 }
3572 for ; uint32(c-'0') < 10; c = func() int32 {
3573 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend {
3574 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1))))
3575 }
3576 return X__shgetc(tls, f)
3577 }() {
3578 }
3579 if (*FILE)(unsafe.Pointer(f)).Fshlim >= int64(0) {
3580 (*FILE)(unsafe.Pointer(f)).Frpos--
3581 } else {
3582 }
3583 if neg != 0 {
3584 return -y
3585 }
3586 return y
3587}
3588
3589func decfloat(tls *TLS, f uintptr, c int32, bits int32, emin int32, sign int32, pok int32) float64 { /* floatscan.c:64:20: */
3590 bp := tls.Alloc(512)
3591 defer tls.Free(512)
3592
3593 // var x [128]uint32_t at bp, 512
3594
3595 var i int32
3596 var j int32
3597 var k int32
3598 var a int32
3599 var z int32
3600 var lrp int64 = int64(0)
3601 var dc int64 = int64(0)
3602 var e10 int64 = int64(0)
3603 var lnz int32 = 0
3604 var gotdig int32 = 0
3605 var gotrad int32 = 0
3606 var rp int32
3607 var e2 int32
3608 var emax int32 = -emin - bits + 3
3609 var denormal int32 = 0
3610 var y float64
3611 var frac float64 = float64(0)
3612 var bias float64 = float64(0)
3613
3614 j = 0
3615 k = 0
3616
3617 // Don't let leading zeros consume buffer space
3618 for ; c == '0'; c = func() int32 {
3619 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend {
3620 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1))))
3621 }
3622 return X__shgetc(tls, f)
3623 }() {
3624 gotdig = 1
3625 }
3626 if c == '.' {
3627 gotrad = 1
3628 for c = func() int32 {
3629 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend {
3630 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1))))
3631 }
3632 return X__shgetc(tls, f)
3633 }(); c == '0'; c = func() int32 {
3634 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend {
3635 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1))))
3636 }
3637 return X__shgetc(tls, f)
3638 }() {
3639 gotdig = 1
3640 lrp--
3641 }
3642 }
3643
3644 *(*uint32_t)(unsafe.Pointer(bp)) = uint32_t(0)
3645 for ; uint32(c-'0') < 10 || c == '.'; c = func() int32 {
3646 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend {
3647 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1))))
3648 }
3649 return X__shgetc(tls, f)
3650 }() {
3651 if c == '.' {
3652 if gotrad != 0 {
3653 break
3654 }
3655 gotrad = 1
3656 lrp = dc
3657 } else if k < 128-3 {
3658 dc++
3659 if c != '0' {
3660 lnz = int32(dc)
3661 }
3662 if j != 0 {
3663 *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) = *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4))*uint32_t(10) + uint32_t(c) - uint32_t('0')
3664 } else {
3665 *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) = uint32_t(c - '0')
3666 }
3667 if PreIncInt32(&j, 1) == 9 {
3668 k++
3669 j = 0
3670 }
3671 gotdig = 1
3672 } else {
3673 dc++
3674 if c != '0' {
3675 lnz = (128 - 4) * 9
3676 *(*uint32_t)(unsafe.Pointer(bp + 124*4)) |= uint32_t(1)
3677 }
3678 }
3679 }
3680 if !(gotrad != 0) {
3681 lrp = dc
3682 }
3683
3684 if gotdig != 0 && c|32 == 'e' {
3685 e10 = scanexp(tls, f, pok)
3686 if e10 == -0x7fffffffffffffff-int64(1) {
3687 if pok != 0 {
3688 if (*FILE)(unsafe.Pointer(f)).Fshlim >= int64(0) {
3689 (*FILE)(unsafe.Pointer(f)).Frpos--
3690 } else {
3691 }
3692 } else {
3693 X__shlim(tls, f, int64(0))
3694 return float64(0)
3695 }
3696 e10 = int64(0)
3697 }
3698 lrp = lrp + e10
3699 } else if c >= 0 {
3700 if (*FILE)(unsafe.Pointer(f)).Fshlim >= int64(0) {
3701 (*FILE)(unsafe.Pointer(f)).Frpos--
3702 } else {
3703 }
3704 }
3705 if !(gotdig != 0) {
3706 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 22
3707 X__shlim(tls, f, int64(0))
3708 return float64(0)
3709 }
3710
3711 // Handle zero specially to avoid nasty special cases later
3712 if !(int32(*(*uint32_t)(unsafe.Pointer(bp))) != 0) {
3713 return float64(sign) * 0.0
3714 }
3715
3716 // Optimize small integers (w/no exponent) and over/under-flow
3717 if lrp == dc && dc < int64(10) && (bits > 30 || *(*uint32_t)(unsafe.Pointer(bp))>>bits == uint32_t(0)) {
3718 return float64(sign) * float64(*(*uint32_t)(unsafe.Pointer(bp)))
3719 }
3720 if lrp > int64(-emin/2) {
3721 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34
3722 return float64(sign) * 1.79769313486231570815e+308 * 1.79769313486231570815e+308
3723 }
3724 if lrp < int64(emin-2*53) {
3725 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34
3726 return float64(sign) * 2.22507385850720138309e-308 * 2.22507385850720138309e-308
3727 }
3728
3729 // Align incomplete final B1B digit
3730 if j != 0 {
3731 for ; j < 9; j++ {
3732 *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) *= uint32_t(10)
3733 }
3734 k++
3735 j = 0
3736 }
3737
3738 a = 0
3739 z = k
3740 e2 = 0
3741 rp = int32(lrp)
3742
3743 // Optimize small to mid-size integers (even in exp. notation)
3744 if lnz < 9 && lnz <= rp && rp < 18 {
3745 if rp == 9 {
3746 return float64(sign) * float64(*(*uint32_t)(unsafe.Pointer(bp)))
3747 }
3748 if rp < 9 {
3749 return float64(sign) * float64(*(*uint32_t)(unsafe.Pointer(bp))) / float64(_sp10s[8-rp])
3750 }
3751 var bitlim int32 = bits - 3*(rp-9)
3752 if bitlim > 30 || *(*uint32_t)(unsafe.Pointer(bp))>>bitlim == uint32_t(0) {
3753 return float64(sign) * float64(*(*uint32_t)(unsafe.Pointer(bp))) * float64(_sp10s[rp-10])
3754 }
3755 }
3756
3757 // Drop trailing zeros
3758 for ; !(int32(*(*uint32_t)(unsafe.Pointer(bp + uintptr(z-1)*4))) != 0); z-- {
3759 }
3760
3761 // Align radix point to B1B digit boundary
3762 if rp%9 != 0 {
3763 var rpm9 int32
3764 if rp >= 0 {
3765 rpm9 = rp % 9
3766 } else {
3767 rpm9 = rp%9 + 9
3768 }
3769 var p10 int32 = _sp10s[8-rpm9]
3770 var carry uint32_t = uint32_t(0)
3771 for k = a; k != z; k++ {
3772 var tmp uint32_t = *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) % uint32_t(p10)
3773 *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) = *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4))/uint32_t(p10) + carry
3774 carry = uint32_t(1000000000/p10) * tmp
3775 if k == a && !(int32(*(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4))) != 0) {
3776 a = (a + 1) & (128 - 1)
3777 rp = rp - 9
3778 }
3779 }
3780 if carry != 0 {
3781 *(*uint32_t)(unsafe.Pointer(bp + uintptr(PostIncInt32(&z, 1))*4)) = carry
3782 }
3783 rp = rp + (9 - rpm9)
3784 }
3785
3786 // Upscale until desired number of bits are left of radix point
3787 for rp < 9*2 || rp == 9*2 && *(*uint32_t)(unsafe.Pointer(bp + uintptr(a)*4)) < _sth[0] {
3788 var carry uint32_t = uint32_t(0)
3789 e2 = e2 - 29
3790 for k = (z - 1) & (128 - 1); ; k = (k - 1) & (128 - 1) {
3791 var tmp uint64_t = uint64_t(*(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)))<<29 + uint64_t(carry)
3792 if tmp > uint64(1000000000) {
3793 carry = uint32_t(tmp / uint64(1000000000))
3794 *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) = uint32_t(tmp % uint64(1000000000))
3795 } else {
3796 carry = uint32_t(0)
3797 *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) = uint32_t(tmp)
3798 }
3799 if k == (z-1)&(128-1) && k != a && !(int32(*(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4))) != 0) {
3800 z = k
3801 }
3802 if k == a {
3803 break
3804 }
3805 }
3806 if carry != 0 {
3807 rp = rp + 9
3808 a = (a - 1) & (128 - 1)
3809 if a == z {
3810 z = (z - 1) & (128 - 1)
3811 *(*uint32_t)(unsafe.Pointer(bp + uintptr((z-1)&(128-1))*4)) |= *(*uint32_t)(unsafe.Pointer(bp + uintptr(z)*4))
3812 }
3813 *(*uint32_t)(unsafe.Pointer(bp + uintptr(a)*4)) = carry
3814 }
3815 }
3816
3817 // Downscale until exactly number of bits are left of radix point
3818 for {
3819 var carry uint32_t = uint32_t(0)
3820 var sh int32 = 1
3821 for i = 0; i < 2; i++ {
3822 k = (a + i) & (128 - 1)
3823 if k == z || *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) < _sth[i] {
3824 i = 2
3825 break
3826 }
3827 if *(*uint32_t)(unsafe.Pointer(bp + uintptr((a+i)&(128-1))*4)) > _sth[i] {
3828 break
3829 }
3830 }
3831 if i == 2 && rp == 9*2 {
3832 break
3833 }
3834 // FIXME: find a way to compute optimal sh
3835 if rp > 9+9*2 {
3836 sh = 9
3837 }
3838 e2 = e2 + sh
3839 for k = a; k != z; k = (k + 1) & (128 - 1) {
3840 var tmp uint32_t = *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) & uint32_t(int32(1)<<sh-1)
3841 *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) = *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4))>>sh + carry
3842 carry = uint32_t(int32(1000000000)>>sh) * tmp
3843 if k == a && !(int32(*(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4))) != 0) {
3844 a = (a + 1) & (128 - 1)
3845 i--
3846 rp = rp - 9
3847 }
3848 }
3849 if carry != 0 {
3850 if (z+1)&(128-1) != a {
3851 *(*uint32_t)(unsafe.Pointer(bp + uintptr(z)*4)) = carry
3852 z = (z + 1) & (128 - 1)
3853 } else {
3854 *(*uint32_t)(unsafe.Pointer(bp + uintptr((z-1)&(128-1))*4)) |= uint32_t(1)
3855 }
3856 }
3857 }
3858
3859 // Assemble desired bits into floating point variable
3860 for y = float64(AssignInt32(&i, 0)); i < 2; i++ {
3861 if (a+i)&(128-1) == z {
3862 *(*uint32_t)(unsafe.Pointer(bp + uintptr(AssignInt32(&z, (z+1)&(128-1))-1)*4)) = uint32_t(0)
3863 }
3864 y = 1000000000.0*y + float64(*(*uint32_t)(unsafe.Pointer(bp + uintptr((a+i)&(128-1))*4)))
3865 }
3866
3867 y = y * float64(sign)
3868
3869 // Limit precision for denormal results
3870 if bits > 53+e2-emin {
3871 bits = 53 + e2 - emin
3872 if bits < 0 {
3873 bits = 0
3874 }
3875 denormal = 1
3876 }
3877
3878 // Calculate bias term to force rounding, move out lower bits
3879 if bits < 53 {
3880 bias = Xcopysignl(tls, Xscalbn(tls, float64(1), 2*53-bits-1), y)
3881 frac = Xfmodl(tls, y, Xscalbn(tls, float64(1), 53-bits))
3882 y = y - frac
3883 y = y + bias
3884 }
3885
3886 // Process tail of decimal input so it can affect rounding
3887 if (a+i)&(128-1) != z {
3888 var t uint32_t = *(*uint32_t)(unsafe.Pointer(bp + uintptr((a+i)&(128-1))*4))
3889 if t < uint32_t(500000000) && (t != 0 || (a+i+1)&(128-1) != z) {
3890 frac = frac + 0.25*float64(sign)
3891 } else if t > uint32_t(500000000) {
3892 frac = frac + 0.75*float64(sign)
3893 } else if t == uint32_t(500000000) {
3894 if (a+i+1)&(128-1) == z {
3895 frac = frac + 0.5*float64(sign)
3896 } else {
3897 frac = frac + 0.75*float64(sign)
3898 }
3899 }
3900 if 53-bits >= 2 && !(Xfmodl(tls, frac, float64(1)) != 0) {
3901 frac += 1
3902 }
3903 }
3904
3905 y = y + frac
3906 y = y - bias
3907
3908 if (e2+53)&0x7fffffff > emax-5 {
3909 if Xfabsl(tls, y) >= float64(float64(2))/2.22044604925031308085e-16 {
3910 if denormal != 0 && bits == 53+e2-emin {
3911 denormal = 0
3912 }
3913 y = y * 0.5
3914 e2++
3915 }
3916 if e2+53 > emax || denormal != 0 && frac != 0 {
3917 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34
3918 }
3919 }
3920
3921 return Xscalbnl(tls, y, e2)
3922}
3923
3924var _sth = [2]uint32_t{uint32_t(9007199), uint32_t(254740991)} /* floatscan.c:67:24 */
3925var _sp10s = [8]int32{10, 100, 1000, 10000,
3926 100000, 1000000, 10000000, 100000000} /* floatscan.c:80:19 */
3927
3928func hexfloat(tls *TLS, f uintptr, bits int32, emin int32, sign int32, pok int32) float64 { /* floatscan.c:315:20: */
3929 var x uint32_t = uint32_t(0)
3930 var y float64 = float64(0)
3931 var scale float64 = float64(1)
3932 var bias float64 = float64(0)
3933 var gottail int32 = 0
3934 var gotrad int32 = 0
3935 var gotdig int32 = 0
3936 var rp int64 = int64(0)
3937 var dc int64 = int64(0)
3938 var e2 int64 = int64(0)
3939 var d int32
3940 var c int32
3941
3942 c = func() int32 {
3943 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend {
3944 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1))))
3945 }
3946 return X__shgetc(tls, f)
3947 }()
3948
3949 // Skip leading zeros
3950 for ; c == '0'; c = func() int32 {
3951 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend {
3952 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1))))
3953 }
3954 return X__shgetc(tls, f)
3955 }() {
3956 gotdig = 1
3957 }
3958
3959 if c == '.' {
3960 gotrad = 1
3961 c = func() int32 {
3962 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend {
3963 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1))))
3964 }
3965 return X__shgetc(tls, f)
3966 }()
3967 // Count zeros after the radix point before significand
3968 rp = int64(0)
3969 __1:
3970 if !(c == '0') {
3971 goto __3
3972 }
3973 gotdig = 1
3974 goto __2
3975 __2:
3976 c = func() int32 {
3977 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend {
3978 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1))))
3979 }
3980 return X__shgetc(tls, f)
3981 }()
3982 rp--
3983 goto __1
3984 goto __3
3985 __3:
3986 }
3987
3988 for ; uint32(c-'0') < 10 || uint32(c|32-'a') < 6 || c == '.'; c = func() int32 {
3989 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend {
3990 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1))))
3991 }
3992 return X__shgetc(tls, f)
3993 }() {
3994 if c == '.' {
3995 if gotrad != 0 {
3996 break
3997 }
3998 rp = dc
3999 gotrad = 1
4000 } else {
4001 gotdig = 1
4002 if c > '9' {
4003 d = c | 32 + 10 - 'a'
4004 } else {
4005 d = c - '0'
4006 }
4007 if dc < int64(8) {
4008 x = x*uint32_t(16) + uint32_t(d)
4009 } else if dc < int64(53/4+1) {
4010 y = y + float64(d)*AssignDivFloat64(&scale, float64(16))
4011 } else if d != 0 && !(gottail != 0) {
4012 y = y + 0.5*scale
4013 gottail = 1
4014 }
4015 dc++
4016 }
4017 }
4018 if !(gotdig != 0) {
4019 if (*FILE)(unsafe.Pointer(f)).Fshlim >= int64(0) {
4020 (*FILE)(unsafe.Pointer(f)).Frpos--
4021 } else {
4022 }
4023 if pok != 0 {
4024 if (*FILE)(unsafe.Pointer(f)).Fshlim >= int64(0) {
4025 (*FILE)(unsafe.Pointer(f)).Frpos--
4026 } else {
4027 }
4028 if gotrad != 0 {
4029 if (*FILE)(unsafe.Pointer(f)).Fshlim >= int64(0) {
4030 (*FILE)(unsafe.Pointer(f)).Frpos--
4031 } else {
4032 }
4033 }
4034 } else {
4035 X__shlim(tls, f, int64(0))
4036 }
4037 return float64(sign) * 0.0
4038 }
4039 if !(gotrad != 0) {
4040 rp = dc
4041 }
4042 for dc < int64(8) {
4043 x = x * uint32_t(16)
4044 dc++
4045 }
4046 if c|32 == 'p' {
4047 e2 = scanexp(tls, f, pok)
4048 if e2 == -0x7fffffffffffffff-int64(1) {
4049 if pok != 0 {
4050 if (*FILE)(unsafe.Pointer(f)).Fshlim >= int64(0) {
4051 (*FILE)(unsafe.Pointer(f)).Frpos--
4052 } else {
4053 }
4054 } else {
4055 X__shlim(tls, f, int64(0))
4056 return float64(0)
4057 }
4058 e2 = int64(0)
4059 }
4060 } else {
4061 if (*FILE)(unsafe.Pointer(f)).Fshlim >= int64(0) {
4062 (*FILE)(unsafe.Pointer(f)).Frpos--
4063 } else {
4064 }
4065 }
4066 e2 = e2 + (int64(4)*rp - int64(32))
4067
4068 if !(x != 0) {
4069 return float64(sign) * 0.0
4070 }
4071 if e2 > int64(-emin) {
4072 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34
4073 return float64(sign) * 1.79769313486231570815e+308 * 1.79769313486231570815e+308
4074 }
4075 if e2 < int64(emin-2*53) {
4076 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34
4077 return float64(sign) * 2.22507385850720138309e-308 * 2.22507385850720138309e-308
4078 }
4079
4080 for x < 0x80000000 {
4081 if y >= 0.5 {
4082 x = x + (x + uint32_t(1))
4083 y = y + (y - float64(1))
4084 } else {
4085 x = x + x
4086 y = y + y
4087 }
4088 e2--
4089 }
4090
4091 if int64(bits) > int64(32)+e2-int64(emin) {
4092 bits = int32(int64(32) + e2 - int64(emin))
4093 if bits < 0 {
4094 bits = 0
4095 }
4096 }
4097
4098 if bits < 53 {
4099 bias = Xcopysignl(tls, Xscalbn(tls, float64(1), 32+53-bits-1), float64(sign))
4100 }
4101
4102 if bits < 32 && y != 0 && !(x&uint32_t(1) != 0) {
4103 x++
4104 y = float64(0)
4105 }
4106
4107 y = bias + float64(sign)*float64(x) + float64(sign)*y
4108 y = y - bias
4109
4110 if !(y != 0) {
4111 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34
4112 }
4113
4114 return Xscalbnl(tls, y, int32(e2))
4115}
4116
4117func X__floatscan(tls *TLS, f uintptr, prec int32, pok int32) float64 { /* floatscan.c:427:13: */
4118 var sign int32 = 1
4119 var i size_t
4120 var bits int32
4121 var emin int32
4122 var c int32
4123
4124 switch prec {
4125 case 0:
4126 bits = 24
4127 emin = -125 - bits
4128 break
4129 case 1:
4130 bits = 53
4131 emin = -1021 - bits
4132 break
4133 case 2:
4134 bits = 53
4135 emin = -1021 - bits
4136 break
4137 default:
4138 return float64(0)
4139 }
4140
4141 for __isspace(tls, AssignInt32(&c, func() int32 {
4142 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend {
4143 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1))))
4144 }
4145 return X__shgetc(tls, f)
4146 }())) != 0 {
4147 }
4148
4149 if c == '+' || c == '-' {
4150 sign = sign - 2*Bool32(c == '-')
4151 c = func() int32 {
4152 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend {
4153 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1))))
4154 }
4155 return X__shgetc(tls, f)
4156 }()
4157 }
4158
4159 for i = size_t(0); i < size_t(8) && c|32 == int32(*(*uint8)(unsafe.Pointer(ts + 41 /* "infinity" */ + uintptr(i)))); i++ {
4160 if i < size_t(7) {
4161 c = func() int32 {
4162 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend {
4163 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1))))
4164 }
4165 return X__shgetc(tls, f)
4166 }()
4167 }
4168 }
4169 if i == size_t(3) || i == size_t(8) || i > size_t(3) && pok != 0 {
4170 if i != size_t(8) {
4171 if (*FILE)(unsafe.Pointer(f)).Fshlim >= int64(0) {
4172 (*FILE)(unsafe.Pointer(f)).Frpos--
4173 } else {
4174 }
4175 if pok != 0 {
4176 for ; i > size_t(3); i-- {
4177 if (*FILE)(unsafe.Pointer(f)).Fshlim >= int64(0) {
4178 (*FILE)(unsafe.Pointer(f)).Frpos--
4179 } else {
4180 }
4181 }
4182 }
4183 }
4184 return float64(float32(sign) * X__builtin_inff(tls))
4185 }
4186 if !(i != 0) {
4187 for i = size_t(0); i < size_t(3) && c|32 == int32(*(*uint8)(unsafe.Pointer(ts + 50 /* "nan" */ + uintptr(i)))); i++ {
4188 if i < size_t(2) {
4189 c = func() int32 {
4190 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend {
4191 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1))))
4192 }
4193 return X__shgetc(tls, f)
4194 }()
4195 }
4196 }
4197 }
4198 if i == size_t(3) {
4199 if func() int32 {
4200 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend {
4201 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1))))
4202 }
4203 return X__shgetc(tls, f)
4204 }() != '(' {
4205 if (*FILE)(unsafe.Pointer(f)).Fshlim >= int64(0) {
4206 (*FILE)(unsafe.Pointer(f)).Frpos--
4207 } else {
4208 }
4209 return float64(X__builtin_nanf(tls, ts+54))
4210 }
4211 for i = size_t(1); ; i++ {
4212 c = func() int32 {
4213 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend {
4214 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1))))
4215 }
4216 return X__shgetc(tls, f)
4217 }()
4218 if uint32(c-'0') < 10 || uint32(c-'A') < 26 || uint32(c-'a') < 26 || c == '_' {
4219 continue
4220 }
4221 if c == ')' {
4222 return float64(X__builtin_nanf(tls, ts+54))
4223 }
4224 if (*FILE)(unsafe.Pointer(f)).Fshlim >= int64(0) {
4225 (*FILE)(unsafe.Pointer(f)).Frpos--
4226 } else {
4227 }
4228 if !(pok != 0) {
4229 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 22
4230 X__shlim(tls, f, int64(0))
4231 return float64(0)
4232 }
4233 for PostDecUint32(&i, 1) != 0 {
4234 if (*FILE)(unsafe.Pointer(f)).Fshlim >= int64(0) {
4235 (*FILE)(unsafe.Pointer(f)).Frpos--
4236 } else {
4237 }
4238 }
4239 return float64(X__builtin_nanf(tls, ts+54))
4240 }
4241 return float64(X__builtin_nanf(tls, ts+54))
4242 }
4243
4244 if i != 0 {
4245 if (*FILE)(unsafe.Pointer(f)).Fshlim >= int64(0) {
4246 (*FILE)(unsafe.Pointer(f)).Frpos--
4247 } else {
4248 }
4249 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 22
4250 X__shlim(tls, f, int64(0))
4251 return float64(0)
4252 }
4253
4254 if c == '0' {
4255 c = func() int32 {
4256 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend {
4257 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1))))
4258 }
4259 return X__shgetc(tls, f)
4260 }()
4261 if c|32 == 'x' {
4262 return hexfloat(tls, f, bits, emin, sign, pok)
4263 }
4264 if (*FILE)(unsafe.Pointer(f)).Fshlim >= int64(0) {
4265 (*FILE)(unsafe.Pointer(f)).Frpos--
4266 } else {
4267 }
4268 c = '0'
4269 }
4270
4271 return decfloat(tls, f, c, bits, emin, sign, pok)
4272}
4273
4274// Lookup table for digit values. -1==255>=36 -> invalid
4275var table = [257]uint8{Uint8FromInt32(-1),
4276 Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1),
4277 Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1),
4278 Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1),
4279 uint8(0), uint8(1), uint8(2), uint8(3), uint8(4), uint8(5), uint8(6), uint8(7), uint8(8), uint8(9), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1),
4280 Uint8FromInt32(-1), uint8(10), uint8(11), uint8(12), uint8(13), uint8(14), uint8(15), uint8(16), uint8(17), uint8(18), uint8(19), uint8(20), uint8(21), uint8(22), uint8(23), uint8(24),
4281 uint8(25), uint8(26), uint8(27), uint8(28), uint8(29), uint8(30), uint8(31), uint8(32), uint8(33), uint8(34), uint8(35), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1),
4282 Uint8FromInt32(-1), uint8(10), uint8(11), uint8(12), uint8(13), uint8(14), uint8(15), uint8(16), uint8(17), uint8(18), uint8(19), uint8(20), uint8(21), uint8(22), uint8(23), uint8(24),
4283 uint8(25), uint8(26), uint8(27), uint8(28), uint8(29), uint8(30), uint8(31), uint8(32), uint8(33), uint8(34), uint8(35), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1),
4284 Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1),
4285 Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1),
4286 Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1),
4287 Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1),
4288 Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1),
4289 Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1),
4290 Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1),
4291 Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1), Uint8FromInt32(-1),
4292} /* intscan.c:7:28 */
4293
4294func X__intscan(tls *TLS, f uintptr, base uint32, pok int32, lim uint64) uint64 { /* intscan.c:26:20: */
4295 var val uintptr
4296 var c int32
4297 var neg int32
4298 var x uint32
4299 var y uint64
4300 var bs int32
4301 val = uintptr(unsafe.Pointer(&table)) + uintptr(1)
4302 neg = 0
4303 if !(base > uint32(36) || base == uint32(1)) {
4304 goto __1
4305 }
4306 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 22
4307 return uint64(0)
4308__1:
4309 ;
4310__2:
4311 if !(__isspace(tls, AssignInt32(&c, func() int32 {
4312 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend {
4313 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1))))
4314 }
4315 return X__shgetc(tls, f)
4316 }())) != 0) {
4317 goto __3
4318 }
4319 goto __2
4320__3:
4321 ;
4322 if !(c == '+' || c == '-') {
4323 goto __4
4324 }
4325 neg = -Bool32(c == '-')
4326 c = func() int32 {
4327 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend {
4328 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1))))
4329 }
4330 return X__shgetc(tls, f)
4331 }()
4332__4:
4333 ;
4334 if !((base == uint32(0) || base == uint32(16)) && c == '0') {
4335 goto __5
4336 }
4337 c = func() int32 {
4338 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend {
4339 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1))))
4340 }
4341 return X__shgetc(tls, f)
4342 }()
4343 if !(c|32 == 'x') {
4344 goto __7
4345 }
4346 c = func() int32 {
4347 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend {
4348 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1))))
4349 }
4350 return X__shgetc(tls, f)
4351 }()
4352 if !(int32(*(*uint8)(unsafe.Pointer(val + uintptr(c)))) >= 16) {
4353 goto __9
4354 }
4355 if (*FILE)(unsafe.Pointer(f)).Fshlim >= int64(0) {
4356 (*FILE)(unsafe.Pointer(f)).Frpos--
4357 } else {
4358 }
4359 if !(pok != 0) {
4360 goto __10
4361 }
4362 if (*FILE)(unsafe.Pointer(f)).Fshlim >= int64(0) {
4363 (*FILE)(unsafe.Pointer(f)).Frpos--
4364 } else {
4365 }
4366 goto __11
4367__10:
4368 X__shlim(tls, f, int64(0))
4369__11:
4370 ;
4371 return uint64(0)
4372__9:
4373 ;
4374 base = uint32(16)
4375 goto __8
4376__7:
4377 if !(base == uint32(0)) {
4378 goto __12
4379 }
4380 base = uint32(8)
4381__12:
4382 ;
4383__8:
4384 ;
4385 goto __6
4386__5:
4387 if !(base == uint32(0)) {
4388 goto __13
4389 }
4390 base = uint32(10)
4391__13:
4392 ;
4393 if !(uint32(*(*uint8)(unsafe.Pointer(val + uintptr(c)))) >= base) {
4394 goto __14
4395 }
4396 if (*FILE)(unsafe.Pointer(f)).Fshlim >= int64(0) {
4397 (*FILE)(unsafe.Pointer(f)).Frpos--
4398 } else {
4399 }
4400 X__shlim(tls, f, int64(0))
4401 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 22
4402 return uint64(0)
4403__14:
4404 ;
4405__6:
4406 ;
4407 if !(base == uint32(10)) {
4408 goto __15
4409 }
4410 x = uint32(0)
4411__17:
4412 if !(uint32(c-'0') < 10 && x <= 0xffffffff/uint32(10)-uint32(1)) {
4413 goto __19
4414 }
4415 x = x*uint32(10) + uint32(c-'0')
4416 goto __18
4417__18:
4418 c = func() int32 {
4419 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend {
4420 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1))))
4421 }
4422 return X__shgetc(tls, f)
4423 }()
4424 goto __17
4425 goto __19
4426__19:
4427 ;
4428 y = uint64(x)
4429__20:
4430 if !(uint32(c-'0') < 10 && y <= (2*uint64(0x7fffffffffffffff)+uint64(1))/uint64(10) && uint64(10)*y <= 2*uint64(0x7fffffffffffffff)+uint64(1)-uint64(c-'0')) {
4431 goto __22
4432 }
4433 y = y*uint64(10) + uint64(c-'0')
4434 goto __21
4435__21:
4436 c = func() int32 {
4437 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend {
4438 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1))))
4439 }
4440 return X__shgetc(tls, f)
4441 }()
4442 goto __20
4443 goto __22
4444__22:
4445 ;
4446 if !(uint32(c-'0') >= 10) {
4447 goto __23
4448 }
4449 goto done
4450__23:
4451 ;
4452 goto __16
4453__15:
4454 if !!(base&(base-uint32(1)) != 0) {
4455 goto __24
4456 }
4457 bs = int32(*(*uint8)(unsafe.Pointer(ts + 55 + uintptr(uint32(0x17)*base>>5&uint32(7)))))
4458 x = uint32(0)
4459__26:
4460 if !(uint32(*(*uint8)(unsafe.Pointer(val + uintptr(c)))) < base && x <= 0xffffffff/uint32(32)) {
4461 goto __28
4462 }
4463 x = x<<bs | uint32(*(*uint8)(unsafe.Pointer(val + uintptr(c))))
4464 goto __27
4465__27:
4466 c = func() int32 {
4467 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend {
4468 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1))))
4469 }
4470 return X__shgetc(tls, f)
4471 }()
4472 goto __26
4473 goto __28
4474__28:
4475 ;
4476 y = uint64(x)
4477__29:
4478 if !(uint32(*(*uint8)(unsafe.Pointer(val + uintptr(c)))) < base && y <= uint64(2*uint64(0x7fffffffffffffff)+uint64(1))>>bs) {
4479 goto __31
4480 }
4481 y = y<<bs | uint64(*(*uint8)(unsafe.Pointer(val + uintptr(c))))
4482 goto __30
4483__30:
4484 c = func() int32 {
4485 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend {
4486 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1))))
4487 }
4488 return X__shgetc(tls, f)
4489 }()
4490 goto __29
4491 goto __31
4492__31:
4493 ;
4494 goto __25
4495__24:
4496 x = uint32(0)
4497__32:
4498 if !(uint32(*(*uint8)(unsafe.Pointer(val + uintptr(c)))) < base && x <= 0xffffffff/uint32(36)-uint32(1)) {
4499 goto __34
4500 }
4501 x = x*base + uint32(*(*uint8)(unsafe.Pointer(val + uintptr(c))))
4502 goto __33
4503__33:
4504 c = func() int32 {
4505 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend {
4506 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1))))
4507 }
4508 return X__shgetc(tls, f)
4509 }()
4510 goto __32
4511 goto __34
4512__34:
4513 ;
4514 y = uint64(x)
4515__35:
4516 if !(uint32(*(*uint8)(unsafe.Pointer(val + uintptr(c)))) < base && y <= (2*uint64(0x7fffffffffffffff)+uint64(1))/uint64(base) && uint64(base)*y <= 2*uint64(0x7fffffffffffffff)+uint64(1)-uint64(*(*uint8)(unsafe.Pointer(val + uintptr(c))))) {
4517 goto __37
4518 }
4519 y = y*uint64(base) + uint64(*(*uint8)(unsafe.Pointer(val + uintptr(c))))
4520 goto __36
4521__36:
4522 c = func() int32 {
4523 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend {
4524 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1))))
4525 }
4526 return X__shgetc(tls, f)
4527 }()
4528 goto __35
4529 goto __37
4530__37:
4531 ;
4532__25:
4533 ;
4534__16:
4535 ;
4536 if !(uint32(*(*uint8)(unsafe.Pointer(val + uintptr(c)))) < base) {
4537 goto __38
4538 }
4539__39:
4540 if !(uint32(*(*uint8)(unsafe.Pointer(val + uintptr(c)))) < base) {
4541 goto __41
4542 }
4543 goto __40
4544__40:
4545 c = func() int32 {
4546 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend {
4547 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1))))
4548 }
4549 return X__shgetc(tls, f)
4550 }()
4551 goto __39
4552 goto __41
4553__41:
4554 ;
4555 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34
4556 y = lim
4557 if !(lim&uint64(1) != 0) {
4558 goto __42
4559 }
4560 neg = 0
4561__42:
4562 ;
4563__38:
4564 ;
4565done:
4566 if (*FILE)(unsafe.Pointer(f)).Fshlim >= int64(0) {
4567 (*FILE)(unsafe.Pointer(f)).Frpos--
4568 } else {
4569 }
4570 if !(y >= lim) {
4571 goto __43
4572 }
4573 if !(!(lim&uint64(1) != 0) && !(neg != 0)) {
4574 goto __44
4575 }
4576 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34
4577 return lim - uint64(1)
4578 goto __45
4579__44:
4580 if !(y > lim) {
4581 goto __46
4582 }
4583 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34
4584 return lim
4585__46:
4586 ;
4587__45:
4588 ;
4589__43:
4590 ;
4591 return y ^ uint64(neg) - uint64(neg)
4592}
4593
4594// The shcnt field stores the number of bytes read so far, offset by
4595// the value of buf-rpos at the last function call (__shlim or __shgetc),
4596// so that between calls the inline shcnt macro can add rpos-buf to get
4597// the actual count.
4598
4599func X__shlim(tls *TLS, f uintptr, lim off_t) { /* shgetc.c:8:6: */
4600 (*FILE)(unsafe.Pointer(f)).Fshlim = lim
4601 (*FILE)(unsafe.Pointer(f)).Fshcnt = off_t((int32((*FILE)(unsafe.Pointer(f)).Fbuf) - int32((*FILE)(unsafe.Pointer(f)).Frpos)) / 1)
4602 // If lim is nonzero, rend must be a valid pointer.
4603 if lim != 0 && off_t((int32((*FILE)(unsafe.Pointer(f)).Frend)-int32((*FILE)(unsafe.Pointer(f)).Frpos))/1) > lim {
4604 (*FILE)(unsafe.Pointer(f)).Fshend = (*FILE)(unsafe.Pointer(f)).Frpos + uintptr(lim)
4605 } else {
4606 (*FILE)(unsafe.Pointer(f)).Fshend = (*FILE)(unsafe.Pointer(f)).Frend
4607 }
4608}
4609
4610func X__shgetc(tls *TLS, f uintptr) int32 { /* shgetc.c:19:5: */
4611 var c int32
4612 var cnt off_t = (*FILE)(unsafe.Pointer(f)).Fshcnt + off_t((int32((*FILE)(unsafe.Pointer(f)).Frpos)-int32((*FILE)(unsafe.Pointer(f)).Fbuf))/1)
4613 if (*FILE)(unsafe.Pointer(f)).Fshlim != 0 && cnt >= (*FILE)(unsafe.Pointer(f)).Fshlim || AssignInt32(&c, X__uflow(tls, f)) < 0 {
4614 (*FILE)(unsafe.Pointer(f)).Fshcnt = off_t((int32((*FILE)(unsafe.Pointer(f)).Fbuf)-int32((*FILE)(unsafe.Pointer(f)).Frpos))/1) + cnt
4615 (*FILE)(unsafe.Pointer(f)).Fshend = (*FILE)(unsafe.Pointer(f)).Frpos
4616 (*FILE)(unsafe.Pointer(f)).Fshlim = int64(-1)
4617 return -1
4618 }
4619 cnt++
4620 if (*FILE)(unsafe.Pointer(f)).Fshlim != 0 && off_t((int32((*FILE)(unsafe.Pointer(f)).Frend)-int32((*FILE)(unsafe.Pointer(f)).Frpos))/1) > (*FILE)(unsafe.Pointer(f)).Fshlim-cnt {
4621 (*FILE)(unsafe.Pointer(f)).Fshend = (*FILE)(unsafe.Pointer(f)).Frpos + uintptr((*FILE)(unsafe.Pointer(f)).Fshlim-cnt)
4622 } else {
4623 (*FILE)(unsafe.Pointer(f)).Fshend = (*FILE)(unsafe.Pointer(f)).Frend
4624 }
4625 (*FILE)(unsafe.Pointer(f)).Fshcnt = off_t((int32((*FILE)(unsafe.Pointer(f)).Fbuf)-int32((*FILE)(unsafe.Pointer(f)).Frpos))/1) + cnt
4626 if (*FILE)(unsafe.Pointer(f)).Frpos <= (*FILE)(unsafe.Pointer(f)).Fbuf {
4627 *(*uint8)(unsafe.Pointer((*FILE)(unsafe.Pointer(f)).Frpos + UintptrFromInt32(-1))) = uint8(c)
4628 }
4629 return c
4630}
4631
4632func __bswap32(tls *TLS, __x uint32_t) uint32_t { /* endian.h:24:26: */
4633 return __x>>24 | __x>>8&uint32_t(0xff00) | __x<<8&uint32_t(0xff0000) | __x<<24
4634}
4635
4636func Xcopysignl(tls *TLS, x float64, y float64) float64 { /* copysignl.c:4:13: */
4637 return Xcopysign(tls, x, y)
4638}
4639
4640func Xfabsl(tls *TLS, x float64) float64 { /* fabsl.c:3:13: */
4641 return Xfabs(tls, x)
4642}
4643
4644func Xfmodl(tls *TLS, x float64, y float64) float64 { /* fmodl.c:4:13: */
4645 return Xfmod(tls, x, y)
4646}
4647
4648var toint double_t = float64(float64(1)) / 2.22044604925031308085e-16 /* rint.c:10:23 */
4649
4650func Xrint(tls *TLS, x float64) float64 { /* rint.c:12:8: */
4651 bp := tls.Alloc(8)
4652 defer tls.Free(8)
4653
4654 *(*struct{ Ff float64 })(unsafe.Pointer(bp)) = func() (r struct{ Ff float64 }) {
4655 *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&r)) + 0)) = x
4656 return r
4657 }()
4658 var e int32 = int32(*(*uint64_t)(unsafe.Pointer(bp)) >> 52 & uint64(0x7ff))
4659 var s int32 = int32(*(*uint64_t)(unsafe.Pointer(bp)) >> 63)
4660 var y double_t
4661
4662 if e >= 0x3ff+52 {
4663 return x
4664 }
4665 if s != 0 {
4666 y = x - toint + toint
4667 } else {
4668 y = x + toint - toint
4669 }
4670 if y == float64(0) {
4671 if s != 0 {
4672 return -Float64FromFloat64(0.0)
4673 }
4674 return float64(0)
4675 }
4676 return y
4677}
4678
4679func Xscalbn(tls *TLS, x float64, n int32) float64 { /* scalbn.c:4:8: */
4680 bp := tls.Alloc(8)
4681 defer tls.Free(8)
4682
4683 // var u struct {Ff float64;} at bp, 8
4684
4685 var y double_t = x
4686
4687 if n > 1023 {
4688 y = y * 0x1p1023
4689 n = n - 1023
4690 if n > 1023 {
4691 y = y * 0x1p1023
4692 n = n - 1023
4693 if n > 1023 {
4694 n = 1023
4695 }
4696 }
4697 } else if n < -1022 {
4698 // make sure final n < -53 to avoid double
4699 // rounding in the subnormal range
4700 y = y * (float64(0x1p-1022) * 0x1p53)
4701 n = n + (1022 - 53)
4702 if n < -1022 {
4703 y = y * (float64(0x1p-1022) * 0x1p53)
4704 n = n + (1022 - 53)
4705 if n < -1022 {
4706 n = -1022
4707 }
4708 }
4709 }
4710 *(*uint64_t)(unsafe.Pointer(bp)) = uint64_t(0x3ff+n) << 52
4711 x = y * *(*float64)(unsafe.Pointer(bp))
4712 return x
4713}
4714
4715func Xscalbnl(tls *TLS, x float64, n int32) float64 { /* scalbnl.c:4:13: */
4716 return Xscalbn(tls, x, n)
4717}
4718
4719type div_t = struct {
4720 Fquot int32
4721 Frem int32
4722} /* stdlib.h:62:35 */
4723type ldiv_t = struct {
4724 Fquot int32
4725 Frem int32
4726} /* stdlib.h:63:36 */
4727type lldiv_t = struct {
4728 Fquot int64
4729 Frem int64
4730} /* stdlib.h:64:41 */
4731
4732type max_align_t = struct {
4733 F__ll int64
4734 F__ld float64
4735} /* alltypes.h:34:54 */
4736
4737type imaxdiv_t = struct {
4738 Fquot intmax_t
4739 Frem intmax_t
4740} /* inttypes.h:14:40 */
4741
4742type pid_t = int32 /* alltypes.h:228:13 */
4743
4744type uid_t = uint32 /* alltypes.h:238:18 */
4745
4746type gid_t = uint32 /* alltypes.h:243:18 */
4747
4748type iovec = struct {
4749 Fiov_base uintptr
4750 Fiov_len size_t
4751} /* alltypes.h:348:1 */
4752
4753type socklen_t = uint32 /* alltypes.h:354:18 */
4754
4755type sa_family_t = uint16 /* alltypes.h:359:24 */
4756
4757type msghdr = struct {
4758 Fmsg_name uintptr
4759 Fmsg_namelen socklen_t
4760 Fmsg_iov uintptr
4761 Fmsg_iovlen int32
4762 Fmsg_control uintptr
4763 Fmsg_controllen socklen_t
4764 Fmsg_flags int32
4765} /* socket.h:22:1 */
4766
4767type cmsghdr = struct {
4768 Fcmsg_len socklen_t
4769 Fcmsg_level int32
4770 Fcmsg_type int32
4771} /* socket.h:44:1 */
4772
4773type linger = struct {
4774 Fl_onoff int32
4775 Fl_linger int32
4776} /* socket.h:74:1 */
4777
4778type sockaddr = struct {
4779 Fsa_family sa_family_t
4780 Fsa_data [14]uint8
4781} /* socket.h:367:1 */
4782
4783type sockaddr_storage = struct {
4784 Fss_family sa_family_t
4785 F__ss_padding [122]uint8
4786 F__ss_align uint32
4787} /* socket.h:372:1 */
4788
4789type in_port_t = uint16_t /* in.h:12:18 */
4790type in_addr_t = uint32_t /* in.h:13:18 */
4791type in_addr = struct{ Fs_addr in_addr_t } /* in.h:14:1 */
4792
4793type sockaddr_in = struct {
4794 Fsin_family sa_family_t
4795 Fsin_port in_port_t
4796 Fsin_addr struct{ Fs_addr in_addr_t }
4797 Fsin_zero [8]uint8_t
4798} /* in.h:16:1 */
4799
4800type in6_addr = struct {
4801 F__in6_union struct {
4802 F__ccgo_pad1 [0]uint32
4803 F__s6_addr [16]uint8_t
4804 }
4805} /* in.h:23:1 */
4806
4807type sockaddr_in6 = struct {
4808 Fsin6_family sa_family_t
4809 Fsin6_port in_port_t
4810 Fsin6_flowinfo uint32_t
4811 Fsin6_addr struct {
4812 F__in6_union struct {
4813 F__ccgo_pad1 [0]uint32
4814 F__s6_addr [16]uint8_t
4815 }
4816 }
4817 Fsin6_scope_id uint32_t
4818} /* in.h:34:1 */
4819
4820type ipv6_mreq = struct {
4821 Fipv6mr_multiaddr struct {
4822 F__in6_union struct {
4823 F__ccgo_pad1 [0]uint32
4824 F__s6_addr [16]uint8_t
4825 }
4826 }
4827 Fipv6mr_interface uint32
4828} /* in.h:42:1 */
4829
4830type ip_opts = struct {
4831 Fip_dst struct{ Fs_addr in_addr_t }
4832 Fip_opts [40]uint8
4833} /* in.h:229:1 */
4834
4835type ip_mreq = struct {
4836 Fimr_multiaddr struct{ Fs_addr in_addr_t }
4837 Fimr_interface struct{ Fs_addr in_addr_t }
4838} /* in.h:247:1 */
4839
4840type ip_mreqn = struct {
4841 Fimr_multiaddr struct{ Fs_addr in_addr_t }
4842 Fimr_address struct{ Fs_addr in_addr_t }
4843 Fimr_ifindex int32
4844} /* in.h:252:1 */
4845
4846type ip_mreq_source = struct {
4847 Fimr_multiaddr struct{ Fs_addr in_addr_t }
4848 Fimr_interface struct{ Fs_addr in_addr_t }
4849 Fimr_sourceaddr struct{ Fs_addr in_addr_t }
4850} /* in.h:258:1 */
4851
4852type ip_msfilter = struct {
4853 Fimsf_multiaddr struct{ Fs_addr in_addr_t }
4854 Fimsf_interface struct{ Fs_addr in_addr_t }
4855 Fimsf_fmode uint32_t
4856 Fimsf_numsrc uint32_t
4857 Fimsf_slist [1]struct{ Fs_addr in_addr_t }
4858} /* in.h:264:1 */
4859
4860type group_req = struct {
4861 Fgr_interface uint32_t
4862 Fgr_group struct {
4863 Fss_family sa_family_t
4864 F__ss_padding [122]uint8
4865 F__ss_align uint32
4866 }
4867} /* in.h:275:1 */
4868
4869type group_source_req = struct {
4870 Fgsr_interface uint32_t
4871 Fgsr_group struct {
4872 Fss_family sa_family_t
4873 F__ss_padding [122]uint8
4874 F__ss_align uint32
4875 }
4876 Fgsr_source struct {
4877 Fss_family sa_family_t
4878 F__ss_padding [122]uint8
4879 F__ss_align uint32
4880 }
4881} /* in.h:280:1 */
4882
4883type group_filter = struct {
4884 Fgf_interface uint32_t
4885 Fgf_group struct {
4886 Fss_family sa_family_t
4887 F__ss_padding [122]uint8
4888 F__ss_align uint32
4889 }
4890 Fgf_fmode uint32_t
4891 Fgf_numsrc uint32_t
4892 Fgf_slist [1]struct {
4893 Fss_family sa_family_t
4894 F__ss_padding [122]uint8
4895 F__ss_align uint32
4896 }
4897} /* in.h:286:1 */
4898
4899type in_pktinfo = struct {
4900 Fipi_ifindex int32
4901 Fipi_spec_dst struct{ Fs_addr in_addr_t }
4902 Fipi_addr struct{ Fs_addr in_addr_t }
4903} /* in.h:297:1 */
4904
4905type in6_pktinfo = struct {
4906 Fipi6_addr struct {
4907 F__in6_union struct {
4908 F__ccgo_pad1 [0]uint32
4909 F__s6_addr [16]uint8_t
4910 }
4911 }
4912 Fipi6_ifindex uint32
4913} /* in.h:303:1 */
4914
4915type ip6_mtuinfo = struct {
4916 Fip6m_addr struct {
4917 Fsin6_family sa_family_t
4918 Fsin6_port in_port_t
4919 Fsin6_flowinfo uint32_t
4920 Fsin6_addr struct {
4921 F__in6_union struct {
4922 F__ccgo_pad1 [0]uint32
4923 F__s6_addr [16]uint8_t
4924 }
4925 }
4926 Fsin6_scope_id uint32_t
4927 }
4928 Fip6m_mtu uint32_t
4929} /* in.h:308:1 */
4930
4931type addrinfo = struct {
4932 Fai_flags int32
4933 Fai_family int32
4934 Fai_socktype int32
4935 Fai_protocol int32
4936 Fai_addrlen socklen_t
4937 Fai_addr uintptr
4938 Fai_canonname uintptr
4939 Fai_next uintptr
4940} /* netdb.h:16:1 */
4941
4942// Legacy functions follow (marked OBsolete in SUS)
4943
4944type netent = struct {
4945 Fn_name uintptr
4946 Fn_aliases uintptr
4947 Fn_addrtype int32
4948 Fn_net uint32_t
4949} /* netdb.h:62:1 */
4950
4951type hostent = struct {
4952 Fh_name uintptr
4953 Fh_aliases uintptr
4954 Fh_addrtype int32
4955 Fh_length int32
4956 Fh_addr_list uintptr
4957} /* netdb.h:69:1 */
4958
4959type servent = struct {
4960 Fs_name uintptr
4961 Fs_aliases uintptr
4962 Fs_port int32
4963 Fs_proto uintptr
4964} /* netdb.h:78:1 */
4965
4966type protoent = struct {
4967 Fp_name uintptr
4968 Fp_aliases uintptr
4969 Fp_proto int32
4970} /* netdb.h:85:1 */
4971
4972type aibuf = struct {
4973 Fai struct {
4974 Fai_flags int32
4975 Fai_family int32
4976 Fai_socktype int32
4977 Fai_protocol int32
4978 Fai_addrlen socklen_t
4979 Fai_addr uintptr
4980 Fai_canonname uintptr
4981 Fai_next uintptr
4982 }
4983 Fsa struct {
4984 Fsin struct {
4985 Fsin_family sa_family_t
4986 Fsin_port in_port_t
4987 Fsin_addr struct{ Fs_addr in_addr_t }
4988 Fsin_zero [8]uint8_t
4989 }
4990 F__ccgo_pad1 [12]byte
4991 }
4992 Flock [1]int32
4993 Fslot int16
4994 Fref int16
4995} /* lookup.h:10:1 */
4996
4997type sa = struct {
4998 Fsin struct {
4999 Fsin_family sa_family_t
5000 Fsin_port in_port_t
5001 Fsin_addr struct{ Fs_addr in_addr_t }
5002 Fsin_zero [8]uint8_t
5003 }
5004 F__ccgo_pad1 [12]byte
5005} /* lookup.h:10:1 */
5006
5007type address = struct {
5008 Ffamily int32
5009 Fscopeid uint32
5010 Faddr [16]uint8_t
5011 Fsortkey int32
5012} /* lookup.h:20:1 */
5013
5014type service = struct {
5015 Fport uint16_t
5016 Fproto uint8
5017 Fsocktype uint8
5018} /* lookup.h:27:1 */
5019
5020type resolvconf = struct {
5021 Fns [3]struct {
5022 Ffamily int32
5023 Fscopeid uint32
5024 Faddr [16]uint8_t
5025 Fsortkey int32
5026 }
5027 Fnns uint32
5028 Fattempts uint32
5029 Fndots uint32
5030 Ftimeout uint32
5031} /* lookup.h:34:1 */
5032
5033func Xfreeaddrinfo(tls *TLS, p uintptr) { /* freeaddrinfo.c:7:6: */
5034 var cnt size_t
5035 cnt = size_t(1)
5036__1:
5037 if !((*addrinfo)(unsafe.Pointer(p)).Fai_next != 0) {
5038 goto __3
5039 }
5040 goto __2
5041__2:
5042 cnt++
5043 p = (*addrinfo)(unsafe.Pointer(p)).Fai_next
5044 goto __1
5045 goto __3
5046__3:
5047 ;
5048 var b uintptr = p - uintptr(uint32(uintptr(0)))
5049 b -= 68 * uintptr((*aibuf)(unsafe.Pointer(b)).Fslot)
5050 //TODO LOCK(b->lock);
5051 if !(int32(AssignSubPtrInt16(b+66, int16(cnt))) != 0) {
5052 Xfree(tls, b)
5053 }
5054 //TODO else UNLOCK(b->lock);
5055}
5056
5057type time_t = int64 /* alltypes.h:78:16 */
5058
5059type clockid_t = int32 /* alltypes.h:207:13 */
5060
5061type timespec = struct {
5062 Ftv_sec time_t
5063 Ftv_nsec int32
5064 __12 uint32 /* int : 32 */
5065} /* alltypes.h:222:1 */
5066
5067type pthread_t = uintptr /* alltypes.h:266:26 */
5068
5069type pthread_once_t = int32 /* alltypes.h:272:13 */
5070
5071type pthread_key_t = uint32 /* alltypes.h:277:18 */
5072
5073type pthread_spinlock_t = int32 /* alltypes.h:282:13 */
5074
5075type pthread_mutexattr_t = struct{ F__attr uint32 } /* alltypes.h:287:37 */
5076
5077type pthread_condattr_t = struct{ F__attr uint32 } /* alltypes.h:292:37 */
5078
5079type pthread_barrierattr_t = struct{ F__attr uint32 } /* alltypes.h:297:37 */
5080
5081type pthread_rwlockattr_t = struct{ F__attr [2]uint32 } /* alltypes.h:302:40 */
5082
5083type __sigset_t = struct{ F__bits [32]uint32 } /* alltypes.h:342:9 */
5084
5085type sigset_t = __sigset_t /* alltypes.h:342:71 */
5086
5087type pthread_attr_t = struct{ F__u struct{ F__i [9]int32 } } /* alltypes.h:365:147 */
5088
5089type pthread_mutex_t = struct{ F__u struct{ F__i [6]int32 } } /* alltypes.h:370:157 */
5090
5091type pthread_cond_t = struct{ F__u struct{ F__i [12]int32 } } /* alltypes.h:380:112 */
5092
5093type pthread_rwlock_t = struct{ F__u struct{ F__i [8]int32 } } /* alltypes.h:390:139 */
5094
5095type pthread_barrier_t = struct{ F__u struct{ F__i [5]int32 } } /* alltypes.h:395:137 */
5096
5097type sched_param = struct {
5098 Fsched_priority int32
5099 F__reserved1 int32
5100 F__reserved2 [4]int32
5101 F__reserved3 int32
5102} /* sched.h:19:1 */
5103
5104type timer_t = uintptr /* alltypes.h:202:14 */
5105
5106type clock_t = int32 /* alltypes.h:212:14 */
5107
5108type tm = struct {
5109 Ftm_sec int32
5110 Ftm_min int32
5111 Ftm_hour int32
5112 Ftm_mday int32
5113 Ftm_mon int32
5114 Ftm_year int32
5115 Ftm_wday int32
5116 Ftm_yday int32
5117 Ftm_isdst int32
5118 Ftm_gmtoff int32
5119 Ftm_zone uintptr
5120} /* time.h:38:1 */
5121
5122type itimerspec = struct {
5123 Fit_interval struct {
5124 Ftv_sec time_t
5125 Ftv_nsec int32
5126 __12 uint32 /* int : 32 */
5127 }
5128 Fit_value struct {
5129 Ftv_sec time_t
5130 Ftv_nsec int32
5131 __12 uint32 /* int : 32 */
5132 }
5133} /* time.h:80:1 */
5134
5135type __ptcb = struct {
5136 F__f uintptr
5137 F__x uintptr
5138 F__next uintptr
5139} /* pthread.h:206:1 */
5140
5141type useconds_t = uint32 /* alltypes.h:253:18 */
5142
5143func Xgetaddrinfo(tls *TLS, host uintptr, serv uintptr, hint uintptr, res uintptr) int32 { /* getaddrinfo.c:12:5: */
5144 bp := tls.Alloc(1608)
5145 defer tls.Free(1608)
5146
5147 // var ports [2]service at bp, 8
5148
5149 // var addrs [48]address at bp+8, 1344
5150
5151 // var canon [256]uint8 at bp+1352, 256
5152
5153 var outcanon uintptr
5154 var nservs int32
5155 var naddrs int32
5156 var nais int32
5157 var canon_len int32
5158 var i int32
5159 var j int32
5160 var k int32
5161 var family int32 = 0
5162 var flags int32 = 0
5163 var proto int32 = 0
5164 var socktype int32 = 0
5165 var out uintptr
5166
5167 if !(host != 0) && !(serv != 0) {
5168 return -2
5169 }
5170
5171 if hint != 0 {
5172 family = (*addrinfo)(unsafe.Pointer(hint)).Fai_family
5173 flags = (*addrinfo)(unsafe.Pointer(hint)).Fai_flags
5174 proto = (*addrinfo)(unsafe.Pointer(hint)).Fai_protocol
5175 socktype = (*addrinfo)(unsafe.Pointer(hint)).Fai_socktype
5176
5177 var mask int32 = 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x400
5178 if flags&mask != flags {
5179 return -1
5180 }
5181
5182 switch family {
5183 case 2:
5184 fallthrough
5185 case 10:
5186 fallthrough
5187 case 0:
5188 break
5189 fallthrough
5190 default:
5191 return -6
5192 }
5193 }
5194
5195 if flags&0x20 != 0 {
5196 Xabort(tls) //TODO-
5197 // /* Define the "an address is configured" condition for address
5198 // * families via ability to create a socket for the family plus
5199 // * routability of the loopback address for the family. */
5200 // static const struct sockaddr_in lo4 = {
5201 // .sin_family = AF_INET, .sin_port = 65535,
5202 // .sin_addr.s_addr = __BYTE_ORDER == __BIG_ENDIAN
5203 // ? 0x7f000001 : 0x0100007f
5204 // };
5205 // static const struct sockaddr_in6 lo6 = {
5206 // .sin6_family = AF_INET6, .sin6_port = 65535,
5207 // .sin6_addr = IN6ADDR_LOOPBACK_INIT
5208 // };
5209 // int tf[2] = { AF_INET, AF_INET6 };
5210 // const void *ta[2] = { &lo4, &lo6 };
5211 // socklen_t tl[2] = { sizeof lo4, sizeof lo6 };
5212 // for (i=0; i<2; i++) {
5213 // if (family==tf[1-i]) continue;
5214 // int s = socket(tf[i], SOCK_CLOEXEC|SOCK_DGRAM,
5215 // IPPROTO_UDP);
5216 // if (s>=0) {
5217 // int cs;
5218 // pthread_setcancelstate(
5219 // PTHREAD_CANCEL_DISABLE, &cs);
5220 // int r = connect(s, ta[i], tl[i]);
5221 // pthread_setcancelstate(cs, 0);
5222 // close(s);
5223 // if (!r) continue;
5224 // }
5225 // switch (errno) {
5226 // case EADDRNOTAVAIL:
5227 // case EAFNOSUPPORT:
5228 // case EHOSTUNREACH:
5229 // case ENETDOWN:
5230 // case ENETUNREACH:
5231 // break;
5232 // default:
5233 // return EAI_SYSTEM;
5234 // }
5235 // if (family == tf[i]) return EAI_NONAME;
5236 // family = tf[1-i];
5237 // }
5238 }
5239
5240 nservs = X__lookup_serv(tls, bp, serv, proto, socktype, flags)
5241 if nservs < 0 {
5242 return nservs
5243 }
5244
5245 naddrs = X__lookup_name(tls, bp+8, bp+1352, host, family, flags)
5246 if naddrs < 0 {
5247 return naddrs
5248 }
5249
5250 nais = nservs * naddrs
5251 canon_len = int32(Xstrlen(tls, bp+1352))
5252 out = Xcalloc(tls, uint32(1), uint32(nais)*uint32(unsafe.Sizeof(aibuf{}))+uint32(canon_len)+uint32(1))
5253 if !(out != 0) {
5254 return -10
5255 }
5256
5257 if canon_len != 0 {
5258 outcanon = out + uintptr(nais)*68
5259 Xmemcpy(tls, outcanon, bp+1352, uint32(canon_len+1))
5260 } else {
5261 outcanon = uintptr(0)
5262 }
5263
5264 for k = AssignInt32(&i, 0); i < naddrs; i++ {
5265 j = 0
5266 __1:
5267 if !(j < nservs) {
5268 goto __3
5269 }
5270 {
5271 (*aibuf)(unsafe.Pointer(out + uintptr(k)*68)).Fslot = int16(k)
5272 //TODO out[k].ai = (struct addrinfo){
5273 //TODO .ai_family = addrs[i].family,
5274 //TODO .ai_socktype = ports[j].socktype,
5275 //TODO .ai_protocol = ports[j].proto,
5276 //TODO .ai_addrlen = addrs[i].family == AF_INET
5277 //TODO ? sizeof(struct sockaddr_in)
5278 //TODO : sizeof(struct sockaddr_in6),
5279 //TODO .ai_addr = (void *)&out[k].sa,
5280 //TODO .ai_canonname = outcanon };
5281 (*aibuf)(unsafe.Pointer(out + uintptr(k)*68)).Fai.Fai_family = (*address)(unsafe.Pointer(bp + 8 + uintptr(i)*28)).Ffamily
5282 (*aibuf)(unsafe.Pointer(out + uintptr(k)*68)).Fai.Fai_socktype = int32((*service)(unsafe.Pointer(bp + uintptr(j)*4)).Fsocktype)
5283 (*aibuf)(unsafe.Pointer(out + uintptr(k)*68)).Fai.Fai_protocol = int32((*service)(unsafe.Pointer(bp + uintptr(j)*4)).Fproto)
5284 (*aibuf)(unsafe.Pointer(out + uintptr(k)*68)).Fai.Fai_addrlen = func() uint32 {
5285 if (*address)(unsafe.Pointer(bp+8+uintptr(i)*28)).Ffamily == 2 {
5286 return uint32(unsafe.Sizeof(sockaddr_in{}))
5287 }
5288 return uint32(unsafe.Sizeof(sockaddr_in6{}))
5289 }()
5290 (*aibuf)(unsafe.Pointer(out + uintptr(k)*68)).Fai.Fai_addr = out + uintptr(k)*68 + 32
5291 (*aibuf)(unsafe.Pointer(out + uintptr(k)*68)).Fai.Fai_canonname = outcanon
5292 if k != 0 {
5293 (*aibuf)(unsafe.Pointer(out + uintptr(k-1)*68)).Fai.Fai_next = out + uintptr(k)*68
5294 }
5295 switch (*address)(unsafe.Pointer(bp + 8 + uintptr(i)*28)).Ffamily {
5296 case 2:
5297 (*sockaddr_in)(unsafe.Pointer(out + uintptr(k)*68 + 32)).Fsin_family = sa_family_t(2)
5298 (*sockaddr_in)(unsafe.Pointer(out + uintptr(k)*68 + 32)).Fsin_port = Xhtons(tls, (*service)(unsafe.Pointer(bp+uintptr(j)*4)).Fport)
5299 Xmemcpy(tls, out+uintptr(k)*68+32+4, bp+8+uintptr(i)*28+8, uint32(4))
5300 break
5301 case 10:
5302 (*sockaddr_in6)(unsafe.Pointer(out + uintptr(k)*68 + 32)).Fsin6_family = sa_family_t(10)
5303 (*sockaddr_in6)(unsafe.Pointer(out + uintptr(k)*68 + 32)).Fsin6_port = Xhtons(tls, (*service)(unsafe.Pointer(bp+uintptr(j)*4)).Fport)
5304 (*sockaddr_in6)(unsafe.Pointer(out + uintptr(k)*68 + 32)).Fsin6_scope_id = (*address)(unsafe.Pointer(bp + 8 + uintptr(i)*28)).Fscopeid
5305 Xmemcpy(tls, out+uintptr(k)*68+32+8, bp+8+uintptr(i)*28+8, uint32(16))
5306 break
5307 }
5308
5309 }
5310 goto __2
5311 __2:
5312 j++
5313 k++
5314 goto __1
5315 goto __3
5316 __3:
5317 }
5318 (*aibuf)(unsafe.Pointer(out)).Fref = int16(nais)
5319 *(*uintptr)(unsafe.Pointer(res)) = out
5320 return 0
5321}
5322
5323type ucred = struct {
5324 Fpid pid_t
5325 Fuid uid_t
5326 Fgid gid_t
5327} /* socket.h:57:1 */
5328
5329type mmsghdr = struct {
5330 Fmsg_hdr struct {
5331 Fmsg_name uintptr
5332 Fmsg_namelen socklen_t
5333 Fmsg_iov uintptr
5334 Fmsg_iovlen int32
5335 Fmsg_control uintptr
5336 Fmsg_controllen socklen_t
5337 Fmsg_flags int32
5338 }
5339 Fmsg_len uint32
5340} /* socket.h:63:1 */
5341
5342func Xgethostbyaddr(tls *TLS, a uintptr, l socklen_t, af int32) uintptr { /* gethostbyaddr.c:7:16: */
5343 bp := tls.Alloc(4)
5344 defer tls.Free(4)
5345
5346 var size size_t = size_t(63)
5347 // var res uintptr at bp, 4
5348
5349 var err int32
5350 for __ccgo := true; __ccgo; __ccgo = err == 34 {
5351 Xfree(tls, _sh)
5352 _sh = Xmalloc(tls, AssignAddUint32(&size, size+size_t(1)))
5353 if !(_sh != 0) {
5354 *(*int32)(unsafe.Pointer(X__h_errno_location(tls))) = 3
5355 return uintptr(0)
5356 }
5357 err = Xgethostbyaddr_r(tls, a, l, af, _sh,
5358 _sh+uintptr(1)*20, size-size_t(unsafe.Sizeof(hostent{})), bp, X__h_errno_location(tls))
5359 }
5360 if err != 0 {
5361 return uintptr(0)
5362 }
5363 return _sh
5364}
5365
5366var _sh uintptr /* gethostbyaddr.c:9:24: */
5367
5368func Xgethostbyname(tls *TLS, name uintptr) uintptr { /* gethostbyname.c:8:16: */
5369 return Xgethostbyname2(tls, name, 2)
5370}
5371
5372func Xgethostbyname2(tls *TLS, name uintptr, af int32) uintptr { /* gethostbyname2.c:8:16: */
5373 bp := tls.Alloc(4)
5374 defer tls.Free(4)
5375
5376 var size size_t = size_t(63)
5377 // var res uintptr at bp, 4
5378
5379 var err int32
5380 for __ccgo := true; __ccgo; __ccgo = err == 34 {
5381 Xfree(tls, _sh1)
5382 _sh1 = Xmalloc(tls, AssignAddUint32(&size, size+size_t(1)))
5383 if !(_sh1 != 0) {
5384 *(*int32)(unsafe.Pointer(X__h_errno_location(tls))) = 3
5385 return uintptr(0)
5386 }
5387 err = Xgethostbyname2_r(tls, name, af, _sh1,
5388 _sh1+uintptr(1)*20, size-size_t(unsafe.Sizeof(hostent{})), bp, X__h_errno_location(tls))
5389 }
5390 if err != 0 {
5391 return uintptr(0)
5392 }
5393 return _sh1
5394}
5395
5396var _sh1 uintptr /* gethostbyname2.c:10:24: */
5397
5398func Xgethostbyname2_r(tls *TLS, name uintptr, af int32, h uintptr, buf uintptr, buflen size_t, res uintptr, err uintptr) int32 { /* gethostbyname2_r.c:11:5: */
5399 bp := tls.Alloc(1600)
5400 defer tls.Free(1600)
5401
5402 // var addrs [48]address at bp, 1344
5403
5404 // var canon [256]uint8 at bp+1344, 256
5405
5406 var i int32
5407 var cnt int32
5408 var align size_t
5409 var need size_t
5410
5411 *(*uintptr)(unsafe.Pointer(res)) = uintptr(0)
5412 cnt = X__lookup_name(tls, bp, bp+1344, name, af, 0x02)
5413 if cnt < 0 {
5414 switch cnt {
5415 case -2:
5416 *(*int32)(unsafe.Pointer(err)) = 1
5417 return 2
5418 fallthrough
5419 case -3:
5420 *(*int32)(unsafe.Pointer(err)) = 2
5421 return 11
5422 fallthrough
5423 default:
5424 fallthrough
5425 case -4:
5426 *(*int32)(unsafe.Pointer(err)) = 3
5427 return 74
5428 fallthrough
5429 case -10:
5430 fallthrough
5431 case -11:
5432 *(*int32)(unsafe.Pointer(err)) = 3
5433 return *(*int32)(unsafe.Pointer(X___errno_location(tls)))
5434 }
5435 }
5436
5437 (*hostent)(unsafe.Pointer(h)).Fh_addrtype = af
5438 (*hostent)(unsafe.Pointer(h)).Fh_length = func() int32 {
5439 if af == 10 {
5440 return 16
5441 }
5442 return 4
5443 }()
5444
5445 // Align buffer
5446 align = -uintptr_t(buf) & (uint32(unsafe.Sizeof(uintptr(0))) - uint32(1))
5447
5448 need = uint32(4) * uint32(unsafe.Sizeof(uintptr(0)))
5449 need = need + uint32(cnt+1)*(uint32(unsafe.Sizeof(uintptr(0)))+uint32((*hostent)(unsafe.Pointer(h)).Fh_length))
5450 need = need + (Xstrlen(tls, name) + size_t(1))
5451 need = need + (Xstrlen(tls, bp+1344) + size_t(1))
5452 need = need + align
5453
5454 if need > buflen {
5455 return 34
5456 }
5457
5458 buf += uintptr(align)
5459 (*hostent)(unsafe.Pointer(h)).Fh_aliases = buf
5460 buf += uintptr(uint32(3) * uint32(unsafe.Sizeof(uintptr(0))))
5461 (*hostent)(unsafe.Pointer(h)).Fh_addr_list = buf
5462 buf += uintptr(uint32(cnt+1) * uint32(unsafe.Sizeof(uintptr(0))))
5463
5464 for i = 0; i < cnt; i++ {
5465 *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).Fh_addr_list + uintptr(i)*4)) = buf
5466 buf += uintptr((*hostent)(unsafe.Pointer(h)).Fh_length)
5467 Xmemcpy(tls, *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).Fh_addr_list + uintptr(i)*4)), bp+uintptr(i)*28+8, uint32((*hostent)(unsafe.Pointer(h)).Fh_length))
5468 }
5469 *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).Fh_addr_list + uintptr(i)*4)) = uintptr(0)
5470
5471 (*hostent)(unsafe.Pointer(h)).Fh_name = AssignPtrUintptr((*hostent)(unsafe.Pointer(h)).Fh_aliases, buf)
5472 Xstrcpy(tls, (*hostent)(unsafe.Pointer(h)).Fh_name, bp+1344)
5473 buf += uintptr(Xstrlen(tls, (*hostent)(unsafe.Pointer(h)).Fh_name) + size_t(1))
5474
5475 if Xstrcmp(tls, (*hostent)(unsafe.Pointer(h)).Fh_name, name) != 0 {
5476 *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).Fh_aliases + 1*4)) = buf
5477 Xstrcpy(tls, *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).Fh_aliases + 1*4)), name)
5478 buf += uintptr(Xstrlen(tls, *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).Fh_aliases + 1*4))) + size_t(1))
5479 } else {
5480 *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).Fh_aliases + 1*4)) = uintptr(0)
5481 }
5482
5483 *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).Fh_aliases + 2*4)) = uintptr(0)
5484
5485 *(*uintptr)(unsafe.Pointer(res)) = h
5486 return 0
5487}
5488
5489type if_nameindex = struct {
5490 Fif_index uint32
5491 Fif_name uintptr
5492} /* if.h:12:1 */
5493
5494type ifaddr = struct {
5495 Fifa_addr struct {
5496 Fsa_family sa_family_t
5497 Fsa_data [14]uint8
5498 }
5499 Fifa_ifu struct {
5500 Fifu_broadaddr struct {
5501 Fsa_family sa_family_t
5502 Fsa_data [14]uint8
5503 }
5504 }
5505 Fifa_ifp uintptr
5506 Fifa_next uintptr
5507} /* if.h:51:1 */
5508
5509type ifmap = struct {
5510 Fmem_start uint32
5511 Fmem_end uint32
5512 Fbase_addr uint16
5513 Firq uint8
5514 Fdma uint8
5515 Fport uint8
5516 F__ccgo_pad1 [3]byte
5517} /* if.h:64:1 */
5518
5519type ifreq = struct {
5520 Fifr_ifrn struct{ Fifrn_name [16]uint8 }
5521 Fifr_ifru struct {
5522 F__ccgo_pad1 [0]uint32
5523 Fifru_addr struct {
5524 Fsa_family sa_family_t
5525 Fsa_data [14]uint8
5526 }
5527 }
5528} /* if.h:76:1 */
5529
5530type ifconf = struct {
5531 Fifc_len int32
5532 Fifc_ifcu struct{ Fifcu_buf uintptr }
5533} /* if.h:116:1 */
5534
5535type ns_sect = uint32 /* nameser.h:37:3 */
5536
5537type __ns_msg = struct {
5538 F_msg uintptr
5539 F_eom uintptr
5540 F_id uint16_t
5541 F_flags uint16_t
5542 F_counts [4]uint16_t
5543 F_sections [4]uintptr
5544 F_sect ns_sect
5545 F_rrnum int32
5546 F_msg_ptr uintptr
5547} /* nameser.h:39:9 */
5548
5549type ns_msg = __ns_msg /* nameser.h:46:3 */
5550
5551type _ns_flagdata = struct {
5552 Fmask int32
5553 Fshift int32
5554} /* nameser.h:48:1 */
5555
5556type __ns_rr = struct {
5557 Fname [1025]uint8
5558 F__ccgo_pad1 [1]byte
5559 Ftype uint16_t
5560 Frr_class uint16_t
5561 F__ccgo_pad2 [2]byte
5562 Fttl uint32_t
5563 Frdlength uint16_t
5564 F__ccgo_pad3 [2]byte
5565 Frdata uintptr
5566} /* nameser.h:59:9 */
5567
5568type ns_rr = __ns_rr /* nameser.h:66:3 */
5569
5570type ns_flag = uint32 /* nameser.h:87:3 */
5571
5572type ns_opcode = uint32 /* nameser.h:96:3 */
5573
5574type ns_rcode = uint32 /* nameser.h:115:3 */
5575
5576type ns_update_operation = uint32 /* nameser.h:121:3 */
5577
5578type ns_tsig_key1 = struct {
5579 Fname [1025]uint8
5580 Falg [1025]uint8
5581 F__ccgo_pad1 [2]byte
5582 Fdata uintptr
5583 Flen int32
5584} /* nameser.h:123:1 */
5585
5586type ns_tsig_key = ns_tsig_key1 /* nameser.h:128:28 */
5587
5588type ns_tcp_tsig_state1 = struct {
5589 Fcounter int32
5590 Fkey uintptr
5591 Fctx uintptr
5592 Fsig [512]uint8
5593 Fsiglen int32
5594} /* nameser.h:130:1 */
5595
5596type ns_tcp_tsig_state = ns_tcp_tsig_state1 /* nameser.h:137:34 */
5597
5598type ns_type = uint32 /* nameser.h:200:3 */
5599
5600type ns_class = uint32 /* nameser.h:219:3 */
5601
5602type ns_key_types = uint32 /* nameser.h:226:3 */
5603
5604type ns_cert_types = uint32 /* nameser.h:234:3 */
5605
5606type HEADER = struct {
5607 F__ccgo_pad1 [0]uint32
5608 Fid uint32 /* unsigned id: 16, unsigned rd: 1, unsigned tc: 1, unsigned aa: 1, unsigned opcode: 4, unsigned qr: 1, unsigned rcode: 4, unsigned cd: 1, unsigned ad: 1, unsigned unused: 1, unsigned ra: 1 */
5609 Fqdcount uint32 /* unsigned qdcount: 16, unsigned ancount: 16 */
5610 Fnscount uint32 /* unsigned nscount: 16, unsigned arcount: 16 */
5611} /* nameser.h:353:3 */
5612
5613// unused; purely for broken apps
5614type __res_state = struct {
5615 Fretrans int32
5616 Fretry int32
5617 Foptions uint32
5618 Fnscount int32
5619 Fnsaddr_list [3]struct {
5620 Fsin_family sa_family_t
5621 Fsin_port in_port_t
5622 Fsin_addr struct{ Fs_addr in_addr_t }
5623 Fsin_zero [8]uint8_t
5624 }
5625 Fid uint16
5626 F__ccgo_pad1 [2]byte
5627 Fdnsrch [7]uintptr
5628 Fdefdname [256]uint8
5629 Fpfcode uint32
5630 Fndots uint32 /* unsigned ndots: 4, unsigned nsort: 4, unsigned ipv6_unavail: 1, unsigned unused: 23 */
5631 F__ccgo_pad2 [4]byte
5632 Fsort_list [10]struct {
5633 Faddr struct{ Fs_addr in_addr_t }
5634 Fmask uint32_t
5635 }
5636 Fqhook uintptr
5637 Frhook uintptr
5638 Fres_h_errno int32
5639 F_vcsock int32
5640 F_flags uint32
5641 F_u struct {
5642 F__ccgo_pad1 [0]uint32
5643 Fpad [52]uint8
5644 }
5645} /* resolv.h:26:9 */
5646
5647// unused; purely for broken apps
5648type res_state = uintptr /* resolv.h:62:3 */
5649
5650type res_sym = struct {
5651 Fnumber int32
5652 Fname uintptr
5653 Fhumanname uintptr
5654} /* resolv.h:70:1 */
5655
5656func itoa(tls *TLS, p uintptr, x uint32) uintptr { /* getnameinfo.c:18:13: */
5657 p += uintptr(uint32(3) * uint32(unsafe.Sizeof(int32(0))))
5658 *(*uint8)(unsafe.Pointer(PreDecUintptr(&p, 1))) = uint8(0)
5659 for __ccgo := true; __ccgo; __ccgo = x != 0 {
5660 *(*uint8)(unsafe.Pointer(PreDecUintptr(&p, 1))) = uint8(uint32('0') + x%uint32(10))
5661 x = x / uint32(10)
5662 }
5663 return p
5664}
5665
5666func mkptr4(tls *TLS, s uintptr, ip uintptr) { /* getnameinfo.c:28:13: */
5667 bp := tls.Alloc(32)
5668 defer tls.Free(32)
5669
5670 Xsprintf(tls, s, ts+64,
5671 VaList(bp, int32(*(*uint8)(unsafe.Pointer(ip + 3))), int32(*(*uint8)(unsafe.Pointer(ip + 2))), int32(*(*uint8)(unsafe.Pointer(ip + 1))), int32(*(*uint8)(unsafe.Pointer(ip)))))
5672}
5673
5674func mkptr6(tls *TLS, s uintptr, ip uintptr) { /* getnameinfo.c:34:13: */
5675 var i int32
5676 for i = 15; i >= 0; i-- {
5677 *(*uint8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = _sxdigits[int32(*(*uint8)(unsafe.Pointer(ip + uintptr(i))))&15]
5678 *(*uint8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = uint8('.')
5679 *(*uint8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = _sxdigits[int32(*(*uint8)(unsafe.Pointer(ip + uintptr(i))))>>4]
5680 *(*uint8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = uint8('.')
5681 }
5682 Xstrcpy(tls, s, ts+89)
5683}
5684
5685var _sxdigits = *(*[17]uint8)(unsafe.Pointer(ts + 98)) /* getnameinfo.c:36:20 */
5686
5687func reverse_hosts(tls *TLS, buf uintptr, a uintptr, scopeid uint32, family int32) { /* getnameinfo.c:45:13: */
5688 bp := tls.Alloc(556)
5689 defer tls.Free(556)
5690
5691 // var line [512]uint8 at bp+16, 512
5692
5693 var p uintptr
5694 var z uintptr
5695 var _buf [1032]uint8
5696 _ = _buf
5697 // var atmp [16]uint8 at bp, 16
5698
5699 // var iplit address at bp+528, 28
5700
5701 //TODO FILE _f, *f = __fopen_rb_ca("/etc/hosts", &_f, _buf, sizeof _buf);
5702 var f uintptr = Xfopen(tls, ts+115, ts+126)
5703 if !(f != 0) {
5704 return
5705 }
5706 if family == 2 {
5707 Xmemcpy(tls, bp+uintptr(12), a, uint32(4))
5708 Xmemcpy(tls, bp, ts+129, uint32(12))
5709 a = bp /* &atmp[0] */
5710 }
5711 for Xfgets(tls, bp+16, int32(unsafe.Sizeof([512]uint8{})), f) != 0 {
5712 if AssignUintptr(&p, Xstrchr(tls, bp+16, '#')) != 0 {
5713 *(*uint8)(unsafe.Pointer(PostIncUintptr(&p, 1))) = uint8('\n')
5714 *(*uint8)(unsafe.Pointer(p)) = uint8(0)
5715 }
5716
5717 for p = bp + 16; /* &line[0] */ *(*uint8)(unsafe.Pointer(p)) != 0 && !(__isspace(tls, int32(*(*uint8)(unsafe.Pointer(p)))) != 0); p++ {
5718 }
5719 *(*uint8)(unsafe.Pointer(PostIncUintptr(&p, 1))) = uint8(0)
5720 if X__lookup_ipliteral(tls, bp+528, bp+16, 0) <= 0 {
5721 continue
5722 }
5723
5724 if (*address)(unsafe.Pointer(bp+528)).Ffamily == 2 {
5725 Xmemcpy(tls, bp+528+8+uintptr(12), bp+528+8, uint32(4))
5726 Xmemcpy(tls, bp+528+8, ts+129, uint32(12))
5727 (*address)(unsafe.Pointer(bp + 528 /* &iplit */)).Fscopeid = uint32(0)
5728 }
5729
5730 if Xmemcmp(tls, a, bp+528+8, uint32(16)) != 0 || (*address)(unsafe.Pointer(bp+528)).Fscopeid != scopeid {
5731 continue
5732 }
5733
5734 for ; *(*uint8)(unsafe.Pointer(p)) != 0 && __isspace(tls, int32(*(*uint8)(unsafe.Pointer(p)))) != 0; p++ {
5735 }
5736 for z = p; *(*uint8)(unsafe.Pointer(z)) != 0 && !(__isspace(tls, int32(*(*uint8)(unsafe.Pointer(z)))) != 0); z++ {
5737 }
5738 *(*uint8)(unsafe.Pointer(z)) = uint8(0)
5739 if (int32(z)-int32(p))/1 < 256 {
5740 Xmemcpy(tls, buf, p, uint32((int32(z)-int32(p))/1+1))
5741 break
5742 }
5743 }
5744 //TODO __fclose_ca(f);
5745 Xfclose(tls, f)
5746}
5747
5748func reverse_services(tls *TLS, buf uintptr, port int32, dgram int32) { /* getnameinfo.c:87:13: */
5749 Xabort(tls) //TODO-
5750 // unsigned long svport;
5751 // char line[128], *p, *z;
5752 // unsigned char _buf[1032];
5753 // FILE _f, *f = __fopen_rb_ca("/etc/services", &_f, _buf, sizeof _buf);
5754 // if (!f) return;
5755 // while (fgets(line, sizeof line, f)) {
5756 // if ((p=strchr(line, '#'))) *p++='\n', *p=0;
5757
5758 // for (p=line; *p && !isspace(*p); p++);
5759 // if (!*p) continue;
5760 // *p++ = 0;
5761 // svport = strtoul(p, &z, 10);
5762
5763 // if (svport != port || z==p) continue;
5764 // if (dgram && strncmp(z, "/udp", 4)) continue;
5765 // if (!dgram && strncmp(z, "/tcp", 4)) continue;
5766 // if (p-line > 32) continue;
5767
5768 // memcpy(buf, line, p-line);
5769 // break;
5770 // }
5771 // __fclose_ca(f);
5772}
5773
5774var Xh_errno int32 /* h_errno.c:4:5: */
5775
5776func X__h_errno_location(tls *TLS) uintptr { /* h_errno.c:6:5: */
5777 return uintptr(unsafe.Pointer(&Xh_errno))
5778}
5779
5780func X__inet_aton(tls *TLS, s0 uintptr, dest uintptr) int32 { /* inet_aton.c:7:5: */
5781 bp := tls.Alloc(20)
5782 defer tls.Free(20)
5783
5784 var s uintptr = s0
5785 var d uintptr = dest
5786 *(*[4]uint32)(unsafe.Pointer(bp /* a */)) = [4]uint32{0: uint32(0)}
5787 // var z uintptr at bp+16, 4
5788
5789 var i int32
5790
5791 for i = 0; i < 4; i++ {
5792 *(*uint32)(unsafe.Pointer(bp + uintptr(i)*4)) = Xstrtoul(tls, s, bp+16, 0)
5793 if *(*uintptr)(unsafe.Pointer(bp + 16)) == s || *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 16)))) != 0 && int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 16))))) != '.' || !(func() int32 {
5794 if 0 != 0 {
5795 return Xisdigit(tls, int32(*(*uint8)(unsafe.Pointer(s))))
5796 }
5797 return Bool32(uint32(*(*uint8)(unsafe.Pointer(s)))-uint32('0') < uint32(10))
5798 }() != 0) {
5799 return 0
5800 }
5801 if !(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 16))))) != 0) {
5802 break
5803 }
5804 s = *(*uintptr)(unsafe.Pointer(bp + 16)) + uintptr(1)
5805 }
5806 if i == 4 {
5807 return 0
5808 }
5809 switch i {
5810 case 0:
5811 *(*uint32)(unsafe.Pointer(bp + 1*4)) = *(*uint32)(unsafe.Pointer(bp)) & uint32(0xffffff)
5812 AssignShrPtrUint32(bp, int(24))
5813 fallthrough
5814 case 1:
5815 *(*uint32)(unsafe.Pointer(bp + 2*4)) = *(*uint32)(unsafe.Pointer(bp + 1*4)) & uint32(0xffff)
5816 AssignShrPtrUint32(bp+1*4, int(16))
5817 fallthrough
5818 case 2:
5819 *(*uint32)(unsafe.Pointer(bp + 3*4)) = *(*uint32)(unsafe.Pointer(bp + 2*4)) & uint32(0xff)
5820 AssignShrPtrUint32(bp+2*4, int(8))
5821 }
5822 for i = 0; i < 4; i++ {
5823 if *(*uint32)(unsafe.Pointer(bp + uintptr(i)*4)) > uint32(255) {
5824 return 0
5825 }
5826 *(*uint8)(unsafe.Pointer(d + uintptr(i))) = uint8(*(*uint32)(unsafe.Pointer(bp + uintptr(i)*4)))
5827 }
5828 return 1
5829}
5830
5831func Xinet_ntop(tls *TLS, af int32, a0 uintptr, s uintptr, l socklen_t) uintptr { /* inet_ntop.c:7:12: */
5832 bp := tls.Alloc(276)
5833 defer tls.Free(276)
5834
5835 var a uintptr = a0
5836 var i int32
5837 var j int32
5838 var max int32
5839 var best int32
5840 // var buf [100]uint8 at bp+176, 100
5841
5842 switch af {
5843 case 2:
5844 if socklen_t(Xsnprintf(tls, s, l, ts+142, VaList(bp, int32(*(*uint8)(unsafe.Pointer(a))), int32(*(*uint8)(unsafe.Pointer(a + 1))), int32(*(*uint8)(unsafe.Pointer(a + 2))), int32(*(*uint8)(unsafe.Pointer(a + 3)))))) < l {
5845 return s
5846 }
5847 break
5848 case 10:
5849 if Xmemcmp(tls, a, ts+129, uint32(12)) != 0 {
5850 Xsnprintf(tls, bp+176, uint32(unsafe.Sizeof([100]uint8{})),
5851 ts+154,
5852 VaList(bp+32, 256*int32(*(*uint8)(unsafe.Pointer(a)))+int32(*(*uint8)(unsafe.Pointer(a + 1))), 256*int32(*(*uint8)(unsafe.Pointer(a + 2)))+int32(*(*uint8)(unsafe.Pointer(a + 3))),
5853 256*int32(*(*uint8)(unsafe.Pointer(a + 4)))+int32(*(*uint8)(unsafe.Pointer(a + 5))), 256*int32(*(*uint8)(unsafe.Pointer(a + 6)))+int32(*(*uint8)(unsafe.Pointer(a + 7))),
5854 256*int32(*(*uint8)(unsafe.Pointer(a + 8)))+int32(*(*uint8)(unsafe.Pointer(a + 9))), 256*int32(*(*uint8)(unsafe.Pointer(a + 10)))+int32(*(*uint8)(unsafe.Pointer(a + 11))),
5855 256*int32(*(*uint8)(unsafe.Pointer(a + 12)))+int32(*(*uint8)(unsafe.Pointer(a + 13))), 256*int32(*(*uint8)(unsafe.Pointer(a + 14)))+int32(*(*uint8)(unsafe.Pointer(a + 15)))))
5856 } else {
5857 Xsnprintf(tls, bp+176, uint32(unsafe.Sizeof([100]uint8{})),
5858 ts+178,
5859 VaList(bp+96, 256*int32(*(*uint8)(unsafe.Pointer(a)))+int32(*(*uint8)(unsafe.Pointer(a + 1))), 256*int32(*(*uint8)(unsafe.Pointer(a + 2)))+int32(*(*uint8)(unsafe.Pointer(a + 3))),
5860 256*int32(*(*uint8)(unsafe.Pointer(a + 4)))+int32(*(*uint8)(unsafe.Pointer(a + 5))), 256*int32(*(*uint8)(unsafe.Pointer(a + 6)))+int32(*(*uint8)(unsafe.Pointer(a + 7))),
5861 256*int32(*(*uint8)(unsafe.Pointer(a + 8)))+int32(*(*uint8)(unsafe.Pointer(a + 9))), 256*int32(*(*uint8)(unsafe.Pointer(a + 10)))+int32(*(*uint8)(unsafe.Pointer(a + 11))),
5862 int32(*(*uint8)(unsafe.Pointer(a + 12))), int32(*(*uint8)(unsafe.Pointer(a + 13))), int32(*(*uint8)(unsafe.Pointer(a + 14))), int32(*(*uint8)(unsafe.Pointer(a + 15)))))
5863 }
5864 // Replace longest /(^0|:)[:0]{2,}/ with "::"
5865 i = AssignInt32(&best, 0)
5866 max = 2
5867 for ; *(*uint8)(unsafe.Pointer(bp + 176 + uintptr(i))) != 0; i++ {
5868 if i != 0 && int32(*(*uint8)(unsafe.Pointer(bp + 176 + uintptr(i)))) != ':' {
5869 continue
5870 }
5871 j = int32(Xstrspn(tls, bp+176+uintptr(i), ts+208))
5872 if j > max {
5873 best = i
5874 max = j
5875 }
5876 }
5877 if max > 3 {
5878 *(*uint8)(unsafe.Pointer(bp + 176 + uintptr(best))) = AssignPtrUint8(bp+176+uintptr(best+1), uint8(':'))
5879 Xmemmove(tls, bp+176+uintptr(best)+uintptr(2), bp+176+uintptr(best)+uintptr(max), uint32(i-best-max+1))
5880 }
5881 if Xstrlen(tls, bp+176) < l {
5882 Xstrcpy(tls, s, bp+176)
5883 return s
5884 }
5885 break
5886 default:
5887 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 97
5888 return uintptr(0)
5889 }
5890 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 28
5891 return uintptr(0)
5892}
5893
5894func hexval(tls *TLS, c uint32) int32 { /* inet_pton.c:7:12: */
5895 if c-uint32('0') < uint32(10) {
5896 return int32(c - uint32('0'))
5897 }
5898 c = c | uint32(32)
5899 if c-uint32('a') < uint32(6) {
5900 return int32(c - uint32('a') + uint32(10))
5901 }
5902 return -1
5903}
5904
5905func Xinet_pton(tls *TLS, af int32, s uintptr, a0 uintptr) int32 { /* inet_pton.c:15:5: */
5906 bp := tls.Alloc(16)
5907 defer tls.Free(16)
5908
5909 // var ip [8]uint16_t at bp, 16
5910
5911 var a uintptr = a0
5912 var i int32
5913 var j int32
5914 var v int32
5915 var d int32
5916 var brk int32 = -1
5917 var need_v4 int32 = 0
5918
5919 if af == 2 {
5920 for i = 0; i < 4; i++ {
5921 for v = AssignInt32(&j, 0); j < 3 && func() int32 {
5922 if 0 != 0 {
5923 return Xisdigit(tls, int32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))))
5924 }
5925 return Bool32(uint32(*(*uint8)(unsafe.Pointer(s + uintptr(j))))-uint32('0') < uint32(10))
5926 }() != 0; j++ {
5927 v = 10*v + int32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))) - '0'
5928 }
5929 if j == 0 || j > 1 && int32(*(*uint8)(unsafe.Pointer(s))) == '0' || v > 255 {
5930 return 0
5931 }
5932 *(*uint8)(unsafe.Pointer(a + uintptr(i))) = uint8(v)
5933 if int32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))) == 0 && i == 3 {
5934 return 1
5935 }
5936 if int32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))) != '.' {
5937 return 0
5938 }
5939 s += uintptr(j + 1)
5940 }
5941 return 0
5942 } else if af != 10 {
5943 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 97
5944 return -1
5945 }
5946
5947 if int32(*(*uint8)(unsafe.Pointer(s))) == ':' && int32(*(*uint8)(unsafe.Pointer(PreIncUintptr(&s, 1)))) != ':' {
5948 return 0
5949 }
5950
5951 for i = 0; ; i++ {
5952 if int32(*(*uint8)(unsafe.Pointer(s))) == ':' && brk < 0 {
5953 brk = i
5954 *(*uint16_t)(unsafe.Pointer(bp + uintptr(i&7)*2)) = uint16_t(0)
5955 if !(int32(*(*uint8)(unsafe.Pointer(PreIncUintptr(&s, 1)))) != 0) {
5956 break
5957 }
5958 if i == 7 {
5959 return 0
5960 }
5961 continue
5962 }
5963 for v = AssignInt32(&j, 0); j < 4 && AssignInt32(&d, hexval(tls, uint32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))))) >= 0; j++ {
5964 v = 16*v + d
5965 }
5966 if j == 0 {
5967 return 0
5968 }
5969 *(*uint16_t)(unsafe.Pointer(bp + uintptr(i&7)*2)) = uint16_t(v)
5970 if !(int32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))) != 0) && (brk >= 0 || i == 7) {
5971 break
5972 }
5973 if i == 7 {
5974 return 0
5975 }
5976 if int32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))) != ':' {
5977 if int32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))) != '.' || i < 6 && brk < 0 {
5978 return 0
5979 }
5980 need_v4 = 1
5981 i++
5982 break
5983 }
5984 s += uintptr(j + 1)
5985 }
5986 if brk >= 0 {
5987 Xmemmove(tls, bp+uintptr(brk)*2+uintptr(7)*2-uintptr(i)*2, bp+uintptr(brk)*2, uint32(2*(i+1-brk)))
5988 for j = 0; j < 7-i; j++ {
5989 *(*uint16_t)(unsafe.Pointer(bp + uintptr(brk+j)*2)) = uint16_t(0)
5990 }
5991 }
5992 for j = 0; j < 8; j++ {
5993 *(*uint8)(unsafe.Pointer(PostIncUintptr(&a, 1))) = uint8(int32(*(*uint16_t)(unsafe.Pointer(bp + uintptr(j)*2))) >> 8)
5994 *(*uint8)(unsafe.Pointer(PostIncUintptr(&a, 1))) = uint8(*(*uint16_t)(unsafe.Pointer(bp + uintptr(j)*2)))
5995 }
5996 if need_v4 != 0 && Xinet_pton(tls, 2, s, a-uintptr(4)) <= 0 {
5997 return 0
5998 }
5999 return 1
6000}
6001
6002func X__lookup_ipliteral(tls *TLS, buf uintptr, name uintptr, family int32) int32 { /* lookup_ipliteral.c:12:5: */
6003 bp := tls.Alloc(88)
6004 defer tls.Free(88)
6005
6006 // var a4 in_addr at bp, 4
6007
6008 // var a6 in6_addr at bp+68, 16
6009
6010 if X__inet_aton(tls, name, bp) > 0 {
6011 if family == 10 { // wrong family
6012 return -2
6013 }
6014 Xmemcpy(tls, buf+8, bp, uint32(unsafe.Sizeof(in_addr{})))
6015 (*address)(unsafe.Pointer(buf)).Ffamily = 2
6016 (*address)(unsafe.Pointer(buf)).Fscopeid = uint32(0)
6017 return 1
6018 }
6019 // var tmp [64]uint8 at bp+4, 64
6020
6021 var p uintptr = Xstrchr(tls, name, '%')
6022 // var z uintptr at bp+84, 4
6023
6024 var scopeid uint64 = uint64(0)
6025 if p != 0 && (int32(p)-int32(name))/1 < 64 {
6026 Xmemcpy(tls, bp+4, name, uint32((int32(p)-int32(name))/1))
6027 *(*uint8)(unsafe.Pointer(bp + 4 + uintptr((int32(p)-int32(name))/1))) = uint8(0)
6028 name = bp + 4 /* &tmp[0] */
6029 }
6030
6031 if Xinet_pton(tls, 10, name, bp+68) <= 0 {
6032 return 0
6033 }
6034 if family == 2 { // wrong family
6035 return -2
6036 }
6037
6038 Xmemcpy(tls, buf+8, bp+68, uint32(unsafe.Sizeof(in6_addr{})))
6039 (*address)(unsafe.Pointer(buf)).Ffamily = 10
6040 if p != 0 {
6041 if func() int32 {
6042 if 0 != 0 {
6043 return Xisdigit(tls, int32(*(*uint8)(unsafe.Pointer(PreIncUintptr(&p, 1)))))
6044 }
6045 return Bool32(uint32(*(*uint8)(unsafe.Pointer(PreIncUintptr(&p, 1))))-uint32('0') < uint32(10))
6046 }() != 0 {
6047 scopeid = Xstrtoull(tls, p, bp+84, 10)
6048 } else {
6049 *(*uintptr)(unsafe.Pointer(bp + 84 /* z */)) = p - uintptr(1)
6050 }
6051 if *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 84)))) != 0 {
6052 Xabort(tls) //TODO-
6053 // if (!IN6_IS_ADDR_LINKLOCAL(&a6) &&
6054 // !IN6_IS_ADDR_MC_LINKLOCAL(&a6))
6055 // return EAI_NONAME;
6056 // scopeid = if_nametoindex(p);
6057 // if (!scopeid) return EAI_NONAME;
6058 }
6059 if scopeid > uint64(0xffffffff) {
6060 return -2
6061 }
6062 }
6063 (*address)(unsafe.Pointer(buf)).Fscopeid = uint32(scopeid)
6064 return 1
6065}
6066
6067type mode_t = uint32 /* alltypes.h:145:18 */
6068
6069type flock = struct {
6070 Fl_type int16
6071 Fl_whence int16
6072 F__ccgo_pad1 [4]byte
6073 Fl_start off_t
6074 Fl_len off_t
6075 Fl_pid pid_t
6076 F__ccgo_pad2 [4]byte
6077} /* fcntl.h:24:1 */
6078
6079func is_valid_hostname(tls *TLS, host uintptr) int32 { /* lookup_name.c:18:12: */
6080 var s uintptr
6081 //TODO if (strnlen(host, 255)-1 >= 254 || mbstowcs(0, host, 0) == -1) return 0;
6082 if Xstrnlen(tls, host, uint32(255))-size_t(1) >= size_t(254) {
6083 return 0
6084 }
6085 for s = host; int32(*(*uint8)(unsafe.Pointer(s))) >= 0x80 || int32(*(*uint8)(unsafe.Pointer(s))) == '.' || int32(*(*uint8)(unsafe.Pointer(s))) == '-' || Xisalnum(tls, int32(*(*uint8)(unsafe.Pointer(s)))) != 0; s++ {
6086 }
6087 return BoolInt32(!(*(*uint8)(unsafe.Pointer(s)) != 0))
6088}
6089
6090var Xzero_struct_address address /* lookup_name.c:27:16: */
6091
6092func name_from_null(tls *TLS, buf uintptr, name uintptr, family int32, flags int32) int32 { /* lookup_name.c:29:12: */
6093 var cnt int32 = 0
6094 if name != 0 {
6095 return 0
6096 }
6097 if flags&0x01 != 0 {
6098 //TODO if (family != AF_INET6)
6099 //TODO buf[cnt++] = (struct address){ .family = AF_INET };
6100 if family != 10 {
6101 var x = Xzero_struct_address
6102 x.Ffamily = 2
6103 *(*address)(unsafe.Pointer(buf + uintptr(PostIncInt32(&cnt, 1))*28)) = x
6104 }
6105 //TODO if (family != AF_INET)
6106 //TODO buf[cnt++] = (struct address){ .family = AF_INET6 };
6107 if family != 2 {
6108 var x = Xzero_struct_address
6109 x.Ffamily = 10
6110 *(*address)(unsafe.Pointer(buf + uintptr(PostIncInt32(&cnt, 1))*28)) = x
6111 }
6112 } else {
6113 Xabort(tls) //TODO-
6114 // if (family != AF_INET6)
6115 // buf[cnt++] = (struct address){ .family = AF_INET, .addr = { 127,0,0,1 } };
6116 // if (family != AF_INET)
6117 // buf[cnt++] = (struct address){ .family = AF_INET6, .addr = { [15] = 1 } };
6118 }
6119 return cnt
6120}
6121
6122func name_from_numeric(tls *TLS, buf uintptr, name uintptr, family int32) int32 { /* lookup_name.c:58:12: */
6123 return X__lookup_ipliteral(tls, buf, name, family)
6124}
6125
6126func name_from_hosts(tls *TLS, buf uintptr, canon uintptr, name uintptr, family int32) int32 { /* lookup_name.c:63:12: */
6127 bp := tls.Alloc(512)
6128 defer tls.Free(512)
6129
6130 // var line [512]uint8 at bp, 512
6131
6132 var l size_t = Xstrlen(tls, name)
6133 var cnt int32 = 0
6134 var badfam int32 = 0
6135 var _buf [1032]uint8
6136 _ = _buf
6137 //TODO FILE _f, *f = __fopen_rb_ca("/etc/hosts", &_f, _buf, sizeof _buf);
6138 var _f FILE
6139 _ = _f
6140 var f uintptr = Xfopen(tls, ts+115, ts+126)
6141 if !(f != 0) {
6142 switch *(*int32)(unsafe.Pointer(X___errno_location(tls))) {
6143 case 2:
6144 fallthrough
6145 case 20:
6146 fallthrough
6147 case 13:
6148 return 0
6149 fallthrough
6150 default:
6151 return -11
6152 }
6153 }
6154 for Xfgets(tls, bp, int32(unsafe.Sizeof([512]uint8{})), f) != 0 && cnt < 48 {
6155 var p uintptr
6156 var z uintptr
6157
6158 if AssignUintptr(&p, Xstrchr(tls, bp, '#')) != 0 {
6159 *(*uint8)(unsafe.Pointer(PostIncUintptr(&p, 1))) = uint8('\n')
6160 *(*uint8)(unsafe.Pointer(p)) = uint8(0)
6161 }
6162 for p = bp + uintptr(1); AssignUintptr(&p, Xstrstr(tls, p, name)) != 0 && (!(__isspace(tls, int32(*(*uint8)(unsafe.Pointer(p + UintptrFromInt32(-1))))) != 0) || !(__isspace(tls, int32(*(*uint8)(unsafe.Pointer(p + uintptr(l))))) != 0)); p++ {
6163 }
6164 if !(p != 0) {
6165 continue
6166 }
6167
6168 // Isolate IP address to parse
6169 for p = bp; /* &line[0] */ *(*uint8)(unsafe.Pointer(p)) != 0 && !(__isspace(tls, int32(*(*uint8)(unsafe.Pointer(p)))) != 0); p++ {
6170 }
6171 *(*uint8)(unsafe.Pointer(PostIncUintptr(&p, 1))) = uint8(0)
6172 switch name_from_numeric(tls, buf+uintptr(cnt)*28, bp, family) {
6173 case 1:
6174 cnt++
6175 break
6176 case 0:
6177 continue
6178 default:
6179 badfam = -2
6180 continue
6181 }
6182
6183 // Extract first name as canonical name
6184 for ; *(*uint8)(unsafe.Pointer(p)) != 0 && __isspace(tls, int32(*(*uint8)(unsafe.Pointer(p)))) != 0; p++ {
6185 }
6186 for z = p; *(*uint8)(unsafe.Pointer(z)) != 0 && !(__isspace(tls, int32(*(*uint8)(unsafe.Pointer(z)))) != 0); z++ {
6187 }
6188 *(*uint8)(unsafe.Pointer(z)) = uint8(0)
6189 if is_valid_hostname(tls, p) != 0 {
6190 Xmemcpy(tls, canon, p, uint32((int32(z)-int32(p))/1+1))
6191 }
6192 }
6193 //TODO __fclose_ca(f);
6194 Xfclose(tls, f)
6195 if cnt != 0 {
6196 return cnt
6197 }
6198 return badfam
6199}
6200
6201type dpc_ctx = struct {
6202 Faddrs uintptr
6203 Fcanon uintptr
6204 Fcnt int32
6205} /* lookup_name.c:112:1 */
6206
6207func name_from_dns_search(tls *TLS, buf uintptr, canon uintptr, name uintptr, family int32) int32 { /* lookup_name.c:191:12: */
6208 return -1 //TODO-
6209 Xabort(tls)
6210 return int32(0) //TODO-
6211 // char search[256];
6212 // struct resolvconf conf;
6213 // size_t l, dots;
6214 // char *p, *z;
6215
6216 // if (__get_resolv_conf(&conf, search, sizeof search) < 0) return -1;
6217
6218 // /* Count dots, suppress search when >=ndots or name ends in
6219 // * a dot, which is an explicit request for global scope. */
6220 // for (dots=l=0; name[l]; l++) if (name[l]=='.') dots++;
6221 // if (dots >= conf.ndots || name[l-1]=='.') *search = 0;
6222
6223 // /* Strip final dot for canon, fail if multiple trailing dots. */
6224 // if (name[l-1]=='.') l--;
6225 // if (!l || name[l-1]=='.') return EAI_NONAME;
6226
6227 // /* This can never happen; the caller already checked length. */
6228 // if (l >= 256) return EAI_NONAME;
6229
6230 // /* Name with search domain appended is setup in canon[]. This both
6231 // * provides the desired default canonical name (if the requested
6232 // * name is not a CNAME record) and serves as a buffer for passing
6233 // * the full requested name to name_from_dns. */
6234 // memcpy(canon, name, l);
6235 // canon[l] = '.';
6236
6237 // for (p=search; *p; p=z) {
6238 // for (; isspace(*p); p++);
6239 // for (z=p; *z && !isspace(*z); z++);
6240 // if (z==p) break;
6241 // if (z-p < 256 - l - 1) {
6242 // memcpy(canon+l+1, p, z-p);
6243 // canon[z-p+1+l] = 0;
6244 // int cnt = name_from_dns(buf, canon, canon, family, &conf);
6245 // if (cnt) return cnt;
6246 // }
6247 // }
6248
6249 // canon[l] = 0;
6250 // return name_from_dns(buf, canon, name, family, &conf);
6251}
6252
6253type policy = struct {
6254 Faddr [16]uint8
6255 Flen uint8
6256 Fmask uint8
6257 Fprec uint8
6258 Flabel uint8
6259} /* lookup_name.c:237:14 */
6260
6261var defpolicy = [6]policy{
6262 {Faddr: *(*[16]uint8)(unsafe.Pointer(ts + 211)), Flen: uint8(15), Fmask: uint8(0xff), Fprec: uint8(50)},
6263 {Faddr: *(*[16]uint8)(unsafe.Pointer(ts + 228)), Flen: uint8(11), Fmask: uint8(0xff), Fprec: uint8(35), Flabel: uint8(4)},
6264 {Faddr: *(*[16]uint8)(unsafe.Pointer(ts + 244)), Flen: uint8(1), Fmask: uint8(0xff), Fprec: uint8(30), Flabel: uint8(2)},
6265 {Faddr: *(*[16]uint8)(unsafe.Pointer(ts + 260)), Flen: uint8(3), Fmask: uint8(0xff), Fprec: uint8(5), Flabel: uint8(5)},
6266 {Faddr: *(*[16]uint8)(unsafe.Pointer(ts + 276)), Fmask: uint8(0xfe), Fprec: uint8(3), Flabel: uint8(13)},
6267 // Last rule must match all addresses to stop loop.
6268 {Faddr: *(*[16]uint8)(unsafe.Pointer(ts + 292)), Fprec: uint8(40), Flabel: uint8(1)},
6269} /* lookup_name.c:241:3 */
6270
6271func policyof(tls *TLS, a uintptr) uintptr { /* lookup_name.c:259:28: */
6272 var i int32
6273 for i = 0; ; i++ {
6274 if Xmemcmp(tls, a, uintptr(unsafe.Pointer(&defpolicy))+uintptr(i)*20, uint32(defpolicy[i].Flen)) != 0 {
6275 continue
6276 }
6277 if int32(*(*uint8_t)(unsafe.Pointer(a + uintptr(defpolicy[i].Flen))))&int32(defpolicy[i].Fmask) !=
6278 int32(*(*uint8)(unsafe.Pointer(uintptr(unsafe.Pointer(&defpolicy)) + uintptr(i)*20 + uintptr(defpolicy[i].Flen)))) {
6279 continue
6280 }
6281 return uintptr(unsafe.Pointer(&defpolicy)) + uintptr(i)*20
6282 }
6283 return uintptr(0)
6284}
6285
6286func labelof(tls *TLS, a uintptr) int32 { /* lookup_name.c:272:12: */
6287 return int32((*policy)(unsafe.Pointer(policyof(tls, a))).Flabel)
6288}
6289
6290func scopeof(tls *TLS, a uintptr) int32 { /* lookup_name.c:277:12: */
6291 if int32(*(*uint8_t)(unsafe.Pointer(a))) == 0xff {
6292 return int32(*(*uint8_t)(unsafe.Pointer(a + 1))) & 15
6293 }
6294 if int32(*(*uint8_t)(unsafe.Pointer(a))) == 0xfe && int32(*(*uint8_t)(unsafe.Pointer(a + 1)))&0xc0 == 0x80 {
6295 return 2
6296 }
6297 if *(*uint32_t)(unsafe.Pointer(a)) == uint32_t(0) && *(*uint32_t)(unsafe.Pointer(a + 1*4)) == uint32_t(0) && *(*uint32_t)(unsafe.Pointer(a + 2*4)) == uint32_t(0) && int32(*(*uint8_t)(unsafe.Pointer(a + 12))) == 0 && int32(*(*uint8_t)(unsafe.Pointer(a + 13))) == 0 && int32(*(*uint8_t)(unsafe.Pointer(a + 14))) == 0 && int32(*(*uint8_t)(unsafe.Pointer(a + 15))) == 1 {
6298 return 2
6299 }
6300 if int32(*(*uint8_t)(unsafe.Pointer(a))) == 0xfe && int32(*(*uint8_t)(unsafe.Pointer(a + 1)))&0xc0 == 0xc0 {
6301 return 5
6302 }
6303 return 14
6304}
6305
6306func prefixmatch(tls *TLS, s uintptr, d uintptr) int32 { /* lookup_name.c:286:12: */
6307 // FIXME: The common prefix length should be limited to no greater
6308 // than the nominal length of the prefix portion of the source
6309 // address. However the definition of the source prefix length is
6310 // not clear and thus this limiting is not yet implemented.
6311 var i uint32
6312 for i = uint32(0); i < uint32(128) && !((int32(*(*uint8_t)(unsafe.Pointer(s /* &.__in6_union */ /* &.__s6_addr */ + uintptr(i/uint32(8)))))^int32(*(*uint8_t)(unsafe.Pointer(d /* &.__in6_union */ /* &.__s6_addr */ + uintptr(i/uint32(8))))))&(int32(128)>>(i%uint32(8))) != 0); i++ {
6313 }
6314 return int32(i)
6315}
6316
6317func addrcmp(tls *TLS, _a uintptr, _b uintptr) int32 { /* lookup_name.c:305:12: */
6318 var a uintptr = _a
6319 var b uintptr = _b
6320 return (*address)(unsafe.Pointer(b)).Fsortkey - (*address)(unsafe.Pointer(a)).Fsortkey
6321}
6322
6323func X__lookup_name(tls *TLS, buf uintptr, canon uintptr, name uintptr, family int32, flags int32) int32 { /* lookup_name.c:311:5: */
6324 bp := tls.Alloc(92)
6325 defer tls.Free(92)
6326
6327 var cnt int32 = 0
6328 var i int32
6329 var j int32
6330 _ = j
6331
6332 *(*uint8)(unsafe.Pointer(canon)) = uint8(0)
6333 if name != 0 {
6334 // reject empty name and check len so it fits into temp bufs
6335 var l size_t = Xstrnlen(tls, name, uint32(255))
6336 if l-size_t(1) >= size_t(254) {
6337 return -2
6338 }
6339 Xmemcpy(tls, canon, name, l+size_t(1))
6340 }
6341
6342 // Procedurally, a request for v6 addresses with the v4-mapped
6343 // flag set is like a request for unspecified family, followed
6344 // by filtering of the results.
6345 if flags&0x08 != 0 {
6346 if family == 10 {
6347 family = 0
6348 } else {
6349 flags = flags - 0x08
6350 }
6351 }
6352
6353 // Try each backend until there's at least one result.
6354 cnt = name_from_null(tls, buf, name, family, flags)
6355 if !(cnt != 0) {
6356 cnt = name_from_numeric(tls, buf, name, family)
6357 }
6358 if !(cnt != 0) && !(flags&0x04 != 0) {
6359 cnt = name_from_hosts(tls, buf, canon, name, family)
6360 if !(cnt != 0) {
6361 cnt = name_from_dns_search(tls, buf, canon, name, family)
6362 }
6363 }
6364 if cnt <= 0 {
6365 if cnt != 0 {
6366 return cnt
6367 }
6368 return -2
6369 }
6370
6371 // Filter/transform results for v4-mapped lookup, if requested.
6372 if flags&0x08 != 0 {
6373 Xabort(tls) //TODO-
6374 // if (!(flags & AI_ALL)) {
6375 // /* If any v6 results exist, remove v4 results. */
6376 // for (i=0; i<cnt && buf[i].family != AF_INET6; i++);
6377 // if (i<cnt) {
6378 // for (j=0; i<cnt; i++) {
6379 // if (buf[i].family == AF_INET6)
6380 // buf[j++] = buf[i];
6381 // }
6382 // cnt = i = j;
6383 // }
6384 // }
6385 // /* Translate any remaining v4 results to v6 */
6386 // for (i=0; i<cnt; i++) {
6387 // if (buf[i].family != AF_INET) continue;
6388 // memcpy(buf[i].addr+12, buf[i].addr, 4);
6389 // memcpy(buf[i].addr, "\0\0\0\0\0\0\0\0\0\0\xff\xff", 12);
6390 // buf[i].family = AF_INET6;
6391 // }
6392 }
6393
6394 // No further processing is needed if there are fewer than 2
6395 // results or if there are only IPv4 results.
6396 if cnt < 2 || family == 2 {
6397 return cnt
6398 }
6399 for i = 0; i < cnt; i++ {
6400 if (*address)(unsafe.Pointer(buf+uintptr(i)*28)).Ffamily != 2 {
6401 break
6402 }
6403 }
6404 if i == cnt {
6405 return cnt
6406 }
6407 var cs int32
6408 _ = cs
6409 //TODO pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &cs);
6410
6411 // The following implements a subset of RFC 3484/6724 destination
6412 // address selection by generating a single 31-bit sort key for
6413 // each address. Rules 3, 4, and 7 are omitted for having
6414 // excessive runtime and code size cost and dubious benefit.
6415 // So far the label/precedence table cannot be customized.
6416 for i = 0; i < cnt; i++ {
6417 var family int32 = (*address)(unsafe.Pointer(buf + uintptr(i)*28)).Ffamily
6418 var key int32 = 0
6419 *(*sockaddr_in6)(unsafe.Pointer(bp + 28 /* sa6 */)) = sockaddr_in6{}
6420 *(*sockaddr_in6)(unsafe.Pointer(bp /* da6 */)) = sockaddr_in6{Fsin6_family: sa_family_t(10), Fsin6_port: in_port_t(65535), Fsin6_scope_id: (*address)(unsafe.Pointer(buf + uintptr(i)*28)).Fscopeid}
6421 *(*sockaddr_in)(unsafe.Pointer(bp + 72 /* sa4 */)) = sockaddr_in{}
6422 *(*sockaddr_in)(unsafe.Pointer(bp + 56 /* da4 */)) = sockaddr_in{Fsin_family: sa_family_t(2), Fsin_port: in_port_t(65535)}
6423 var sa1 uintptr
6424 var da uintptr
6425 // var salen socklen_t at bp+88, 4
6426
6427 var dalen socklen_t
6428 if family == 10 {
6429 Xmemcpy(tls, bp+8, buf+uintptr(i)*28+8, uint32(16))
6430 da = bp /* &da6 */
6431 dalen = socklen_t(unsafe.Sizeof(sockaddr_in6{}))
6432 sa1 = bp + 28 /* &sa6 */
6433 *(*socklen_t)(unsafe.Pointer(bp + 88 /* salen */)) = socklen_t(unsafe.Sizeof(sockaddr_in6{}))
6434 } else {
6435 Xmemcpy(tls, bp+28+8,
6436 ts+129, uint32(12))
6437 Xmemcpy(tls, bp+8+uintptr(12), buf+uintptr(i)*28+8, uint32(4))
6438 Xmemcpy(tls, bp+8,
6439 ts+129, uint32(12))
6440 Xmemcpy(tls, bp+8+uintptr(12), buf+uintptr(i)*28+8, uint32(4))
6441 Xmemcpy(tls, bp+56+4, buf+uintptr(i)*28+8, uint32(4))
6442 da = bp + 56 /* &da4 */
6443 dalen = socklen_t(unsafe.Sizeof(sockaddr_in{}))
6444 sa1 = bp + 72 /* &sa4 */
6445 *(*socklen_t)(unsafe.Pointer(bp + 88 /* salen */)) = socklen_t(unsafe.Sizeof(sockaddr_in{}))
6446 }
6447 var dpolicy uintptr = policyof(tls, bp+8)
6448 var dscope int32 = scopeof(tls, bp+8)
6449 var dlabel int32 = int32((*policy)(unsafe.Pointer(dpolicy)).Flabel)
6450 var dprec int32 = int32((*policy)(unsafe.Pointer(dpolicy)).Fprec)
6451 var prefixlen int32 = 0
6452 var fd int32 = Xsocket(tls, family, 2|02000000, 17)
6453 if fd >= 0 {
6454 if !(Xconnect(tls, fd, da, dalen) != 0) {
6455 key = key | 0x40000000
6456 if !(Xgetsockname(tls, fd, sa1, bp+88) != 0) {
6457 if family == 2 {
6458 Xmemcpy(tls,
6459 bp+28+8+uintptr(12),
6460 bp+72+4, uint32(4))
6461 }
6462 if dscope == scopeof(tls, bp+28+8) {
6463 key = key | 0x20000000
6464 }
6465 if dlabel == labelof(tls, bp+28+8) {
6466 key = key | 0x10000000
6467 }
6468 prefixlen = prefixmatch(tls, bp+28+8,
6469 bp+8)
6470 }
6471 }
6472 Xclose(tls, fd)
6473 }
6474 key = key | dprec<<20
6475 key = key | (15-dscope)<<16
6476 key = key | prefixlen<<8
6477 key = key | (48-i)<<0
6478 (*address)(unsafe.Pointer(buf + uintptr(i)*28)).Fsortkey = key
6479 }
6480 Xqsort(tls, buf, uint32(cnt), uint32(unsafe.Sizeof(address{})), *(*uintptr)(unsafe.Pointer(&struct {
6481 f func(*TLS, uintptr, uintptr) int32
6482 }{addrcmp})))
6483
6484 //TODO pthread_setcancelstate(cs, 0);
6485
6486 return cnt
6487}
6488
6489func X__lookup_serv(tls *TLS, buf uintptr, name uintptr, proto int32, socktype int32, flags int32) int32 { /* lookup_serv.c:12:5: */
6490 bp := tls.Alloc(4)
6491 defer tls.Free(4)
6492
6493 var line [128]uint8
6494 _ = line
6495 var cnt int32 = 0
6496 var p uintptr
6497 _ = p
6498 *(*uintptr)(unsafe.Pointer(bp /* z */)) = ts + 54 /* "" */
6499 var port uint32 = uint32(0)
6500
6501 switch socktype {
6502 case 1:
6503 switch proto {
6504 case 0:
6505 proto = 6
6506 fallthrough
6507 case 6:
6508 break
6509 default:
6510 return -8
6511 }
6512 break
6513 case 2:
6514 switch proto {
6515 case 0:
6516 proto = 17
6517 fallthrough
6518 case 17:
6519 break
6520 default:
6521 return -8
6522 }
6523 fallthrough
6524 case 0:
6525 break
6526 default:
6527 if name != 0 {
6528 return -8
6529 }
6530 (*service)(unsafe.Pointer(buf)).Fport = uint16_t(0)
6531 (*service)(unsafe.Pointer(buf)).Fproto = uint8(proto)
6532 (*service)(unsafe.Pointer(buf)).Fsocktype = uint8(socktype)
6533 return 1
6534 }
6535
6536 if name != 0 {
6537 if !(int32(*(*uint8)(unsafe.Pointer(name))) != 0) {
6538 return -8
6539 }
6540 port = Xstrtoul(tls, name, bp, 10)
6541 }
6542 if !(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp))))) != 0) {
6543 if port > uint32(65535) {
6544 return -8
6545 }
6546 if proto != 17 {
6547 (*service)(unsafe.Pointer(buf + uintptr(cnt)*4)).Fport = uint16_t(port)
6548 (*service)(unsafe.Pointer(buf + uintptr(cnt)*4)).Fsocktype = uint8(1)
6549 (*service)(unsafe.Pointer(buf + uintptr(PostIncInt32(&cnt, 1))*4)).Fproto = uint8(6)
6550 }
6551 if proto != 6 {
6552 (*service)(unsafe.Pointer(buf + uintptr(cnt)*4)).Fport = uint16_t(port)
6553 (*service)(unsafe.Pointer(buf + uintptr(cnt)*4)).Fsocktype = uint8(2)
6554 (*service)(unsafe.Pointer(buf + uintptr(PostIncInt32(&cnt, 1))*4)).Fproto = uint8(17)
6555 }
6556 return cnt
6557 }
6558
6559 if flags&0x400 != 0 {
6560 return -2
6561 }
6562
6563 var l size_t = Xstrlen(tls, name)
6564 _ = l
6565
6566 Xabort(tls) //TODO-
6567 // unsigned char _buf[1032];
6568 // FILE _f, *f = __fopen_rb_ca("/etc/services", &_f, _buf, sizeof _buf);
6569 // if (!f) switch (errno) {
6570 // case ENOENT:
6571 // case ENOTDIR:
6572 // case EACCES:
6573 // return EAI_SERVICE;
6574 // default:
6575 // return EAI_SYSTEM;
6576 // }
6577
6578 Xabort(tls) //TODO-
6579 // while (fgets(line, sizeof line, f) && cnt < MAXSERVS) {
6580 // if ((p=strchr(line, '#'))) *p++='\n', *p=0;
6581
6582 // /* Find service name */
6583 // for(p=line; (p=strstr(p, name)); p++) {
6584 // if (p>line && !isspace(p[-1])) continue;
6585 // if (p[l] && !isspace(p[l])) continue;
6586 // break;
6587 // }
6588 // if (!p) continue;
6589
6590 // /* Skip past canonical name at beginning of line */
6591 // for (p=line; *p && !isspace(*p); p++);
6592
6593 // port = strtoul(p, &z, 10);
6594 // if (port > 65535 || z==p) continue;
6595 // if (!strncmp(z, "/udp", 4)) {
6596 // if (proto == IPPROTO_TCP) continue;
6597 // buf[cnt].port = port;
6598 // buf[cnt].socktype = SOCK_DGRAM;
6599 // buf[cnt++].proto = IPPROTO_UDP;
6600 // }
6601 // if (!strncmp(z, "/tcp", 4)) {
6602 // if (proto == IPPROTO_UDP) continue;
6603 // buf[cnt].port = port;
6604 // buf[cnt].socktype = SOCK_STREAM;
6605 // buf[cnt++].proto = IPPROTO_TCP;
6606 // }
6607 // }
6608 // __fclose_ca(f);
6609 // return cnt > 0 ? cnt : EAI_SERVICE;
6610 Xabort(tls)
6611 return int32(0) //TODO-
6612}
6613
6614func X__toread(tls *TLS, f uintptr) int32 { /* __toread.c:3:5: */
6615 *(*int32)(unsafe.Pointer(f + 72)) |= (*FILE)(unsafe.Pointer(f)).Fmode - 1
6616 if (*FILE)(unsafe.Pointer(f)).Fwpos != (*FILE)(unsafe.Pointer(f)).Fwbase {
6617 (*struct {
6618 f func(*TLS, uintptr, uintptr, size_t) size_t
6619 })(unsafe.Pointer(&struct{ uintptr }{(*FILE)(unsafe.Pointer(f)).Fwrite})).f(tls, f, uintptr(0), uint32(0))
6620 }
6621 (*FILE)(unsafe.Pointer(f)).Fwpos = AssignPtrUintptr(f+28, AssignPtrUintptr(f+16, uintptr(0)))
6622 if (*FILE)(unsafe.Pointer(f)).Fflags&uint32(4) != 0 {
6623 *(*uint32)(unsafe.Pointer(f)) |= uint32(32)
6624 return -1
6625 }
6626 (*FILE)(unsafe.Pointer(f)).Frpos = AssignPtrUintptr(f+8, (*FILE)(unsafe.Pointer(f)).Fbuf+uintptr((*FILE)(unsafe.Pointer(f)).Fbuf_size))
6627 if (*FILE)(unsafe.Pointer(f)).Fflags&uint32(16) != 0 {
6628 return -1
6629 }
6630 return 0
6631}
6632
6633func X__toread_needs_stdio_exit(tls *TLS) { /* __toread.c:16:13: */
6634 X__builtin_abort(tls) //TODO-
6635 // __stdio_exit_needed();
6636}
6637
6638// This function assumes it will never be called if there is already
6639// data buffered for reading.
6640
6641func X__uflow(tls *TLS, f uintptr) int32 { /* __uflow.c:6:5: */
6642 bp := tls.Alloc(1)
6643 defer tls.Free(1)
6644
6645 // var c uint8 at bp, 1
6646
6647 if !(X__toread(tls, f) != 0) && (*struct {
6648 f func(*TLS, uintptr, uintptr, size_t) size_t
6649 })(unsafe.Pointer(&struct{ uintptr }{(*FILE)(unsafe.Pointer(f)).Fread})).f(tls, f, bp, uint32(1)) == size_t(1) {
6650 return int32(*(*uint8)(unsafe.Pointer(bp)))
6651 }
6652 return -1
6653}
6654
6655func Xbsearch(tls *TLS, key uintptr, base uintptr, nel size_t, width size_t, cmp uintptr) uintptr { /* bsearch.c:3:6: */
6656 var try uintptr
6657 var sign int32
6658 for nel > size_t(0) {
6659 try = base + uintptr(width*(nel/size_t(2)))
6660 sign = (*struct {
6661 f func(*TLS, uintptr, uintptr) int32
6662 })(unsafe.Pointer(&struct{ uintptr }{cmp})).f(tls, key, try)
6663 if sign < 0 {
6664 nel = nel / size_t(2)
6665 } else if sign > 0 {
6666 base = try + uintptr(width)
6667 nel = nel - (nel/size_t(2) + size_t(1))
6668 } else {
6669 return try
6670 }
6671 }
6672 return uintptr(0)
6673}
6674
6675func strtox(tls *TLS, s uintptr, p uintptr, prec int32) float64 { /* strtod.c:6:20: */
6676 bp := tls.Alloc(144)
6677 defer tls.Free(144)
6678
6679 // var f FILE at bp, 144
6680
6681 (*FILE)(unsafe.Pointer(bp)).Fbuf = AssignPtrUintptr(bp+4, s)
6682 (*FILE)(unsafe.Pointer(bp)).Frend = UintptrFromInt32(-1)
6683 X__shlim(tls, bp, int64(0))
6684 var y float64 = X__floatscan(tls, bp, prec, 1)
6685 var cnt off_t = (*FILE)(unsafe.Pointer(bp)).Fshcnt + off_t((int32((*FILE)(unsafe.Pointer(bp)).Frpos)-int32((*FILE)(unsafe.Pointer(bp)).Fbuf))/1)
6686 if p != 0 {
6687 *(*uintptr)(unsafe.Pointer(p)) = func() uintptr {
6688 if cnt != 0 {
6689 return s + uintptr(cnt)
6690 }
6691 return s
6692 }()
6693 }
6694 return y
6695}
6696
6697func Xstrtof(tls *TLS, s uintptr, p uintptr) float32 { /* strtod.c:17:7: */
6698 return float32(strtox(tls, s, p, 0))
6699}
6700
6701func Xstrtod(tls *TLS, s uintptr, p uintptr) float64 { /* strtod.c:22:8: */
6702 return strtox(tls, s, p, 1)
6703}
6704
6705func Xstrtold(tls *TLS, s uintptr, p uintptr) float64 { /* strtod.c:27:13: */
6706 return strtox(tls, s, p, 2)
6707}
6708
6709func strtox1(tls *TLS, s uintptr, p uintptr, base int32, lim uint64) uint64 { /* strtol.c:8:27: */
6710 bp := tls.Alloc(144)
6711 defer tls.Free(144)
6712
6713 // var f FILE at bp, 144
6714
6715 (*FILE)(unsafe.Pointer(bp)).Fbuf = AssignPtrUintptr(bp+4, s)
6716 (*FILE)(unsafe.Pointer(bp)).Frend = UintptrFromInt32(-1)
6717 X__shlim(tls, bp, int64(0))
6718 var y uint64 = X__intscan(tls, bp, uint32(base), 1, lim)
6719 if p != 0 {
6720 var cnt size_t = size_t((*FILE)(unsafe.Pointer(bp)).Fshcnt + off_t((int32((*FILE)(unsafe.Pointer(bp)).Frpos)-int32((*FILE)(unsafe.Pointer(bp)).Fbuf))/1))
6721 *(*uintptr)(unsafe.Pointer(p)) = s + uintptr(cnt)
6722 }
6723 return y
6724}
6725
6726func Xstrtoull(tls *TLS, s uintptr, p uintptr, base int32) uint64 { /* strtol.c:21:20: */
6727 return strtox1(tls, s, p, base, 2*uint64(0x7fffffffffffffff)+uint64(1))
6728}
6729
6730func Xstrtoll(tls *TLS, s uintptr, p uintptr, base int32) int64 { /* strtol.c:26:11: */
6731 return int64(strtox1(tls, s, p, base, Uint64FromInt64(-0x7fffffffffffffff-int64(1))))
6732}
6733
6734func Xstrtoul(tls *TLS, s uintptr, p uintptr, base int32) uint32 { /* strtol.c:31:15: */
6735 return uint32(strtox1(tls, s, p, base, uint64(2*uint32(0x7fffffff)+uint32(1))))
6736}
6737
6738func Xstrtol(tls *TLS, s uintptr, p uintptr, base int32) int32 { /* strtol.c:36:6: */
6739 return int32(strtox1(tls, s, p, base, uint64(0+Uint32FromInt32(Int32(-Int32(0x7fffffff))-Int32FromInt32(1)))))
6740}
6741
6742func Xstrtoimax(tls *TLS, s uintptr, p uintptr, base int32) intmax_t { /* strtol.c:41:10: */
6743 return Xstrtoll(tls, s, p, base)
6744}
6745
6746func Xstrtoumax(tls *TLS, s uintptr, p uintptr, base int32) uintmax_t { /* strtol.c:46:11: */
6747 return Xstrtoull(tls, s, p, base)
6748}
6749
6750func Xstrdup(tls *TLS, s uintptr) uintptr { /* strdup.c:4:6: */
6751 var l size_t = Xstrlen(tls, s)
6752 var d uintptr = Xmalloc(tls, l+size_t(1))
6753 if !(d != 0) {
6754 return uintptr(0)
6755 }
6756 return Xmemcpy(tls, d, s, l+size_t(1))
6757}
6758
6759func Xstrnlen(tls *TLS, s uintptr, n size_t) size_t { /* strnlen.c:3:8: */
6760 var p uintptr = Xmemchr(tls, s, 0, n)
6761 if p != 0 {
6762 return uint32((int32(p) - int32(s)) / 1)
6763 }
6764 return n
6765}
6766
6767func Xstrspn(tls *TLS, s uintptr, c uintptr) size_t { /* strspn.c:6:8: */
6768 bp := tls.Alloc(32)
6769 defer tls.Free(32)
6770
6771 var a uintptr = s
6772 *(*[8]size_t)(unsafe.Pointer(bp /* byteset */)) = [8]size_t{0: size_t(0)}
6773
6774 if !(int32(*(*uint8)(unsafe.Pointer(c))) != 0) {
6775 return size_t(0)
6776 }
6777 if !(int32(*(*uint8)(unsafe.Pointer(c + 1))) != 0) {
6778 for ; int32(*(*uint8)(unsafe.Pointer(s))) == int32(*(*uint8)(unsafe.Pointer(c))); s++ {
6779 }
6780 return size_t((int32(s) - int32(a)) / 1)
6781 }
6782
6783 for ; *(*uint8)(unsafe.Pointer(c)) != 0 && AssignOrPtrUint32(bp+uintptr(size_t(*(*uint8)(unsafe.Pointer(c)))/(uint32(8)*uint32(unsafe.Sizeof(size_t(0)))))*4, size_t(size_t(1))<<(size_t(*(*uint8)(unsafe.Pointer(c)))%(uint32(8)*uint32(unsafe.Sizeof(size_t(0)))))) != 0; c++ {
6784 }
6785 for ; *(*uint8)(unsafe.Pointer(s)) != 0 && *(*size_t)(unsafe.Pointer(bp + uintptr(size_t(*(*uint8)(unsafe.Pointer(s)))/(uint32(8)*uint32(unsafe.Sizeof(size_t(0)))))*4))&(size_t(size_t(1))<<(size_t(*(*uint8)(unsafe.Pointer(s)))%(uint32(8)*uint32(unsafe.Sizeof(size_t(0)))))) != 0; s++ {
6786 }
6787 return size_t((int32(s) - int32(a)) / 1)
6788}
6789
6790func init() {
6791 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&X_CurrentRuneLocale)) + 0)) = uintptr(unsafe.Pointer(&X_DefaultRuneLocale)) // table.cpp.c:4092:41:
6792}
6793
6794var ts1 = "RuneMagi\x00NONE\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00infinity\x00nan\x00\x00\x00\x01\x02\x04\a\x03\x06\x05\x00%d.%d.%d.%d.in-addr.arpa\x00ip6.arpa\x000123456789abcdef\x00/etc/hosts\x00rb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00%d.%d.%d.%d\x00%x:%x:%x:%x:%x:%x:%x:%x\x00%x:%x:%x:%x:%x:%x:%d.%d.%d.%d\x00:0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00 \x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
6795var ts = (*reflect.StringHeader)(unsafe.Pointer(&ts1)).Data
Note: See TracBrowser for help on using the repository browser.