source: code/trunk/vendor/modernc.org/libc/musl_linux_arm64.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: 192.1 KB
Line 
1// Code generated by 'ccgo -export-externs X -hide __syscall0,__syscall1,__syscall2,__syscall3,__syscall4,__syscall5,__syscall6 -nostdinc -nostdlib -o ../musl_linux_arm64.go -pkgname libc -static-locals-prefix _s -Iarch/aarch64 -Iarch/generic -Iobj/src/internal -Isrc/include -Isrc/internal -Iobj/include -Iinclude copyright.c src/ctype/__ctype_b_loc.c src/ctype/isalnum.c src/ctype/isalpha.c src/ctype/isdigit.c src/ctype/islower.c src/ctype/isprint.c src/ctype/isupper.c src/ctype/isxdigit.c src/dirent/closedir.c src/dirent/opendir.c src/dirent/readdir.c src/internal/floatscan.c src/internal/intscan.c src/internal/shgetc.c src/locale/localeconv.c src/math/__fpclassify.c src/math/__fpclassifyf.c src/math/__fpclassifyl.c src/math/copysignl.c src/math/fabsl.c src/math/fmodl.c src/math/nanf.c src/math/rint.c src/math/scalbn.c src/math/scalbnl.c src/multibyte/internal.c src/multibyte/mbrtowc.c src/multibyte/mbsinit.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/gethostbyname_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/prng/rand_r.c src/stdio/__lockfile.c src/stdio/__toread.c src/stdio/__uflow.c src/stdio/sscanf.c src/stdio/vfscanf.c src/stdio/vsscanf.c src/stdlib/bsearch.c src/stdlib/strtod.c src/stdlib/strtol.c src/string/strdup.c src/string/strlcat.c src/string/strlcpy.c src/string/strncasecmp.c src/string/strncat.c src/string/strnlen.c src/string/strspn.c src/string/strtok.c src/thread/pthread_attr_get.c src/thread/pthread_attr_setdetachstate.c src/thread/pthread_mutex_lock.c src/thread/pthread_mutexattr_destroy.c src/thread/pthread_mutexattr_init.c src/thread/pthread_mutexattr_settype.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
354const ( /* pthread_impl.h:58:1: */
355 DT_EXITING = 0
356 DT_JOINABLE = 1
357 DT_DETACHED = 2
358)
359
360type ptrdiff_t = int64 /* <builtin>:3:26 */
361
362type size_t = uint64 /* <builtin>:9:23 */
363
364type wchar_t = uint32 /* <builtin>:15:24 */
365
366type uint16_t = uint16 /* alltypes.h:134:25 */
367
368type uint32_t = uint32 /* alltypes.h:139:25 */
369
370type uint64_t = uint64 /* alltypes.h:144:25 */
371
372func __bswap32(tls *TLS, __x uint32_t) uint32_t { /* endian.h:24:26: */
373 return __x>>24 | __x>>8&uint32_t(0xff00) | __x<<8&uint32_t(0xff0000) | __x<<24
374}
375
376var table = [384]uint16{
377 uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0),
378 uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0),
379 uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0),
380 uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0),
381 uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536),
382 uint16((0x200/256 | 0x200*256) % 65536), uint16((0x320/256 | 0x320*256) % 65536), uint16((0x220/256 | 0x220*256) % 65536), uint16((0x220/256 | 0x220*256) % 65536), uint16((0x220/256 | 0x220*256) % 65536), uint16((0x220/256 | 0x220*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536),
383 uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536),
384 uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536),
385 uint16((0x160/256 | 0x160*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536),
386 uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536),
387 uint16((0x8d8/256 | 0x8d8*256) % 65536), uint16((0x8d8/256 | 0x8d8*256) % 65536), uint16((0x8d8/256 | 0x8d8*256) % 65536), uint16((0x8d8/256 | 0x8d8*256) % 65536), uint16((0x8d8/256 | 0x8d8*256) % 65536), uint16((0x8d8/256 | 0x8d8*256) % 65536), uint16((0x8d8/256 | 0x8d8*256) % 65536), uint16((0x8d8/256 | 0x8d8*256) % 65536),
388 uint16((0x8d8/256 | 0x8d8*256) % 65536), uint16((0x8d8/256 | 0x8d8*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536),
389 uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x8d5/256 | 0x8d5*256) % 65536), uint16((0x8d5/256 | 0x8d5*256) % 65536), uint16((0x8d5/256 | 0x8d5*256) % 65536), uint16((0x8d5/256 | 0x8d5*256) % 65536), uint16((0x8d5/256 | 0x8d5*256) % 65536), uint16((0x8d5/256 | 0x8d5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536),
390 uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536),
391 uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536),
392 uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x8c5/256 | 0x8c5*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536),
393 uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x8d6/256 | 0x8d6*256) % 65536), uint16((0x8d6/256 | 0x8d6*256) % 65536), uint16((0x8d6/256 | 0x8d6*256) % 65536), uint16((0x8d6/256 | 0x8d6*256) % 65536), uint16((0x8d6/256 | 0x8d6*256) % 65536), uint16((0x8d6/256 | 0x8d6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536),
394 uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536),
395 uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536),
396 uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x8c6/256 | 0x8c6*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x4c0/256 | 0x4c0*256) % 65536), uint16((0x200/256 | 0x200*256) % 65536),
397 uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0),
398 uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0),
399 uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0),
400 uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0), uint16(0),
401} /* __ctype_b_loc.c:9:29 */
402
403var ptable uintptr = 0 /* __ctype_b_loc.c:36:29 */
404
405func X__ctype_b_loc(tls *TLS) uintptr { /* __ctype_b_loc.c:38:22: */
406 return uintptr(unsafe.Pointer(&ptable))
407}
408
409func __isspace(tls *TLS, _c int32) int32 { /* ctype.h:26:21: */
410 return Bool32(_c == ' ' || uint32(_c)-uint32('\t') < uint32(5))
411}
412
413type __locale_struct = struct{ cat [6]uintptr } /* alltypes.h:351:9 */
414
415type locale_t = uintptr /* alltypes.h:351:32 */
416
417func Xisalnum(tls *TLS, c int32) int32 { /* isalnum.c:3:5: */
418 return Bool32(func() int32 {
419 if 0 != 0 {
420 return Xisalpha(tls, c)
421 }
422 return Bool32(uint32(c)|uint32(32)-uint32('a') < uint32(26))
423 }() != 0 || func() int32 {
424 if 0 != 0 {
425 return Xisdigit(tls, c)
426 }
427 return Bool32(uint32(c)-uint32('0') < uint32(10))
428 }() != 0)
429}
430
431func X__isalnum_l(tls *TLS, c int32, l locale_t) int32 { /* isalnum.c:8:5: */
432 return Xisalnum(tls, c)
433}
434
435func Xisalpha(tls *TLS, c int32) int32 { /* isalpha.c:4:5: */
436 return Bool32(uint32(c)|uint32(32)-uint32('a') < uint32(26))
437}
438
439func X__isalpha_l(tls *TLS, c int32, l locale_t) int32 { /* isalpha.c:9:5: */
440 return Xisalpha(tls, c)
441}
442
443func Xisdigit(tls *TLS, c int32) int32 { /* isdigit.c:4:5: */
444 return Bool32(uint32(c)-uint32('0') < uint32(10))
445}
446
447func X__isdigit_l(tls *TLS, c int32, l locale_t) int32 { /* isdigit.c:9:5: */
448 return Xisdigit(tls, c)
449}
450
451func Xislower(tls *TLS, c int32) int32 { /* islower.c:4:5: */
452 return Bool32(uint32(c)-uint32('a') < uint32(26))
453}
454
455func X__islower_l(tls *TLS, c int32, l locale_t) int32 { /* islower.c:9:5: */
456 return Xislower(tls, c)
457}
458
459func Xisprint(tls *TLS, c int32) int32 { /* isprint.c:4:5: */
460 return Bool32(uint32(c)-uint32(0x20) < uint32(0x5f))
461}
462
463func X__isprint_l(tls *TLS, c int32, l locale_t) int32 { /* isprint.c:9:5: */
464 return Xisprint(tls, c)
465}
466
467func Xisupper(tls *TLS, c int32) int32 { /* isupper.c:4:5: */
468 return Bool32(uint32(c)-uint32('A') < uint32(26))
469}
470
471func X__isupper_l(tls *TLS, c int32, l locale_t) int32 { /* isupper.c:9:5: */
472 return Xisupper(tls, c)
473}
474
475func Xisxdigit(tls *TLS, c int32) int32 { /* isxdigit.c:3:5: */
476 return Bool32(func() int32 {
477 if 0 != 0 {
478 return Xisdigit(tls, c)
479 }
480 return Bool32(uint32(c)-uint32('0') < uint32(10))
481 }() != 0 || uint32(c)|uint32(32)-uint32('a') < uint32(6))
482}
483
484func X__isxdigit_l(tls *TLS, c int32, l locale_t) int32 { /* isxdigit.c:8:5: */
485 return Xisxdigit(tls, c)
486}
487
488type off_t = int64 /* alltypes.h:170:16 */
489
490type ino_t = uint64 /* alltypes.h:175:25 */
491
492type dirent = struct {
493 d_ino ino_t
494 d_off off_t
495 d_reclen uint16
496 d_type uint8
497 d_name [256]uint8
498 _ [5]byte
499} /* dirent.h:5:1 */
500
501type __dirstream = struct {
502 tell off_t
503 fd int32
504 buf_pos int32
505 buf_end int32
506 lock [1]int32
507 buf [2048]uint8
508} /* dirent.h:20:9 */
509
510type DIR = __dirstream /* dirent.h:20:28 */
511
512type ssize_t = int64 /* alltypes.h:73:15 */
513
514type intptr_t = int64 /* alltypes.h:78:15 */
515
516type pid_t = int32 /* alltypes.h:243:13 */
517
518type uid_t = uint32 /* alltypes.h:253:18 */
519
520type gid_t = uint32 /* alltypes.h:258:18 */
521
522type useconds_t = uint32 /* alltypes.h:268:18 */
523
524type div_t = struct {
525 quot int32
526 rem int32
527} /* stdlib.h:62:35 */
528type ldiv_t = struct {
529 quot int64
530 rem int64
531} /* stdlib.h:63:36 */
532type lldiv_t = struct {
533 quot int64
534 rem int64
535} /* stdlib.h:64:41 */
536
537func Xclosedir(tls *TLS, dir uintptr) int32 { /* closedir.c:6:5: */
538 var ret int32 = Xclose(tls, (*DIR)(unsafe.Pointer(dir)).fd)
539 Xfree(tls, dir)
540 return ret
541}
542
543type mode_t = uint32 /* alltypes.h:160:18 */
544
545type iovec = struct {
546 iov_base uintptr
547 iov_len size_t
548} /* alltypes.h:363:1 */
549
550type flock = struct {
551 l_type int16
552 l_whence int16
553 _ [4]byte
554 l_start off_t
555 l_len off_t
556 l_pid pid_t
557 _ [4]byte
558} /* fcntl.h:24:1 */
559
560type file_handle = struct {
561 _ [0]uint32
562 handle_bytes uint32
563 handle_type int32
564} /* fcntl.h:167:1 */
565
566type f_owner_ex = struct {
567 __type int32
568 pid pid_t
569} /* fcntl.h:172:1 */
570
571type syscall_arg_t = int64 /* syscall.h:22:14 */
572
573func Xopendir(tls *TLS, name uintptr) uintptr { /* opendir.c:8:5: */
574 var fd int32
575 var dir uintptr
576
577 if AssignInt32(&fd, Xopen(tls, name, 00|040000|02000000, 0)) < 0 {
578 return uintptr(0)
579 }
580 if !(int32(AssignUintptr(&dir, Xcalloc(tls, uint64(1), uint64(unsafe.Sizeof(DIR{}))))) != 0) {
581 X__syscall1(tls, int64(57), int64(fd))
582 return uintptr(0)
583 }
584 (*DIR)(unsafe.Pointer(dir)).fd = fd
585 return dir
586}
587
588type max_align_t = struct {
589 __ll int64
590 __ld float64
591} /* alltypes.h:49:54 */
592
593type dirstream_buf_alignment_check = [1]uint8 /* readdir.c:7:14 */
594
595func Xreaddir(tls *TLS, dir uintptr) uintptr { /* readdir.c:10:15: */
596 var de uintptr
597
598 if (*DIR)(unsafe.Pointer(dir)).buf_pos >= (*DIR)(unsafe.Pointer(dir)).buf_end {
599 var len int32 = int32(X__syscall3(tls, int64(61), int64((*DIR)(unsafe.Pointer(dir)).fd), int64(dir+24), int64(unsafe.Sizeof([2048]uint8{}))))
600 if len <= 0 {
601 if len < 0 && len != -2 {
602 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = -len
603 }
604 return uintptr(0)
605 }
606 (*DIR)(unsafe.Pointer(dir)).buf_end = len
607 (*DIR)(unsafe.Pointer(dir)).buf_pos = 0
608 }
609 de = dir + 24 + uintptr((*DIR)(unsafe.Pointer(dir)).buf_pos)
610 *(*int32)(unsafe.Pointer(dir + 12)) += int32((*dirent)(unsafe.Pointer(de)).d_reclen)
611 (*DIR)(unsafe.Pointer(dir)).tell = (*dirent)(unsafe.Pointer(de)).d_off
612 return de
613}
614
615type uintptr_t = uint64 /* alltypes.h:63:24 */
616
617type int8_t = int8 /* alltypes.h:104:25 */
618
619type int16_t = int16 /* alltypes.h:109:25 */
620
621type int32_t = int32 /* alltypes.h:114:25 */
622
623type int64_t = int64 /* alltypes.h:119:25 */
624
625type intmax_t = int64 /* alltypes.h:124:25 */
626
627type uint8_t = uint8 /* alltypes.h:129:25 */
628
629type uintmax_t = uint64 /* alltypes.h:154:25 */
630
631type int_fast8_t = int8_t /* stdint.h:22:16 */
632type int_fast64_t = int64_t /* stdint.h:23:17 */
633
634type int_least8_t = int8_t /* stdint.h:25:17 */
635type int_least16_t = int16_t /* stdint.h:26:17 */
636type int_least32_t = int32_t /* stdint.h:27:17 */
637type int_least64_t = int64_t /* stdint.h:28:17 */
638
639type uint_fast8_t = uint8_t /* stdint.h:30:17 */
640type uint_fast64_t = uint64_t /* stdint.h:31:18 */
641
642type uint_least8_t = uint8_t /* stdint.h:33:18 */
643type uint_least16_t = uint16_t /* stdint.h:34:18 */
644type uint_least32_t = uint32_t /* stdint.h:35:18 */
645type uint_least64_t = uint64_t /* stdint.h:36:18 */
646
647type int_fast16_t = int32_t /* stdint.h:1:17 */
648type int_fast32_t = int32_t /* stdint.h:2:17 */
649type uint_fast16_t = uint32_t /* stdint.h:3:18 */
650type uint_fast32_t = uint32_t /* stdint.h:4:18 */
651
652type _IO_FILE = struct {
653 flags uint32
654 _ [4]byte
655 rpos uintptr
656 rend uintptr
657 close uintptr
658 wend uintptr
659 wpos uintptr
660 mustbezero_1 uintptr
661 wbase uintptr
662 read uintptr
663 write uintptr
664 seek uintptr
665 buf uintptr
666 buf_size size_t
667 prev uintptr
668 next uintptr
669 fd int32
670 pipe_pid int32
671 lockcount int64
672 mode int32
673 lock int32
674 lbf int32
675 _ [4]byte
676 cookie uintptr
677 off off_t
678 getln_buf uintptr
679 mustbezero_2 uintptr
680 shend uintptr
681 shlim off_t
682 shcnt off_t
683 prev_locked uintptr
684 next_locked uintptr
685 locale uintptr
686} /* alltypes.h:328:9 */
687
688type FILE = _IO_FILE /* alltypes.h:328:25 */
689
690type va_list = uintptr /* alltypes.h:334:27 */
691
692type _G_fpos64_t = struct {
693 _ [0]uint64
694 __opaque [16]uint8
695} /* stdio.h:54:9 */
696
697type fpos_t = _G_fpos64_t /* stdio.h:58:3 */
698
699type float_t = float32 /* alltypes.h:38:15 */
700
701type double_t = float64 /* alltypes.h:43:16 */
702
703func __FLOAT_BITS(tls *TLS, __f float32) uint32 { /* math.h:55:26: */
704 bp := tls.Alloc(4)
705 defer tls.Free(4)
706
707 // var __u struct {__f float32;} at bp, 4
708
709 *(*float32)(unsafe.Pointer(bp)) = __f
710 return *(*uint32)(unsafe.Pointer(bp))
711}
712
713func __DOUBLE_BITS(tls *TLS, __f float64) uint64 { /* math.h:61:36: */
714 bp := tls.Alloc(8)
715 defer tls.Free(8)
716
717 // var __u struct {__f float64;} at bp, 8
718
719 *(*float64)(unsafe.Pointer(bp)) = __f
720 return *(*uint64)(unsafe.Pointer(bp))
721}
722
723type __pthread = struct {
724 self uintptr
725 dtv uintptr
726 prev uintptr
727 next uintptr
728 sysinfo uintptr_t
729 canary uintptr_t
730 canary2 uintptr_t
731 tid int32
732 errno_val int32
733 detach_state int32
734 cancel int32
735 canceldisable uint8
736 cancelasync uint8
737 tsd_used uint8 /* unsigned char tsd_used: 1, unsigned char dlerror_flag: 1 */
738 _ [5]byte
739 map_base uintptr
740 map_size size_t
741 stack uintptr
742 stack_size size_t
743 guard_size size_t
744 result uintptr
745 cancelbuf uintptr
746 tsd uintptr
747 robust_list struct {
748 head uintptr
749 off int64
750 pending uintptr
751 }
752 timer_id int32
753 _ [4]byte
754 locale locale_t
755 killlock [1]int32
756 _ [4]byte
757 dlerror_buf uintptr
758 stdio_locks uintptr
759 canary_at_end uintptr_t
760 dtv_copy uintptr
761} /* alltypes.h:281:9 */
762
763func scanexp(tls *TLS, f uintptr, pok int32) int64 { /* floatscan.c:37:18: */
764 var c int32
765 var x int32
766 var y int64
767 var neg int32 = 0
768
769 c = func() int32 {
770 if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend {
771 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1))))
772 }
773 return X__shgetc(tls, f)
774 }()
775 if c == '+' || c == '-' {
776 neg = Bool32(c == '-')
777 c = func() int32 {
778 if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend {
779 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1))))
780 }
781 return X__shgetc(tls, f)
782 }()
783 if uint32(c-'0') >= 10 && pok != 0 {
784 if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) {
785 (*FILE)(unsafe.Pointer(f)).rpos--
786 } else {
787 }
788 }
789 }
790 if uint32(c-'0') >= 10 {
791 if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) {
792 (*FILE)(unsafe.Pointer(f)).rpos--
793 } else {
794 }
795 return -0x7fffffffffffffff - int64(1)
796 }
797 for x = 0; uint32(c-'0') < 10 && x < 0x7fffffff/10; c = func() int32 {
798 if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend {
799 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1))))
800 }
801 return X__shgetc(tls, f)
802 }() {
803 x = 10*x + c - '0'
804 }
805 for y = int64(x); uint32(c-'0') < 10 && y < 0x7fffffffffffffff/int64(100); c = func() int32 {
806 if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend {
807 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1))))
808 }
809 return X__shgetc(tls, f)
810 }() {
811 y = int64(10)*y + int64(c) - int64('0')
812 }
813 for ; uint32(c-'0') < 10; c = func() int32 {
814 if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend {
815 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1))))
816 }
817 return X__shgetc(tls, f)
818 }() {
819 }
820 if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) {
821 (*FILE)(unsafe.Pointer(f)).rpos--
822 } else {
823 }
824 if neg != 0 {
825 return -y
826 }
827 return y
828}
829
830func decfloat(tls *TLS, f uintptr, c int32, bits int32, emin int32, sign int32, pok int32) float64 { /* floatscan.c:64:20: */
831 bp := tls.Alloc(512)
832 defer tls.Free(512)
833
834 // var x [128]uint32_t at bp, 512
835
836 var i int32
837 var j int32
838 var k int32
839 var a int32
840 var z int32
841 var lrp int64 = int64(0)
842 var dc int64 = int64(0)
843 var e10 int64 = int64(0)
844 var lnz int32 = 0
845 var gotdig int32 = 0
846 var gotrad int32 = 0
847 var rp int32
848 var e2 int32
849 var emax int32 = -emin - bits + 3
850 var denormal int32 = 0
851 var y float64
852 var frac float64 = float64(0)
853 var bias float64 = float64(0)
854
855 j = 0
856 k = 0
857
858 // Don't let leading zeros consume buffer space
859 for ; c == '0'; c = func() int32 {
860 if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend {
861 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1))))
862 }
863 return X__shgetc(tls, f)
864 }() {
865 gotdig = 1
866 }
867 if c == '.' {
868 gotrad = 1
869 for c = func() int32 {
870 if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend {
871 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1))))
872 }
873 return X__shgetc(tls, f)
874 }(); c == '0'; c = func() int32 {
875 if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend {
876 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1))))
877 }
878 return X__shgetc(tls, f)
879 }() {
880 gotdig = 1
881 lrp--
882 }
883 }
884
885 *(*uint32_t)(unsafe.Pointer(bp)) = uint32_t(0)
886 for ; uint32(c-'0') < 10 || c == '.'; c = func() int32 {
887 if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend {
888 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1))))
889 }
890 return X__shgetc(tls, f)
891 }() {
892 if c == '.' {
893 if gotrad != 0 {
894 break
895 }
896 gotrad = 1
897 lrp = dc
898 } else if k < 128-3 {
899 dc++
900 if c != '0' {
901 lnz = int32(dc)
902 }
903 if j != 0 {
904 *(*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')
905 } else {
906 *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) = uint32_t(c - '0')
907 }
908 if PreIncInt32(&j, 1) == 9 {
909 k++
910 j = 0
911 }
912 gotdig = 1
913 } else {
914 dc++
915 if c != '0' {
916 lnz = (128 - 4) * 9
917 *(*uint32_t)(unsafe.Pointer(bp + 124*4)) |= uint32_t(1)
918 }
919 }
920 }
921 if !(gotrad != 0) {
922 lrp = dc
923 }
924
925 if gotdig != 0 && c|32 == 'e' {
926 e10 = scanexp(tls, f, pok)
927 if e10 == -0x7fffffffffffffff-int64(1) {
928 if pok != 0 {
929 if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) {
930 (*FILE)(unsafe.Pointer(f)).rpos--
931 } else {
932 }
933 } else {
934 X__shlim(tls, f, int64(0))
935 return float64(0)
936 }
937 e10 = int64(0)
938 }
939 lrp = lrp + e10
940 } else if c >= 0 {
941 if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) {
942 (*FILE)(unsafe.Pointer(f)).rpos--
943 } else {
944 }
945 }
946 if !(gotdig != 0) {
947 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 22
948 X__shlim(tls, f, int64(0))
949 return float64(0)
950 }
951
952 // Handle zero specially to avoid nasty special cases later
953 if !(int32(*(*uint32_t)(unsafe.Pointer(bp))) != 0) {
954 return float64(sign) * 0.0
955 }
956
957 // Optimize small integers (w/no exponent) and over/under-flow
958 if lrp == dc && dc < int64(10) && (bits > 30 || *(*uint32_t)(unsafe.Pointer(bp))>>bits == uint32_t(0)) {
959 return float64(sign) * float64(*(*uint32_t)(unsafe.Pointer(bp)))
960 }
961 if lrp > int64(-emin/2) {
962 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34
963 return float64(sign) * 1.79769313486231570815e+308 * 1.79769313486231570815e+308
964 }
965 if lrp < int64(emin-2*53) {
966 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34
967 return float64(sign) * 2.22507385850720138309e-308 * 2.22507385850720138309e-308
968 }
969
970 // Align incomplete final B1B digit
971 if j != 0 {
972 for ; j < 9; j++ {
973 *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) *= uint32_t(10)
974 }
975 k++
976 j = 0
977 }
978
979 a = 0
980 z = k
981 e2 = 0
982 rp = int32(lrp)
983
984 // Optimize small to mid-size integers (even in exp. notation)
985 if lnz < 9 && lnz <= rp && rp < 18 {
986 if rp == 9 {
987 return float64(sign) * float64(*(*uint32_t)(unsafe.Pointer(bp)))
988 }
989 if rp < 9 {
990 return float64(sign) * float64(*(*uint32_t)(unsafe.Pointer(bp))) / float64(_sp10s[8-rp])
991 }
992 var bitlim int32 = bits - 3*(rp-9)
993 if bitlim > 30 || *(*uint32_t)(unsafe.Pointer(bp))>>bitlim == uint32_t(0) {
994 return float64(sign) * float64(*(*uint32_t)(unsafe.Pointer(bp))) * float64(_sp10s[rp-10])
995 }
996 }
997
998 // Drop trailing zeros
999 for ; !(int32(*(*uint32_t)(unsafe.Pointer(bp + uintptr(z-1)*4))) != 0); z-- {
1000 }
1001
1002 // Align radix point to B1B digit boundary
1003 if rp%9 != 0 {
1004 var rpm9 int32
1005 if rp >= 0 {
1006 rpm9 = rp % 9
1007 } else {
1008 rpm9 = rp%9 + 9
1009 }
1010 var p10 int32 = _sp10s[8-rpm9]
1011 var carry uint32_t = uint32_t(0)
1012 for k = a; k != z; k++ {
1013 var tmp uint32_t = *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) % uint32_t(p10)
1014 *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) = *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4))/uint32_t(p10) + carry
1015 carry = uint32_t(1000000000/p10) * tmp
1016 if k == a && !(int32(*(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4))) != 0) {
1017 a = (a + 1) & (128 - 1)
1018 rp = rp - 9
1019 }
1020 }
1021 if carry != 0 {
1022 *(*uint32_t)(unsafe.Pointer(bp + uintptr(PostIncInt32(&z, 1))*4)) = carry
1023 }
1024 rp = rp + (9 - rpm9)
1025 }
1026
1027 // Upscale until desired number of bits are left of radix point
1028 for rp < 9*2 || rp == 9*2 && *(*uint32_t)(unsafe.Pointer(bp + uintptr(a)*4)) < _sth[0] {
1029 var carry uint32_t = uint32_t(0)
1030 e2 = e2 - 29
1031 for k = (z - 1) & (128 - 1); ; k = (k - 1) & (128 - 1) {
1032 var tmp uint64_t = uint64_t(*(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)))<<29 + uint64_t(carry)
1033 if tmp > uint64(1000000000) {
1034 carry = uint32_t(tmp / uint64(1000000000))
1035 *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) = uint32_t(tmp % uint64(1000000000))
1036 } else {
1037 carry = uint32_t(0)
1038 *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) = uint32_t(tmp)
1039 }
1040 if k == (z-1)&(128-1) && k != a && !(int32(*(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4))) != 0) {
1041 z = k
1042 }
1043 if k == a {
1044 break
1045 }
1046 }
1047 if carry != 0 {
1048 rp = rp + 9
1049 a = (a - 1) & (128 - 1)
1050 if a == z {
1051 z = (z - 1) & (128 - 1)
1052 *(*uint32_t)(unsafe.Pointer(bp + uintptr((z-1)&(128-1))*4)) |= *(*uint32_t)(unsafe.Pointer(bp + uintptr(z)*4))
1053 }
1054 *(*uint32_t)(unsafe.Pointer(bp + uintptr(a)*4)) = carry
1055 }
1056 }
1057
1058 // Downscale until exactly number of bits are left of radix point
1059 for {
1060 var carry uint32_t = uint32_t(0)
1061 var sh int32 = 1
1062 for i = 0; i < 2; i++ {
1063 k = (a + i) & (128 - 1)
1064 if k == z || *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) < _sth[i] {
1065 i = 2
1066 break
1067 }
1068 if *(*uint32_t)(unsafe.Pointer(bp + uintptr((a+i)&(128-1))*4)) > _sth[i] {
1069 break
1070 }
1071 }
1072 if i == 2 && rp == 9*2 {
1073 break
1074 }
1075 // FIXME: find a way to compute optimal sh
1076 if rp > 9+9*2 {
1077 sh = 9
1078 }
1079 e2 = e2 + sh
1080 for k = a; k != z; k = (k + 1) & (128 - 1) {
1081 var tmp uint32_t = *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) & uint32_t(int32(1)<<sh-1)
1082 *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) = *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4))>>sh + carry
1083 carry = uint32_t(int32(1000000000)>>sh) * tmp
1084 if k == a && !(int32(*(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4))) != 0) {
1085 a = (a + 1) & (128 - 1)
1086 i--
1087 rp = rp - 9
1088 }
1089 }
1090 if carry != 0 {
1091 if (z+1)&(128-1) != a {
1092 *(*uint32_t)(unsafe.Pointer(bp + uintptr(z)*4)) = carry
1093 z = (z + 1) & (128 - 1)
1094 } else {
1095 *(*uint32_t)(unsafe.Pointer(bp + uintptr((z-1)&(128-1))*4)) |= uint32_t(1)
1096 }
1097 }
1098 }
1099
1100 // Assemble desired bits into floating point variable
1101 for y = float64(AssignInt32(&i, 0)); i < 2; i++ {
1102 if (a+i)&(128-1) == z {
1103 *(*uint32_t)(unsafe.Pointer(bp + uintptr(AssignInt32(&z, (z+1)&(128-1))-1)*4)) = uint32_t(0)
1104 }
1105 y = 1000000000.0*y + float64(*(*uint32_t)(unsafe.Pointer(bp + uintptr((a+i)&(128-1))*4)))
1106 }
1107
1108 y = y * float64(sign)
1109
1110 // Limit precision for denormal results
1111 if bits > 53+e2-emin {
1112 bits = 53 + e2 - emin
1113 if bits < 0 {
1114 bits = 0
1115 }
1116 denormal = 1
1117 }
1118
1119 // Calculate bias term to force rounding, move out lower bits
1120 if bits < 53 {
1121 bias = Xcopysignl(tls, Xscalbn(tls, float64(1), 2*53-bits-1), y)
1122 frac = Xfmodl(tls, y, Xscalbn(tls, float64(1), 53-bits))
1123 y = y - frac
1124 y = y + bias
1125 }
1126
1127 // Process tail of decimal input so it can affect rounding
1128 if (a+i)&(128-1) != z {
1129 var t uint32_t = *(*uint32_t)(unsafe.Pointer(bp + uintptr((a+i)&(128-1))*4))
1130 if t < uint32_t(500000000) && (t != 0 || (a+i+1)&(128-1) != z) {
1131 frac = frac + 0.25*float64(sign)
1132 } else if t > uint32_t(500000000) {
1133 frac = frac + 0.75*float64(sign)
1134 } else if t == uint32_t(500000000) {
1135 if (a+i+1)&(128-1) == z {
1136 frac = frac + 0.5*float64(sign)
1137 } else {
1138 frac = frac + 0.75*float64(sign)
1139 }
1140 }
1141 if 53-bits >= 2 && !(Xfmodl(tls, frac, float64(1)) != 0) {
1142 frac += 1
1143 }
1144 }
1145
1146 y = y + frac
1147 y = y - bias
1148
1149 if (e2+53)&0x7fffffff > emax-5 {
1150 if Xfabsl(tls, y) >= float64(float64(2))/2.22044604925031308085e-16 {
1151 if denormal != 0 && bits == 53+e2-emin {
1152 denormal = 0
1153 }
1154 y = y * 0.5
1155 e2++
1156 }
1157 if e2+53 > emax || denormal != 0 && frac != 0 {
1158 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34
1159 }
1160 }
1161
1162 return Xscalbnl(tls, y, e2)
1163}
1164
1165var _sth = [2]uint32_t{uint32_t(9007199), uint32_t(254740991)} /* floatscan.c:67:24 */
1166var _sp10s = [8]int32{10, 100, 1000, 10000,
1167 100000, 1000000, 10000000, 100000000} /* floatscan.c:80:19 */
1168
1169func hexfloat(tls *TLS, f uintptr, bits int32, emin int32, sign int32, pok int32) float64 { /* floatscan.c:315:20: */
1170 var x uint32_t = uint32_t(0)
1171 var y float64 = float64(0)
1172 var scale float64 = float64(1)
1173 var bias float64 = float64(0)
1174 var gottail int32 = 0
1175 var gotrad int32 = 0
1176 var gotdig int32 = 0
1177 var rp int64 = int64(0)
1178 var dc int64 = int64(0)
1179 var e2 int64 = int64(0)
1180 var d int32
1181 var c int32
1182
1183 c = func() int32 {
1184 if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend {
1185 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1))))
1186 }
1187 return X__shgetc(tls, f)
1188 }()
1189
1190 // Skip leading zeros
1191 for ; c == '0'; c = func() int32 {
1192 if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend {
1193 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1))))
1194 }
1195 return X__shgetc(tls, f)
1196 }() {
1197 gotdig = 1
1198 }
1199
1200 if c == '.' {
1201 gotrad = 1
1202 c = func() int32 {
1203 if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend {
1204 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1))))
1205 }
1206 return X__shgetc(tls, f)
1207 }()
1208 // Count zeros after the radix point before significand
1209 rp = int64(0)
1210 __1:
1211 if !(c == '0') {
1212 goto __3
1213 }
1214 gotdig = 1
1215 goto __2
1216 __2:
1217 c = func() int32 {
1218 if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend {
1219 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1))))
1220 }
1221 return X__shgetc(tls, f)
1222 }()
1223 rp--
1224 goto __1
1225 goto __3
1226 __3:
1227 }
1228
1229 for ; uint32(c-'0') < 10 || uint32(c|32-'a') < 6 || c == '.'; c = func() int32 {
1230 if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend {
1231 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1))))
1232 }
1233 return X__shgetc(tls, f)
1234 }() {
1235 if c == '.' {
1236 if gotrad != 0 {
1237 break
1238 }
1239 rp = dc
1240 gotrad = 1
1241 } else {
1242 gotdig = 1
1243 if c > '9' {
1244 d = c | 32 + 10 - 'a'
1245 } else {
1246 d = c - '0'
1247 }
1248 if dc < int64(8) {
1249 x = x*uint32_t(16) + uint32_t(d)
1250 } else if dc < int64(53/4+1) {
1251 y = y + float64(d)*AssignDivFloat64(&scale, float64(16))
1252 } else if d != 0 && !(gottail != 0) {
1253 y = y + 0.5*scale
1254 gottail = 1
1255 }
1256 dc++
1257 }
1258 }
1259 if !(gotdig != 0) {
1260 if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) {
1261 (*FILE)(unsafe.Pointer(f)).rpos--
1262 } else {
1263 }
1264 if pok != 0 {
1265 if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) {
1266 (*FILE)(unsafe.Pointer(f)).rpos--
1267 } else {
1268 }
1269 if gotrad != 0 {
1270 if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) {
1271 (*FILE)(unsafe.Pointer(f)).rpos--
1272 } else {
1273 }
1274 }
1275 } else {
1276 X__shlim(tls, f, int64(0))
1277 }
1278 return float64(sign) * 0.0
1279 }
1280 if !(gotrad != 0) {
1281 rp = dc
1282 }
1283 for dc < int64(8) {
1284 x = x * uint32_t(16)
1285 dc++
1286 }
1287 if c|32 == 'p' {
1288 e2 = scanexp(tls, f, pok)
1289 if e2 == -0x7fffffffffffffff-int64(1) {
1290 if pok != 0 {
1291 if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) {
1292 (*FILE)(unsafe.Pointer(f)).rpos--
1293 } else {
1294 }
1295 } else {
1296 X__shlim(tls, f, int64(0))
1297 return float64(0)
1298 }
1299 e2 = int64(0)
1300 }
1301 } else {
1302 if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) {
1303 (*FILE)(unsafe.Pointer(f)).rpos--
1304 } else {
1305 }
1306 }
1307 e2 = e2 + (int64(4)*rp - int64(32))
1308
1309 if !(x != 0) {
1310 return float64(sign) * 0.0
1311 }
1312 if e2 > int64(-emin) {
1313 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34
1314 return float64(sign) * 1.79769313486231570815e+308 * 1.79769313486231570815e+308
1315 }
1316 if e2 < int64(emin-2*53) {
1317 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34
1318 return float64(sign) * 2.22507385850720138309e-308 * 2.22507385850720138309e-308
1319 }
1320
1321 for x < 0x80000000 {
1322 if y >= 0.5 {
1323 x = x + (x + uint32_t(1))
1324 y = y + (y - float64(1))
1325 } else {
1326 x = x + x
1327 y = y + y
1328 }
1329 e2--
1330 }
1331
1332 if int64(bits) > int64(32)+e2-int64(emin) {
1333 bits = int32(int64(32) + e2 - int64(emin))
1334 if bits < 0 {
1335 bits = 0
1336 }
1337 }
1338
1339 if bits < 53 {
1340 bias = Xcopysignl(tls, Xscalbn(tls, float64(1), 32+53-bits-1), float64(sign))
1341 }
1342
1343 if bits < 32 && y != 0 && !(x&uint32_t(1) != 0) {
1344 x++
1345 y = float64(0)
1346 }
1347
1348 y = bias + float64(sign)*float64(x) + float64(sign)*y
1349 y = y - bias
1350
1351 if !(y != 0) {
1352 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34
1353 }
1354
1355 return Xscalbnl(tls, y, int32(e2))
1356}
1357
1358func X__floatscan(tls *TLS, f uintptr, prec int32, pok int32) float64 { /* floatscan.c:427:13: */
1359 var sign int32 = 1
1360 var i size_t
1361 var bits int32
1362 var emin int32
1363 var c int32
1364
1365 switch prec {
1366 case 0:
1367 bits = 24
1368 emin = -125 - bits
1369 break
1370 case 1:
1371 bits = 53
1372 emin = -1021 - bits
1373 break
1374 case 2:
1375 bits = 53
1376 emin = -1021 - bits
1377 break
1378 default:
1379 return float64(0)
1380 }
1381
1382 for __isspace(tls, AssignInt32(&c, func() int32 {
1383 if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend {
1384 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1))))
1385 }
1386 return X__shgetc(tls, f)
1387 }())) != 0 {
1388 }
1389
1390 if c == '+' || c == '-' {
1391 sign = sign - 2*Bool32(c == '-')
1392 c = func() int32 {
1393 if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend {
1394 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1))))
1395 }
1396 return X__shgetc(tls, f)
1397 }()
1398 }
1399
1400 for i = uint64(0); i < uint64(8) && c|32 == int32(*(*uint8)(unsafe.Pointer(ts /* "infinity" */ + uintptr(i)))); i++ {
1401 if i < uint64(7) {
1402 c = func() int32 {
1403 if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend {
1404 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1))))
1405 }
1406 return X__shgetc(tls, f)
1407 }()
1408 }
1409 }
1410 if i == uint64(3) || i == uint64(8) || i > uint64(3) && pok != 0 {
1411 if i != uint64(8) {
1412 if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) {
1413 (*FILE)(unsafe.Pointer(f)).rpos--
1414 } else {
1415 }
1416 if pok != 0 {
1417 for ; i > uint64(3); i-- {
1418 if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) {
1419 (*FILE)(unsafe.Pointer(f)).rpos--
1420 } else {
1421 }
1422 }
1423 }
1424 }
1425 return float64(float32(sign) * X__builtin_inff(tls))
1426 }
1427 if !(i != 0) {
1428 for i = uint64(0); i < uint64(3) && c|32 == int32(*(*uint8)(unsafe.Pointer(ts + 9 /* "nan" */ + uintptr(i)))); i++ {
1429 if i < uint64(2) {
1430 c = func() int32 {
1431 if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend {
1432 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1))))
1433 }
1434 return X__shgetc(tls, f)
1435 }()
1436 }
1437 }
1438 }
1439 if i == uint64(3) {
1440 if func() int32 {
1441 if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend {
1442 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1))))
1443 }
1444 return X__shgetc(tls, f)
1445 }() != '(' {
1446 if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) {
1447 (*FILE)(unsafe.Pointer(f)).rpos--
1448 } else {
1449 }
1450 return float64(X__builtin_nanf(tls, ts+13))
1451 }
1452 for i = uint64(1); ; i++ {
1453 c = func() int32 {
1454 if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend {
1455 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1))))
1456 }
1457 return X__shgetc(tls, f)
1458 }()
1459 if uint32(c-'0') < 10 || uint32(c-'A') < 26 || uint32(c-'a') < 26 || c == '_' {
1460 continue
1461 }
1462 if c == ')' {
1463 return float64(X__builtin_nanf(tls, ts+13))
1464 }
1465 if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) {
1466 (*FILE)(unsafe.Pointer(f)).rpos--
1467 } else {
1468 }
1469 if !(pok != 0) {
1470 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 22
1471 X__shlim(tls, f, int64(0))
1472 return float64(0)
1473 }
1474 for PostDecUint64(&i, 1) != 0 {
1475 if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) {
1476 (*FILE)(unsafe.Pointer(f)).rpos--
1477 } else {
1478 }
1479 }
1480 return float64(X__builtin_nanf(tls, ts+13))
1481 }
1482 return float64(X__builtin_nanf(tls, ts+13))
1483 }
1484
1485 if i != 0 {
1486 if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) {
1487 (*FILE)(unsafe.Pointer(f)).rpos--
1488 } else {
1489 }
1490 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 22
1491 X__shlim(tls, f, int64(0))
1492 return float64(0)
1493 }
1494
1495 if c == '0' {
1496 c = func() int32 {
1497 if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend {
1498 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1))))
1499 }
1500 return X__shgetc(tls, f)
1501 }()
1502 if c|32 == 'x' {
1503 return hexfloat(tls, f, bits, emin, sign, pok)
1504 }
1505 if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) {
1506 (*FILE)(unsafe.Pointer(f)).rpos--
1507 } else {
1508 }
1509 c = '0'
1510 }
1511
1512 return decfloat(tls, f, c, bits, emin, sign, pok)
1513}
1514
1515// Lookup table for digit values. -1==255>=36 -> invalid
1516var table1 = [257]uint8{Uint8FromInt32(-1),
1517 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),
1518 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),
1519 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),
1520 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),
1521 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),
1522 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),
1523 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),
1524 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),
1525 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),
1526 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),
1527 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),
1528 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),
1529 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),
1530 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),
1531 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),
1532 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),
1533} /* intscan.c:7:28 */
1534
1535func X__intscan(tls *TLS, f uintptr, base uint32, pok int32, lim uint64) uint64 { /* intscan.c:26:20: */
1536 var val uintptr
1537 var c int32
1538 var neg int32
1539 var x uint32
1540 var y uint64
1541 var bs int32
1542 val = uintptr(unsafe.Pointer(&table1)) + uintptr(1)
1543 neg = 0
1544 if !(base > uint32(36) || base == uint32(1)) {
1545 goto __1
1546 }
1547 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 22
1548 return uint64(0)
1549__1:
1550 ;
1551__2:
1552 if !(__isspace(tls, AssignInt32(&c, func() int32 {
1553 if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend {
1554 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1))))
1555 }
1556 return X__shgetc(tls, f)
1557 }())) != 0) {
1558 goto __3
1559 }
1560 goto __2
1561__3:
1562 ;
1563 if !(c == '+' || c == '-') {
1564 goto __4
1565 }
1566 neg = -Bool32(c == '-')
1567 c = func() int32 {
1568 if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend {
1569 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1))))
1570 }
1571 return X__shgetc(tls, f)
1572 }()
1573__4:
1574 ;
1575 if !((base == uint32(0) || base == uint32(16)) && c == '0') {
1576 goto __5
1577 }
1578 c = func() int32 {
1579 if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend {
1580 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1))))
1581 }
1582 return X__shgetc(tls, f)
1583 }()
1584 if !(c|32 == 'x') {
1585 goto __7
1586 }
1587 c = func() int32 {
1588 if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend {
1589 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1))))
1590 }
1591 return X__shgetc(tls, f)
1592 }()
1593 if !(int32(*(*uint8)(unsafe.Pointer(val + uintptr(c)))) >= 16) {
1594 goto __9
1595 }
1596 if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) {
1597 (*FILE)(unsafe.Pointer(f)).rpos--
1598 } else {
1599 }
1600 if !(pok != 0) {
1601 goto __10
1602 }
1603 if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) {
1604 (*FILE)(unsafe.Pointer(f)).rpos--
1605 } else {
1606 }
1607 goto __11
1608__10:
1609 X__shlim(tls, f, int64(0))
1610__11:
1611 ;
1612 return uint64(0)
1613__9:
1614 ;
1615 base = uint32(16)
1616 goto __8
1617__7:
1618 if !(base == uint32(0)) {
1619 goto __12
1620 }
1621 base = uint32(8)
1622__12:
1623 ;
1624__8:
1625 ;
1626 goto __6
1627__5:
1628 if !(base == uint32(0)) {
1629 goto __13
1630 }
1631 base = uint32(10)
1632__13:
1633 ;
1634 if !(uint32(*(*uint8)(unsafe.Pointer(val + uintptr(c)))) >= base) {
1635 goto __14
1636 }
1637 if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) {
1638 (*FILE)(unsafe.Pointer(f)).rpos--
1639 } else {
1640 }
1641 X__shlim(tls, f, int64(0))
1642 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 22
1643 return uint64(0)
1644__14:
1645 ;
1646__6:
1647 ;
1648 if !(base == uint32(10)) {
1649 goto __15
1650 }
1651 x = uint32(0)
1652__17:
1653 if !(uint32(c-'0') < 10 && x <= 0xffffffff/uint32(10)-uint32(1)) {
1654 goto __19
1655 }
1656 x = x*uint32(10) + uint32(c-'0')
1657 goto __18
1658__18:
1659 c = func() int32 {
1660 if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend {
1661 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1))))
1662 }
1663 return X__shgetc(tls, f)
1664 }()
1665 goto __17
1666 goto __19
1667__19:
1668 ;
1669 y = uint64(x)
1670__20:
1671 if !(uint32(c-'0') < 10 && y <= (2*uint64(0x7fffffffffffffff)+uint64(1))/uint64(10) && uint64(10)*y <= 2*uint64(0x7fffffffffffffff)+uint64(1)-uint64(c-'0')) {
1672 goto __22
1673 }
1674 y = y*uint64(10) + uint64(c-'0')
1675 goto __21
1676__21:
1677 c = func() int32 {
1678 if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend {
1679 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1))))
1680 }
1681 return X__shgetc(tls, f)
1682 }()
1683 goto __20
1684 goto __22
1685__22:
1686 ;
1687 if !(uint32(c-'0') >= 10) {
1688 goto __23
1689 }
1690 goto done
1691__23:
1692 ;
1693 goto __16
1694__15:
1695 if !!(base&(base-uint32(1)) != 0) {
1696 goto __24
1697 }
1698 bs = int32(*(*uint8)(unsafe.Pointer(ts + 14 + uintptr(uint32(0x17)*base>>5&uint32(7)))))
1699 x = uint32(0)
1700__26:
1701 if !(uint32(*(*uint8)(unsafe.Pointer(val + uintptr(c)))) < base && x <= 0xffffffff/uint32(32)) {
1702 goto __28
1703 }
1704 x = x<<bs | uint32(*(*uint8)(unsafe.Pointer(val + uintptr(c))))
1705 goto __27
1706__27:
1707 c = func() int32 {
1708 if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend {
1709 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1))))
1710 }
1711 return X__shgetc(tls, f)
1712 }()
1713 goto __26
1714 goto __28
1715__28:
1716 ;
1717 y = uint64(x)
1718__29:
1719 if !(uint32(*(*uint8)(unsafe.Pointer(val + uintptr(c)))) < base && y <= uint64(2*uint64(0x7fffffffffffffff)+uint64(1))>>bs) {
1720 goto __31
1721 }
1722 y = y<<bs | uint64(*(*uint8)(unsafe.Pointer(val + uintptr(c))))
1723 goto __30
1724__30:
1725 c = func() int32 {
1726 if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend {
1727 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1))))
1728 }
1729 return X__shgetc(tls, f)
1730 }()
1731 goto __29
1732 goto __31
1733__31:
1734 ;
1735 goto __25
1736__24:
1737 x = uint32(0)
1738__32:
1739 if !(uint32(*(*uint8)(unsafe.Pointer(val + uintptr(c)))) < base && x <= 0xffffffff/uint32(36)-uint32(1)) {
1740 goto __34
1741 }
1742 x = x*base + uint32(*(*uint8)(unsafe.Pointer(val + uintptr(c))))
1743 goto __33
1744__33:
1745 c = func() int32 {
1746 if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend {
1747 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1))))
1748 }
1749 return X__shgetc(tls, f)
1750 }()
1751 goto __32
1752 goto __34
1753__34:
1754 ;
1755 y = uint64(x)
1756__35:
1757 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))))) {
1758 goto __37
1759 }
1760 y = y*uint64(base) + uint64(*(*uint8)(unsafe.Pointer(val + uintptr(c))))
1761 goto __36
1762__36:
1763 c = func() int32 {
1764 if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend {
1765 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1))))
1766 }
1767 return X__shgetc(tls, f)
1768 }()
1769 goto __35
1770 goto __37
1771__37:
1772 ;
1773__25:
1774 ;
1775__16:
1776 ;
1777 if !(uint32(*(*uint8)(unsafe.Pointer(val + uintptr(c)))) < base) {
1778 goto __38
1779 }
1780__39:
1781 if !(uint32(*(*uint8)(unsafe.Pointer(val + uintptr(c)))) < base) {
1782 goto __41
1783 }
1784 goto __40
1785__40:
1786 c = func() int32 {
1787 if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend {
1788 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1))))
1789 }
1790 return X__shgetc(tls, f)
1791 }()
1792 goto __39
1793 goto __41
1794__41:
1795 ;
1796 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34
1797 y = lim
1798 if !(lim&uint64(1) != 0) {
1799 goto __42
1800 }
1801 neg = 0
1802__42:
1803 ;
1804__38:
1805 ;
1806done:
1807 if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) {
1808 (*FILE)(unsafe.Pointer(f)).rpos--
1809 } else {
1810 }
1811 if !(y >= lim) {
1812 goto __43
1813 }
1814 if !(!(lim&uint64(1) != 0) && !(neg != 0)) {
1815 goto __44
1816 }
1817 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34
1818 return lim - uint64(1)
1819 goto __45
1820__44:
1821 if !(y > lim) {
1822 goto __46
1823 }
1824 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34
1825 return lim
1826__46:
1827 ;
1828__45:
1829 ;
1830__43:
1831 ;
1832 return y ^ uint64(neg) - uint64(neg)
1833}
1834
1835// The shcnt field stores the number of bytes read so far, offset by
1836// the value of buf-rpos at the last function call (__shlim or __shgetc),
1837// so that between calls the inline shcnt macro can add rpos-buf to get
1838// the actual count.
1839
1840func X__shlim(tls *TLS, f uintptr, lim off_t) { /* shgetc.c:8:6: */
1841 (*FILE)(unsafe.Pointer(f)).shlim = lim
1842 (*FILE)(unsafe.Pointer(f)).shcnt = (int64((*FILE)(unsafe.Pointer(f)).buf) - int64((*FILE)(unsafe.Pointer(f)).rpos)) / 1
1843 // If lim is nonzero, rend must be a valid pointer.
1844 if lim != 0 && (int64((*FILE)(unsafe.Pointer(f)).rend)-int64((*FILE)(unsafe.Pointer(f)).rpos))/1 > lim {
1845 (*FILE)(unsafe.Pointer(f)).shend = (*FILE)(unsafe.Pointer(f)).rpos + uintptr(lim)
1846 } else {
1847 (*FILE)(unsafe.Pointer(f)).shend = (*FILE)(unsafe.Pointer(f)).rend
1848 }
1849}
1850
1851func X__shgetc(tls *TLS, f uintptr) int32 { /* shgetc.c:19:5: */
1852 var c int32
1853 var cnt off_t = (*FILE)(unsafe.Pointer(f)).shcnt + (int64((*FILE)(unsafe.Pointer(f)).rpos)-int64((*FILE)(unsafe.Pointer(f)).buf))/1
1854 if (*FILE)(unsafe.Pointer(f)).shlim != 0 && cnt >= (*FILE)(unsafe.Pointer(f)).shlim || AssignInt32(&c, X__uflow(tls, f)) < 0 {
1855 (*FILE)(unsafe.Pointer(f)).shcnt = (int64((*FILE)(unsafe.Pointer(f)).buf)-int64((*FILE)(unsafe.Pointer(f)).rpos))/1 + cnt
1856 (*FILE)(unsafe.Pointer(f)).shend = (*FILE)(unsafe.Pointer(f)).rpos
1857 (*FILE)(unsafe.Pointer(f)).shlim = int64(-1)
1858 return -1
1859 }
1860 cnt++
1861 if (*FILE)(unsafe.Pointer(f)).shlim != 0 && (int64((*FILE)(unsafe.Pointer(f)).rend)-int64((*FILE)(unsafe.Pointer(f)).rpos))/1 > (*FILE)(unsafe.Pointer(f)).shlim-cnt {
1862 (*FILE)(unsafe.Pointer(f)).shend = (*FILE)(unsafe.Pointer(f)).rpos + uintptr((*FILE)(unsafe.Pointer(f)).shlim-cnt)
1863 } else {
1864 (*FILE)(unsafe.Pointer(f)).shend = (*FILE)(unsafe.Pointer(f)).rend
1865 }
1866 (*FILE)(unsafe.Pointer(f)).shcnt = (int64((*FILE)(unsafe.Pointer(f)).buf)-int64((*FILE)(unsafe.Pointer(f)).rpos))/1 + cnt
1867 if (*FILE)(unsafe.Pointer(f)).rpos <= (*FILE)(unsafe.Pointer(f)).buf {
1868 *(*uint8)(unsafe.Pointer((*FILE)(unsafe.Pointer(f)).rpos + UintptrFromInt32(-1))) = uint8(c)
1869 }
1870 return c
1871}
1872
1873type lconv = struct {
1874 decimal_point uintptr
1875 thousands_sep uintptr
1876 grouping uintptr
1877 int_curr_symbol uintptr
1878 currency_symbol uintptr
1879 mon_decimal_point uintptr
1880 mon_thousands_sep uintptr
1881 mon_grouping uintptr
1882 positive_sign uintptr
1883 negative_sign uintptr
1884 int_frac_digits uint8
1885 frac_digits uint8
1886 p_cs_precedes uint8
1887 p_sep_by_space uint8
1888 n_cs_precedes uint8
1889 n_sep_by_space uint8
1890 p_sign_posn uint8
1891 n_sign_posn uint8
1892 int_p_cs_precedes uint8
1893 int_p_sep_by_space uint8
1894 int_n_cs_precedes uint8
1895 int_n_sep_by_space uint8
1896 int_p_sign_posn uint8
1897 int_n_sign_posn uint8
1898 _ [2]byte
1899} /* locale.h:24:1 */
1900
1901// Support signed or unsigned plain-char
1902
1903// Implementation choices...
1904
1905// Arbitrary numbers...
1906
1907// POSIX/SUS requirements follow. These numbers come directly
1908// from SUS and have nothing to do with the host system.
1909
1910var posix_lconv = lconv{decimal_point: ts + 23, thousands_sep: ts + 13, grouping: ts + 13, int_curr_symbol: ts + 13, currency_symbol: ts + 13, mon_decimal_point: ts + 13, mon_thousands_sep: ts + 13, mon_grouping: ts + 13, positive_sign: ts + 13, negative_sign: ts + 13, int_frac_digits: uint8(255), frac_digits: uint8(255), p_cs_precedes: uint8(255), p_sep_by_space: uint8(255), n_cs_precedes: uint8(255), n_sep_by_space: uint8(255), p_sign_posn: uint8(255), n_sign_posn: uint8(255), int_p_cs_precedes: uint8(255), int_p_sep_by_space: uint8(255), int_n_cs_precedes: uint8(255), int_n_sep_by_space: uint8(255), int_p_sign_posn: uint8(255), int_n_sign_posn: uint8(255)} /* localeconv.c:4:27 */
1911
1912func Xlocaleconv(tls *TLS) uintptr { /* localeconv.c:31:14: */
1913 return uintptr(unsafe.Pointer(&posix_lconv))
1914}
1915
1916func X__fpclassify(tls *TLS, x float64) int32 { /* __fpclassify.c:4:5: */
1917 bp := tls.Alloc(8)
1918 defer tls.Free(8)
1919
1920 *(*struct{ f float64 })(unsafe.Pointer(bp)) = func() (r struct{ f float64 }) {
1921 *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&r)) + 0)) = x
1922 return r
1923 }()
1924 var e int32 = int32(*(*uint64_t)(unsafe.Pointer(bp)) >> 52 & uint64(0x7ff))
1925 if !(e != 0) {
1926 if *(*uint64_t)(unsafe.Pointer(bp))<<1 != 0 {
1927 return 3
1928 }
1929 return 2
1930 }
1931 if e == 0x7ff {
1932 if *(*uint64_t)(unsafe.Pointer(bp))<<12 != 0 {
1933 return 0
1934 }
1935 return 1
1936 }
1937 return 4
1938}
1939
1940func X__fpclassifyf(tls *TLS, x float32) int32 { /* __fpclassifyf.c:4:5: */
1941 bp := tls.Alloc(4)
1942 defer tls.Free(4)
1943
1944 *(*struct{ f float32 })(unsafe.Pointer(bp)) = func() (r struct{ f float32 }) {
1945 *(*float32)(unsafe.Pointer(uintptr(unsafe.Pointer(&r)) + 0)) = x
1946 return r
1947 }()
1948 var e int32 = int32(*(*uint32_t)(unsafe.Pointer(bp)) >> 23 & uint32_t(0xff))
1949 if !(e != 0) {
1950 if *(*uint32_t)(unsafe.Pointer(bp))<<1 != 0 {
1951 return 3
1952 }
1953 return 2
1954 }
1955 if e == 0xff {
1956 if *(*uint32_t)(unsafe.Pointer(bp))<<9 != 0 {
1957 return 0
1958 }
1959 return 1
1960 }
1961 return 4
1962}
1963
1964func X__fpclassifyl(tls *TLS, x float64) int32 { /* __fpclassifyl.c:4:5: */
1965 return X__fpclassify(tls, x)
1966}
1967
1968func Xcopysignl(tls *TLS, x float64, y float64) float64 { /* copysignl.c:4:13: */
1969 return Xcopysign(tls, x, y)
1970}
1971
1972func Xfabsl(tls *TLS, x float64) float64 { /* fabsl.c:3:13: */
1973 return Xfabs(tls, x)
1974}
1975
1976func Xfmodl(tls *TLS, x float64, y float64) float64 { /* fmodl.c:4:13: */
1977 return Xfmod(tls, x, y)
1978}
1979
1980func Xnanf(tls *TLS, s uintptr) float32 { /* nanf.c:3:7: */
1981 return X__builtin_nanf(tls, ts+13)
1982}
1983
1984var toint double_t = float64(float64(1)) / 2.22044604925031308085e-16 /* rint.c:10:23 */
1985
1986func Xrint(tls *TLS, x float64) float64 { /* rint.c:12:8: */
1987 bp := tls.Alloc(8)
1988 defer tls.Free(8)
1989
1990 *(*struct{ f float64 })(unsafe.Pointer(bp)) = func() (r struct{ f float64 }) {
1991 *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&r)) + 0)) = x
1992 return r
1993 }()
1994 var e int32 = int32(*(*uint64_t)(unsafe.Pointer(bp)) >> 52 & uint64(0x7ff))
1995 var s int32 = int32(*(*uint64_t)(unsafe.Pointer(bp)) >> 63)
1996 var y double_t
1997
1998 if e >= 0x3ff+52 {
1999 return x
2000 }
2001 if s != 0 {
2002 y = x - toint + toint
2003 } else {
2004 y = x + toint - toint
2005 }
2006 if y == float64(0) {
2007 if s != 0 {
2008 return -Float64FromFloat64(0.0)
2009 }
2010 return float64(0)
2011 }
2012 return y
2013}
2014
2015func Xscalbn(tls *TLS, x float64, n int32) float64 { /* scalbn.c:4:8: */
2016 bp := tls.Alloc(8)
2017 defer tls.Free(8)
2018
2019 // var u struct {f float64;} at bp, 8
2020
2021 var y double_t = x
2022
2023 if n > 1023 {
2024 y = y * 0x1p1023
2025 n = n - 1023
2026 if n > 1023 {
2027 y = y * 0x1p1023
2028 n = n - 1023
2029 if n > 1023 {
2030 n = 1023
2031 }
2032 }
2033 } else if n < -1022 {
2034 // make sure final n < -53 to avoid double
2035 // rounding in the subnormal range
2036 y = y * (float64(0x1p-1022) * 0x1p53)
2037 n = n + (1022 - 53)
2038 if n < -1022 {
2039 y = y * (float64(0x1p-1022) * 0x1p53)
2040 n = n + (1022 - 53)
2041 if n < -1022 {
2042 n = -1022
2043 }
2044 }
2045 }
2046 *(*uint64_t)(unsafe.Pointer(bp)) = uint64_t(0x3ff+n) << 52
2047 x = y * *(*float64)(unsafe.Pointer(bp))
2048 return x
2049}
2050
2051func Xscalbnl(tls *TLS, x float64, n int32) float64 { /* scalbnl.c:4:13: */
2052 return Xscalbn(tls, x, n)
2053}
2054
2055// Support signed or unsigned plain-char
2056
2057// Implementation choices...
2058
2059// Arbitrary numbers...
2060
2061// POSIX/SUS requirements follow. These numbers come directly
2062// from SUS and have nothing to do with the host system.
2063
2064type __locale_map = struct {
2065 __map uintptr
2066 map_size size_t
2067 name [24]uint8
2068 next uintptr
2069} /* alltypes.h:351:9 */
2070
2071type tls_module = struct {
2072 next uintptr
2073 image uintptr
2074 len size_t
2075 size size_t
2076 align size_t
2077 offset size_t
2078} /* libc.h:14:1 */
2079
2080type __libc = struct {
2081 can_do_threads uint8
2082 threaded uint8
2083 secure uint8
2084 need_locks int8
2085 threads_minus_1 int32
2086 auxv uintptr
2087 tls_head uintptr
2088 tls_size size_t
2089 tls_align size_t
2090 tls_cnt size_t
2091 page_size size_t
2092 global_locale struct{ cat [6]uintptr }
2093} /* libc.h:20:1 */
2094
2095type time_t = int64 /* alltypes.h:93:16 */
2096
2097type clockid_t = int32 /* alltypes.h:222:13 */
2098
2099type timespec = struct {
2100 tv_sec time_t
2101 tv_nsec int64
2102} /* alltypes.h:237:1 */
2103
2104type pthread_t = uintptr /* alltypes.h:281:26 */
2105
2106type pthread_once_t = int32 /* alltypes.h:287:13 */
2107
2108type pthread_key_t = uint32 /* alltypes.h:292:18 */
2109
2110type pthread_spinlock_t = int32 /* alltypes.h:297:13 */
2111
2112type pthread_mutexattr_t = struct{ __attr uint32 } /* alltypes.h:302:37 */
2113
2114type pthread_condattr_t = struct{ __attr uint32 } /* alltypes.h:307:37 */
2115
2116type pthread_barrierattr_t = struct{ __attr uint32 } /* alltypes.h:312:37 */
2117
2118type pthread_rwlockattr_t = struct{ __attr [2]uint32 } /* alltypes.h:317:40 */
2119
2120type __sigset_t = struct{ __bits [16]uint64 } /* alltypes.h:357:9 */
2121
2122type sigset_t = __sigset_t /* alltypes.h:357:71 */
2123
2124type pthread_attr_t = struct {
2125 __u struct {
2126 _ [0]uint64
2127 __i [14]int32
2128 }
2129} /* alltypes.h:380:147 */
2130
2131type pthread_mutex_t = struct {
2132 __u struct {
2133 _ [0]uint64
2134 __i [10]int32
2135 }
2136} /* alltypes.h:385:157 */
2137
2138type pthread_cond_t = struct {
2139 __u struct {
2140 _ [0]uint64
2141 __i [12]int32
2142 }
2143} /* alltypes.h:395:112 */
2144
2145type pthread_rwlock_t = struct {
2146 __u struct {
2147 _ [0]uint64
2148 __i [14]int32
2149 }
2150} /* alltypes.h:405:139 */
2151
2152type pthread_barrier_t = struct {
2153 __u struct {
2154 _ [0]uint64
2155 __i [8]int32
2156 }
2157} /* alltypes.h:410:137 */
2158
2159type sched_param = struct {
2160 sched_priority int32
2161 __reserved1 int32
2162 __reserved2 [2]struct {
2163 __reserved1 time_t
2164 __reserved2 int64
2165 }
2166 __reserved3 int32
2167 _ [4]byte
2168} /* sched.h:19:1 */
2169
2170type timer_t = uintptr /* alltypes.h:217:14 */
2171
2172type clock_t = int64 /* alltypes.h:227:14 */
2173
2174type tm = struct {
2175 tm_sec int32
2176 tm_min int32
2177 tm_hour int32
2178 tm_mday int32
2179 tm_mon int32
2180 tm_year int32
2181 tm_wday int32
2182 tm_yday int32
2183 tm_isdst int32
2184 _ [4]byte
2185 tm_gmtoff int64
2186 tm_zone uintptr
2187} /* time.h:38:1 */
2188
2189type itimerspec = struct {
2190 it_interval struct {
2191 tv_sec time_t
2192 tv_nsec int64
2193 }
2194 it_value struct {
2195 tv_sec time_t
2196 tv_nsec int64
2197 }
2198} /* time.h:80:1 */
2199
2200type sigevent = struct {
2201 sigev_value struct {
2202 _ [0]uint64
2203 sival_int int32
2204 _ [4]byte
2205 }
2206 sigev_signo int32
2207 sigev_notify int32
2208 sigev_notify_function uintptr
2209 sigev_notify_attributes uintptr
2210 __pad [32]uint8
2211} /* time.h:107:1 */
2212
2213type __ptcb = struct {
2214 __f uintptr
2215 __x uintptr
2216 __next uintptr
2217} /* alltypes.h:281:9 */
2218
2219type sigaltstack = struct {
2220 ss_sp uintptr
2221 ss_flags int32
2222 _ [4]byte
2223 ss_size size_t
2224} /* signal.h:44:9 */
2225
2226type stack_t = sigaltstack /* signal.h:44:28 */
2227
2228type greg_t = uint64 /* signal.h:10:23 */
2229type gregset_t = [34]uint64 /* signal.h:11:23 */
2230
2231type fpregset_t = struct {
2232 vregs [32]float64
2233 fpsr uint32
2234 fpcr uint32
2235} /* signal.h:17:3 */
2236type sigcontext = struct {
2237 fault_address uint64
2238 regs [31]uint64
2239 sp uint64
2240 pc uint64
2241 pstate uint64
2242 __reserved [256]float64
2243} /* signal.h:18:9 */
2244
2245type mcontext_t = sigcontext /* signal.h:23:3 */
2246
2247type _aarch64_ctx = struct {
2248 magic uint32
2249 size uint32
2250} /* signal.h:29:1 */
2251
2252type fpsimd_context = struct {
2253 head struct {
2254 magic uint32
2255 size uint32
2256 }
2257 fpsr uint32
2258 fpcr uint32
2259 vregs [32]float64
2260} /* signal.h:33:1 */
2261
2262type esr_context = struct {
2263 head struct {
2264 magic uint32
2265 size uint32
2266 }
2267 esr uint64
2268} /* signal.h:39:1 */
2269
2270type extra_context = struct {
2271 head struct {
2272 magic uint32
2273 size uint32
2274 }
2275 datap uint64
2276 size uint32
2277 __reserved [3]uint32
2278} /* signal.h:43:1 */
2279
2280type sve_context = struct {
2281 head struct {
2282 magic uint32
2283 size uint32
2284 }
2285 vl uint16
2286 __reserved [3]uint16
2287} /* signal.h:49:1 */
2288
2289type __ucontext = struct {
2290 uc_flags uint64
2291 uc_link uintptr
2292 uc_stack stack_t
2293 uc_sigmask sigset_t
2294 uc_mcontext mcontext_t
2295} /* signal.h:99:9 */
2296
2297type ucontext_t = __ucontext /* signal.h:105:3 */
2298
2299type sigval = struct {
2300 _ [0]uint64
2301 sival_int int32
2302 _ [4]byte
2303} /* time.h:107:1 */
2304
2305type siginfo_t = struct {
2306 si_signo int32
2307 si_errno int32
2308 si_code int32
2309 _ [4]byte
2310 __si_fields struct {
2311 _ [0]uint64
2312 __pad [112]uint8
2313 }
2314} /* signal.h:145:3 */
2315
2316type sigaction = struct {
2317 __sa_handler struct{ sa_handler uintptr }
2318 sa_mask sigset_t
2319 sa_flags int32
2320 _ [4]byte
2321 sa_restorer uintptr
2322} /* signal.h:167:1 */
2323
2324type sig_t = uintptr /* signal.h:251:14 */
2325
2326type sig_atomic_t = int32 /* signal.h:269:13 */
2327
2328func a_ll(tls *TLS, p uintptr) int32 { /* atomic_arch.h:2:19: */
2329 var v int32
2330 panic(`arch/aarch64/atomic_arch.h:5:2: assembler statements not supported`)
2331 return v
2332}
2333
2334func a_sc(tls *TLS, p uintptr, v int32) int32 { /* atomic_arch.h:10:19: */
2335 var r int32
2336 panic(`arch/aarch64/atomic_arch.h:13:2: assembler statements not supported`)
2337 return BoolInt32(!(r != 0))
2338}
2339
2340func a_barrier(tls *TLS) { /* atomic_arch.h:18:20: */
2341 panic(`arch/aarch64/atomic_arch.h:20:2: assembler statements not supported`)
2342}
2343
2344func a_cas(tls *TLS, p uintptr, t int32, s int32) int32 { /* atomic_arch.h:24:19: */
2345 var old int32
2346 for ok := true; ok; ok = !(a_sc(tls, p, s) != 0) {
2347 old = a_ll(tls, p)
2348 if old != t {
2349 a_barrier(tls)
2350 break
2351 }
2352 }
2353 return old
2354}
2355
2356func a_ll_p(tls *TLS, p uintptr) uintptr { /* atomic_arch.h:38:20: */
2357 var v uintptr
2358 panic(`arch/aarch64/atomic_arch.h:41:2: assembler statements not supported`)
2359 return v
2360}
2361
2362func a_sc_p(tls *TLS, p uintptr, v uintptr) int32 { /* atomic_arch.h:46:19: */
2363 var r int32
2364 panic(`arch/aarch64/atomic_arch.h:49:2: assembler statements not supported`)
2365 return BoolInt32(!(r != 0))
2366}
2367
2368func a_ctz_64(tls *TLS, x uint64_t) int32 { /* atomic_arch.h:68:19: */
2369 panic(`arch/aarch64/atomic_arch.h:70:2: assembler statements not supported`)
2370 return int32(x)
2371}
2372
2373func a_swap(tls *TLS, p uintptr, v int32) int32 { /* atomic.h:33:19: */
2374 var old int32
2375
2376 for ok := true; ok; ok = !(a_sc(tls, p, v) != 0) {
2377 old = a_ll(tls, p)
2378 }
2379
2380 return old
2381}
2382
2383func a_fetch_add(tls *TLS, p uintptr, v int32) int32 { /* atomic.h:46:19: */
2384 var old int32
2385
2386 for ok := true; ok; ok = !(a_sc(tls, p, int32(uint32(old)+uint32(v))) != 0) {
2387 old = a_ll(tls, p)
2388 }
2389
2390 return old
2391}
2392
2393func a_fetch_and(tls *TLS, p uintptr, v int32) int32 { /* atomic.h:59:19: */
2394 var old int32
2395
2396 for ok := true; ok; ok = !(a_sc(tls, p, old&v) != 0) {
2397 old = a_ll(tls, p)
2398 }
2399
2400 return old
2401}
2402
2403func a_fetch_or(tls *TLS, p uintptr, v int32) int32 { /* atomic.h:72:19: */
2404 var old int32
2405
2406 for ok := true; ok; ok = !(a_sc(tls, p, old|v) != 0) {
2407 old = a_ll(tls, p)
2408 }
2409
2410 return old
2411}
2412
2413func a_and(tls *TLS, p uintptr, v int32) { /* atomic.h:151:20: */
2414 a_fetch_and(tls, p, v)
2415}
2416
2417func a_or(tls *TLS, p uintptr, v int32) { /* atomic.h:159:20: */
2418 a_fetch_or(tls, p, v)
2419}
2420
2421func a_or_64(tls *TLS, p uintptr, v uint64_t) { /* atomic.h:220:20: */
2422 bp := tls.Alloc(8)
2423 defer tls.Free(8)
2424
2425 *(*struct{ v uint64_t })(unsafe.Pointer(bp)) = func() (r struct{ v uint64_t }) {
2426 *(*uint64_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&r)) + 0)) = v
2427 return r
2428 }()
2429 if *(*uint32_t)(unsafe.Pointer(bp)) != 0 {
2430 a_or(tls, p, int32(*(*uint32_t)(unsafe.Pointer(bp))))
2431 }
2432 if *(*uint32_t)(unsafe.Pointer(bp + 1*4)) != 0 {
2433 a_or(tls, p+uintptr(1)*4, int32(*(*uint32_t)(unsafe.Pointer(bp + 1*4))))
2434 }
2435}
2436
2437func a_ctz_32(tls *TLS, x uint32_t) int32 { /* atomic.h:256:19: */
2438 return int32(_sdebruijn328[x&-x*uint32_t(0x076be629)>>27])
2439}
2440
2441var _sdebruijn328 = [32]uint8{
2442 uint8(0), uint8(1), uint8(23), uint8(2), uint8(29), uint8(24), uint8(19), uint8(3), uint8(30), uint8(27), uint8(25), uint8(11), uint8(20), uint8(8), uint8(4), uint8(13),
2443 uint8(31), uint8(22), uint8(28), uint8(18), uint8(26), uint8(10), uint8(7), uint8(12), uint8(21), uint8(17), uint8(9), uint8(6), uint8(16), uint8(5), uint8(15), uint8(14),
2444} /* atomic.h:261:20 */
2445
2446type __timer = struct {
2447 timerid int32
2448 _ [4]byte
2449 thread pthread_t
2450} /* pthread_impl.h:64:1 */
2451
2452func __pthread_self(tls *TLS) uintptr { /* pthread_arch.h:1:30: */
2453 var self uintptr
2454 panic(`arch/aarch64/pthread_arch.h:4:2: assembler statements not supported`)
2455 return self - uintptr(uint64(unsafe.Sizeof(__pthread{})))
2456}
2457
2458func __wake(tls *TLS, addr uintptr, cnt int32, priv int32) { /* pthread_impl.h:155:20: */
2459 if priv != 0 {
2460 priv = 128
2461 }
2462 if cnt < 0 {
2463 cnt = 0x7fffffff
2464 }
2465 _ = Bool32(X__syscall3(tls, int64(98), int64(addr), int64(1|priv), int64(cnt)) != int64(-38) || X__syscall3(tls, int64(98), int64(addr), int64(1), int64(cnt)) != 0)
2466}
2467
2468func __futexwait(tls *TLS, addr uintptr, val int32, priv int32) { /* pthread_impl.h:162:20: */
2469 if priv != 0 {
2470 priv = 128
2471 }
2472 _ = Bool32(X__syscall4(tls, int64(98), int64(addr), int64(0|priv), int64(val), int64(0)) != int64(-38) || X__syscall4(tls, int64(98), int64(addr), int64(0), int64(val), int64(0)) != 0)
2473}
2474
2475var X__fsmu8 = [51]uint32_t{
2476 func() uint32 {
2477 if 0x2 < 2 {
2478 return Uint32FromInt32(-1)
2479 }
2480 return func() uint32 {
2481 if Int32(0x80) == Int32(0x80) {
2482 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2483 }
2484 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2485 }()<<23 | uint32_t(0x2)
2486 }(), func() uint32 {
2487 if 0x3 < 2 {
2488 return Uint32FromInt32(-1)
2489 }
2490 return func() uint32 {
2491 if Int32(0x80) == Int32(0x80) {
2492 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2493 }
2494 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2495 }()<<23 | uint32_t(0x3)
2496 }(), func() uint32 {
2497 if 0x4 < 2 {
2498 return Uint32FromInt32(-1)
2499 }
2500 return func() uint32 {
2501 if Int32(0x80) == Int32(0x80) {
2502 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2503 }
2504 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2505 }()<<23 | uint32_t(0x4)
2506 }(), func() uint32 {
2507 if 0x5 < 2 {
2508 return Uint32FromInt32(-1)
2509 }
2510 return func() uint32 {
2511 if Int32(0x80) == Int32(0x80) {
2512 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2513 }
2514 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2515 }()<<23 | uint32_t(0x5)
2516 }(), func() uint32 {
2517 if 0x6 < 2 {
2518 return Uint32FromInt32(-1)
2519 }
2520 return func() uint32 {
2521 if Int32(0x80) == Int32(0x80) {
2522 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2523 }
2524 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2525 }()<<23 | uint32_t(0x6)
2526 }(), func() uint32 {
2527 if 0x7 < 2 {
2528 return Uint32FromInt32(-1)
2529 }
2530 return func() uint32 {
2531 if Int32(0x80) == Int32(0x80) {
2532 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2533 }
2534 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2535 }()<<23 | uint32_t(0x7)
2536 }(),
2537 func() uint32 {
2538 if 0x8 < 2 {
2539 return Uint32FromInt32(-1)
2540 }
2541 return func() uint32 {
2542 if Int32(0x80) == Int32(0x80) {
2543 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2544 }
2545 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2546 }()<<23 | uint32_t(0x8)
2547 }(), func() uint32 {
2548 if 0x9 < 2 {
2549 return Uint32FromInt32(-1)
2550 }
2551 return func() uint32 {
2552 if Int32(0x80) == Int32(0x80) {
2553 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2554 }
2555 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2556 }()<<23 | uint32_t(0x9)
2557 }(), func() uint32 {
2558 if 0xa < 2 {
2559 return Uint32FromInt32(-1)
2560 }
2561 return func() uint32 {
2562 if Int32(0x80) == Int32(0x80) {
2563 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2564 }
2565 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2566 }()<<23 | uint32_t(0xa)
2567 }(), func() uint32 {
2568 if 0xb < 2 {
2569 return Uint32FromInt32(-1)
2570 }
2571 return func() uint32 {
2572 if Int32(0x80) == Int32(0x80) {
2573 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2574 }
2575 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2576 }()<<23 | uint32_t(0xb)
2577 }(), func() uint32 {
2578 if 0xc < 2 {
2579 return Uint32FromInt32(-1)
2580 }
2581 return func() uint32 {
2582 if Int32(0x80) == Int32(0x80) {
2583 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2584 }
2585 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2586 }()<<23 | uint32_t(0xc)
2587 }(), func() uint32 {
2588 if 0xd < 2 {
2589 return Uint32FromInt32(-1)
2590 }
2591 return func() uint32 {
2592 if Int32(0x80) == Int32(0x80) {
2593 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2594 }
2595 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2596 }()<<23 | uint32_t(0xd)
2597 }(), func() uint32 {
2598 if 0xe < 2 {
2599 return Uint32FromInt32(-1)
2600 }
2601 return func() uint32 {
2602 if Int32(0x80) == Int32(0x80) {
2603 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2604 }
2605 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2606 }()<<23 | uint32_t(0xe)
2607 }(), func() uint32 {
2608 if 0xf < 2 {
2609 return Uint32FromInt32(-1)
2610 }
2611 return func() uint32 {
2612 if Int32(0x80) == Int32(0x80) {
2613 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2614 }
2615 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2616 }()<<23 | uint32_t(0xf)
2617 }(),
2618 func() uint32 {
2619 if 0x0+16 < 2 {
2620 return Uint32FromInt32(-1)
2621 }
2622 return func() uint32 {
2623 if Int32(0x80) == Int32(0x80) {
2624 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2625 }
2626 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2627 }()<<23 | uint32_t(0x0+16)
2628 }(), func() uint32 {
2629 if 0x1+16 < 2 {
2630 return Uint32FromInt32(-1)
2631 }
2632 return func() uint32 {
2633 if Int32(0x80) == Int32(0x80) {
2634 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2635 }
2636 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2637 }()<<23 | uint32_t(0x1+16)
2638 }(), func() uint32 {
2639 if 0x2+16 < 2 {
2640 return Uint32FromInt32(-1)
2641 }
2642 return func() uint32 {
2643 if Int32(0x80) == Int32(0x80) {
2644 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2645 }
2646 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2647 }()<<23 | uint32_t(0x2+16)
2648 }(), func() uint32 {
2649 if 0x3+16 < 2 {
2650 return Uint32FromInt32(-1)
2651 }
2652 return func() uint32 {
2653 if Int32(0x80) == Int32(0x80) {
2654 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2655 }
2656 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2657 }()<<23 | uint32_t(0x3+16)
2658 }(), func() uint32 {
2659 if 0x4+16 < 2 {
2660 return Uint32FromInt32(-1)
2661 }
2662 return func() uint32 {
2663 if Int32(0x80) == Int32(0x80) {
2664 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2665 }
2666 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2667 }()<<23 | uint32_t(0x4+16)
2668 }(), func() uint32 {
2669 if 0x5+16 < 2 {
2670 return Uint32FromInt32(-1)
2671 }
2672 return func() uint32 {
2673 if Int32(0x80) == Int32(0x80) {
2674 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2675 }
2676 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2677 }()<<23 | uint32_t(0x5+16)
2678 }(), func() uint32 {
2679 if 0x6+16 < 2 {
2680 return Uint32FromInt32(-1)
2681 }
2682 return func() uint32 {
2683 if Int32(0x80) == Int32(0x80) {
2684 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2685 }
2686 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2687 }()<<23 | uint32_t(0x6+16)
2688 }(), func() uint32 {
2689 if 0x7+16 < 2 {
2690 return Uint32FromInt32(-1)
2691 }
2692 return func() uint32 {
2693 if Int32(0x80) == Int32(0x80) {
2694 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2695 }
2696 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2697 }()<<23 | uint32_t(0x7+16)
2698 }(),
2699 func() uint32 {
2700 if 0x8+16 < 2 {
2701 return Uint32FromInt32(-1)
2702 }
2703 return func() uint32 {
2704 if Int32(0x80) == Int32(0x80) {
2705 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2706 }
2707 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2708 }()<<23 | uint32_t(0x8+16)
2709 }(), func() uint32 {
2710 if 0x9+16 < 2 {
2711 return Uint32FromInt32(-1)
2712 }
2713 return func() uint32 {
2714 if Int32(0x80) == Int32(0x80) {
2715 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2716 }
2717 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2718 }()<<23 | uint32_t(0x9+16)
2719 }(), func() uint32 {
2720 if 0xa+16 < 2 {
2721 return Uint32FromInt32(-1)
2722 }
2723 return func() uint32 {
2724 if Int32(0x80) == Int32(0x80) {
2725 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2726 }
2727 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2728 }()<<23 | uint32_t(0xa+16)
2729 }(), func() uint32 {
2730 if 0xb+16 < 2 {
2731 return Uint32FromInt32(-1)
2732 }
2733 return func() uint32 {
2734 if Int32(0x80) == Int32(0x80) {
2735 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2736 }
2737 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2738 }()<<23 | uint32_t(0xb+16)
2739 }(), func() uint32 {
2740 if 0xc+16 < 2 {
2741 return Uint32FromInt32(-1)
2742 }
2743 return func() uint32 {
2744 if Int32(0x80) == Int32(0x80) {
2745 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2746 }
2747 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2748 }()<<23 | uint32_t(0xc+16)
2749 }(), func() uint32 {
2750 if 0xd+16 < 2 {
2751 return Uint32FromInt32(-1)
2752 }
2753 return func() uint32 {
2754 if Int32(0x80) == Int32(0x80) {
2755 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2756 }
2757 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2758 }()<<23 | uint32_t(0xd+16)
2759 }(), func() uint32 {
2760 if 0xe+16 < 2 {
2761 return Uint32FromInt32(-1)
2762 }
2763 return func() uint32 {
2764 if Int32(0x80) == Int32(0x80) {
2765 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2766 }
2767 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2768 }()<<23 | uint32_t(0xe+16)
2769 }(), func() uint32 {
2770 if 0xf+16 < 2 {
2771 return Uint32FromInt32(-1)
2772 }
2773 return func() uint32 {
2774 if Int32(0x80) == Int32(0x80) {
2775 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2776 }
2777 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2778 }()<<23 | uint32_t(0xf+16)
2779 }(),
2780 func() uint32 {
2781 if 0x0 == 0 {
2782 return func() uint32 {
2783 if Int32(0xa0) == Int32(0x80) {
2784 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2785 }
2786 return Uint32(Uint32(0) - Uint32FromInt32(0xa0))
2787 }() << 23
2788 }
2789 return func() uint32 {
2790 if 0x0 == 0xd {
2791 return func() uint32 {
2792 if Int32(0x80) == Int32(0x80) {
2793 return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0))
2794 }
2795 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2796 }() << 23
2797 }
2798 return func() uint32 {
2799 if Int32(0x80) == Int32(0x80) {
2800 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2801 }
2802 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2803 }() << 23
2804 }()
2805 }() | uint32_t(func() uint32 {
2806 if Int32(0x80) == Int32(0x80) {
2807 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2808 }
2809 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2810 }()<<23)>>6 | uint32_t(0x0), func() uint32 {
2811 if 0x1 == 0 {
2812 return func() uint32 {
2813 if Int32(0xa0) == Int32(0x80) {
2814 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2815 }
2816 return Uint32(Uint32(0) - Uint32FromInt32(0xa0))
2817 }() << 23
2818 }
2819 return func() uint32 {
2820 if 0x1 == 0xd {
2821 return func() uint32 {
2822 if Int32(0x80) == Int32(0x80) {
2823 return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0))
2824 }
2825 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2826 }() << 23
2827 }
2828 return func() uint32 {
2829 if Int32(0x80) == Int32(0x80) {
2830 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2831 }
2832 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2833 }() << 23
2834 }()
2835 }() | uint32_t(func() uint32 {
2836 if Int32(0x80) == Int32(0x80) {
2837 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2838 }
2839 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2840 }()<<23)>>6 | uint32_t(0x1), func() uint32 {
2841 if 0x2 == 0 {
2842 return func() uint32 {
2843 if Int32(0xa0) == Int32(0x80) {
2844 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2845 }
2846 return Uint32(Uint32(0) - Uint32FromInt32(0xa0))
2847 }() << 23
2848 }
2849 return func() uint32 {
2850 if 0x2 == 0xd {
2851 return func() uint32 {
2852 if Int32(0x80) == Int32(0x80) {
2853 return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0))
2854 }
2855 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2856 }() << 23
2857 }
2858 return func() uint32 {
2859 if Int32(0x80) == Int32(0x80) {
2860 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2861 }
2862 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2863 }() << 23
2864 }()
2865 }() | uint32_t(func() uint32 {
2866 if Int32(0x80) == Int32(0x80) {
2867 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2868 }
2869 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2870 }()<<23)>>6 | uint32_t(0x2), func() uint32 {
2871 if 0x3 == 0 {
2872 return func() uint32 {
2873 if Int32(0xa0) == Int32(0x80) {
2874 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2875 }
2876 return Uint32(Uint32(0) - Uint32FromInt32(0xa0))
2877 }() << 23
2878 }
2879 return func() uint32 {
2880 if 0x3 == 0xd {
2881 return func() uint32 {
2882 if Int32(0x80) == Int32(0x80) {
2883 return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0))
2884 }
2885 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2886 }() << 23
2887 }
2888 return func() uint32 {
2889 if Int32(0x80) == Int32(0x80) {
2890 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2891 }
2892 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2893 }() << 23
2894 }()
2895 }() | uint32_t(func() uint32 {
2896 if Int32(0x80) == Int32(0x80) {
2897 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2898 }
2899 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2900 }()<<23)>>6 | uint32_t(0x3), func() uint32 {
2901 if 0x4 == 0 {
2902 return func() uint32 {
2903 if Int32(0xa0) == Int32(0x80) {
2904 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2905 }
2906 return Uint32(Uint32(0) - Uint32FromInt32(0xa0))
2907 }() << 23
2908 }
2909 return func() uint32 {
2910 if 0x4 == 0xd {
2911 return func() uint32 {
2912 if Int32(0x80) == Int32(0x80) {
2913 return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0))
2914 }
2915 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2916 }() << 23
2917 }
2918 return func() uint32 {
2919 if Int32(0x80) == Int32(0x80) {
2920 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2921 }
2922 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2923 }() << 23
2924 }()
2925 }() | uint32_t(func() uint32 {
2926 if Int32(0x80) == Int32(0x80) {
2927 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2928 }
2929 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2930 }()<<23)>>6 | uint32_t(0x4), func() uint32 {
2931 if 0x5 == 0 {
2932 return func() uint32 {
2933 if Int32(0xa0) == Int32(0x80) {
2934 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2935 }
2936 return Uint32(Uint32(0) - Uint32FromInt32(0xa0))
2937 }() << 23
2938 }
2939 return func() uint32 {
2940 if 0x5 == 0xd {
2941 return func() uint32 {
2942 if Int32(0x80) == Int32(0x80) {
2943 return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0))
2944 }
2945 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2946 }() << 23
2947 }
2948 return func() uint32 {
2949 if Int32(0x80) == Int32(0x80) {
2950 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2951 }
2952 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2953 }() << 23
2954 }()
2955 }() | uint32_t(func() uint32 {
2956 if Int32(0x80) == Int32(0x80) {
2957 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2958 }
2959 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2960 }()<<23)>>6 | uint32_t(0x5), func() uint32 {
2961 if 0x6 == 0 {
2962 return func() uint32 {
2963 if Int32(0xa0) == Int32(0x80) {
2964 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2965 }
2966 return Uint32(Uint32(0) - Uint32FromInt32(0xa0))
2967 }() << 23
2968 }
2969 return func() uint32 {
2970 if 0x6 == 0xd {
2971 return func() uint32 {
2972 if Int32(0x80) == Int32(0x80) {
2973 return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0))
2974 }
2975 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2976 }() << 23
2977 }
2978 return func() uint32 {
2979 if Int32(0x80) == Int32(0x80) {
2980 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2981 }
2982 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2983 }() << 23
2984 }()
2985 }() | uint32_t(func() uint32 {
2986 if Int32(0x80) == Int32(0x80) {
2987 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2988 }
2989 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2990 }()<<23)>>6 | uint32_t(0x6), func() uint32 {
2991 if 0x7 == 0 {
2992 return func() uint32 {
2993 if Int32(0xa0) == Int32(0x80) {
2994 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2995 }
2996 return Uint32(Uint32(0) - Uint32FromInt32(0xa0))
2997 }() << 23
2998 }
2999 return func() uint32 {
3000 if 0x7 == 0xd {
3001 return func() uint32 {
3002 if Int32(0x80) == Int32(0x80) {
3003 return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0))
3004 }
3005 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3006 }() << 23
3007 }
3008 return func() uint32 {
3009 if Int32(0x80) == Int32(0x80) {
3010 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3011 }
3012 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3013 }() << 23
3014 }()
3015 }() | uint32_t(func() uint32 {
3016 if Int32(0x80) == Int32(0x80) {
3017 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3018 }
3019 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3020 }()<<23)>>6 | uint32_t(0x7),
3021 func() uint32 {
3022 if 0x8 == 0 {
3023 return func() uint32 {
3024 if Int32(0xa0) == Int32(0x80) {
3025 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3026 }
3027 return Uint32(Uint32(0) - Uint32FromInt32(0xa0))
3028 }() << 23
3029 }
3030 return func() uint32 {
3031 if 0x8 == 0xd {
3032 return func() uint32 {
3033 if Int32(0x80) == Int32(0x80) {
3034 return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0))
3035 }
3036 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3037 }() << 23
3038 }
3039 return func() uint32 {
3040 if Int32(0x80) == Int32(0x80) {
3041 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3042 }
3043 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3044 }() << 23
3045 }()
3046 }() | uint32_t(func() uint32 {
3047 if Int32(0x80) == Int32(0x80) {
3048 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3049 }
3050 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3051 }()<<23)>>6 | uint32_t(0x8), func() uint32 {
3052 if 0x9 == 0 {
3053 return func() uint32 {
3054 if Int32(0xa0) == Int32(0x80) {
3055 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3056 }
3057 return Uint32(Uint32(0) - Uint32FromInt32(0xa0))
3058 }() << 23
3059 }
3060 return func() uint32 {
3061 if 0x9 == 0xd {
3062 return func() uint32 {
3063 if Int32(0x80) == Int32(0x80) {
3064 return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0))
3065 }
3066 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3067 }() << 23
3068 }
3069 return func() uint32 {
3070 if Int32(0x80) == Int32(0x80) {
3071 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3072 }
3073 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3074 }() << 23
3075 }()
3076 }() | uint32_t(func() uint32 {
3077 if Int32(0x80) == Int32(0x80) {
3078 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3079 }
3080 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3081 }()<<23)>>6 | uint32_t(0x9), func() uint32 {
3082 if 0xa == 0 {
3083 return func() uint32 {
3084 if Int32(0xa0) == Int32(0x80) {
3085 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3086 }
3087 return Uint32(Uint32(0) - Uint32FromInt32(0xa0))
3088 }() << 23
3089 }
3090 return func() uint32 {
3091 if 0xa == 0xd {
3092 return func() uint32 {
3093 if Int32(0x80) == Int32(0x80) {
3094 return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0))
3095 }
3096 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3097 }() << 23
3098 }
3099 return func() uint32 {
3100 if Int32(0x80) == Int32(0x80) {
3101 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3102 }
3103 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3104 }() << 23
3105 }()
3106 }() | uint32_t(func() uint32 {
3107 if Int32(0x80) == Int32(0x80) {
3108 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3109 }
3110 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3111 }()<<23)>>6 | uint32_t(0xa), func() uint32 {
3112 if 0xb == 0 {
3113 return func() uint32 {
3114 if Int32(0xa0) == Int32(0x80) {
3115 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3116 }
3117 return Uint32(Uint32(0) - Uint32FromInt32(0xa0))
3118 }() << 23
3119 }
3120 return func() uint32 {
3121 if 0xb == 0xd {
3122 return func() uint32 {
3123 if Int32(0x80) == Int32(0x80) {
3124 return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0))
3125 }
3126 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3127 }() << 23
3128 }
3129 return func() uint32 {
3130 if Int32(0x80) == Int32(0x80) {
3131 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3132 }
3133 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3134 }() << 23
3135 }()
3136 }() | uint32_t(func() uint32 {
3137 if Int32(0x80) == Int32(0x80) {
3138 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3139 }
3140 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3141 }()<<23)>>6 | uint32_t(0xb), func() uint32 {
3142 if 0xc == 0 {
3143 return func() uint32 {
3144 if Int32(0xa0) == Int32(0x80) {
3145 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3146 }
3147 return Uint32(Uint32(0) - Uint32FromInt32(0xa0))
3148 }() << 23
3149 }
3150 return func() uint32 {
3151 if 0xc == 0xd {
3152 return func() uint32 {
3153 if Int32(0x80) == Int32(0x80) {
3154 return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0))
3155 }
3156 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3157 }() << 23
3158 }
3159 return func() uint32 {
3160 if Int32(0x80) == Int32(0x80) {
3161 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3162 }
3163 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3164 }() << 23
3165 }()
3166 }() | uint32_t(func() uint32 {
3167 if Int32(0x80) == Int32(0x80) {
3168 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3169 }
3170 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3171 }()<<23)>>6 | uint32_t(0xc), func() uint32 {
3172 if 0xd == 0 {
3173 return func() uint32 {
3174 if Int32(0xa0) == Int32(0x80) {
3175 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3176 }
3177 return Uint32(Uint32(0) - Uint32FromInt32(0xa0))
3178 }() << 23
3179 }
3180 return func() uint32 {
3181 if 0xd == 0xd {
3182 return func() uint32 {
3183 if Int32(0x80) == Int32(0x80) {
3184 return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0))
3185 }
3186 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3187 }() << 23
3188 }
3189 return func() uint32 {
3190 if Int32(0x80) == Int32(0x80) {
3191 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3192 }
3193 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3194 }() << 23
3195 }()
3196 }() | uint32_t(func() uint32 {
3197 if Int32(0x80) == Int32(0x80) {
3198 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3199 }
3200 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3201 }()<<23)>>6 | uint32_t(0xd), func() uint32 {
3202 if 0xe == 0 {
3203 return func() uint32 {
3204 if Int32(0xa0) == Int32(0x80) {
3205 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3206 }
3207 return Uint32(Uint32(0) - Uint32FromInt32(0xa0))
3208 }() << 23
3209 }
3210 return func() uint32 {
3211 if 0xe == 0xd {
3212 return func() uint32 {
3213 if Int32(0x80) == Int32(0x80) {
3214 return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0))
3215 }
3216 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3217 }() << 23
3218 }
3219 return func() uint32 {
3220 if Int32(0x80) == Int32(0x80) {
3221 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3222 }
3223 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3224 }() << 23
3225 }()
3226 }() | uint32_t(func() uint32 {
3227 if Int32(0x80) == Int32(0x80) {
3228 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3229 }
3230 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3231 }()<<23)>>6 | uint32_t(0xe), func() uint32 {
3232 if 0xf == 0 {
3233 return func() uint32 {
3234 if Int32(0xa0) == Int32(0x80) {
3235 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3236 }
3237 return Uint32(Uint32(0) - Uint32FromInt32(0xa0))
3238 }() << 23
3239 }
3240 return func() uint32 {
3241 if 0xf == 0xd {
3242 return func() uint32 {
3243 if Int32(0x80) == Int32(0x80) {
3244 return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0))
3245 }
3246 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3247 }() << 23
3248 }
3249 return func() uint32 {
3250 if Int32(0x80) == Int32(0x80) {
3251 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3252 }
3253 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3254 }() << 23
3255 }()
3256 }() | uint32_t(func() uint32 {
3257 if Int32(0x80) == Int32(0x80) {
3258 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3259 }
3260 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3261 }()<<23)>>6 | uint32_t(0xf),
3262 func() uint32 {
3263 if 0x0 >= 5 {
3264 return uint32(0)
3265 }
3266 return func() uint32 {
3267 if 0x0 == 0 {
3268 return func() uint32 {
3269 if Int32(0x90) == Int32(0x80) {
3270 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3271 }
3272 return Uint32(Uint32(0) - Uint32FromInt32(0x90))
3273 }() << 23
3274 }
3275 return func() uint32 {
3276 if 0x0 == 4 {
3277 return func() uint32 {
3278 if Int32(0x80) == Int32(0x80) {
3279 return Uint32(Uint32(0x40) - Uint32FromInt32(0x90))
3280 }
3281 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3282 }() << 23
3283 }
3284 return func() uint32 {
3285 if Int32(0x80) == Int32(0x80) {
3286 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3287 }
3288 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3289 }() << 23
3290 }()
3291 }()
3292 }() | uint32_t(func() uint32 {
3293 if Int32(0x80) == Int32(0x80) {
3294 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3295 }
3296 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3297 }()<<23)>>6 | uint32_t(func() uint32 {
3298 if Int32(0x80) == Int32(0x80) {
3299 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3300 }
3301 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3302 }()<<23)>>12 | uint32_t(0x0), func() uint32 {
3303 if 0x1 >= 5 {
3304 return uint32(0)
3305 }
3306 return func() uint32 {
3307 if 0x1 == 0 {
3308 return func() uint32 {
3309 if Int32(0x90) == Int32(0x80) {
3310 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3311 }
3312 return Uint32(Uint32(0) - Uint32FromInt32(0x90))
3313 }() << 23
3314 }
3315 return func() uint32 {
3316 if 0x1 == 4 {
3317 return func() uint32 {
3318 if Int32(0x80) == Int32(0x80) {
3319 return Uint32(Uint32(0x40) - Uint32FromInt32(0x90))
3320 }
3321 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3322 }() << 23
3323 }
3324 return func() uint32 {
3325 if Int32(0x80) == Int32(0x80) {
3326 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3327 }
3328 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3329 }() << 23
3330 }()
3331 }()
3332 }() | uint32_t(func() uint32 {
3333 if Int32(0x80) == Int32(0x80) {
3334 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3335 }
3336 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3337 }()<<23)>>6 | uint32_t(func() uint32 {
3338 if Int32(0x80) == Int32(0x80) {
3339 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3340 }
3341 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3342 }()<<23)>>12 | uint32_t(0x1), func() uint32 {
3343 if 0x2 >= 5 {
3344 return uint32(0)
3345 }
3346 return func() uint32 {
3347 if 0x2 == 0 {
3348 return func() uint32 {
3349 if Int32(0x90) == Int32(0x80) {
3350 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3351 }
3352 return Uint32(Uint32(0) - Uint32FromInt32(0x90))
3353 }() << 23
3354 }
3355 return func() uint32 {
3356 if 0x2 == 4 {
3357 return func() uint32 {
3358 if Int32(0x80) == Int32(0x80) {
3359 return Uint32(Uint32(0x40) - Uint32FromInt32(0x90))
3360 }
3361 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3362 }() << 23
3363 }
3364 return func() uint32 {
3365 if Int32(0x80) == Int32(0x80) {
3366 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3367 }
3368 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3369 }() << 23
3370 }()
3371 }()
3372 }() | uint32_t(func() uint32 {
3373 if Int32(0x80) == Int32(0x80) {
3374 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3375 }
3376 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3377 }()<<23)>>6 | uint32_t(func() uint32 {
3378 if Int32(0x80) == Int32(0x80) {
3379 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3380 }
3381 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3382 }()<<23)>>12 | uint32_t(0x2), func() uint32 {
3383 if 0x3 >= 5 {
3384 return uint32(0)
3385 }
3386 return func() uint32 {
3387 if 0x3 == 0 {
3388 return func() uint32 {
3389 if Int32(0x90) == Int32(0x80) {
3390 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3391 }
3392 return Uint32(Uint32(0) - Uint32FromInt32(0x90))
3393 }() << 23
3394 }
3395 return func() uint32 {
3396 if 0x3 == 4 {
3397 return func() uint32 {
3398 if Int32(0x80) == Int32(0x80) {
3399 return Uint32(Uint32(0x40) - Uint32FromInt32(0x90))
3400 }
3401 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3402 }() << 23
3403 }
3404 return func() uint32 {
3405 if Int32(0x80) == Int32(0x80) {
3406 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3407 }
3408 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3409 }() << 23
3410 }()
3411 }()
3412 }() | uint32_t(func() uint32 {
3413 if Int32(0x80) == Int32(0x80) {
3414 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3415 }
3416 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3417 }()<<23)>>6 | uint32_t(func() uint32 {
3418 if Int32(0x80) == Int32(0x80) {
3419 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3420 }
3421 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3422 }()<<23)>>12 | uint32_t(0x3), func() uint32 {
3423 if 0x4 >= 5 {
3424 return uint32(0)
3425 }
3426 return func() uint32 {
3427 if 0x4 == 0 {
3428 return func() uint32 {
3429 if Int32(0x90) == Int32(0x80) {
3430 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3431 }
3432 return Uint32(Uint32(0) - Uint32FromInt32(0x90))
3433 }() << 23
3434 }
3435 return func() uint32 {
3436 if 0x4 == 4 {
3437 return func() uint32 {
3438 if Int32(0x80) == Int32(0x80) {
3439 return Uint32(Uint32(0x40) - Uint32FromInt32(0x90))
3440 }
3441 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3442 }() << 23
3443 }
3444 return func() uint32 {
3445 if Int32(0x80) == Int32(0x80) {
3446 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3447 }
3448 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3449 }() << 23
3450 }()
3451 }()
3452 }() | uint32_t(func() uint32 {
3453 if Int32(0x80) == Int32(0x80) {
3454 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3455 }
3456 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3457 }()<<23)>>6 | uint32_t(func() uint32 {
3458 if Int32(0x80) == Int32(0x80) {
3459 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3460 }
3461 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3462 }()<<23)>>12 | uint32_t(0x4),
3463} /* internal.c:18:16 */
3464
3465type wint_t = uint32 /* alltypes.h:21:18 */
3466
3467type wctype_t = uint64 /* alltypes.h:211:23 */
3468
3469type __mbstate_t = struct {
3470 __opaque1 uint32
3471 __opaque2 uint32
3472} /* alltypes.h:345:9 */
3473
3474type mbstate_t = __mbstate_t /* alltypes.h:345:63 */
3475
3476func Xmbrtowc(tls *TLS, wc uintptr, src uintptr, n size_t, st uintptr) size_t { /* mbrtowc.c:6:8: */
3477 bp := tls.Alloc(4)
3478 defer tls.Free(4)
3479
3480 var c uint32
3481 var s uintptr
3482 var N uint32
3483 // var dummy wchar_t at bp, 4
3484 s = src
3485 N = uint32(n)
3486
3487 if !!(st != 0) {
3488 goto __1
3489 }
3490 st = uintptr(unsafe.Pointer(&_sinternal_state))
3491__1:
3492 ;
3493 c = *(*uint32)(unsafe.Pointer(st))
3494
3495 if !!(s != 0) {
3496 goto __2
3497 }
3498 if !(c != 0) {
3499 goto __4
3500 }
3501 goto ilseq
3502__4:
3503 ;
3504 return uint64(0)
3505 goto __3
3506__2:
3507 if !!(wc != 0) {
3508 goto __5
3509 }
3510 wc = bp /* &dummy */
3511__5:
3512 ;
3513__3:
3514 ;
3515
3516 if !!(n != 0) {
3517 goto __6
3518 }
3519 return Uint64FromInt32(-2)
3520__6:
3521 ;
3522 if !!(c != 0) {
3523 goto __7
3524 }
3525 if !(int32(*(*uint8)(unsafe.Pointer(s))) < 0x80) {
3526 goto __8
3527 }
3528 return BoolUint64(!!(int32(AssignPtrUint32(wc, wchar_t(*(*uint8)(unsafe.Pointer(s))))) != 0))
3529__8:
3530 ;
3531 if !(func() int32 {
3532 if !!(int32(*(*uintptr)(unsafe.Pointer((*__pthread)(unsafe.Pointer(__pthread_self(tls))).locale))) != 0) {
3533 return 4
3534 }
3535 return 1
3536 }() == 1) {
3537 goto __9
3538 }
3539 *(*wchar_t)(unsafe.Pointer(wc)) = wchar_t(0xdfff & int32(int8(*(*uint8)(unsafe.Pointer(s)))))
3540 return 1
3541__9:
3542 ;
3543 if !(uint32(*(*uint8)(unsafe.Pointer(s)))-0xc2 > 0xf4-0xc2) {
3544 goto __10
3545 }
3546 goto ilseq
3547__10:
3548 ;
3549 c = X__fsmu8[uint32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&s, 1))))-0xc2]
3550 n--
3551__7:
3552 ;
3553
3554 if !(n != 0) {
3555 goto __11
3556 }
3557 if !((int32(*(*uint8)(unsafe.Pointer(s)))>>3-0x10|(int32(*(*uint8)(unsafe.Pointer(s)))>>3+int32_t(c)>>26))&CplInt32(7) != 0) {
3558 goto __12
3559 }
3560 goto ilseq
3561__12:
3562 ;
3563loop:
3564 c = c<<6 | uint32(int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&s, 1))))-0x80)
3565 n--
3566 if !!(c&(uint32(1)<<31) != 0) {
3567 goto __13
3568 }
3569 *(*uint32)(unsafe.Pointer(st)) = uint32(0)
3570 *(*wchar_t)(unsafe.Pointer(wc)) = c
3571 return size_t(N) - n
3572__13:
3573 ;
3574 if !(n != 0) {
3575 goto __14
3576 }
3577 if !(uint32(*(*uint8)(unsafe.Pointer(s)))-0x80 >= uint32(0x40)) {
3578 goto __15
3579 }
3580 goto ilseq
3581__15:
3582 ;
3583 goto loop
3584__14:
3585 ;
3586__11:
3587 ;
3588
3589 *(*uint32)(unsafe.Pointer(st)) = c
3590 return Uint64FromInt32(-2)
3591ilseq:
3592 *(*uint32)(unsafe.Pointer(st)) = uint32(0)
3593 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 84
3594 return Uint64FromInt32(-1)
3595}
3596
3597var _sinternal_state uint32 /* mbrtowc.c:8:18: */
3598
3599func Xmbsinit(tls *TLS, st uintptr) int32 { /* mbsinit.c:3:5: */
3600 return Bool32(!(st != 0) || !(int32(*(*uint32)(unsafe.Pointer(st))) != 0))
3601}
3602
3603type imaxdiv_t = struct {
3604 quot intmax_t
3605 rem intmax_t
3606} /* inttypes.h:14:40 */
3607
3608type socklen_t = uint32 /* alltypes.h:369:18 */
3609
3610type sa_family_t = uint16 /* alltypes.h:374:24 */
3611
3612type msghdr = struct {
3613 msg_name uintptr
3614 msg_namelen socklen_t
3615 _ [4]byte
3616 msg_iov uintptr
3617 msg_iovlen int32
3618 __pad1 int32
3619 msg_control uintptr
3620 msg_controllen socklen_t
3621 __pad2 int32
3622 msg_flags int32
3623 _ [4]byte
3624} /* socket.h:22:1 */
3625
3626type cmsghdr = struct {
3627 cmsg_len socklen_t
3628 __pad1 int32
3629 cmsg_level int32
3630 cmsg_type int32
3631} /* socket.h:44:1 */
3632
3633type linger = struct {
3634 l_onoff int32
3635 l_linger int32
3636} /* socket.h:74:1 */
3637
3638type sockaddr = struct {
3639 sa_family sa_family_t
3640 sa_data [14]uint8
3641} /* socket.h:367:1 */
3642
3643type sockaddr_storage = struct {
3644 ss_family sa_family_t
3645 __ss_padding [118]uint8
3646 __ss_align uint64
3647} /* socket.h:372:1 */
3648
3649type in_port_t = uint16_t /* in.h:12:18 */
3650type in_addr_t = uint32_t /* in.h:13:18 */
3651type in_addr = struct{ s_addr in_addr_t } /* in.h:14:1 */
3652
3653type sockaddr_in = struct {
3654 sin_family sa_family_t
3655 sin_port in_port_t
3656 sin_addr struct{ s_addr in_addr_t }
3657 sin_zero [8]uint8_t
3658} /* in.h:16:1 */
3659
3660type in6_addr = struct {
3661 __in6_union struct {
3662 _ [0]uint32
3663 __s6_addr [16]uint8_t
3664 }
3665} /* in.h:23:1 */
3666
3667type sockaddr_in6 = struct {
3668 sin6_family sa_family_t
3669 sin6_port in_port_t
3670 sin6_flowinfo uint32_t
3671 sin6_addr struct {
3672 __in6_union struct {
3673 _ [0]uint32
3674 __s6_addr [16]uint8_t
3675 }
3676 }
3677 sin6_scope_id uint32_t
3678} /* in.h:34:1 */
3679
3680type ipv6_mreq = struct {
3681 ipv6mr_multiaddr struct {
3682 __in6_union struct {
3683 _ [0]uint32
3684 __s6_addr [16]uint8_t
3685 }
3686 }
3687 ipv6mr_interface uint32
3688} /* in.h:42:1 */
3689
3690type ip_opts = struct {
3691 ip_dst struct{ s_addr in_addr_t }
3692 ip_opts [40]uint8
3693} /* in.h:229:1 */
3694
3695type ip_mreq = struct {
3696 imr_multiaddr struct{ s_addr in_addr_t }
3697 imr_interface struct{ s_addr in_addr_t }
3698} /* in.h:247:1 */
3699
3700type ip_mreqn = struct {
3701 imr_multiaddr struct{ s_addr in_addr_t }
3702 imr_address struct{ s_addr in_addr_t }
3703 imr_ifindex int32
3704} /* in.h:252:1 */
3705
3706type ip_mreq_source = struct {
3707 imr_multiaddr struct{ s_addr in_addr_t }
3708 imr_interface struct{ s_addr in_addr_t }
3709 imr_sourceaddr struct{ s_addr in_addr_t }
3710} /* in.h:258:1 */
3711
3712type ip_msfilter = struct {
3713 imsf_multiaddr struct{ s_addr in_addr_t }
3714 imsf_interface struct{ s_addr in_addr_t }
3715 imsf_fmode uint32_t
3716 imsf_numsrc uint32_t
3717 imsf_slist [1]struct{ s_addr in_addr_t }
3718} /* in.h:264:1 */
3719
3720type group_req = struct {
3721 gr_interface uint32_t
3722 _ [4]byte
3723 gr_group struct {
3724 ss_family sa_family_t
3725 __ss_padding [118]uint8
3726 __ss_align uint64
3727 }
3728} /* in.h:275:1 */
3729
3730type group_source_req = struct {
3731 gsr_interface uint32_t
3732 _ [4]byte
3733 gsr_group struct {
3734 ss_family sa_family_t
3735 __ss_padding [118]uint8
3736 __ss_align uint64
3737 }
3738 gsr_source struct {
3739 ss_family sa_family_t
3740 __ss_padding [118]uint8
3741 __ss_align uint64
3742 }
3743} /* in.h:280:1 */
3744
3745type group_filter = struct {
3746 gf_interface uint32_t
3747 _ [4]byte
3748 gf_group struct {
3749 ss_family sa_family_t
3750 __ss_padding [118]uint8
3751 __ss_align uint64
3752 }
3753 gf_fmode uint32_t
3754 gf_numsrc uint32_t
3755 gf_slist [1]struct {
3756 ss_family sa_family_t
3757 __ss_padding [118]uint8
3758 __ss_align uint64
3759 }
3760} /* in.h:286:1 */
3761
3762type in_pktinfo = struct {
3763 ipi_ifindex int32
3764 ipi_spec_dst struct{ s_addr in_addr_t }
3765 ipi_addr struct{ s_addr in_addr_t }
3766} /* in.h:297:1 */
3767
3768type in6_pktinfo = struct {
3769 ipi6_addr struct {
3770 __in6_union struct {
3771 _ [0]uint32
3772 __s6_addr [16]uint8_t
3773 }
3774 }
3775 ipi6_ifindex uint32
3776} /* in.h:303:1 */
3777
3778type ip6_mtuinfo = struct {
3779 ip6m_addr struct {
3780 sin6_family sa_family_t
3781 sin6_port in_port_t
3782 sin6_flowinfo uint32_t
3783 sin6_addr struct {
3784 __in6_union struct {
3785 _ [0]uint32
3786 __s6_addr [16]uint8_t
3787 }
3788 }
3789 sin6_scope_id uint32_t
3790 }
3791 ip6m_mtu uint32_t
3792} /* in.h:308:1 */
3793
3794type addrinfo = struct {
3795 ai_flags int32
3796 ai_family int32
3797 ai_socktype int32
3798 ai_protocol int32
3799 ai_addrlen socklen_t
3800 _ [4]byte
3801 ai_addr uintptr
3802 ai_canonname uintptr
3803 ai_next uintptr
3804} /* netdb.h:16:1 */
3805
3806// Legacy functions follow (marked OBsolete in SUS)
3807
3808type netent = struct {
3809 n_name uintptr
3810 n_aliases uintptr
3811 n_addrtype int32
3812 n_net uint32_t
3813} /* netdb.h:62:1 */
3814
3815type hostent = struct {
3816 h_name uintptr
3817 h_aliases uintptr
3818 h_addrtype int32
3819 h_length int32
3820 h_addr_list uintptr
3821} /* netdb.h:69:1 */
3822
3823type servent = struct {
3824 s_name uintptr
3825 s_aliases uintptr
3826 s_port int32
3827 _ [4]byte
3828 s_proto uintptr
3829} /* netdb.h:78:1 */
3830
3831type protoent = struct {
3832 p_name uintptr
3833 p_aliases uintptr
3834 p_proto int32
3835 _ [4]byte
3836} /* netdb.h:85:1 */
3837
3838type aibuf = struct {
3839 ai struct {
3840 ai_flags int32
3841 ai_family int32
3842 ai_socktype int32
3843 ai_protocol int32
3844 ai_addrlen socklen_t
3845 _ [4]byte
3846 ai_addr uintptr
3847 ai_canonname uintptr
3848 ai_next uintptr
3849 }
3850 sa struct {
3851 sin struct {
3852 sin_family sa_family_t
3853 sin_port in_port_t
3854 sin_addr struct{ s_addr in_addr_t }
3855 sin_zero [8]uint8_t
3856 }
3857 _ [12]byte
3858 }
3859 lock [1]int32
3860 slot int16
3861 ref int16
3862 _ [4]byte
3863} /* lookup.h:10:1 */
3864
3865type sa = struct {
3866 sin struct {
3867 sin_family sa_family_t
3868 sin_port in_port_t
3869 sin_addr struct{ s_addr in_addr_t }
3870 sin_zero [8]uint8_t
3871 }
3872 _ [12]byte
3873} /* lookup.h:10:1 */
3874
3875type address = struct {
3876 family int32
3877 scopeid uint32
3878 addr [16]uint8_t
3879 sortkey int32
3880} /* lookup.h:20:1 */
3881
3882type service = struct {
3883 port uint16_t
3884 proto uint8
3885 socktype uint8
3886} /* lookup.h:27:1 */
3887
3888type resolvconf = struct {
3889 ns [3]struct {
3890 family int32
3891 scopeid uint32
3892 addr [16]uint8_t
3893 sortkey int32
3894 }
3895 nns uint32
3896 attempts uint32
3897 ndots uint32
3898 timeout uint32
3899} /* lookup.h:34:1 */
3900
3901func Xfreeaddrinfo(tls *TLS, p uintptr) { /* freeaddrinfo.c:7:6: */
3902 var cnt size_t
3903 cnt = uint64(1)
3904__1:
3905 if !((*addrinfo)(unsafe.Pointer(p)).ai_next != 0) {
3906 goto __3
3907 }
3908 goto __2
3909__2:
3910 cnt++
3911 p = (*addrinfo)(unsafe.Pointer(p)).ai_next
3912 goto __1
3913 goto __3
3914__3:
3915 ;
3916 var b uintptr = p - uintptr(uint64(uintptr(0)))
3917 b -= 88 * uintptr((*aibuf)(unsafe.Pointer(b)).slot)
3918 //TODO LOCK(b->lock);
3919 if !(int32(AssignSubPtrInt16(b+82, int16(cnt))) != 0) {
3920 Xfree(tls, b)
3921 }
3922 //TODO else UNLOCK(b->lock);
3923}
3924
3925func Xgetaddrinfo(tls *TLS, host uintptr, serv uintptr, hint uintptr, res uintptr) int32 { /* getaddrinfo.c:12:5: */
3926 bp := tls.Alloc(1608)
3927 defer tls.Free(1608)
3928
3929 // var ports [2]service at bp, 8
3930
3931 // var addrs [48]address at bp+8, 1344
3932
3933 // var canon [256]uint8 at bp+1352, 256
3934
3935 var outcanon uintptr
3936 var nservs int32
3937 var naddrs int32
3938 var nais int32
3939 var canon_len int32
3940 var i int32
3941 var j int32
3942 var k int32
3943 var family int32 = 0
3944 var flags int32 = 0
3945 var proto int32 = 0
3946 var socktype int32 = 0
3947 var out uintptr
3948
3949 if !(host != 0) && !(serv != 0) {
3950 return -2
3951 }
3952
3953 if hint != 0 {
3954 family = (*addrinfo)(unsafe.Pointer(hint)).ai_family
3955 flags = (*addrinfo)(unsafe.Pointer(hint)).ai_flags
3956 proto = (*addrinfo)(unsafe.Pointer(hint)).ai_protocol
3957 socktype = (*addrinfo)(unsafe.Pointer(hint)).ai_socktype
3958
3959 var mask int32 = 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x400
3960 if flags&mask != flags {
3961 return -1
3962 }
3963
3964 switch family {
3965 case 2:
3966 fallthrough
3967 case 10:
3968 fallthrough
3969 case 0:
3970 break
3971 fallthrough
3972 default:
3973 return -6
3974 }
3975 }
3976
3977 if flags&0x20 != 0 {
3978 Xabort(tls) //TODO-
3979 // /* Define the "an address is configured" condition for address
3980 // * families via ability to create a socket for the family plus
3981 // * routability of the loopback address for the family. */
3982 // static const struct sockaddr_in lo4 = {
3983 // .sin_family = AF_INET, .sin_port = 65535,
3984 // .sin_addr.s_addr = __BYTE_ORDER == __BIG_ENDIAN
3985 // ? 0x7f000001 : 0x0100007f
3986 // };
3987 // static const struct sockaddr_in6 lo6 = {
3988 // .sin6_family = AF_INET6, .sin6_port = 65535,
3989 // .sin6_addr = IN6ADDR_LOOPBACK_INIT
3990 // };
3991 // int tf[2] = { AF_INET, AF_INET6 };
3992 // const void *ta[2] = { &lo4, &lo6 };
3993 // socklen_t tl[2] = { sizeof lo4, sizeof lo6 };
3994 // for (i=0; i<2; i++) {
3995 // if (family==tf[1-i]) continue;
3996 // int s = socket(tf[i], SOCK_CLOEXEC|SOCK_DGRAM,
3997 // IPPROTO_UDP);
3998 // if (s>=0) {
3999 // int cs;
4000 // pthread_setcancelstate(
4001 // PTHREAD_CANCEL_DISABLE, &cs);
4002 // int r = connect(s, ta[i], tl[i]);
4003 // pthread_setcancelstate(cs, 0);
4004 // close(s);
4005 // if (!r) continue;
4006 // }
4007 // switch (errno) {
4008 // case EADDRNOTAVAIL:
4009 // case EAFNOSUPPORT:
4010 // case EHOSTUNREACH:
4011 // case ENETDOWN:
4012 // case ENETUNREACH:
4013 // break;
4014 // default:
4015 // return EAI_SYSTEM;
4016 // }
4017 // if (family == tf[i]) return EAI_NONAME;
4018 // family = tf[1-i];
4019 // }
4020 }
4021
4022 nservs = X__lookup_serv(tls, bp, serv, proto, socktype, flags)
4023 if nservs < 0 {
4024 return nservs
4025 }
4026
4027 naddrs = X__lookup_name(tls, bp+8, bp+1352, host, family, flags)
4028 if naddrs < 0 {
4029 return naddrs
4030 }
4031
4032 nais = nservs * naddrs
4033 canon_len = int32(Xstrlen(tls, bp+1352))
4034 out = Xcalloc(tls, uint64(1), uint64(nais)*uint64(unsafe.Sizeof(aibuf{}))+uint64(canon_len)+uint64(1))
4035 if !(out != 0) {
4036 return -10
4037 }
4038
4039 if canon_len != 0 {
4040 outcanon = out + uintptr(nais)*88
4041 Xmemcpy(tls, outcanon, bp+1352, uint64(canon_len+1))
4042 } else {
4043 outcanon = uintptr(0)
4044 }
4045
4046 for k = AssignInt32(&i, 0); i < naddrs; i++ {
4047 j = 0
4048 __1:
4049 if !(j < nservs) {
4050 goto __3
4051 }
4052 {
4053 (*aibuf)(unsafe.Pointer(out + uintptr(k)*88)).slot = int16(k)
4054 //TODO out[k].ai = (struct addrinfo){
4055 //TODO .ai_family = addrs[i].family,
4056 //TODO .ai_socktype = ports[j].socktype,
4057 //TODO .ai_protocol = ports[j].proto,
4058 //TODO .ai_addrlen = addrs[i].family == AF_INET
4059 //TODO ? sizeof(struct sockaddr_in)
4060 //TODO : sizeof(struct sockaddr_in6),
4061 //TODO .ai_addr = (void *)&out[k].sa,
4062 //TODO .ai_canonname = outcanon };
4063 (*aibuf)(unsafe.Pointer(out + uintptr(k)*88)).ai.ai_family = (*address)(unsafe.Pointer(bp + 8 + uintptr(i)*28)).family
4064 (*aibuf)(unsafe.Pointer(out + uintptr(k)*88)).ai.ai_socktype = int32((*service)(unsafe.Pointer(bp + uintptr(j)*4)).socktype)
4065 (*aibuf)(unsafe.Pointer(out + uintptr(k)*88)).ai.ai_protocol = int32((*service)(unsafe.Pointer(bp + uintptr(j)*4)).proto)
4066 (*aibuf)(unsafe.Pointer(out + uintptr(k)*88)).ai.ai_addrlen = func() uint32 {
4067 if (*address)(unsafe.Pointer(bp+8+uintptr(i)*28)).family == 2 {
4068 return uint32(unsafe.Sizeof(sockaddr_in{}))
4069 }
4070 return uint32(unsafe.Sizeof(sockaddr_in6{}))
4071 }()
4072 (*aibuf)(unsafe.Pointer(out + uintptr(k)*88)).ai.ai_addr = out + uintptr(k)*88 + 48
4073 (*aibuf)(unsafe.Pointer(out + uintptr(k)*88)).ai.ai_canonname = outcanon
4074 if k != 0 {
4075 (*aibuf)(unsafe.Pointer(out + uintptr(k-1)*88)).ai.ai_next = out + uintptr(k)*88
4076 }
4077 switch (*address)(unsafe.Pointer(bp + 8 + uintptr(i)*28)).family {
4078 case 2:
4079 (*sockaddr_in)(unsafe.Pointer(out + uintptr(k)*88 + 48)).sin_family = sa_family_t(2)
4080 (*sockaddr_in)(unsafe.Pointer(out + uintptr(k)*88 + 48)).sin_port = Xhtons(tls, (*service)(unsafe.Pointer(bp+uintptr(j)*4)).port)
4081 Xmemcpy(tls, out+uintptr(k)*88+48+4, bp+8+uintptr(i)*28+8, uint64(4))
4082 break
4083 case 10:
4084 (*sockaddr_in6)(unsafe.Pointer(out + uintptr(k)*88 + 48)).sin6_family = sa_family_t(10)
4085 (*sockaddr_in6)(unsafe.Pointer(out + uintptr(k)*88 + 48)).sin6_port = Xhtons(tls, (*service)(unsafe.Pointer(bp+uintptr(j)*4)).port)
4086 (*sockaddr_in6)(unsafe.Pointer(out + uintptr(k)*88 + 48)).sin6_scope_id = (*address)(unsafe.Pointer(bp + 8 + uintptr(i)*28)).scopeid
4087 Xmemcpy(tls, out+uintptr(k)*88+48+8, bp+8+uintptr(i)*28+8, uint64(16))
4088 break
4089 }
4090
4091 }
4092 goto __2
4093 __2:
4094 j++
4095 k++
4096 goto __1
4097 goto __3
4098 __3:
4099 }
4100 (*aibuf)(unsafe.Pointer(out)).ref = int16(nais)
4101 *(*uintptr)(unsafe.Pointer(res)) = out
4102 return 0
4103}
4104
4105type ucred = struct {
4106 pid pid_t
4107 uid uid_t
4108 gid gid_t
4109} /* socket.h:57:1 */
4110
4111type mmsghdr = struct {
4112 msg_hdr struct {
4113 msg_name uintptr
4114 msg_namelen socklen_t
4115 _ [4]byte
4116 msg_iov uintptr
4117 msg_iovlen int32
4118 __pad1 int32
4119 msg_control uintptr
4120 msg_controllen socklen_t
4121 __pad2 int32
4122 msg_flags int32
4123 _ [4]byte
4124 }
4125 msg_len uint32
4126 _ [4]byte
4127} /* socket.h:63:1 */
4128
4129func Xgethostbyaddr(tls *TLS, a uintptr, l socklen_t, af int32) uintptr { /* gethostbyaddr.c:7:16: */
4130 bp := tls.Alloc(8)
4131 defer tls.Free(8)
4132
4133 var size size_t = uint64(63)
4134 // var res uintptr at bp, 8
4135
4136 var err int32
4137 for ok := true; ok; ok = err == 34 {
4138 Xfree(tls, _sh)
4139 _sh = Xmalloc(tls, AssignAddUint64(&size, size+uint64(1)))
4140 if !(_sh != 0) {
4141 *(*int32)(unsafe.Pointer(X__h_errno_location(tls))) = 3
4142 return uintptr(0)
4143 }
4144 err = Xgethostbyaddr_r(tls, a, l, af, _sh,
4145 _sh+uintptr(1)*32, size-size_t(unsafe.Sizeof(hostent{})), bp, X__h_errno_location(tls))
4146 }
4147 if err != 0 {
4148 return uintptr(0)
4149 }
4150 return _sh
4151}
4152
4153var _sh uintptr /* gethostbyaddr.c:9:24: */
4154
4155func Xgethostbyaddr_r(tls *TLS, a uintptr, l socklen_t, af int32, h uintptr, buf uintptr, buflen size_t, res uintptr, err uintptr) int32 { /* gethostbyaddr_r.c:10:5: */
4156 bp := tls.Alloc(28)
4157 defer tls.Free(28)
4158
4159 //TODO union {
4160 //TODO struct sockaddr_in sin;
4161 //TODO struct sockaddr_in6 sin6;
4162 //TODO } sa = { .sin.sin_family = af };
4163 *(*struct {
4164 sin sockaddr_in
4165 _ [12]byte
4166 })(unsafe.Pointer(bp)) = struct {
4167 sin sockaddr_in
4168 _ [12]byte
4169 }{} //TODO-
4170 (*sockaddr_in)(unsafe.Pointer(bp)).sin_family = sa_family_t(af) //TODO-
4171 var sl socklen_t
4172 if af == 10 {
4173 sl = uint32(unsafe.Sizeof(sockaddr_in6{}))
4174 } else {
4175 sl = uint32(unsafe.Sizeof(sockaddr_in{}))
4176 }
4177 var i int32
4178
4179 *(*uintptr)(unsafe.Pointer(res)) = uintptr(0)
4180
4181 // Load address argument into sockaddr structure
4182 if af == 10 && l == socklen_t(16) {
4183 Xmemcpy(tls, bp+8, a, uint64(16))
4184 } else if af == 2 && l == socklen_t(4) {
4185 Xmemcpy(tls, bp+4, a, uint64(4))
4186 } else {
4187 *(*int32)(unsafe.Pointer(err)) = 3
4188 return 22
4189 }
4190
4191 // Align buffer and check for space for pointers and ip address
4192 i = int32(uintptr_t(buf) & (uint64(unsafe.Sizeof(uintptr(0))) - uint64(1)))
4193 if !(i != 0) {
4194 i = int32(unsafe.Sizeof(uintptr(0)))
4195 }
4196 if buflen <= uint64(5)*uint64(unsafe.Sizeof(uintptr(0)))-uint64(i)+uint64(l) {
4197 return 34
4198 }
4199 buf += uintptr(uint64(unsafe.Sizeof(uintptr(0))) - uint64(i))
4200 buflen = buflen - (uint64(5)*uint64(unsafe.Sizeof(uintptr(0))) - uint64(i) + uint64(l))
4201
4202 (*hostent)(unsafe.Pointer(h)).h_addr_list = buf
4203 buf += uintptr(uint64(2) * uint64(unsafe.Sizeof(uintptr(0))))
4204 (*hostent)(unsafe.Pointer(h)).h_aliases = buf
4205 buf += uintptr(uint64(2) * uint64(unsafe.Sizeof(uintptr(0))))
4206
4207 *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_addr_list)) = buf
4208 Xmemcpy(tls, *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_addr_list)), a, uint64(l))
4209 buf += uintptr(l)
4210 *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_addr_list + 1*8)) = uintptr(0)
4211 *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_aliases)) = buf
4212 *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_aliases + 1*8)) = uintptr(0)
4213
4214 switch Xgetnameinfo(tls, bp, sl, buf, uint32(buflen), uintptr(0), uint32(0), 0) {
4215 case -3:
4216 *(*int32)(unsafe.Pointer(err)) = 2
4217 return 11
4218 case -12:
4219 return 34
4220 default:
4221 fallthrough
4222 case -10:
4223 fallthrough
4224 case -11:
4225 fallthrough
4226 case -4:
4227 *(*int32)(unsafe.Pointer(err)) = 3
4228 return *(*int32)(unsafe.Pointer(X___errno_location(tls)))
4229 case 0:
4230 break
4231 }
4232
4233 (*hostent)(unsafe.Pointer(h)).h_addrtype = af
4234 (*hostent)(unsafe.Pointer(h)).h_length = int32(l)
4235 (*hostent)(unsafe.Pointer(h)).h_name = *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_aliases))
4236 *(*uintptr)(unsafe.Pointer(res)) = h
4237 return 0
4238}
4239
4240func Xgethostbyname(tls *TLS, name uintptr) uintptr { /* gethostbyname.c:8:16: */
4241 return Xgethostbyname2(tls, name, 2)
4242}
4243
4244func Xgethostbyname2(tls *TLS, name uintptr, af int32) uintptr { /* gethostbyname2.c:8:16: */
4245 bp := tls.Alloc(8)
4246 defer tls.Free(8)
4247
4248 var size size_t = uint64(63)
4249 // var res uintptr at bp, 8
4250
4251 var err int32
4252 for ok := true; ok; ok = err == 34 {
4253 Xfree(tls, _sh1)
4254 _sh1 = Xmalloc(tls, AssignAddUint64(&size, size+uint64(1)))
4255 if !(_sh1 != 0) {
4256 *(*int32)(unsafe.Pointer(X__h_errno_location(tls))) = 3
4257 return uintptr(0)
4258 }
4259 err = Xgethostbyname2_r(tls, name, af, _sh1,
4260 _sh1+uintptr(1)*32, size-size_t(unsafe.Sizeof(hostent{})), bp, X__h_errno_location(tls))
4261 }
4262 if err != 0 {
4263 return uintptr(0)
4264 }
4265 return _sh1
4266}
4267
4268var _sh1 uintptr /* gethostbyname2.c:10:24: */
4269
4270func 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: */
4271 bp := tls.Alloc(1600)
4272 defer tls.Free(1600)
4273
4274 // var addrs [48]address at bp, 1344
4275
4276 // var canon [256]uint8 at bp+1344, 256
4277
4278 var i int32
4279 var cnt int32
4280 var align size_t
4281 var need size_t
4282
4283 *(*uintptr)(unsafe.Pointer(res)) = uintptr(0)
4284 cnt = X__lookup_name(tls, bp, bp+1344, name, af, 0x02)
4285 if cnt < 0 {
4286 switch cnt {
4287 case -2:
4288 *(*int32)(unsafe.Pointer(err)) = 1
4289 return 2
4290 fallthrough
4291 case -3:
4292 *(*int32)(unsafe.Pointer(err)) = 2
4293 return 11
4294 fallthrough
4295 default:
4296 fallthrough
4297 case -4:
4298 *(*int32)(unsafe.Pointer(err)) = 3
4299 return 74
4300 fallthrough
4301 case -10:
4302 fallthrough
4303 case -11:
4304 *(*int32)(unsafe.Pointer(err)) = 3
4305 return *(*int32)(unsafe.Pointer(X___errno_location(tls)))
4306 }
4307 }
4308
4309 (*hostent)(unsafe.Pointer(h)).h_addrtype = af
4310 (*hostent)(unsafe.Pointer(h)).h_length = func() int32 {
4311 if af == 10 {
4312 return 16
4313 }
4314 return 4
4315 }()
4316
4317 // Align buffer
4318 align = -uintptr_t(buf) & (uint64(unsafe.Sizeof(uintptr(0))) - uint64(1))
4319
4320 need = uint64(4) * uint64(unsafe.Sizeof(uintptr(0)))
4321 need = need + uint64(cnt+1)*(uint64(unsafe.Sizeof(uintptr(0)))+uint64((*hostent)(unsafe.Pointer(h)).h_length))
4322 need = need + (Xstrlen(tls, name) + uint64(1))
4323 need = need + (Xstrlen(tls, bp+1344) + uint64(1))
4324 need = need + align
4325
4326 if need > buflen {
4327 return 34
4328 }
4329
4330 buf += uintptr(align)
4331 (*hostent)(unsafe.Pointer(h)).h_aliases = buf
4332 buf += uintptr(uint64(3) * uint64(unsafe.Sizeof(uintptr(0))))
4333 (*hostent)(unsafe.Pointer(h)).h_addr_list = buf
4334 buf += uintptr(uint64(cnt+1) * uint64(unsafe.Sizeof(uintptr(0))))
4335
4336 for i = 0; i < cnt; i++ {
4337 *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_addr_list + uintptr(i)*8)) = buf
4338 buf += uintptr((*hostent)(unsafe.Pointer(h)).h_length)
4339 Xmemcpy(tls, *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_addr_list + uintptr(i)*8)), bp+uintptr(i)*28+8, uint64((*hostent)(unsafe.Pointer(h)).h_length))
4340 }
4341 *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_addr_list + uintptr(i)*8)) = uintptr(0)
4342
4343 (*hostent)(unsafe.Pointer(h)).h_name = AssignPtrUintptr((*hostent)(unsafe.Pointer(h)).h_aliases, buf)
4344 Xstrcpy(tls, (*hostent)(unsafe.Pointer(h)).h_name, bp+1344)
4345 buf += uintptr(Xstrlen(tls, (*hostent)(unsafe.Pointer(h)).h_name) + uint64(1))
4346
4347 if Xstrcmp(tls, (*hostent)(unsafe.Pointer(h)).h_name, name) != 0 {
4348 *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_aliases + 1*8)) = buf
4349 Xstrcpy(tls, *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_aliases + 1*8)), name)
4350 buf += uintptr(Xstrlen(tls, *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_aliases + 1*8))) + uint64(1))
4351 } else {
4352 *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_aliases + 1*8)) = uintptr(0)
4353 }
4354
4355 *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_aliases + 2*8)) = uintptr(0)
4356
4357 *(*uintptr)(unsafe.Pointer(res)) = h
4358 return 0
4359}
4360
4361func Xgethostbyname_r(tls *TLS, name uintptr, h uintptr, buf uintptr, buflen size_t, res uintptr, err uintptr) int32 { /* gethostbyname_r.c:6:5: */
4362 return Xgethostbyname2_r(tls, name, 2, h, buf, buflen, res, err)
4363}
4364
4365type if_nameindex = struct {
4366 if_index uint32
4367 _ [4]byte
4368 if_name uintptr
4369} /* if.h:12:1 */
4370
4371type ifaddr = struct {
4372 ifa_addr struct {
4373 sa_family sa_family_t
4374 sa_data [14]uint8
4375 }
4376 ifa_ifu struct {
4377 ifu_broadaddr struct {
4378 sa_family sa_family_t
4379 sa_data [14]uint8
4380 }
4381 }
4382 ifa_ifp uintptr
4383 ifa_next uintptr
4384} /* if.h:51:1 */
4385
4386type ifmap = struct {
4387 mem_start uint64
4388 mem_end uint64
4389 base_addr uint16
4390 irq uint8
4391 dma uint8
4392 port uint8
4393 _ [3]byte
4394} /* if.h:64:1 */
4395
4396type ifreq = struct {
4397 ifr_ifrn struct{ ifrn_name [16]uint8 }
4398 ifr_ifru struct {
4399 _ [0]uint64
4400 ifru_addr struct {
4401 sa_family sa_family_t
4402 sa_data [14]uint8
4403 }
4404 _ [8]byte
4405 }
4406} /* if.h:76:1 */
4407
4408type ifconf = struct {
4409 ifc_len int32
4410 _ [4]byte
4411 ifc_ifcu struct{ ifcu_buf uintptr }
4412} /* if.h:116:1 */
4413
4414type ns_sect = uint32 /* nameser.h:37:3 */
4415
4416type __ns_msg = struct {
4417 _msg uintptr
4418 _eom uintptr
4419 _id uint16_t
4420 _flags uint16_t
4421 _counts [4]uint16_t
4422 _ [4]byte
4423 _sections [4]uintptr
4424 _sect ns_sect
4425 _rrnum int32
4426 _msg_ptr uintptr
4427} /* nameser.h:39:9 */
4428
4429type ns_msg = __ns_msg /* nameser.h:46:3 */
4430
4431type _ns_flagdata = struct {
4432 mask int32
4433 shift int32
4434} /* nameser.h:48:1 */
4435
4436type __ns_rr = struct {
4437 name [1025]uint8
4438 _ [1]byte
4439 __type uint16_t
4440 rr_class uint16_t
4441 _ [2]byte
4442 ttl uint32_t
4443 rdlength uint16_t
4444 _ [2]byte
4445 rdata uintptr
4446} /* nameser.h:59:9 */
4447
4448type ns_rr = __ns_rr /* nameser.h:66:3 */
4449
4450type ns_flag = uint32 /* nameser.h:87:3 */
4451
4452type ns_opcode = uint32 /* nameser.h:96:3 */
4453
4454type ns_rcode = uint32 /* nameser.h:115:3 */
4455
4456type ns_update_operation = uint32 /* nameser.h:121:3 */
4457
4458type ns_tsig_key1 = struct {
4459 name [1025]uint8
4460 alg [1025]uint8
4461 _ [6]byte
4462 data uintptr
4463 len int32
4464 _ [4]byte
4465} /* nameser.h:123:1 */
4466
4467type ns_tsig_key = ns_tsig_key1 /* nameser.h:128:28 */
4468
4469type ns_tcp_tsig_state1 = struct {
4470 counter int32
4471 _ [4]byte
4472 key uintptr
4473 ctx uintptr
4474 sig [512]uint8
4475 siglen int32
4476 _ [4]byte
4477} /* nameser.h:130:1 */
4478
4479type ns_tcp_tsig_state = ns_tcp_tsig_state1 /* nameser.h:137:34 */
4480
4481type ns_type = uint32 /* nameser.h:200:3 */
4482
4483type ns_class = uint32 /* nameser.h:219:3 */
4484
4485type ns_key_types = uint32 /* nameser.h:226:3 */
4486
4487type ns_cert_types = uint32 /* nameser.h:234:3 */
4488
4489type HEADER = struct {
4490 _ [0]uint32
4491 id 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 */
4492 qdcount uint32 /* unsigned qdcount: 16, unsigned ancount: 16 */
4493 nscount uint32 /* unsigned nscount: 16, unsigned arcount: 16 */
4494} /* nameser.h:353:3 */
4495
4496// unused; purely for broken apps
4497type __res_state = struct {
4498 retrans int32
4499 retry int32
4500 options uint64
4501 nscount int32
4502 nsaddr_list [3]struct {
4503 sin_family sa_family_t
4504 sin_port in_port_t
4505 sin_addr struct{ s_addr in_addr_t }
4506 sin_zero [8]uint8_t
4507 }
4508 id uint16
4509 _ [2]byte
4510 dnsrch [7]uintptr
4511 defdname [256]uint8
4512 pfcode uint64
4513 ndots uint32 /* unsigned ndots: 4, unsigned nsort: 4, unsigned ipv6_unavail: 1, unsigned unused: 23 */
4514 _ [4]byte
4515 sort_list [10]struct {
4516 addr struct{ s_addr in_addr_t }
4517 mask uint32_t
4518 }
4519 qhook uintptr
4520 rhook uintptr
4521 res_h_errno int32
4522 _vcsock int32
4523 _flags uint32
4524 _ [4]byte
4525 _u struct {
4526 _ [0]uint64
4527 pad [52]uint8
4528 _ [4]byte
4529 }
4530} /* resolv.h:26:9 */
4531
4532// unused; purely for broken apps
4533type res_state = uintptr /* resolv.h:62:3 */
4534
4535type res_sym = struct {
4536 number int32
4537 _ [4]byte
4538 name uintptr
4539 humanname uintptr
4540} /* resolv.h:70:1 */
4541
4542func itoa(tls *TLS, p uintptr, x uint32) uintptr { /* getnameinfo.c:18:13: */
4543 p += uintptr(uint64(3) * uint64(unsafe.Sizeof(int32(0))))
4544 *(*uint8)(unsafe.Pointer(PreDecUintptr(&p, 1))) = uint8(0)
4545 for ok := true; ok; ok = x != 0 {
4546 *(*uint8)(unsafe.Pointer(PreDecUintptr(&p, 1))) = uint8(uint32('0') + x%uint32(10))
4547 x = x / uint32(10)
4548 }
4549 return p
4550}
4551
4552func mkptr4(tls *TLS, s uintptr, ip uintptr) { /* getnameinfo.c:28:13: */
4553 bp := tls.Alloc(32)
4554 defer tls.Free(32)
4555
4556 Xsprintf(tls, s, ts+25,
4557 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)))))
4558}
4559
4560func mkptr6(tls *TLS, s uintptr, ip uintptr) { /* getnameinfo.c:34:13: */
4561 var i int32
4562 for i = 15; i >= 0; i-- {
4563 *(*uint8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = _sxdigits[int32(*(*uint8)(unsafe.Pointer(ip + uintptr(i))))&15]
4564 *(*uint8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = uint8('.')
4565 *(*uint8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = _sxdigits[int32(*(*uint8)(unsafe.Pointer(ip + uintptr(i))))>>4]
4566 *(*uint8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = uint8('.')
4567 }
4568 Xstrcpy(tls, s, ts+50)
4569}
4570
4571var _sxdigits = *(*[17]uint8)(unsafe.Pointer(ts + 59)) /* getnameinfo.c:36:20 */
4572
4573func reverse_hosts(tls *TLS, buf uintptr, a uintptr, scopeid uint32, family int32) { /* getnameinfo.c:45:13: */
4574 bp := tls.Alloc(556)
4575 defer tls.Free(556)
4576
4577 // var line [512]uint8 at bp+16, 512
4578
4579 var p uintptr
4580 var z uintptr
4581 var _buf [1032]uint8
4582 _ = _buf
4583 // var atmp [16]uint8 at bp, 16
4584
4585 // var iplit address at bp+528, 28
4586
4587 //TODO FILE _f, *f = __fopen_rb_ca("/etc/hosts", &_f, _buf, sizeof _buf);
4588 var f uintptr = Xfopen(tls, ts+76, ts+87)
4589 if !(f != 0) {
4590 return
4591 }
4592 if family == 2 {
4593 Xmemcpy(tls, bp+uintptr(12), a, uint64(4))
4594 Xmemcpy(tls, bp, ts+90, uint64(12))
4595 a = bp /* &atmp[0] */
4596 }
4597 for Xfgets(tls, bp+16, int32(unsafe.Sizeof([512]uint8{})), f) != 0 {
4598 if AssignUintptr(&p, Xstrchr(tls, bp+16, '#')) != 0 {
4599 *(*uint8)(unsafe.Pointer(PostIncUintptr(&p, 1))) = uint8('\n')
4600 *(*uint8)(unsafe.Pointer(p)) = uint8(0)
4601 }
4602
4603 for p = bp + 16; /* &line[0] */ *(*uint8)(unsafe.Pointer(p)) != 0 && !(__isspace(tls, int32(*(*uint8)(unsafe.Pointer(p)))) != 0); p++ {
4604 }
4605 *(*uint8)(unsafe.Pointer(PostIncUintptr(&p, 1))) = uint8(0)
4606 if X__lookup_ipliteral(tls, bp+528, bp+16, 0) <= 0 {
4607 continue
4608 }
4609
4610 if (*address)(unsafe.Pointer(bp+528)).family == 2 {
4611 Xmemcpy(tls, bp+528+8+uintptr(12), bp+528+8, uint64(4))
4612 Xmemcpy(tls, bp+528+8, ts+90, uint64(12))
4613 (*address)(unsafe.Pointer(bp + 528 /* &iplit */)).scopeid = uint32(0)
4614 }
4615
4616 if Xmemcmp(tls, a, bp+528+8, uint64(16)) != 0 || (*address)(unsafe.Pointer(bp+528)).scopeid != scopeid {
4617 continue
4618 }
4619
4620 for ; *(*uint8)(unsafe.Pointer(p)) != 0 && __isspace(tls, int32(*(*uint8)(unsafe.Pointer(p)))) != 0; p++ {
4621 }
4622 for z = p; *(*uint8)(unsafe.Pointer(z)) != 0 && !(__isspace(tls, int32(*(*uint8)(unsafe.Pointer(z)))) != 0); z++ {
4623 }
4624 *(*uint8)(unsafe.Pointer(z)) = uint8(0)
4625 if (int64(z)-int64(p))/1 < int64(256) {
4626 Xmemcpy(tls, buf, p, uint64((int64(z)-int64(p))/1+int64(1)))
4627 break
4628 }
4629 }
4630 //TODO __fclose_ca(f);
4631 Xfclose(tls, f)
4632}
4633
4634func reverse_services(tls *TLS, buf uintptr, port int32, dgram int32) { /* getnameinfo.c:87:13: */
4635 Xabort(tls) //TODO-
4636 // unsigned long svport;
4637 // char line[128], *p, *z;
4638 // unsigned char _buf[1032];
4639 // FILE _f, *f = __fopen_rb_ca("/etc/services", &_f, _buf, sizeof _buf);
4640 // if (!f) return;
4641 // while (fgets(line, sizeof line, f)) {
4642 // if ((p=strchr(line, '#'))) *p++='\n', *p=0;
4643
4644 // for (p=line; *p && !isspace(*p); p++);
4645 // if (!*p) continue;
4646 // *p++ = 0;
4647 // svport = strtoul(p, &z, 10);
4648
4649 // if (svport != port || z==p) continue;
4650 // if (dgram && strncmp(z, "/udp", 4)) continue;
4651 // if (!dgram && strncmp(z, "/tcp", 4)) continue;
4652 // if (p-line > 32) continue;
4653
4654 // memcpy(buf, line, p-line);
4655 // break;
4656 // }
4657 // __fclose_ca(f);
4658}
4659
4660func Xgetnameinfo(tls *TLS, sa1 uintptr, sl socklen_t, node uintptr, nodelen socklen_t, serv uintptr, servlen socklen_t, flags int32) int32 { /* getnameinfo.c:125:5: */
4661 bp := tls.Alloc(347)
4662 defer tls.Free(347)
4663
4664 // var ptr [78]uint8 at bp, 78
4665
4666 // var buf [256]uint8 at bp+78, 256
4667
4668 // var num [13]uint8 at bp+334, 13
4669
4670 var af int32 = int32((*sockaddr)(unsafe.Pointer(sa1)).sa_family)
4671 var a uintptr
4672 var scopeid uint32
4673
4674 switch af {
4675 case 2:
4676 a = sa1 + 4
4677 if uint64(sl) < uint64(unsafe.Sizeof(sockaddr_in{})) {
4678 return -6
4679 }
4680 mkptr4(tls, bp, a)
4681 scopeid = uint32(0)
4682 break
4683 case 10:
4684 a = sa1 + 8
4685 if uint64(sl) < uint64(unsafe.Sizeof(sockaddr_in6{})) {
4686 return -6
4687 }
4688 if Xmemcmp(tls, a, ts+90, uint64(12)) != 0 {
4689 mkptr6(tls, bp, a)
4690 } else {
4691 mkptr4(tls, bp, a+uintptr(12))
4692 }
4693 scopeid = (*sockaddr_in6)(unsafe.Pointer(sa1)).sin6_scope_id
4694 break
4695 default:
4696 return -6
4697 }
4698
4699 if node != 0 && nodelen != 0 {
4700 *(*uint8)(unsafe.Pointer(bp + 78)) = uint8(0)
4701 if !(flags&0x01 != 0) {
4702 reverse_hosts(tls, bp+78, a, scopeid, af)
4703 }
4704 if !(int32(*(*uint8)(unsafe.Pointer(bp + 78))) != 0) && !(flags&0x01 != 0) {
4705 Xabort(tls) //TODO-
4706 // unsigned char query[18+PTR_MAX], reply[512];
4707 // int qlen = __res_mkquery(0, ptr, 1, RR_PTR,
4708 // 0, 0, 0, query, sizeof query);
4709 // query[3] = 0; /* don't need AD flag */
4710 // int rlen = __res_send(query, qlen, reply, sizeof reply);
4711 // buf[0] = 0;
4712 // if (rlen > 0)
4713 // __dns_parse(reply, rlen, dns_parse_callback, buf);
4714 }
4715 if !(int32(*(*uint8)(unsafe.Pointer(bp + 78))) != 0) {
4716 if flags&0x08 != 0 {
4717 return -2
4718 }
4719 Xinet_ntop(tls, af, a, bp+78, uint32(unsafe.Sizeof([256]uint8{})))
4720 if scopeid != 0 {
4721 Xabort(tls) //TODO-
4722 // char *p = 0, tmp[IF_NAMESIZE+1];
4723 // if (!(flags & NI_NUMERICSCOPE) &&
4724 // (IN6_IS_ADDR_LINKLOCAL(a) ||
4725 // IN6_IS_ADDR_MC_LINKLOCAL(a)))
4726 // p = if_indextoname(scopeid, tmp+1);
4727 // if (!p)
4728 // p = itoa(num, scopeid);
4729 // *--p = '%';
4730 // strcat(buf, p);
4731 }
4732 }
4733 if Xstrlen(tls, bp+78) >= size_t(nodelen) {
4734 return -12
4735 }
4736 Xstrcpy(tls, node, bp+78)
4737 }
4738
4739 if serv != 0 && servlen != 0 {
4740 var p uintptr = bp + 78 /* buf */
4741 var port int32 = int32(Xntohs(tls, (*sockaddr_in)(unsafe.Pointer(sa1)).sin_port))
4742 *(*uint8)(unsafe.Pointer(bp + 78)) = uint8(0)
4743 if !(flags&0x02 != 0) {
4744 reverse_services(tls, bp+78, port, flags&0x10)
4745 }
4746 if !(int32(*(*uint8)(unsafe.Pointer(p))) != 0) {
4747 p = itoa(tls, bp+334, uint32(port))
4748 }
4749 if Xstrlen(tls, p) >= size_t(servlen) {
4750 return -12
4751 }
4752 Xstrcpy(tls, serv, p)
4753 }
4754
4755 return 0
4756}
4757
4758var Xh_errno int32 /* h_errno.c:4:5: */
4759
4760func X__h_errno_location(tls *TLS) uintptr { /* h_errno.c:6:5: */
4761 return uintptr(unsafe.Pointer(&Xh_errno))
4762}
4763
4764func X__inet_aton(tls *TLS, s0 uintptr, dest uintptr) int32 { /* inet_aton.c:7:5: */
4765 bp := tls.Alloc(40)
4766 defer tls.Free(40)
4767
4768 var s uintptr = s0
4769 var d uintptr = dest
4770 *(*[4]uint64)(unsafe.Pointer(bp /* a */)) = [4]uint64{0: uint64(0)}
4771 // var z uintptr at bp+32, 8
4772
4773 var i int32
4774
4775 for i = 0; i < 4; i++ {
4776 *(*uint64)(unsafe.Pointer(bp + uintptr(i)*8)) = Xstrtoul(tls, s, bp+32, 0)
4777 if *(*uintptr)(unsafe.Pointer(bp + 32)) == s || *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))) != 0 && int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32))))) != '.' || !(func() int32 {
4778 if 0 != 0 {
4779 return Xisdigit(tls, int32(*(*uint8)(unsafe.Pointer(s))))
4780 }
4781 return Bool32(uint32(*(*uint8)(unsafe.Pointer(s)))-uint32('0') < uint32(10))
4782 }() != 0) {
4783 return 0
4784 }
4785 if !(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32))))) != 0) {
4786 break
4787 }
4788 s = *(*uintptr)(unsafe.Pointer(bp + 32)) + uintptr(1)
4789 }
4790 if i == 4 {
4791 return 0
4792 }
4793 switch i {
4794 case 0:
4795 *(*uint64)(unsafe.Pointer(bp + 1*8)) = *(*uint64)(unsafe.Pointer(bp)) & uint64(0xffffff)
4796 AssignShrPtrUint64(bp, int(24))
4797 fallthrough
4798 case 1:
4799 *(*uint64)(unsafe.Pointer(bp + 2*8)) = *(*uint64)(unsafe.Pointer(bp + 1*8)) & uint64(0xffff)
4800 AssignShrPtrUint64(bp+1*8, int(16))
4801 fallthrough
4802 case 2:
4803 *(*uint64)(unsafe.Pointer(bp + 3*8)) = *(*uint64)(unsafe.Pointer(bp + 2*8)) & uint64(0xff)
4804 AssignShrPtrUint64(bp+2*8, int(8))
4805 }
4806 for i = 0; i < 4; i++ {
4807 if *(*uint64)(unsafe.Pointer(bp + uintptr(i)*8)) > uint64(255) {
4808 return 0
4809 }
4810 *(*uint8)(unsafe.Pointer(d + uintptr(i))) = uint8(*(*uint64)(unsafe.Pointer(bp + uintptr(i)*8)))
4811 }
4812 return 1
4813}
4814
4815func Xinet_ntop(tls *TLS, af int32, a0 uintptr, s uintptr, l socklen_t) uintptr { /* inet_ntop.c:7:12: */
4816 bp := tls.Alloc(276)
4817 defer tls.Free(276)
4818
4819 var a uintptr = a0
4820 var i int32
4821 var j int32
4822 var max int32
4823 var best int32
4824 // var buf [100]uint8 at bp+176, 100
4825
4826 switch af {
4827 case 2:
4828 if socklen_t(Xsnprintf(tls, s, uint64(l), ts+103, 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 {
4829 return s
4830 }
4831 break
4832 case 10:
4833 if Xmemcmp(tls, a, ts+90, uint64(12)) != 0 {
4834 Xsnprintf(tls, bp+176, uint64(unsafe.Sizeof([100]uint8{})),
4835 ts+115,
4836 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))),
4837 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))),
4838 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))),
4839 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)))))
4840 } else {
4841 Xsnprintf(tls, bp+176, uint64(unsafe.Sizeof([100]uint8{})),
4842 ts+139,
4843 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))),
4844 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))),
4845 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))),
4846 int32(*(*uint8)(unsafe.Pointer(a + 12))), int32(*(*uint8)(unsafe.Pointer(a + 13))), int32(*(*uint8)(unsafe.Pointer(a + 14))), int32(*(*uint8)(unsafe.Pointer(a + 15)))))
4847 }
4848 // Replace longest /(^0|:)[:0]{2,}/ with "::"
4849 i = AssignInt32(&best, 0)
4850 max = 2
4851 for ; *(*uint8)(unsafe.Pointer(bp + 176 + uintptr(i))) != 0; i++ {
4852 if i != 0 && int32(*(*uint8)(unsafe.Pointer(bp + 176 + uintptr(i)))) != ':' {
4853 continue
4854 }
4855 j = int32(Xstrspn(tls, bp+176+uintptr(i), ts+169))
4856 if j > max {
4857 best = i
4858 max = j
4859 }
4860 }
4861 if max > 3 {
4862 *(*uint8)(unsafe.Pointer(bp + 176 + uintptr(best))) = AssignPtrUint8(bp+176+uintptr(best+1), uint8(':'))
4863 Xmemmove(tls, bp+176+uintptr(best)+uintptr(2), bp+176+uintptr(best)+uintptr(max), uint64(i-best-max+1))
4864 }
4865 if Xstrlen(tls, bp+176) < size_t(l) {
4866 Xstrcpy(tls, s, bp+176)
4867 return s
4868 }
4869 break
4870 default:
4871 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 97
4872 return uintptr(0)
4873 }
4874 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 28
4875 return uintptr(0)
4876}
4877
4878func hexval(tls *TLS, c uint32) int32 { /* inet_pton.c:7:12: */
4879 if c-uint32('0') < uint32(10) {
4880 return int32(c - uint32('0'))
4881 }
4882 c = c | uint32(32)
4883 if c-uint32('a') < uint32(6) {
4884 return int32(c - uint32('a') + uint32(10))
4885 }
4886 return -1
4887}
4888
4889func Xinet_pton(tls *TLS, af int32, s uintptr, a0 uintptr) int32 { /* inet_pton.c:15:5: */
4890 bp := tls.Alloc(16)
4891 defer tls.Free(16)
4892
4893 // var ip [8]uint16_t at bp, 16
4894
4895 var a uintptr = a0
4896 var i int32
4897 var j int32
4898 var v int32
4899 var d int32
4900 var brk int32 = -1
4901 var need_v4 int32 = 0
4902
4903 if af == 2 {
4904 for i = 0; i < 4; i++ {
4905 for v = AssignInt32(&j, 0); j < 3 && func() int32 {
4906 if 0 != 0 {
4907 return Xisdigit(tls, int32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))))
4908 }
4909 return Bool32(uint32(*(*uint8)(unsafe.Pointer(s + uintptr(j))))-uint32('0') < uint32(10))
4910 }() != 0; j++ {
4911 v = 10*v + int32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))) - '0'
4912 }
4913 if j == 0 || j > 1 && int32(*(*uint8)(unsafe.Pointer(s))) == '0' || v > 255 {
4914 return 0
4915 }
4916 *(*uint8)(unsafe.Pointer(a + uintptr(i))) = uint8(v)
4917 if int32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))) == 0 && i == 3 {
4918 return 1
4919 }
4920 if int32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))) != '.' {
4921 return 0
4922 }
4923 s += uintptr(j + 1)
4924 }
4925 return 0
4926 } else if af != 10 {
4927 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 97
4928 return -1
4929 }
4930
4931 if int32(*(*uint8)(unsafe.Pointer(s))) == ':' && int32(*(*uint8)(unsafe.Pointer(PreIncUintptr(&s, 1)))) != ':' {
4932 return 0
4933 }
4934
4935 for i = 0; ; i++ {
4936 if int32(*(*uint8)(unsafe.Pointer(s))) == ':' && brk < 0 {
4937 brk = i
4938 *(*uint16_t)(unsafe.Pointer(bp + uintptr(i&7)*2)) = uint16_t(0)
4939 if !(int32(*(*uint8)(unsafe.Pointer(PreIncUintptr(&s, 1)))) != 0) {
4940 break
4941 }
4942 if i == 7 {
4943 return 0
4944 }
4945 continue
4946 }
4947 for v = AssignInt32(&j, 0); j < 4 && AssignInt32(&d, hexval(tls, uint32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))))) >= 0; j++ {
4948 v = 16*v + d
4949 }
4950 if j == 0 {
4951 return 0
4952 }
4953 *(*uint16_t)(unsafe.Pointer(bp + uintptr(i&7)*2)) = uint16_t(v)
4954 if !(int32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))) != 0) && (brk >= 0 || i == 7) {
4955 break
4956 }
4957 if i == 7 {
4958 return 0
4959 }
4960 if int32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))) != ':' {
4961 if int32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))) != '.' || i < 6 && brk < 0 {
4962 return 0
4963 }
4964 need_v4 = 1
4965 i++
4966 break
4967 }
4968 s += uintptr(j + 1)
4969 }
4970 if brk >= 0 {
4971 Xmemmove(tls, bp+uintptr(brk)*2+uintptr(7)*2-uintptr(i)*2, bp+uintptr(brk)*2, uint64(2*(i+1-brk)))
4972 for j = 0; j < 7-i; j++ {
4973 *(*uint16_t)(unsafe.Pointer(bp + uintptr(brk+j)*2)) = uint16_t(0)
4974 }
4975 }
4976 for j = 0; j < 8; j++ {
4977 *(*uint8)(unsafe.Pointer(PostIncUintptr(&a, 1))) = uint8(int32(*(*uint16_t)(unsafe.Pointer(bp + uintptr(j)*2))) >> 8)
4978 *(*uint8)(unsafe.Pointer(PostIncUintptr(&a, 1))) = uint8(*(*uint16_t)(unsafe.Pointer(bp + uintptr(j)*2)))
4979 }
4980 if need_v4 != 0 && Xinet_pton(tls, 2, s, a-uintptr(4)) <= 0 {
4981 return 0
4982 }
4983 return 1
4984}
4985
4986func X__lookup_ipliteral(tls *TLS, buf uintptr, name uintptr, family int32) int32 { /* lookup_ipliteral.c:12:5: */
4987 bp := tls.Alloc(96)
4988 defer tls.Free(96)
4989
4990 // var a4 in_addr at bp, 4
4991
4992 // var a6 in6_addr at bp+68, 16
4993
4994 if X__inet_aton(tls, name, bp) > 0 {
4995 if family == 10 { // wrong family
4996 return -2
4997 }
4998 Xmemcpy(tls, buf+8, bp, uint64(unsafe.Sizeof(in_addr{})))
4999 (*address)(unsafe.Pointer(buf)).family = 2
5000 (*address)(unsafe.Pointer(buf)).scopeid = uint32(0)
5001 return 1
5002 }
5003 // var tmp [64]uint8 at bp+4, 64
5004
5005 var p uintptr = Xstrchr(tls, name, '%')
5006 // var z uintptr at bp+88, 8
5007
5008 var scopeid uint64 = uint64(0)
5009 if p != 0 && (int64(p)-int64(name))/1 < int64(64) {
5010 Xmemcpy(tls, bp+4, name, uint64((int64(p)-int64(name))/1))
5011 *(*uint8)(unsafe.Pointer(bp + 4 + uintptr((int64(p)-int64(name))/1))) = uint8(0)
5012 name = bp + 4 /* &tmp[0] */
5013 }
5014
5015 if Xinet_pton(tls, 10, name, bp+68) <= 0 {
5016 return 0
5017 }
5018 if family == 2 { // wrong family
5019 return -2
5020 }
5021
5022 Xmemcpy(tls, buf+8, bp+68, uint64(unsafe.Sizeof(in6_addr{})))
5023 (*address)(unsafe.Pointer(buf)).family = 10
5024 if p != 0 {
5025 if func() int32 {
5026 if 0 != 0 {
5027 return Xisdigit(tls, int32(*(*uint8)(unsafe.Pointer(PreIncUintptr(&p, 1)))))
5028 }
5029 return Bool32(uint32(*(*uint8)(unsafe.Pointer(PreIncUintptr(&p, 1))))-uint32('0') < uint32(10))
5030 }() != 0 {
5031 scopeid = Xstrtoull(tls, p, bp+88, 10)
5032 } else {
5033 *(*uintptr)(unsafe.Pointer(bp + 88 /* z */)) = p - uintptr(1)
5034 }
5035 if *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 88)))) != 0 {
5036 Xabort(tls) //TODO-
5037 // if (!IN6_IS_ADDR_LINKLOCAL(&a6) &&
5038 // !IN6_IS_ADDR_MC_LINKLOCAL(&a6))
5039 // return EAI_NONAME;
5040 // scopeid = if_nametoindex(p);
5041 // if (!scopeid) return EAI_NONAME;
5042 }
5043 if scopeid > uint64(0xffffffff) {
5044 return -2
5045 }
5046 }
5047 (*address)(unsafe.Pointer(buf)).scopeid = uint32(scopeid)
5048 return 1
5049}
5050
5051func is_valid_hostname(tls *TLS, host uintptr) int32 { /* lookup_name.c:18:12: */
5052 var s uintptr
5053 //TODO if (strnlen(host, 255)-1 >= 254 || mbstowcs(0, host, 0) == -1) return 0;
5054 if Xstrnlen(tls, host, uint64(255))-uint64(1) >= uint64(254) {
5055 return 0
5056 }
5057 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++ {
5058 }
5059 return BoolInt32(!(*(*uint8)(unsafe.Pointer(s)) != 0))
5060}
5061
5062var Xzero_struct_address address /* lookup_name.c:27:16: */
5063
5064func name_from_null(tls *TLS, buf uintptr, name uintptr, family int32, flags int32) int32 { /* lookup_name.c:29:12: */
5065 var cnt int32 = 0
5066 if name != 0 {
5067 return 0
5068 }
5069 if flags&0x01 != 0 {
5070 //TODO if (family != AF_INET6)
5071 //TODO buf[cnt++] = (struct address){ .family = AF_INET };
5072 if family != 10 {
5073 var x = Xzero_struct_address
5074 x.family = 2
5075 *(*address)(unsafe.Pointer(buf + uintptr(PostIncInt32(&cnt, 1))*28)) = x
5076 }
5077 //TODO if (family != AF_INET)
5078 //TODO buf[cnt++] = (struct address){ .family = AF_INET6 };
5079 if family != 2 {
5080 var x = Xzero_struct_address
5081 x.family = 10
5082 *(*address)(unsafe.Pointer(buf + uintptr(PostIncInt32(&cnt, 1))*28)) = x
5083 }
5084 } else {
5085 Xabort(tls) //TODO-
5086 // if (family != AF_INET6)
5087 // buf[cnt++] = (struct address){ .family = AF_INET, .addr = { 127,0,0,1 } };
5088 // if (family != AF_INET)
5089 // buf[cnt++] = (struct address){ .family = AF_INET6, .addr = { [15] = 1 } };
5090 }
5091 return cnt
5092}
5093
5094func name_from_numeric(tls *TLS, buf uintptr, name uintptr, family int32) int32 { /* lookup_name.c:58:12: */
5095 return X__lookup_ipliteral(tls, buf, name, family)
5096}
5097
5098func name_from_hosts(tls *TLS, buf uintptr, canon uintptr, name uintptr, family int32) int32 { /* lookup_name.c:63:12: */
5099 bp := tls.Alloc(512)
5100 defer tls.Free(512)
5101
5102 // var line [512]uint8 at bp, 512
5103
5104 var l size_t = Xstrlen(tls, name)
5105 var cnt int32 = 0
5106 var badfam int32 = 0
5107 var _buf [1032]uint8
5108 _ = _buf
5109 //TODO FILE _f, *f = __fopen_rb_ca("/etc/hosts", &_f, _buf, sizeof _buf);
5110 var _f FILE
5111 _ = _f
5112 var f uintptr = Xfopen(tls, ts+76, ts+87)
5113 if !(f != 0) {
5114 switch *(*int32)(unsafe.Pointer(X___errno_location(tls))) {
5115 case 2:
5116 fallthrough
5117 case 20:
5118 fallthrough
5119 case 13:
5120 return 0
5121 fallthrough
5122 default:
5123 return -11
5124 }
5125 }
5126 for Xfgets(tls, bp, int32(unsafe.Sizeof([512]uint8{})), f) != 0 && cnt < 48 {
5127 var p uintptr
5128 var z uintptr
5129
5130 if AssignUintptr(&p, Xstrchr(tls, bp, '#')) != 0 {
5131 *(*uint8)(unsafe.Pointer(PostIncUintptr(&p, 1))) = uint8('\n')
5132 *(*uint8)(unsafe.Pointer(p)) = uint8(0)
5133 }
5134 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++ {
5135 }
5136 if !(p != 0) {
5137 continue
5138 }
5139
5140 // Isolate IP address to parse
5141 for p = bp; /* &line[0] */ *(*uint8)(unsafe.Pointer(p)) != 0 && !(__isspace(tls, int32(*(*uint8)(unsafe.Pointer(p)))) != 0); p++ {
5142 }
5143 *(*uint8)(unsafe.Pointer(PostIncUintptr(&p, 1))) = uint8(0)
5144 switch name_from_numeric(tls, buf+uintptr(cnt)*28, bp, family) {
5145 case 1:
5146 cnt++
5147 break
5148 case 0:
5149 continue
5150 default:
5151 badfam = -2
5152 continue
5153 }
5154
5155 // Extract first name as canonical name
5156 for ; *(*uint8)(unsafe.Pointer(p)) != 0 && __isspace(tls, int32(*(*uint8)(unsafe.Pointer(p)))) != 0; p++ {
5157 }
5158 for z = p; *(*uint8)(unsafe.Pointer(z)) != 0 && !(__isspace(tls, int32(*(*uint8)(unsafe.Pointer(z)))) != 0); z++ {
5159 }
5160 *(*uint8)(unsafe.Pointer(z)) = uint8(0)
5161 if is_valid_hostname(tls, p) != 0 {
5162 Xmemcpy(tls, canon, p, uint64((int64(z)-int64(p))/1+int64(1)))
5163 }
5164 }
5165 //TODO __fclose_ca(f);
5166 Xfclose(tls, f)
5167 if cnt != 0 {
5168 return cnt
5169 }
5170 return badfam
5171}
5172
5173type dpc_ctx = struct {
5174 addrs uintptr
5175 canon uintptr
5176 cnt int32
5177 _ [4]byte
5178} /* lookup_name.c:112:1 */
5179
5180func name_from_dns_search(tls *TLS, buf uintptr, canon uintptr, name uintptr, family int32) int32 { /* lookup_name.c:191:12: */
5181 return -1 //TODO-
5182 Xabort(tls)
5183 return int32(0) //TODO-
5184 // char search[256];
5185 // struct resolvconf conf;
5186 // size_t l, dots;
5187 // char *p, *z;
5188
5189 // if (__get_resolv_conf(&conf, search, sizeof search) < 0) return -1;
5190
5191 // /* Count dots, suppress search when >=ndots or name ends in
5192 // * a dot, which is an explicit request for global scope. */
5193 // for (dots=l=0; name[l]; l++) if (name[l]=='.') dots++;
5194 // if (dots >= conf.ndots || name[l-1]=='.') *search = 0;
5195
5196 // /* Strip final dot for canon, fail if multiple trailing dots. */
5197 // if (name[l-1]=='.') l--;
5198 // if (!l || name[l-1]=='.') return EAI_NONAME;
5199
5200 // /* This can never happen; the caller already checked length. */
5201 // if (l >= 256) return EAI_NONAME;
5202
5203 // /* Name with search domain appended is setup in canon[]. This both
5204 // * provides the desired default canonical name (if the requested
5205 // * name is not a CNAME record) and serves as a buffer for passing
5206 // * the full requested name to name_from_dns. */
5207 // memcpy(canon, name, l);
5208 // canon[l] = '.';
5209
5210 // for (p=search; *p; p=z) {
5211 // for (; isspace(*p); p++);
5212 // for (z=p; *z && !isspace(*z); z++);
5213 // if (z==p) break;
5214 // if (z-p < 256 - l - 1) {
5215 // memcpy(canon+l+1, p, z-p);
5216 // canon[z-p+1+l] = 0;
5217 // int cnt = name_from_dns(buf, canon, canon, family, &conf);
5218 // if (cnt) return cnt;
5219 // }
5220 // }
5221
5222 // canon[l] = 0;
5223 // return name_from_dns(buf, canon, name, family, &conf);
5224}
5225
5226type policy = struct {
5227 addr [16]uint8
5228 len uint8
5229 mask uint8
5230 prec uint8
5231 label uint8
5232} /* lookup_name.c:237:14 */
5233
5234var defpolicy = [6]policy{
5235 {addr: *(*[16]uint8)(unsafe.Pointer(ts + 172)), len: uint8(15), mask: uint8(0xff), prec: uint8(50)},
5236 {addr: *(*[16]uint8)(unsafe.Pointer(ts + 189)), len: uint8(11), mask: uint8(0xff), prec: uint8(35), label: uint8(4)},
5237 {addr: *(*[16]uint8)(unsafe.Pointer(ts + 205)), len: uint8(1), mask: uint8(0xff), prec: uint8(30), label: uint8(2)},
5238 {addr: *(*[16]uint8)(unsafe.Pointer(ts + 221)), len: uint8(3), mask: uint8(0xff), prec: uint8(5), label: uint8(5)},
5239 {addr: *(*[16]uint8)(unsafe.Pointer(ts + 237)), mask: uint8(0xfe), prec: uint8(3), label: uint8(13)},
5240 // Last rule must match all addresses to stop loop.
5241 {addr: *(*[16]uint8)(unsafe.Pointer(ts + 253)), prec: uint8(40), label: uint8(1)},
5242} /* lookup_name.c:241:3 */
5243
5244func policyof(tls *TLS, a uintptr) uintptr { /* lookup_name.c:259:28: */
5245 var i int32
5246 for i = 0; ; i++ {
5247 if Xmemcmp(tls, a, uintptr(unsafe.Pointer(&defpolicy))+uintptr(i)*20, uint64(defpolicy[i].len)) != 0 {
5248 continue
5249 }
5250 if int32(*(*uint8_t)(unsafe.Pointer(a + uintptr(defpolicy[i].len))))&int32(defpolicy[i].mask) !=
5251 int32(*(*uint8)(unsafe.Pointer(uintptr(unsafe.Pointer(&defpolicy)) + uintptr(i)*20 + uintptr(defpolicy[i].len)))) {
5252 continue
5253 }
5254 return uintptr(unsafe.Pointer(&defpolicy)) + uintptr(i)*20
5255 }
5256 return uintptr(0)
5257}
5258
5259func labelof(tls *TLS, a uintptr) int32 { /* lookup_name.c:272:12: */
5260 return int32((*policy)(unsafe.Pointer(policyof(tls, a))).label)
5261}
5262
5263func scopeof(tls *TLS, a uintptr) int32 { /* lookup_name.c:277:12: */
5264 if int32(*(*uint8_t)(unsafe.Pointer(a))) == 0xff {
5265 return int32(*(*uint8_t)(unsafe.Pointer(a + 1))) & 15
5266 }
5267 if int32(*(*uint8_t)(unsafe.Pointer(a))) == 0xfe && int32(*(*uint8_t)(unsafe.Pointer(a + 1)))&0xc0 == 0x80 {
5268 return 2
5269 }
5270 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 {
5271 return 2
5272 }
5273 if int32(*(*uint8_t)(unsafe.Pointer(a))) == 0xfe && int32(*(*uint8_t)(unsafe.Pointer(a + 1)))&0xc0 == 0xc0 {
5274 return 5
5275 }
5276 return 14
5277}
5278
5279func prefixmatch(tls *TLS, s uintptr, d uintptr) int32 { /* lookup_name.c:286:12: */
5280 // FIXME: The common prefix length should be limited to no greater
5281 // than the nominal length of the prefix portion of the source
5282 // address. However the definition of the source prefix length is
5283 // not clear and thus this limiting is not yet implemented.
5284 var i uint32
5285 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++ {
5286 }
5287 return int32(i)
5288}
5289
5290func addrcmp(tls *TLS, _a uintptr, _b uintptr) int32 { /* lookup_name.c:305:12: */
5291 var a uintptr = _a
5292 var b uintptr = _b
5293 return (*address)(unsafe.Pointer(b)).sortkey - (*address)(unsafe.Pointer(a)).sortkey
5294}
5295
5296func X__lookup_name(tls *TLS, buf uintptr, canon uintptr, name uintptr, family int32, flags int32) int32 { /* lookup_name.c:311:5: */
5297 bp := tls.Alloc(92)
5298 defer tls.Free(92)
5299
5300 var cnt int32 = 0
5301 var i int32
5302 var j int32
5303 _ = j
5304
5305 *(*uint8)(unsafe.Pointer(canon)) = uint8(0)
5306 if name != 0 {
5307 // reject empty name and check len so it fits into temp bufs
5308 var l size_t = Xstrnlen(tls, name, uint64(255))
5309 if l-uint64(1) >= uint64(254) {
5310 return -2
5311 }
5312 Xmemcpy(tls, canon, name, l+uint64(1))
5313 }
5314
5315 // Procedurally, a request for v6 addresses with the v4-mapped
5316 // flag set is like a request for unspecified family, followed
5317 // by filtering of the results.
5318 if flags&0x08 != 0 {
5319 if family == 10 {
5320 family = 0
5321 } else {
5322 flags = flags - 0x08
5323 }
5324 }
5325
5326 // Try each backend until there's at least one result.
5327 cnt = name_from_null(tls, buf, name, family, flags)
5328 if !(cnt != 0) {
5329 cnt = name_from_numeric(tls, buf, name, family)
5330 }
5331 if !(cnt != 0) && !(flags&0x04 != 0) {
5332 cnt = name_from_hosts(tls, buf, canon, name, family)
5333 if !(cnt != 0) {
5334 cnt = name_from_dns_search(tls, buf, canon, name, family)
5335 }
5336 }
5337 if cnt <= 0 {
5338 if cnt != 0 {
5339 return cnt
5340 }
5341 return -2
5342 }
5343
5344 // Filter/transform results for v4-mapped lookup, if requested.
5345 if flags&0x08 != 0 {
5346 Xabort(tls) //TODO-
5347 // if (!(flags & AI_ALL)) {
5348 // /* If any v6 results exist, remove v4 results. */
5349 // for (i=0; i<cnt && buf[i].family != AF_INET6; i++);
5350 // if (i<cnt) {
5351 // for (j=0; i<cnt; i++) {
5352 // if (buf[i].family == AF_INET6)
5353 // buf[j++] = buf[i];
5354 // }
5355 // cnt = i = j;
5356 // }
5357 // }
5358 // /* Translate any remaining v4 results to v6 */
5359 // for (i=0; i<cnt; i++) {
5360 // if (buf[i].family != AF_INET) continue;
5361 // memcpy(buf[i].addr+12, buf[i].addr, 4);
5362 // memcpy(buf[i].addr, "\0\0\0\0\0\0\0\0\0\0\xff\xff", 12);
5363 // buf[i].family = AF_INET6;
5364 // }
5365 }
5366
5367 // No further processing is needed if there are fewer than 2
5368 // results or if there are only IPv4 results.
5369 if cnt < 2 || family == 2 {
5370 return cnt
5371 }
5372 for i = 0; i < cnt; i++ {
5373 if (*address)(unsafe.Pointer(buf+uintptr(i)*28)).family != 2 {
5374 break
5375 }
5376 }
5377 if i == cnt {
5378 return cnt
5379 }
5380 var cs int32
5381 _ = cs
5382 //TODO pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &cs);
5383
5384 // The following implements a subset of RFC 3484/6724 destination
5385 // address selection by generating a single 31-bit sort key for
5386 // each address. Rules 3, 4, and 7 are omitted for having
5387 // excessive runtime and code size cost and dubious benefit.
5388 // So far the label/precedence table cannot be customized.
5389 for i = 0; i < cnt; i++ {
5390 var family int32 = (*address)(unsafe.Pointer(buf + uintptr(i)*28)).family
5391 var key int32 = 0
5392 *(*sockaddr_in6)(unsafe.Pointer(bp + 28 /* sa6 */)) = sockaddr_in6{}
5393 *(*sockaddr_in6)(unsafe.Pointer(bp /* da6 */)) = sockaddr_in6{sin6_family: sa_family_t(10), sin6_port: in_port_t(65535), sin6_scope_id: (*address)(unsafe.Pointer(buf + uintptr(i)*28)).scopeid}
5394 *(*sockaddr_in)(unsafe.Pointer(bp + 72 /* sa4 */)) = sockaddr_in{}
5395 *(*sockaddr_in)(unsafe.Pointer(bp + 56 /* da4 */)) = sockaddr_in{sin_family: sa_family_t(2), sin_port: in_port_t(65535)}
5396 var sa1 uintptr
5397 var da uintptr
5398 // var salen socklen_t at bp+88, 4
5399
5400 var dalen socklen_t
5401 if family == 10 {
5402 Xmemcpy(tls, bp+8, buf+uintptr(i)*28+8, uint64(16))
5403 da = bp /* &da6 */
5404 dalen = socklen_t(unsafe.Sizeof(sockaddr_in6{}))
5405 sa1 = bp + 28 /* &sa6 */
5406 *(*socklen_t)(unsafe.Pointer(bp + 88 /* salen */)) = socklen_t(unsafe.Sizeof(sockaddr_in6{}))
5407 } else {
5408 Xmemcpy(tls, bp+28+8,
5409 ts+90, uint64(12))
5410 Xmemcpy(tls, bp+8+uintptr(12), buf+uintptr(i)*28+8, uint64(4))
5411 Xmemcpy(tls, bp+8,
5412 ts+90, uint64(12))
5413 Xmemcpy(tls, bp+8+uintptr(12), buf+uintptr(i)*28+8, uint64(4))
5414 Xmemcpy(tls, bp+56+4, buf+uintptr(i)*28+8, uint64(4))
5415 da = bp + 56 /* &da4 */
5416 dalen = socklen_t(unsafe.Sizeof(sockaddr_in{}))
5417 sa1 = bp + 72 /* &sa4 */
5418 *(*socklen_t)(unsafe.Pointer(bp + 88 /* salen */)) = socklen_t(unsafe.Sizeof(sockaddr_in{}))
5419 }
5420 var dpolicy uintptr = policyof(tls, bp+8)
5421 var dscope int32 = scopeof(tls, bp+8)
5422 var dlabel int32 = int32((*policy)(unsafe.Pointer(dpolicy)).label)
5423 var dprec int32 = int32((*policy)(unsafe.Pointer(dpolicy)).prec)
5424 var prefixlen int32 = 0
5425 var fd int32 = Xsocket(tls, family, 2|02000000, 17)
5426 if fd >= 0 {
5427 if !(Xconnect(tls, fd, da, dalen) != 0) {
5428 key = key | 0x40000000
5429 if !(Xgetsockname(tls, fd, sa1, bp+88) != 0) {
5430 if family == 2 {
5431 Xmemcpy(tls,
5432 bp+28+8+uintptr(12),
5433 bp+72+4, uint64(4))
5434 }
5435 if dscope == scopeof(tls, bp+28+8) {
5436 key = key | 0x20000000
5437 }
5438 if dlabel == labelof(tls, bp+28+8) {
5439 key = key | 0x10000000
5440 }
5441 prefixlen = prefixmatch(tls, bp+28+8,
5442 bp+8)
5443 }
5444 }
5445 Xclose(tls, fd)
5446 }
5447 key = key | dprec<<20
5448 key = key | (15-dscope)<<16
5449 key = key | prefixlen<<8
5450 key = key | (48-i)<<0
5451 (*address)(unsafe.Pointer(buf + uintptr(i)*28)).sortkey = key
5452 }
5453 Xqsort(tls, buf, uint64(cnt), uint64(unsafe.Sizeof(address{})), *(*uintptr)(unsafe.Pointer(&struct {
5454 f func(*TLS, uintptr, uintptr) int32
5455 }{addrcmp})))
5456
5457 //TODO pthread_setcancelstate(cs, 0);
5458
5459 return cnt
5460}
5461
5462func X__lookup_serv(tls *TLS, buf uintptr, name uintptr, proto int32, socktype int32, flags int32) int32 { /* lookup_serv.c:12:5: */
5463 bp := tls.Alloc(8)
5464 defer tls.Free(8)
5465
5466 var line [128]uint8
5467 _ = line
5468 var cnt int32 = 0
5469 var p uintptr
5470 _ = p
5471 *(*uintptr)(unsafe.Pointer(bp /* z */)) = ts + 13 /* "" */
5472 var port uint64 = uint64(0)
5473
5474 switch socktype {
5475 case 1:
5476 switch proto {
5477 case 0:
5478 proto = 6
5479 fallthrough
5480 case 6:
5481 break
5482 default:
5483 return -8
5484 }
5485 break
5486 case 2:
5487 switch proto {
5488 case 0:
5489 proto = 17
5490 fallthrough
5491 case 17:
5492 break
5493 default:
5494 return -8
5495 }
5496 fallthrough
5497 case 0:
5498 break
5499 default:
5500 if name != 0 {
5501 return -8
5502 }
5503 (*service)(unsafe.Pointer(buf)).port = uint16_t(0)
5504 (*service)(unsafe.Pointer(buf)).proto = uint8(proto)
5505 (*service)(unsafe.Pointer(buf)).socktype = uint8(socktype)
5506 return 1
5507 }
5508
5509 if name != 0 {
5510 if !(int32(*(*uint8)(unsafe.Pointer(name))) != 0) {
5511 return -8
5512 }
5513 port = Xstrtoul(tls, name, bp, 10)
5514 }
5515 if !(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp))))) != 0) {
5516 if port > uint64(65535) {
5517 return -8
5518 }
5519 if proto != 17 {
5520 (*service)(unsafe.Pointer(buf + uintptr(cnt)*4)).port = uint16_t(port)
5521 (*service)(unsafe.Pointer(buf + uintptr(cnt)*4)).socktype = uint8(1)
5522 (*service)(unsafe.Pointer(buf + uintptr(PostIncInt32(&cnt, 1))*4)).proto = uint8(6)
5523 }
5524 if proto != 6 {
5525 (*service)(unsafe.Pointer(buf + uintptr(cnt)*4)).port = uint16_t(port)
5526 (*service)(unsafe.Pointer(buf + uintptr(cnt)*4)).socktype = uint8(2)
5527 (*service)(unsafe.Pointer(buf + uintptr(PostIncInt32(&cnt, 1))*4)).proto = uint8(17)
5528 }
5529 return cnt
5530 }
5531
5532 if flags&0x400 != 0 {
5533 return -2
5534 }
5535
5536 var l size_t = Xstrlen(tls, name)
5537 _ = l
5538
5539 Xabort(tls) //TODO-
5540 // unsigned char _buf[1032];
5541 // FILE _f, *f = __fopen_rb_ca("/etc/services", &_f, _buf, sizeof _buf);
5542 // if (!f) switch (errno) {
5543 // case ENOENT:
5544 // case ENOTDIR:
5545 // case EACCES:
5546 // return EAI_SERVICE;
5547 // default:
5548 // return EAI_SYSTEM;
5549 // }
5550
5551 Xabort(tls) //TODO-
5552 // while (fgets(line, sizeof line, f) && cnt < MAXSERVS) {
5553 // if ((p=strchr(line, '#'))) *p++='\n', *p=0;
5554
5555 // /* Find service name */
5556 // for(p=line; (p=strstr(p, name)); p++) {
5557 // if (p>line && !isspace(p[-1])) continue;
5558 // if (p[l] && !isspace(p[l])) continue;
5559 // break;
5560 // }
5561 // if (!p) continue;
5562
5563 // /* Skip past canonical name at beginning of line */
5564 // for (p=line; *p && !isspace(*p); p++);
5565
5566 // port = strtoul(p, &z, 10);
5567 // if (port > 65535 || z==p) continue;
5568 // if (!strncmp(z, "/udp", 4)) {
5569 // if (proto == IPPROTO_TCP) continue;
5570 // buf[cnt].port = port;
5571 // buf[cnt].socktype = SOCK_DGRAM;
5572 // buf[cnt++].proto = IPPROTO_UDP;
5573 // }
5574 // if (!strncmp(z, "/tcp", 4)) {
5575 // if (proto == IPPROTO_UDP) continue;
5576 // buf[cnt].port = port;
5577 // buf[cnt].socktype = SOCK_STREAM;
5578 // buf[cnt++].proto = IPPROTO_TCP;
5579 // }
5580 // }
5581 // __fclose_ca(f);
5582 // return cnt > 0 ? cnt : EAI_SERVICE;
5583 Xabort(tls)
5584 return int32(0) //TODO-
5585}
5586
5587func temper(tls *TLS, x uint32) uint32 { /* rand_r.c:3:17: */
5588 x = x ^ x>>11
5589 x = x ^ x<<7&0x9D2C5680
5590 x = x ^ x<<15&0xEFC60000
5591 x = x ^ x>>18
5592 return x
5593}
5594
5595func Xrand_r(tls *TLS, seed uintptr) int32 { /* rand_r.c:12:5: */
5596 return int32(temper(tls, AssignPtrUint32(seed, *(*uint32)(unsafe.Pointer(seed))*uint32(1103515245)+uint32(12345))) / uint32(2))
5597}
5598
5599func X__lockfile(tls *TLS, f uintptr) int32 { /* __lockfile.c:4:5: */
5600 var owner int32 = (*FILE)(unsafe.Pointer(f)).lock
5601 var tid int32 = (*__pthread)(unsafe.Pointer(__pthread_self(tls))).tid
5602 if owner&CplInt32(0x40000000) == tid {
5603 return 0
5604 }
5605 owner = a_cas(tls, f+140, 0, tid)
5606 if !(owner != 0) {
5607 return 1
5608 }
5609 for AssignInt32(&owner, a_cas(tls, f+140, 0, tid|0x40000000)) != 0 {
5610 if owner&0x40000000 != 0 || a_cas(tls, f+140, owner, owner|0x40000000) == owner {
5611 __futexwait(tls, f+140, owner|0x40000000, 1)
5612 }
5613 }
5614 return 1
5615}
5616
5617func X__unlockfile(tls *TLS, f uintptr) { /* __lockfile.c:19:6: */
5618 if a_swap(tls, f+140, 0)&0x40000000 != 0 {
5619 __wake(tls, f+140, 1, 1)
5620 }
5621}
5622
5623func X__toread(tls *TLS, f uintptr) int32 { /* __toread.c:3:5: */
5624 *(*int32)(unsafe.Pointer(f + 136)) |= (*FILE)(unsafe.Pointer(f)).mode - 1
5625 if (*FILE)(unsafe.Pointer(f)).wpos != (*FILE)(unsafe.Pointer(f)).wbase {
5626 (*struct {
5627 f func(*TLS, uintptr, uintptr, size_t) size_t
5628 })(unsafe.Pointer(&struct{ uintptr }{(*FILE)(unsafe.Pointer(f)).write})).f(tls, f, uintptr(0), uint64(0))
5629 }
5630 (*FILE)(unsafe.Pointer(f)).wpos = AssignPtrUintptr(f+56, AssignPtrUintptr(f+32, uintptr(0)))
5631 if (*FILE)(unsafe.Pointer(f)).flags&uint32(4) != 0 {
5632 *(*uint32)(unsafe.Pointer(f)) |= uint32(32)
5633 return -1
5634 }
5635 (*FILE)(unsafe.Pointer(f)).rpos = AssignPtrUintptr(f+16, (*FILE)(unsafe.Pointer(f)).buf+uintptr((*FILE)(unsafe.Pointer(f)).buf_size))
5636 if (*FILE)(unsafe.Pointer(f)).flags&uint32(16) != 0 {
5637 return -1
5638 }
5639 return 0
5640}
5641
5642func X__toread_needs_stdio_exit(tls *TLS) { /* __toread.c:16:13: */
5643 X__builtin_abort(tls) //TODO-
5644 // __stdio_exit_needed();
5645}
5646
5647// This function assumes it will never be called if there is already
5648// data buffered for reading.
5649
5650func X__uflow(tls *TLS, f uintptr) int32 { /* __uflow.c:6:5: */
5651 bp := tls.Alloc(1)
5652 defer tls.Free(1)
5653
5654 // var c uint8 at bp, 1
5655
5656 if !(X__toread(tls, f) != 0) && (*struct {
5657 f func(*TLS, uintptr, uintptr, size_t) size_t
5658 })(unsafe.Pointer(&struct{ uintptr }{(*FILE)(unsafe.Pointer(f)).read})).f(tls, f, bp, uint64(1)) == uint64(1) {
5659 return int32(*(*uint8)(unsafe.Pointer(bp)))
5660 }
5661 return -1
5662}
5663
5664func Xsscanf(tls *TLS, s uintptr, fmt uintptr, va uintptr) int32 { /* sscanf.c:4:5: */
5665 var ret int32
5666 var ap va_list
5667 _ = ap
5668 ap = va
5669 ret = Xvsscanf(tls, s, fmt, ap)
5670 _ = ap
5671 return ret
5672}
5673
5674type wctrans_t = uintptr /* wctype.h:20:19 */
5675
5676func store_int(tls *TLS, dest uintptr, size int32, i uint64) { /* vfscanf.c:22:13: */
5677 if !(dest != 0) {
5678 return
5679 }
5680 switch size {
5681 case -2:
5682 *(*uint8)(unsafe.Pointer(dest)) = uint8(i)
5683 break
5684 case -1:
5685 *(*int16)(unsafe.Pointer(dest)) = int16(i)
5686 break
5687 case 0:
5688 *(*int32)(unsafe.Pointer(dest)) = int32(i)
5689 break
5690 case 1:
5691 *(*int64)(unsafe.Pointer(dest)) = int64(i)
5692 break
5693 case 3:
5694 *(*int64)(unsafe.Pointer(dest)) = int64(i)
5695 break
5696 }
5697}
5698
5699func arg_n(tls *TLS, ap va_list, n uint32) uintptr { /* vfscanf.c:44:13: */
5700 var p uintptr
5701 var i uint32
5702 var ap2 va_list
5703 _ = ap2
5704 ap2 = ap
5705 for i = n; i > uint32(1); i-- {
5706 VaUintptr(&ap2)
5707 }
5708 p = VaUintptr(&ap2)
5709 _ = ap2
5710 return p
5711}
5712
5713func Xvfscanf(tls *TLS, f uintptr, fmt uintptr, ap va_list) int32 { /* vfscanf.c:56:5: */
5714 bp := tls.Alloc(276)
5715 defer tls.Free(276)
5716
5717 var width int32
5718 var size int32
5719 var alloc int32
5720 var base int32
5721 var p uintptr
5722 var c int32
5723 var t int32
5724 var s uintptr
5725 var wcs uintptr
5726 // var st mbstate_t at bp+268, 8
5727
5728 var dest uintptr
5729 var invert int32
5730 var matches int32
5731 var x uint64
5732 var y float64
5733 var pos off_t
5734 // var scanset [257]uint8 at bp, 257
5735
5736 var i size_t
5737 var k size_t
5738 // var wc wchar_t at bp+260, 4
5739
5740 var __need_unlock int32
5741 var tmp uintptr
5742 var tmp1 uintptr
5743 alloc = 0
5744 dest = uintptr(0)
5745 matches = 0
5746 pos = int64(0)
5747 __need_unlock = func() int32 {
5748 if (*FILE)(unsafe.Pointer(f)).lock >= 0 {
5749 return X__lockfile(tls, f)
5750 }
5751 return 0
5752 }()
5753
5754 if !!(int32((*FILE)(unsafe.Pointer(f)).rpos) != 0) {
5755 goto __1
5756 }
5757 X__toread(tls, f)
5758__1:
5759 ;
5760 if !!(int32((*FILE)(unsafe.Pointer(f)).rpos) != 0) {
5761 goto __2
5762 }
5763 goto input_fail
5764__2:
5765 ;
5766
5767 p = fmt
5768__3:
5769 if !(*(*uint8)(unsafe.Pointer(p)) != 0) {
5770 goto __5
5771 }
5772
5773 alloc = 0
5774
5775 if !(__isspace(tls, int32(*(*uint8)(unsafe.Pointer(p)))) != 0) {
5776 goto __6
5777 }
5778__7:
5779 if !(__isspace(tls, int32(*(*uint8)(unsafe.Pointer(p + 1)))) != 0) {
5780 goto __8
5781 }
5782 p++
5783 goto __7
5784__8:
5785 ;
5786 X__shlim(tls, f, int64(0))
5787__9:
5788 if !(__isspace(tls, func() int32 {
5789 if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend {
5790 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1))))
5791 }
5792 return X__shgetc(tls, f)
5793 }()) != 0) {
5794 goto __10
5795 }
5796 goto __9
5797__10:
5798 ;
5799 if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) {
5800 (*FILE)(unsafe.Pointer(f)).rpos--
5801 } else {
5802 }
5803 pos = pos + ((*FILE)(unsafe.Pointer(f)).shcnt + (int64((*FILE)(unsafe.Pointer(f)).rpos)-int64((*FILE)(unsafe.Pointer(f)).buf))/1)
5804 goto __4
5805__6:
5806 ;
5807 if !(int32(*(*uint8)(unsafe.Pointer(p))) != '%' || int32(*(*uint8)(unsafe.Pointer(p + 1))) == '%') {
5808 goto __11
5809 }
5810 X__shlim(tls, f, int64(0))
5811 if !(int32(*(*uint8)(unsafe.Pointer(p))) == '%') {
5812 goto __12
5813 }
5814 p++
5815__14:
5816 if !(__isspace(tls, AssignInt32(&c, func() int32 {
5817 if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend {
5818 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1))))
5819 }
5820 return X__shgetc(tls, f)
5821 }())) != 0) {
5822 goto __15
5823 }
5824 goto __14
5825__15:
5826 ;
5827 goto __13
5828__12:
5829 c = func() int32 {
5830 if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend {
5831 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1))))
5832 }
5833 return X__shgetc(tls, f)
5834 }()
5835__13:
5836 ;
5837 if !(c != int32(*(*uint8)(unsafe.Pointer(p)))) {
5838 goto __16
5839 }
5840 if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) {
5841 (*FILE)(unsafe.Pointer(f)).rpos--
5842 } else {
5843 }
5844 if !(c < 0) {
5845 goto __17
5846 }
5847 goto input_fail
5848__17:
5849 ;
5850 goto match_fail
5851__16:
5852 ;
5853 pos = pos + ((*FILE)(unsafe.Pointer(f)).shcnt + (int64((*FILE)(unsafe.Pointer(f)).rpos)-int64((*FILE)(unsafe.Pointer(f)).buf))/1)
5854 goto __4
5855__11:
5856 ;
5857
5858 p++
5859 if !(int32(*(*uint8)(unsafe.Pointer(p))) == '*') {
5860 goto __18
5861 }
5862 dest = uintptr(0)
5863 p++
5864 goto __19
5865__18:
5866 if !(func() int32 {
5867 if 0 != 0 {
5868 return Xisdigit(tls, int32(*(*uint8)(unsafe.Pointer(p))))
5869 }
5870 return Bool32(uint32(*(*uint8)(unsafe.Pointer(p)))-uint32('0') < uint32(10))
5871 }() != 0 && int32(*(*uint8)(unsafe.Pointer(p + 1))) == '$') {
5872 goto __20
5873 }
5874 dest = arg_n(tls, ap, uint32(int32(*(*uint8)(unsafe.Pointer(p)))-'0'))
5875 p += uintptr(2)
5876 goto __21
5877__20:
5878 dest = VaUintptr(&ap)
5879__21:
5880 ;
5881__19:
5882 ;
5883
5884 width = 0
5885__22:
5886 if !(func() int32 {
5887 if 0 != 0 {
5888 return Xisdigit(tls, int32(*(*uint8)(unsafe.Pointer(p))))
5889 }
5890 return Bool32(uint32(*(*uint8)(unsafe.Pointer(p)))-uint32('0') < uint32(10))
5891 }() != 0) {
5892 goto __24
5893 }
5894 width = 10*width + int32(*(*uint8)(unsafe.Pointer(p))) - '0'
5895 goto __23
5896__23:
5897 p++
5898 goto __22
5899 goto __24
5900__24:
5901 ;
5902
5903 if !(int32(*(*uint8)(unsafe.Pointer(p))) == 'm') {
5904 goto __25
5905 }
5906 wcs = uintptr(0)
5907 s = uintptr(0)
5908 alloc = BoolInt32(!!(dest != 0))
5909 p++
5910 goto __26
5911__25:
5912 alloc = 0
5913__26:
5914 ;
5915
5916 size = 0
5917 switch int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&p, 1)))) {
5918 case 'h':
5919 goto __28
5920 case 'l':
5921 goto __29
5922 case 'j':
5923 goto __30
5924 case 'z':
5925 goto __31
5926 case 't':
5927 goto __32
5928 case 'L':
5929 goto __33
5930 case 'd':
5931 goto __34
5932 case 'i':
5933 goto __35
5934 case 'o':
5935 goto __36
5936 case 'u':
5937 goto __37
5938 case 'x':
5939 goto __38
5940 case 'a':
5941 goto __39
5942 case 'e':
5943 goto __40
5944 case 'f':
5945 goto __41
5946 case 'g':
5947 goto __42
5948 case 'A':
5949 goto __43
5950 case 'E':
5951 goto __44
5952 case 'F':
5953 goto __45
5954 case 'G':
5955 goto __46
5956 case 'X':
5957 goto __47
5958 case 's':
5959 goto __48
5960 case 'c':
5961 goto __49
5962 case '[':
5963 goto __50
5964 case 'S':
5965 goto __51
5966 case 'C':
5967 goto __52
5968 case 'p':
5969 goto __53
5970 case 'n':
5971 goto __54
5972 default:
5973 goto __55
5974 }
5975 goto __27
5976__28:
5977 if !(int32(*(*uint8)(unsafe.Pointer(p))) == 'h') {
5978 goto __56
5979 }
5980 p++
5981 size = -2
5982 goto __57
5983__56:
5984 size = -1
5985__57:
5986 ;
5987 goto __27
5988__29:
5989 if !(int32(*(*uint8)(unsafe.Pointer(p))) == 'l') {
5990 goto __58
5991 }
5992 p++
5993 size = 3
5994 goto __59
5995__58:
5996 size = 1
5997__59:
5998 ;
5999 goto __27
6000__30:
6001 size = 3
6002 goto __27
6003__31:
6004__32:
6005 size = 1
6006 goto __27
6007__33:
6008 size = 2
6009 goto __27
6010__34:
6011__35:
6012__36:
6013__37:
6014__38:
6015__39:
6016__40:
6017__41:
6018__42:
6019__43:
6020__44:
6021__45:
6022__46:
6023__47:
6024__48:
6025__49:
6026__50:
6027__51:
6028__52:
6029__53:
6030__54:
6031 p--
6032 goto __27
6033__55:
6034 goto fmt_fail
6035__27:
6036 ;
6037
6038 t = int32(*(*uint8)(unsafe.Pointer(p)))
6039
6040 // C or S
6041 if !(t&0x2f == 3) {
6042 goto __60
6043 }
6044 t = t | 32
6045 size = 1
6046__60:
6047 ;
6048
6049 switch t {
6050 case 'c':
6051 goto __62
6052 case '[':
6053 goto __63
6054 case 'n':
6055 goto __64
6056 default:
6057 goto __65
6058 }
6059 goto __61
6060__62:
6061 if !(width < 1) {
6062 goto __66
6063 }
6064 width = 1
6065__66:
6066 ;
6067__63:
6068 goto __61
6069__64:
6070 store_int(tls, dest, size, uint64(pos))
6071 // do not increment match count, etc!
6072 goto __4
6073__65:
6074 X__shlim(tls, f, int64(0))
6075__67:
6076 if !(__isspace(tls, func() int32 {
6077 if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend {
6078 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1))))
6079 }
6080 return X__shgetc(tls, f)
6081 }()) != 0) {
6082 goto __68
6083 }
6084 goto __67
6085__68:
6086 ;
6087 if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) {
6088 (*FILE)(unsafe.Pointer(f)).rpos--
6089 } else {
6090 }
6091 pos = pos + ((*FILE)(unsafe.Pointer(f)).shcnt + (int64((*FILE)(unsafe.Pointer(f)).rpos)-int64((*FILE)(unsafe.Pointer(f)).buf))/1)
6092__61:
6093 ;
6094
6095 X__shlim(tls, f, int64(width))
6096 if !(func() int32 {
6097 if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend {
6098 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1))))
6099 }
6100 return X__shgetc(tls, f)
6101 }() < 0) {
6102 goto __69
6103 }
6104 goto input_fail
6105__69:
6106 ;
6107 if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) {
6108 (*FILE)(unsafe.Pointer(f)).rpos--
6109 } else {
6110 }
6111
6112 switch t {
6113 case 's':
6114 goto __71
6115 case 'c':
6116 goto __72
6117 case '[':
6118 goto __73
6119 case 'p':
6120 goto __74
6121 case 'X':
6122 goto __75
6123 case 'x':
6124 goto __76
6125 case 'o':
6126 goto __77
6127 case 'd':
6128 goto __78
6129 case 'u':
6130 goto __79
6131 case 'i':
6132 goto __80
6133 case 'a':
6134 goto __81
6135 case 'A':
6136 goto __82
6137 case 'e':
6138 goto __83
6139 case 'E':
6140 goto __84
6141 case 'f':
6142 goto __85
6143 case 'F':
6144 goto __86
6145 case 'g':
6146 goto __87
6147 case 'G':
6148 goto __88
6149 }
6150 goto __70
6151__71:
6152__72:
6153__73:
6154 if !(t == 'c' || t == 's') {
6155 goto __89
6156 }
6157 Xmemset(tls, bp, -1, uint64(unsafe.Sizeof([257]uint8{})))
6158 *(*uint8)(unsafe.Pointer(bp)) = uint8(0)
6159 if !(t == 's') {
6160 goto __91
6161 }
6162 *(*uint8)(unsafe.Pointer(bp + 10)) = uint8(0)
6163 *(*uint8)(unsafe.Pointer(bp + 11)) = uint8(0)
6164 *(*uint8)(unsafe.Pointer(bp + 12)) = uint8(0)
6165 *(*uint8)(unsafe.Pointer(bp + 13)) = uint8(0)
6166 *(*uint8)(unsafe.Pointer(bp + 14)) = uint8(0)
6167 *(*uint8)(unsafe.Pointer(bp + 33)) = uint8(0)
6168__91:
6169 ;
6170 goto __90
6171__89:
6172 if !(int32(*(*uint8)(unsafe.Pointer(PreIncUintptr(&p, 1)))) == '^') {
6173 goto __92
6174 }
6175 p++
6176 invert = 1
6177 goto __93
6178__92:
6179 invert = 0
6180__93:
6181 ;
6182 Xmemset(tls, bp, invert, uint64(unsafe.Sizeof([257]uint8{})))
6183 *(*uint8)(unsafe.Pointer(bp)) = uint8(0)
6184 if !(int32(*(*uint8)(unsafe.Pointer(p))) == '-') {
6185 goto __94
6186 }
6187 p++
6188 *(*uint8)(unsafe.Pointer(bp + 46)) = uint8(1 - invert)
6189 goto __95
6190__94:
6191 if !(int32(*(*uint8)(unsafe.Pointer(p))) == ']') {
6192 goto __96
6193 }
6194 p++
6195 *(*uint8)(unsafe.Pointer(bp + 94)) = uint8(1 - invert)
6196__96:
6197 ;
6198__95:
6199 ;
6200__97:
6201 if !(int32(*(*uint8)(unsafe.Pointer(p))) != ']') {
6202 goto __99
6203 }
6204 if !!(int32(*(*uint8)(unsafe.Pointer(p))) != 0) {
6205 goto __100
6206 }
6207 goto fmt_fail
6208__100:
6209 ;
6210 if !(int32(*(*uint8)(unsafe.Pointer(p))) == '-' && *(*uint8)(unsafe.Pointer(p + 1)) != 0 && int32(*(*uint8)(unsafe.Pointer(p + 1))) != ']') {
6211 goto __101
6212 }
6213 c = int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&p, 1) + UintptrFromInt32(-1))))
6214__102:
6215 if !(c < int32(*(*uint8)(unsafe.Pointer(p)))) {
6216 goto __104
6217 }
6218 *(*uint8)(unsafe.Pointer(bp + uintptr(1+c))) = uint8(1 - invert)
6219 goto __103
6220__103:
6221 c++
6222 goto __102
6223 goto __104
6224__104:
6225 ;
6226__101:
6227 ;
6228 *(*uint8)(unsafe.Pointer(bp + uintptr(1+int32(*(*uint8)(unsafe.Pointer(p)))))) = uint8(1 - invert)
6229 goto __98
6230__98:
6231 p++
6232 goto __97
6233 goto __99
6234__99:
6235 ;
6236__90:
6237 ;
6238 wcs = uintptr(0)
6239 s = uintptr(0)
6240 i = uint64(0)
6241 if t == 'c' {
6242 k = uint64(uint32(width) + 1)
6243 } else {
6244 k = uint64(31)
6245 }
6246 if !(size == 1) {
6247 goto __105
6248 }
6249 if !(alloc != 0) {
6250 goto __107
6251 }
6252 wcs = Xmalloc(tls, k*size_t(unsafe.Sizeof(wchar_t(0))))
6253 if !!(wcs != 0) {
6254 goto __109
6255 }
6256 goto alloc_fail
6257__109:
6258 ;
6259 goto __108
6260__107:
6261 wcs = dest
6262__108:
6263 ;
6264 *(*mbstate_t)(unsafe.Pointer(bp + 268 /* st */)) = mbstate_t{}
6265__110:
6266 if !(*(*uint8)(unsafe.Pointer(bp + uintptr(AssignInt32(&c, func() int32 {
6267 if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend {
6268 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1))))
6269 }
6270 return X__shgetc(tls, f)
6271 }())+1))) != 0) {
6272 goto __111
6273 }
6274 switch Xmbrtowc(tls, bp+260, func() uintptr { *(*uint8)(unsafe.Pointer(bp + 264)) = uint8(c); return bp + 264 }(), uint64(1), bp+268 /* &st */) {
6275 case Uint64FromInt32(-1):
6276 goto __113
6277 case Uint64FromInt32(-2):
6278 goto __114
6279 }
6280 goto __112
6281__113:
6282 goto input_fail
6283__114:
6284 goto __110
6285__112:
6286 ;
6287 if !(wcs != 0) {
6288 goto __115
6289 }
6290 *(*wchar_t)(unsafe.Pointer(wcs + uintptr(PostIncUint64(&i, 1))*4)) = *(*wchar_t)(unsafe.Pointer(bp + 260 /* wc */))
6291__115:
6292 ;
6293 if !(alloc != 0 && i == k) {
6294 goto __116
6295 }
6296 k = k + (k + uint64(1))
6297 tmp = Xrealloc(tls, wcs, k*size_t(unsafe.Sizeof(wchar_t(0))))
6298 if !!(tmp != 0) {
6299 goto __117
6300 }
6301 goto alloc_fail
6302__117:
6303 ;
6304 wcs = tmp
6305__116:
6306 ;
6307 goto __110
6308__111:
6309 ;
6310 if !!(Xmbsinit(tls, bp+268) != 0) {
6311 goto __118
6312 }
6313 goto input_fail
6314__118:
6315 ;
6316 goto __106
6317__105:
6318 if !(alloc != 0) {
6319 goto __119
6320 }
6321 s = Xmalloc(tls, k)
6322 if !!(s != 0) {
6323 goto __121
6324 }
6325 goto alloc_fail
6326__121:
6327 ;
6328__122:
6329 if !(*(*uint8)(unsafe.Pointer(bp + uintptr(AssignInt32(&c, func() int32 {
6330 if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend {
6331 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1))))
6332 }
6333 return X__shgetc(tls, f)
6334 }())+1))) != 0) {
6335 goto __123
6336 }
6337 *(*uint8)(unsafe.Pointer(s + uintptr(PostIncUint64(&i, 1)))) = uint8(c)
6338 if !(i == k) {
6339 goto __124
6340 }
6341 k = k + (k + uint64(1))
6342 tmp1 = Xrealloc(tls, s, k)
6343 if !!(tmp1 != 0) {
6344 goto __125
6345 }
6346 goto alloc_fail
6347__125:
6348 ;
6349 s = tmp1
6350__124:
6351 ;
6352 goto __122
6353__123:
6354 ;
6355 goto __120
6356__119:
6357 if !(AssignUintptr(&s, dest) != 0) {
6358 goto __126
6359 }
6360__128:
6361 if !(*(*uint8)(unsafe.Pointer(bp + uintptr(AssignInt32(&c, func() int32 {
6362 if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend {
6363 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1))))
6364 }
6365 return X__shgetc(tls, f)
6366 }())+1))) != 0) {
6367 goto __129
6368 }
6369 *(*uint8)(unsafe.Pointer(s + uintptr(PostIncUint64(&i, 1)))) = uint8(c)
6370 goto __128
6371__129:
6372 ;
6373 goto __127
6374__126:
6375__130:
6376 if !(*(*uint8)(unsafe.Pointer(bp + uintptr(AssignInt32(&c, func() int32 {
6377 if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend {
6378 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1))))
6379 }
6380 return X__shgetc(tls, f)
6381 }())+1))) != 0) {
6382 goto __131
6383 }
6384 goto __130
6385__131:
6386 ;
6387__127:
6388 ;
6389__120:
6390 ;
6391__106:
6392 ;
6393 if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) {
6394 (*FILE)(unsafe.Pointer(f)).rpos--
6395 } else {
6396 }
6397 if !!((*FILE)(unsafe.Pointer(f)).shcnt+(int64((*FILE)(unsafe.Pointer(f)).rpos)-int64((*FILE)(unsafe.Pointer(f)).buf))/1 != 0) {
6398 goto __132
6399 }
6400 goto match_fail
6401__132:
6402 ;
6403 if !(t == 'c' && (*FILE)(unsafe.Pointer(f)).shcnt+(int64((*FILE)(unsafe.Pointer(f)).rpos)-int64((*FILE)(unsafe.Pointer(f)).buf))/1 != off_t(width)) {
6404 goto __133
6405 }
6406 goto match_fail
6407__133:
6408 ;
6409 if !(alloc != 0) {
6410 goto __134
6411 }
6412 if !(size == 1) {
6413 goto __135
6414 }
6415 *(*uintptr)(unsafe.Pointer(dest)) = wcs
6416 goto __136
6417__135:
6418 *(*uintptr)(unsafe.Pointer(dest)) = s
6419__136:
6420 ;
6421__134:
6422 ;
6423 if !(t != 'c') {
6424 goto __137
6425 }
6426 if !(wcs != 0) {
6427 goto __138
6428 }
6429 *(*wchar_t)(unsafe.Pointer(wcs + uintptr(i)*4)) = wchar_t(0)
6430__138:
6431 ;
6432 if !(s != 0) {
6433 goto __139
6434 }
6435 *(*uint8)(unsafe.Pointer(s + uintptr(i))) = uint8(0)
6436__139:
6437 ;
6438__137:
6439 ;
6440 goto __70
6441__74:
6442__75:
6443__76:
6444 base = 16
6445 goto int_common
6446__77:
6447 base = 8
6448 goto int_common
6449__78:
6450__79:
6451 base = 10
6452 goto int_common
6453__80:
6454 base = 0
6455int_common:
6456 x = X__intscan(tls, f, uint32(base), 0, 2*uint64(0x7fffffffffffffff)+uint64(1))
6457 if !!((*FILE)(unsafe.Pointer(f)).shcnt+(int64((*FILE)(unsafe.Pointer(f)).rpos)-int64((*FILE)(unsafe.Pointer(f)).buf))/1 != 0) {
6458 goto __140
6459 }
6460 goto match_fail
6461__140:
6462 ;
6463 if !(t == 'p' && dest != 0) {
6464 goto __141
6465 }
6466 *(*uintptr)(unsafe.Pointer(dest)) = uintptr(uintptr_t(x))
6467 goto __142
6468__141:
6469 store_int(tls, dest, size, x)
6470__142:
6471 ;
6472 goto __70
6473__81:
6474__82:
6475__83:
6476__84:
6477__85:
6478__86:
6479__87:
6480__88:
6481 y = X__floatscan(tls, f, size, 0)
6482 if !!((*FILE)(unsafe.Pointer(f)).shcnt+(int64((*FILE)(unsafe.Pointer(f)).rpos)-int64((*FILE)(unsafe.Pointer(f)).buf))/1 != 0) {
6483 goto __143
6484 }
6485 goto match_fail
6486__143:
6487 ;
6488 if !(dest != 0) {
6489 goto __144
6490 }
6491 switch size {
6492 case 0:
6493 goto __146
6494 case 1:
6495 goto __147
6496 case 2:
6497 goto __148
6498 }
6499 goto __145
6500__146:
6501 *(*float32)(unsafe.Pointer(dest)) = float32(y)
6502 goto __145
6503__147:
6504 *(*float64)(unsafe.Pointer(dest)) = y
6505 goto __145
6506__148:
6507 *(*float64)(unsafe.Pointer(dest)) = y
6508 goto __145
6509__145:
6510 ;
6511__144:
6512 ;
6513 goto __70
6514__70:
6515 ;
6516
6517 pos = pos + ((*FILE)(unsafe.Pointer(f)).shcnt + (int64((*FILE)(unsafe.Pointer(f)).rpos)-int64((*FILE)(unsafe.Pointer(f)).buf))/1)
6518 if !(dest != 0) {
6519 goto __149
6520 }
6521 matches++
6522__149:
6523 ;
6524 goto __4
6525__4:
6526 p++
6527 goto __3
6528 goto __5
6529__5:
6530 ;
6531 if !(0 != 0) {
6532 goto __150
6533 }
6534fmt_fail:
6535alloc_fail:
6536input_fail:
6537 if !!(matches != 0) {
6538 goto __151
6539 }
6540 matches--
6541__151:
6542 ;
6543match_fail:
6544 if !(alloc != 0) {
6545 goto __152
6546 }
6547 Xfree(tls, s)
6548 Xfree(tls, wcs)
6549__152:
6550 ;
6551__150:
6552 ;
6553__153:
6554 if !(__need_unlock != 0) {
6555 goto __156
6556 }
6557 X__unlockfile(tls, f)
6558__156:
6559 ;
6560 goto __154
6561__154:
6562 if 0 != 0 {
6563 goto __153
6564 }
6565 goto __155
6566__155:
6567 ;
6568 return matches
6569}
6570
6571func string_read(tls *TLS, f uintptr, buf uintptr, len size_t) size_t { /* vsscanf.c:4:15: */
6572 var src uintptr = (*FILE)(unsafe.Pointer(f)).cookie
6573 var k size_t = len + uint64(256)
6574 var end uintptr = Xmemchr(tls, src, 0, k)
6575 if end != 0 {
6576 k = size_t((int64(end) - int64(src)) / 1)
6577 }
6578 if k < len {
6579 len = k
6580 }
6581 Xmemcpy(tls, buf, src, len)
6582 (*FILE)(unsafe.Pointer(f)).rpos = src + uintptr(len)
6583 (*FILE)(unsafe.Pointer(f)).rend = src + uintptr(k)
6584 (*FILE)(unsafe.Pointer(f)).cookie = src + uintptr(k)
6585 return len
6586}
6587
6588func Xvsscanf(tls *TLS, s uintptr, fmt uintptr, ap va_list) int32 { /* vsscanf.c:18:5: */
6589 bp := tls.Alloc(232)
6590 defer tls.Free(232)
6591
6592 *(*FILE)(unsafe.Pointer(bp /* f */)) = FILE{read: *(*uintptr)(unsafe.Pointer(&struct {
6593 f func(*TLS, uintptr, uintptr, size_t) size_t
6594 }{string_read})), buf: s, lock: -1, cookie: s}
6595 return Xvfscanf(tls, bp, fmt, ap)
6596}
6597
6598func Xbsearch(tls *TLS, key uintptr, base uintptr, nel size_t, width size_t, cmp uintptr) uintptr { /* bsearch.c:3:6: */
6599 var try uintptr
6600 var sign int32
6601 for nel > uint64(0) {
6602 try = base + uintptr(width*(nel/uint64(2)))
6603 sign = (*struct {
6604 f func(*TLS, uintptr, uintptr) int32
6605 })(unsafe.Pointer(&struct{ uintptr }{cmp})).f(tls, key, try)
6606 if sign < 0 {
6607 nel = nel / uint64(2)
6608 } else if sign > 0 {
6609 base = try + uintptr(width)
6610 nel = nel - (nel/uint64(2) + uint64(1))
6611 } else {
6612 return try
6613 }
6614 }
6615 return uintptr(0)
6616}
6617
6618func strtox(tls *TLS, s uintptr, p uintptr, prec int32) float64 { /* strtod.c:6:20: */
6619 bp := tls.Alloc(232)
6620 defer tls.Free(232)
6621
6622 // var f FILE at bp, 232
6623
6624 (*FILE)(unsafe.Pointer(bp)).buf = AssignPtrUintptr(bp+8, s)
6625 (*FILE)(unsafe.Pointer(bp)).rend = UintptrFromInt32(-1)
6626 X__shlim(tls, bp, int64(0))
6627 var y float64 = X__floatscan(tls, bp, prec, 1)
6628 var cnt off_t = (*FILE)(unsafe.Pointer(bp)).shcnt + (int64((*FILE)(unsafe.Pointer(bp)).rpos)-int64((*FILE)(unsafe.Pointer(bp)).buf))/1
6629 if p != 0 {
6630 *(*uintptr)(unsafe.Pointer(p)) = func() uintptr {
6631 if cnt != 0 {
6632 return s + uintptr(cnt)
6633 }
6634 return s
6635 }()
6636 }
6637 return y
6638}
6639
6640func Xstrtof(tls *TLS, s uintptr, p uintptr) float32 { /* strtod.c:17:7: */
6641 return float32(strtox(tls, s, p, 0))
6642}
6643
6644func Xstrtod(tls *TLS, s uintptr, p uintptr) float64 { /* strtod.c:22:8: */
6645 return strtox(tls, s, p, 1)
6646}
6647
6648func Xstrtold(tls *TLS, s uintptr, p uintptr) float64 { /* strtod.c:27:13: */
6649 return strtox(tls, s, p, 2)
6650}
6651
6652func strtox1(tls *TLS, s uintptr, p uintptr, base int32, lim uint64) uint64 { /* strtol.c:8:27: */
6653 bp := tls.Alloc(232)
6654 defer tls.Free(232)
6655
6656 // var f FILE at bp, 232
6657
6658 (*FILE)(unsafe.Pointer(bp)).buf = AssignPtrUintptr(bp+8, s)
6659 (*FILE)(unsafe.Pointer(bp)).rend = UintptrFromInt32(-1)
6660 X__shlim(tls, bp, int64(0))
6661 var y uint64 = X__intscan(tls, bp, uint32(base), 1, lim)
6662 if p != 0 {
6663 var cnt size_t = size_t((*FILE)(unsafe.Pointer(bp)).shcnt + (int64((*FILE)(unsafe.Pointer(bp)).rpos)-int64((*FILE)(unsafe.Pointer(bp)).buf))/1)
6664 *(*uintptr)(unsafe.Pointer(p)) = s + uintptr(cnt)
6665 }
6666 return y
6667}
6668
6669func Xstrtoull(tls *TLS, s uintptr, p uintptr, base int32) uint64 { /* strtol.c:21:20: */
6670 return strtox1(tls, s, p, base, 2*uint64(0x7fffffffffffffff)+uint64(1))
6671}
6672
6673func Xstrtoll(tls *TLS, s uintptr, p uintptr, base int32) int64 { /* strtol.c:26:11: */
6674 return int64(strtox1(tls, s, p, base, Uint64FromInt64(-0x7fffffffffffffff-int64(1))))
6675}
6676
6677func Xstrtoul(tls *TLS, s uintptr, p uintptr, base int32) uint64 { /* strtol.c:31:15: */
6678 return uint64(strtox1(tls, s, p, base, 2*uint64(0x7fffffffffffffff)+uint64(1)))
6679}
6680
6681func Xstrtol(tls *TLS, s uintptr, p uintptr, base int32) int64 { /* strtol.c:36:6: */
6682 return int64(strtox1(tls, s, p, base, 0+Uint64FromInt64(Int64(-Int64(0x7fffffffffffffff))-Int64FromInt32(1))))
6683}
6684
6685func Xstrtoimax(tls *TLS, s uintptr, p uintptr, base int32) intmax_t { /* strtol.c:41:10: */
6686 return intmax_t(Xstrtoll(tls, s, p, base))
6687}
6688
6689func Xstrtoumax(tls *TLS, s uintptr, p uintptr, base int32) uintmax_t { /* strtol.c:46:11: */
6690 return uintmax_t(Xstrtoull(tls, s, p, base))
6691}
6692
6693func Xstrdup(tls *TLS, s uintptr) uintptr { /* strdup.c:4:6: */
6694 var l size_t = Xstrlen(tls, s)
6695 var d uintptr = Xmalloc(tls, l+uint64(1))
6696 if !(d != 0) {
6697 return uintptr(0)
6698 }
6699 return Xmemcpy(tls, d, s, l+uint64(1))
6700}
6701
6702func Xstrlcat(tls *TLS, d uintptr, s uintptr, n size_t) size_t { /* strlcat.c:4:8: */
6703 var l size_t = Xstrnlen(tls, d, n)
6704 if l == n {
6705 return l + Xstrlen(tls, s)
6706 }
6707 return l + Xstrlcpy(tls, d+uintptr(l), s, n-l)
6708}
6709
6710// Support signed or unsigned plain-char
6711
6712// Implementation choices...
6713
6714// Arbitrary numbers...
6715
6716// POSIX/SUS requirements follow. These numbers come directly
6717// from SUS and have nothing to do with the host system.
6718
6719func Xstrlcpy(tls *TLS, d uintptr, s uintptr, n size_t) size_t { /* strlcpy.c:11:8: */
6720 var d0 uintptr
6721 var wd uintptr
6722 var ws uintptr
6723 d0 = d
6724
6725 if !!(int32(PostDecUint64(&n, 1)) != 0) {
6726 goto __1
6727 }
6728 goto finish
6729__1:
6730 ;
6731 if !(uintptr_t(s)&(uint64(unsafe.Sizeof(size_t(0)))-uint64(1)) == uintptr_t(d)&(uint64(unsafe.Sizeof(size_t(0)))-uint64(1))) {
6732 goto __2
6733 }
6734__3:
6735 if !(uintptr_t(s)&(uint64(unsafe.Sizeof(size_t(0)))-uint64(1)) != 0 && n != 0 && AssignPtrUint8(d, *(*uint8)(unsafe.Pointer(s))) != 0) {
6736 goto __5
6737 }
6738 goto __4
6739__4:
6740 n--
6741 s++
6742 d++
6743 goto __3
6744 goto __5
6745__5:
6746 ;
6747 if !(n != 0 && *(*uint8)(unsafe.Pointer(s)) != 0) {
6748 goto __6
6749 }
6750 wd = d
6751 ws = s
6752__7:
6753 if !(n >= size_t(unsafe.Sizeof(size_t(0))) && !((*(*uint64)(unsafe.Pointer(ws))-Uint64(Uint64FromInt32(-1))/uint64(255)) & ^*(*uint64)(unsafe.Pointer(ws)) & (Uint64(Uint64FromInt32(-1))/uint64(255)*uint64(255/2+1)) != 0)) {
6754 goto __9
6755 }
6756 *(*size_t)(unsafe.Pointer(wd)) = *(*uint64)(unsafe.Pointer(ws))
6757 goto __8
6758__8:
6759 n = n - size_t(unsafe.Sizeof(size_t(0)))
6760 ws += 8
6761 wd += 8
6762 goto __7
6763 goto __9
6764__9:
6765 ;
6766 d = wd
6767 s = ws
6768__6:
6769 ;
6770__2:
6771 ;
6772__10:
6773 if !(n != 0 && AssignPtrUint8(d, *(*uint8)(unsafe.Pointer(s))) != 0) {
6774 goto __12
6775 }
6776 goto __11
6777__11:
6778 n--
6779 s++
6780 d++
6781 goto __10
6782 goto __12
6783__12:
6784 ;
6785 *(*uint8)(unsafe.Pointer(d)) = uint8(0)
6786finish:
6787 return size_t((int64(d)-int64(d0))/1) + Xstrlen(tls, s)
6788}
6789
6790func Xstrncasecmp(tls *TLS, _l uintptr, _r uintptr, n size_t) int32 { /* strncasecmp.c:4:5: */
6791 var l uintptr = _l
6792 var r uintptr = _r
6793 if !(int32(PostDecUint64(&n, 1)) != 0) {
6794 return 0
6795 }
6796__1:
6797 if !(*(*uint8)(unsafe.Pointer(l)) != 0 && *(*uint8)(unsafe.Pointer(r)) != 0 && n != 0 && (int32(*(*uint8)(unsafe.Pointer(l))) == int32(*(*uint8)(unsafe.Pointer(r))) || Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(l)))) == Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(r)))))) {
6798 goto __3
6799 }
6800 goto __2
6801__2:
6802 l++
6803 r++
6804 n--
6805 goto __1
6806 goto __3
6807__3:
6808 ;
6809 return Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(l)))) - Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(r))))
6810}
6811
6812func X__strncasecmp_l(tls *TLS, l uintptr, r uintptr, n size_t, loc locale_t) int32 { /* strncasecmp.c:12:5: */
6813 return Xstrncasecmp(tls, l, r, n)
6814}
6815
6816func Xstrncat(tls *TLS, d uintptr, s uintptr, n size_t) uintptr { /* strncat.c:3:6: */
6817 var a uintptr = d
6818 d += uintptr(Xstrlen(tls, d))
6819 for n != 0 && *(*uint8)(unsafe.Pointer(s)) != 0 {
6820 n--
6821 *(*uint8)(unsafe.Pointer(PostIncUintptr(&d, 1))) = *(*uint8)(unsafe.Pointer(PostIncUintptr(&s, 1)))
6822 }
6823 *(*uint8)(unsafe.Pointer(PostIncUintptr(&d, 1))) = uint8(0)
6824 return a
6825}
6826
6827func Xstrnlen(tls *TLS, s uintptr, n size_t) size_t { /* strnlen.c:3:8: */
6828 var p uintptr = Xmemchr(tls, s, 0, n)
6829 if p != 0 {
6830 return uint64((int64(p) - int64(s)) / 1)
6831 }
6832 return n
6833}
6834
6835func Xstrspn(tls *TLS, s uintptr, c uintptr) size_t { /* strspn.c:6:8: */
6836 bp := tls.Alloc(32)
6837 defer tls.Free(32)
6838
6839 var a uintptr = s
6840 *(*[4]size_t)(unsafe.Pointer(bp /* byteset */)) = [4]size_t{0: uint64(0)}
6841
6842 if !(int32(*(*uint8)(unsafe.Pointer(c))) != 0) {
6843 return uint64(0)
6844 }
6845 if !(int32(*(*uint8)(unsafe.Pointer(c + 1))) != 0) {
6846 for ; int32(*(*uint8)(unsafe.Pointer(s))) == int32(*(*uint8)(unsafe.Pointer(c))); s++ {
6847 }
6848 return size_t((int64(s) - int64(a)) / 1)
6849 }
6850
6851 for ; *(*uint8)(unsafe.Pointer(c)) != 0 && AssignOrPtrUint64(bp+uintptr(size_t(*(*uint8)(unsafe.Pointer(c)))/(uint64(8)*uint64(unsafe.Sizeof(size_t(0)))))*8, size_t(uint64(1))<<(size_t(*(*uint8)(unsafe.Pointer(c)))%(uint64(8)*uint64(unsafe.Sizeof(size_t(0)))))) != 0; c++ {
6852 }
6853 for ; *(*uint8)(unsafe.Pointer(s)) != 0 && *(*size_t)(unsafe.Pointer(bp + uintptr(size_t(*(*uint8)(unsafe.Pointer(s)))/(uint64(8)*uint64(unsafe.Sizeof(size_t(0)))))*8))&(size_t(uint64(1))<<(size_t(*(*uint8)(unsafe.Pointer(s)))%(uint64(8)*uint64(unsafe.Sizeof(size_t(0)))))) != 0; s++ {
6854 }
6855 return size_t((int64(s) - int64(a)) / 1)
6856}
6857
6858func Xstrtok(tls *TLS, s uintptr, sep uintptr) uintptr { /* strtok.c:3:6: */
6859 if !(s != 0) && !(int32(AssignUintptr(&s, _sp)) != 0) {
6860 return uintptr(0)
6861 }
6862 s += uintptr(Xstrspn(tls, s, sep))
6863 if !(int32(*(*uint8)(unsafe.Pointer(s))) != 0) {
6864 return AssignPtrUintptr(uintptr(unsafe.Pointer(&_sp)), uintptr(0))
6865 }
6866 _sp = s + uintptr(Xstrcspn(tls, s, sep))
6867 if *(*uint8)(unsafe.Pointer(_sp)) != 0 {
6868 *(*uint8)(unsafe.Pointer(PostIncUintptr(&_sp, 1))) = uint8(0)
6869 } else {
6870 _sp = uintptr(0)
6871 }
6872 return s
6873}
6874
6875var _sp uintptr /* strtok.c:5:14: */
6876
6877func X__ccgo_pthreadAttrGetDetachState(tls *TLS, a uintptr) int32 { /* pthread_attr_get.c:3:5: */
6878 return *(*int32)(unsafe.Pointer(a + 6*4))
6879}
6880
6881func Xpthread_attr_getdetachstate(tls *TLS, a uintptr, state uintptr) int32 { /* pthread_attr_get.c:7:5: */
6882 *(*int32)(unsafe.Pointer(state)) = *(*int32)(unsafe.Pointer(a + 6*4))
6883 return 0
6884}
6885
6886//
6887// int pthread_attr_getguardsize(const pthread_attr_t *restrict a, size_t *restrict size)
6888// {
6889// *size = a->_a_guardsize;
6890// return 0;
6891// }
6892//
6893// int pthread_attr_getinheritsched(const pthread_attr_t *restrict a, int *restrict inherit)
6894// {
6895// *inherit = a->_a_sched;
6896// return 0;
6897// }
6898//
6899// int pthread_attr_getschedparam(const pthread_attr_t *restrict a, struct sched_param *restrict param)
6900// {
6901// param->sched_priority = a->_a_prio;
6902// return 0;
6903// }
6904//
6905// int pthread_attr_getschedpolicy(const pthread_attr_t *restrict a, int *restrict policy)
6906// {
6907// *policy = a->_a_policy;
6908// return 0;
6909// }
6910//
6911// int pthread_attr_getscope(const pthread_attr_t *restrict a, int *restrict scope)
6912// {
6913// *scope = PTHREAD_SCOPE_SYSTEM;
6914// return 0;
6915// }
6916//
6917// int pthread_attr_getstack(const pthread_attr_t *restrict a, void **restrict addr, size_t *restrict size)
6918// {
6919// if (!a->_a_stackaddr)
6920// return EINVAL;
6921// *size = a->_a_stacksize;
6922// *addr = (void *)(a->_a_stackaddr - *size);
6923// return 0;
6924// }
6925//
6926// int pthread_attr_getstacksize(const pthread_attr_t *restrict a, size_t *restrict size)
6927// {
6928// *size = a->_a_stacksize;
6929// return 0;
6930// }
6931//
6932// int pthread_barrierattr_getpshared(const pthread_barrierattr_t *restrict a, int *restrict pshared)
6933// {
6934// *pshared = !!a->__attr;
6935// return 0;
6936// }
6937//
6938// int pthread_condattr_getclock(const pthread_condattr_t *restrict a, clockid_t *restrict clk)
6939// {
6940// *clk = a->__attr & 0x7fffffff;
6941// return 0;
6942// }
6943//
6944// int pthread_condattr_getpshared(const pthread_condattr_t *restrict a, int *restrict pshared)
6945// {
6946// *pshared = a->__attr>>31;
6947// return 0;
6948// }
6949//
6950// int pthread_mutexattr_getprotocol(const pthread_mutexattr_t *restrict a, int *restrict protocol)
6951// {
6952// *protocol = PTHREAD_PRIO_NONE;
6953// return 0;
6954// }
6955// int pthread_mutexattr_getpshared(const pthread_mutexattr_t *restrict a, int *restrict pshared)
6956// {
6957// *pshared = a->__attr / 128U % 2;
6958// return 0;
6959// }
6960//
6961// int pthread_mutexattr_getrobust(const pthread_mutexattr_t *restrict a, int *restrict robust)
6962// {
6963// *robust = a->__attr / 4U % 2;
6964// return 0;
6965// }
6966
6967func X__ccgo_pthreadMutexattrGettype(tls *TLS, a uintptr) int32 { /* pthread_attr_get.c:93:5: */
6968 return int32((*pthread_mutexattr_t)(unsafe.Pointer(a)).__attr & uint32(3))
6969}
6970
6971// int pthread_mutexattr_gettype(const pthread_mutexattr_t *restrict a, int *restrict type)
6972// {
6973// *type = a->__attr & 3;
6974// return 0;
6975// }
6976//
6977// int pthread_rwlockattr_getpshared(const pthread_rwlockattr_t *restrict a, int *restrict pshared)
6978// {
6979// *pshared = a->__attr[0];
6980// return 0;
6981// }
6982
6983func Xpthread_attr_setdetachstate(tls *TLS, a uintptr, state int32) int32 { /* pthread_attr_setdetachstate.c:3:5: */
6984 if uint32(state) > 1 {
6985 return 22
6986 }
6987 *(*int32)(unsafe.Pointer(a + 6*4)) = state
6988 return 0
6989}
6990
6991func X__ccgo_getMutexType(tls *TLS, m uintptr) int32 { /* pthread_mutex_lock.c:3:5: */
6992 return *(*int32)(unsafe.Pointer(m)) & 15
6993}
6994
6995// int __pthread_mutex_lock(pthread_mutex_t *m)
6996// {
6997// if ((m->_m_type&15) == PTHREAD_MUTEX_NORMAL
6998// && !a_cas(&m->_m_lock, 0, EBUSY))
6999// return 0;
7000//
7001// return __pthread_mutex_timedlock(m, 0);
7002// }
7003//
7004// weak_alias(__pthread_mutex_lock, pthread_mutex_lock);
7005
7006func Xpthread_mutexattr_destroy(tls *TLS, a uintptr) int32 { /* pthread_mutexattr_destroy.c:3:5: */
7007 return 0
7008}
7009
7010func Xpthread_mutexattr_init(tls *TLS, a uintptr) int32 { /* pthread_mutexattr_init.c:3:5: */
7011 *(*pthread_mutexattr_t)(unsafe.Pointer(a)) = pthread_mutexattr_t{}
7012 return 0
7013}
7014
7015func Xpthread_mutexattr_settype(tls *TLS, a uintptr, type1 int32) int32 { /* pthread_mutexattr_settype.c:3:5: */
7016 if uint32(type1) > uint32(2) {
7017 return 22
7018 }
7019 (*pthread_mutexattr_t)(unsafe.Pointer(a)).__attr = (*pthread_mutexattr_t)(unsafe.Pointer(a)).__attr&Uint32FromInt32(CplInt32(3)) | uint32(type1)
7020 return 0
7021}
7022
7023func init() {
7024 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&ptable)) + 0)) = uintptr(unsafe.Pointer(&table)) + uintptr(128)*2 // __ctype_b_loc.c:36:45:
7025}
7026
7027var ts1 = "infinity\x00nan\x00\x00\x00\x01\x02\x04\a\x03\x06\x05\x00.\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"
7028var ts = (*reflect.StringHeader)(unsafe.Pointer(&ts1)).Data
Note: See TracBrowser for help on using the repository browser.