source: code/trunk/vendor/modernc.org/libc/musl_linux_ppc64le.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: 193.0 KB
Line 
1// Code generated by 'ccgo -export-externs X -hide __syscall0,__syscall1,__syscall2,__syscall3,__syscall4,__syscall5,__syscall6 -nostdinc -nostdlib -o ../musl_linux_ppc64le.go -pkgname libc -static-locals-prefix _s -Iarch/powerpc64 -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 = int32 /* <builtin>:15:24 */
365
366type uint16_t = uint16 /* alltypes.h:118:25 */
367
368type uint32_t = uint32 /* alltypes.h:123:25 */
369
370type uint64_t = uint64 /* alltypes.h:128: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:335:9 */
414
415type locale_t = uintptr /* alltypes.h:335: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:154:16 */
489
490type ino_t = uint64 /* alltypes.h:159: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:57:15 */
513
514type intptr_t = int64 /* alltypes.h:62:15 */
515
516type pid_t = int32 /* alltypes.h:227:13 */
517
518type uid_t = uint32 /* alltypes.h:237:18 */
519
520type gid_t = uint32 /* alltypes.h:242:18 */
521
522type useconds_t = uint32 /* alltypes.h:252: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:144:18 */
544
545type iovec = struct {
546 iov_base uintptr
547 iov_len size_t
548} /* alltypes.h:347: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 __syscall1(tls, int64(6), 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:33: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(__syscall3(tls, int64(202), 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:47:24 */
616
617type int8_t = int8 /* alltypes.h:88:25 */
618
619type int16_t = int16 /* alltypes.h:93:25 */
620
621type int32_t = int32 /* alltypes.h:98:25 */
622
623type int64_t = int64 /* alltypes.h:103:25 */
624
625type intmax_t = int64 /* alltypes.h:108:25 */
626
627type uint8_t = uint8 /* alltypes.h:113:25 */
628
629type uintmax_t = uint64 /* alltypes.h:138: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:312:9 */
687
688type FILE = _IO_FILE /* alltypes.h:312:25 */
689
690type va_list = uintptr /* alltypes.h:318: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:22:15 */
700
701type double_t = float64 /* alltypes.h:27: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:265: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:335: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:77:16 */
2096
2097type clockid_t = int32 /* alltypes.h:206:13 */
2098
2099type timespec = struct {
2100 tv_sec time_t
2101 tv_nsec int64
2102} /* alltypes.h:221:1 */
2103
2104type pthread_t = uintptr /* alltypes.h:265:26 */
2105
2106type pthread_once_t = int32 /* alltypes.h:271:13 */
2107
2108type pthread_key_t = uint32 /* alltypes.h:276:18 */
2109
2110type pthread_spinlock_t = int32 /* alltypes.h:281:13 */
2111
2112type pthread_mutexattr_t = struct{ __attr uint32 } /* alltypes.h:286:37 */
2113
2114type pthread_condattr_t = struct{ __attr uint32 } /* alltypes.h:291:37 */
2115
2116type pthread_barrierattr_t = struct{ __attr uint32 } /* alltypes.h:296:37 */
2117
2118type pthread_rwlockattr_t = struct{ __attr [2]uint32 } /* alltypes.h:301:40 */
2119
2120type __sigset_t = struct{ __bits [16]uint64 } /* alltypes.h:341:9 */
2121
2122type sigset_t = __sigset_t /* alltypes.h:341:71 */
2123
2124type pthread_attr_t = struct {
2125 __u struct {
2126 _ [0]uint64
2127 __i [14]int32
2128 }
2129} /* alltypes.h:364:147 */
2130
2131type pthread_mutex_t = struct {
2132 __u struct {
2133 _ [0]uint64
2134 __i [10]int32
2135 }
2136} /* alltypes.h:369:157 */
2137
2138type pthread_cond_t = struct {
2139 __u struct {
2140 _ [0]uint64
2141 __i [12]int32
2142 }
2143} /* alltypes.h:379:112 */
2144
2145type pthread_rwlock_t = struct {
2146 __u struct {
2147 _ [0]uint64
2148 __i [14]int32
2149 }
2150} /* alltypes.h:389:139 */
2151
2152type pthread_barrier_t = struct {
2153 __u struct {
2154 _ [0]uint64
2155 __i [8]int32
2156 }
2157} /* alltypes.h:394: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:201:14 */
2171
2172type clock_t = int64 /* alltypes.h:211: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:265: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:11:23 */
2229type gregset_t = [48]uint64 /* signal.h:11:31 */
2230type fpregset_t = [33]float64 /* signal.h:12:16 */
2231
2232type vrregset_t = struct {
2233 vrregs [32][4]uint32
2234 vscr struct {
2235 vscr_word uint32
2236 _pad [3]uint32
2237 }
2238 vrsave uint32
2239 _pad [3]uint32
2240} /* signal.h:27:3 */
2241
2242type sigcontext = struct {
2243 _unused [4]uint64
2244 signal int32
2245 _pad0 int32
2246 handler uint64
2247 oldmask uint64
2248 regs uintptr
2249 gp_regs gregset_t
2250 fp_regs fpregset_t
2251 v_regs uintptr
2252 vmx_reserve [101]int64
2253} /* signal.h:29:9 */
2254
2255type mcontext_t = sigcontext /* signal.h:40:3 */
2256
2257type __ucontext = struct {
2258 uc_flags uint64
2259 uc_link uintptr
2260 uc_stack stack_t
2261 uc_sigmask sigset_t
2262 uc_mcontext mcontext_t
2263} /* signal.h:56:9 */
2264
2265type ucontext_t = __ucontext /* signal.h:62:3 */
2266
2267type sigval = struct {
2268 _ [0]uint64
2269 sival_int int32
2270 _ [4]byte
2271} /* time.h:107:1 */
2272
2273type siginfo_t = struct {
2274 si_signo int32
2275 si_errno int32
2276 si_code int32
2277 _ [4]byte
2278 __si_fields struct {
2279 _ [0]uint64
2280 __pad [112]uint8
2281 }
2282} /* signal.h:145:3 */
2283
2284type sigaction = struct {
2285 __sa_handler struct{ sa_handler uintptr }
2286 sa_mask sigset_t
2287 sa_flags int32
2288 _ [4]byte
2289 sa_restorer uintptr
2290} /* signal.h:167:1 */
2291
2292type sig_t = uintptr /* signal.h:251:14 */
2293
2294type sig_atomic_t = int32 /* signal.h:269:13 */
2295
2296func a_ll(tls *TLS, p uintptr) int32 { /* atomic_arch.h:2:19: */
2297 var v int32
2298 panic(`arch/powerpc64/atomic_arch.h:5:2: assembler statements not supported`)
2299 return v
2300}
2301
2302func a_sc(tls *TLS, p uintptr, v int32) int32 { /* atomic_arch.h:10:19: */
2303 var r int32
2304 panic(`arch/powerpc64/atomic_arch.h:13:2: assembler statements not supported`)
2305 return r & 0x20000000 // "bit 2" of "cr0" (backwards bit order)
2306}
2307
2308func a_ll_p(tls *TLS, p uintptr) uintptr { /* atomic_arch.h:20:20: */
2309 var v uintptr
2310 panic(`arch/powerpc64/atomic_arch.h:23:2: assembler statements not supported`)
2311 return v
2312}
2313
2314func a_sc_p(tls *TLS, p uintptr, v uintptr) int32 { /* atomic_arch.h:28:19: */
2315 var r int32
2316 panic(`arch/powerpc64/atomic_arch.h:31:2: assembler statements not supported`)
2317 return r & 0x20000000 // "bit 2" of "cr0" (backwards bit order)
2318}
2319
2320func a_barrier(tls *TLS) { /* atomic_arch.h:38:20: */
2321 panic(`arch/powerpc64/atomic_arch.h:40:2: assembler statements not supported`)
2322}
2323
2324func a_post_llsc(tls *TLS) { /* atomic_arch.h:46:20: */
2325 panic(`arch/powerpc64/atomic_arch.h:48:2: assembler statements not supported`)
2326}
2327
2328func a_cas(tls *TLS, p uintptr, t int32, s int32) int32 { /* atomic.h:20:19: */
2329 var old int32
2330 a_barrier(tls)
2331 for __ccgo := true; __ccgo; __ccgo = old == t && !(a_sc(tls, p, s) != 0) {
2332 old = a_ll(tls, p)
2333 }
2334 a_post_llsc(tls)
2335 return old
2336}
2337
2338func a_swap(tls *TLS, p uintptr, v int32) int32 { /* atomic.h:33:19: */
2339 var old int32
2340 a_barrier(tls)
2341 for __ccgo := true; __ccgo; __ccgo = !(a_sc(tls, p, v) != 0) {
2342 old = a_ll(tls, p)
2343 }
2344 a_post_llsc(tls)
2345 return old
2346}
2347
2348func a_fetch_add(tls *TLS, p uintptr, v int32) int32 { /* atomic.h:46:19: */
2349 var old int32
2350 a_barrier(tls)
2351 for __ccgo := true; __ccgo; __ccgo = !(a_sc(tls, p, int32(uint32(old)+uint32(v))) != 0) {
2352 old = a_ll(tls, p)
2353 }
2354 a_post_llsc(tls)
2355 return old
2356}
2357
2358func a_fetch_and(tls *TLS, p uintptr, v int32) int32 { /* atomic.h:59:19: */
2359 var old int32
2360 a_barrier(tls)
2361 for __ccgo := true; __ccgo; __ccgo = !(a_sc(tls, p, old&v) != 0) {
2362 old = a_ll(tls, p)
2363 }
2364 a_post_llsc(tls)
2365 return old
2366}
2367
2368func a_fetch_or(tls *TLS, p uintptr, v int32) int32 { /* atomic.h:72:19: */
2369 var old int32
2370 a_barrier(tls)
2371 for __ccgo := true; __ccgo; __ccgo = !(a_sc(tls, p, old|v) != 0) {
2372 old = a_ll(tls, p)
2373 }
2374 a_post_llsc(tls)
2375 return old
2376}
2377
2378func a_and(tls *TLS, p uintptr, v int32) { /* atomic.h:151:20: */
2379 a_fetch_and(tls, p, v)
2380}
2381
2382func a_or(tls *TLS, p uintptr, v int32) { /* atomic.h:159:20: */
2383 a_fetch_or(tls, p, v)
2384}
2385
2386func a_or_64(tls *TLS, p uintptr, v uint64_t) { /* atomic.h:220:20: */
2387 bp := tls.Alloc(8)
2388 defer tls.Free(8)
2389
2390 *(*struct{ v uint64_t })(unsafe.Pointer(bp)) = func() (r struct{ v uint64_t }) {
2391 *(*uint64_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&r)) + 0)) = v
2392 return r
2393 }()
2394 if *(*uint32_t)(unsafe.Pointer(bp)) != 0 {
2395 a_or(tls, p, int32(*(*uint32_t)(unsafe.Pointer(bp))))
2396 }
2397 if *(*uint32_t)(unsafe.Pointer(bp + 1*4)) != 0 {
2398 a_or(tls, p+uintptr(1)*4, int32(*(*uint32_t)(unsafe.Pointer(bp + 1*4))))
2399 }
2400}
2401
2402func a_ctz_32(tls *TLS, x uint32_t) int32 { /* atomic.h:256:19: */
2403 return int32(_sdebruijn328[x&-x*uint32_t(0x076be629)>>27])
2404}
2405
2406var _sdebruijn328 = [32]uint8{
2407 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),
2408 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),
2409} /* atomic.h:261:20 */
2410
2411func a_ctz_64(tls *TLS, x uint64_t) int32 { /* atomic.h:272:19: */
2412 if uint64(unsafe.Sizeof(int64(0))) < uint64(8) {
2413 var y uint32_t = uint32_t(x)
2414 if !(y != 0) {
2415 y = uint32_t(x >> 32)
2416 return 32 + a_ctz_32(tls, y)
2417 }
2418 return a_ctz_32(tls, y)
2419 }
2420 return int32(_sdebruijn648[uint64(x&-x)*0x022fdd63cc95386d>>58])
2421}
2422
2423var _sdebruijn648 = [64]uint8{
2424 uint8(0), uint8(1), uint8(2), uint8(53), uint8(3), uint8(7), uint8(54), uint8(27), uint8(4), uint8(38), uint8(41), uint8(8), uint8(34), uint8(55), uint8(48), uint8(28),
2425 uint8(62), uint8(5), uint8(39), uint8(46), uint8(44), uint8(42), uint8(22), uint8(9), uint8(24), uint8(35), uint8(59), uint8(56), uint8(49), uint8(18), uint8(29), uint8(11),
2426 uint8(63), uint8(52), uint8(6), uint8(26), uint8(37), uint8(40), uint8(33), uint8(47), uint8(61), uint8(45), uint8(43), uint8(21), uint8(23), uint8(58), uint8(17), uint8(10),
2427 uint8(51), uint8(25), uint8(36), uint8(32), uint8(60), uint8(20), uint8(57), uint8(16), uint8(50), uint8(31), uint8(19), uint8(15), uint8(30), uint8(14), uint8(13), uint8(12),
2428} /* atomic.h:274:20 */
2429
2430type __timer = struct {
2431 timerid int32
2432 _ [4]byte
2433 thread pthread_t
2434} /* pthread_impl.h:64:1 */
2435
2436func __pthread_self(tls *TLS) uintptr { /* pthread_arch.h:1:30: */
2437 var tp uintptr
2438 panic(`arch/powerpc64/pthread_arch.h:4:2: assembler statements not supported`)
2439 return tp - uintptr(0x7000) - uintptr(uint64(unsafe.Sizeof(__pthread{})))
2440}
2441
2442func __wake(tls *TLS, addr uintptr, cnt int32, priv int32) { /* pthread_impl.h:155:20: */
2443 if priv != 0 {
2444 priv = 128
2445 }
2446 if cnt < 0 {
2447 cnt = 0x7fffffff
2448 }
2449 _ = Bool32(__syscall3(tls, int64(221), int64(addr), int64(1|priv), int64(cnt)) != int64(-38) || __syscall3(tls, int64(221), int64(addr), int64(1), int64(cnt)) != 0)
2450}
2451
2452func __futexwait(tls *TLS, addr uintptr, val int32, priv int32) { /* pthread_impl.h:162:20: */
2453 if priv != 0 {
2454 priv = 128
2455 }
2456 _ = Bool32(__syscall4(tls, int64(221), int64(addr), int64(0|priv), int64(val), int64(0)) != int64(-38) || __syscall4(tls, int64(221), int64(addr), int64(0), int64(val), int64(0)) != 0)
2457}
2458
2459var X__fsmu8 = [51]uint32_t{
2460 func() uint32 {
2461 if 0x2 < 2 {
2462 return Uint32FromInt32(-1)
2463 }
2464 return func() uint32 {
2465 if Int32(0x80) == Int32(0x80) {
2466 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2467 }
2468 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2469 }()<<23 | uint32_t(0x2)
2470 }(), func() uint32 {
2471 if 0x3 < 2 {
2472 return Uint32FromInt32(-1)
2473 }
2474 return func() uint32 {
2475 if Int32(0x80) == Int32(0x80) {
2476 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2477 }
2478 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2479 }()<<23 | uint32_t(0x3)
2480 }(), func() uint32 {
2481 if 0x4 < 2 {
2482 return Uint32FromInt32(-1)
2483 }
2484 return func() uint32 {
2485 if Int32(0x80) == Int32(0x80) {
2486 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2487 }
2488 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2489 }()<<23 | uint32_t(0x4)
2490 }(), func() uint32 {
2491 if 0x5 < 2 {
2492 return Uint32FromInt32(-1)
2493 }
2494 return func() uint32 {
2495 if Int32(0x80) == Int32(0x80) {
2496 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2497 }
2498 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2499 }()<<23 | uint32_t(0x5)
2500 }(), func() uint32 {
2501 if 0x6 < 2 {
2502 return Uint32FromInt32(-1)
2503 }
2504 return func() uint32 {
2505 if Int32(0x80) == Int32(0x80) {
2506 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2507 }
2508 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2509 }()<<23 | uint32_t(0x6)
2510 }(), func() uint32 {
2511 if 0x7 < 2 {
2512 return Uint32FromInt32(-1)
2513 }
2514 return func() uint32 {
2515 if Int32(0x80) == Int32(0x80) {
2516 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2517 }
2518 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2519 }()<<23 | uint32_t(0x7)
2520 }(),
2521 func() uint32 {
2522 if 0x8 < 2 {
2523 return Uint32FromInt32(-1)
2524 }
2525 return func() uint32 {
2526 if Int32(0x80) == Int32(0x80) {
2527 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2528 }
2529 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2530 }()<<23 | uint32_t(0x8)
2531 }(), func() uint32 {
2532 if 0x9 < 2 {
2533 return Uint32FromInt32(-1)
2534 }
2535 return func() uint32 {
2536 if Int32(0x80) == Int32(0x80) {
2537 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2538 }
2539 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2540 }()<<23 | uint32_t(0x9)
2541 }(), func() uint32 {
2542 if 0xa < 2 {
2543 return Uint32FromInt32(-1)
2544 }
2545 return func() uint32 {
2546 if Int32(0x80) == Int32(0x80) {
2547 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2548 }
2549 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2550 }()<<23 | uint32_t(0xa)
2551 }(), func() uint32 {
2552 if 0xb < 2 {
2553 return Uint32FromInt32(-1)
2554 }
2555 return func() uint32 {
2556 if Int32(0x80) == Int32(0x80) {
2557 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2558 }
2559 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2560 }()<<23 | uint32_t(0xb)
2561 }(), func() uint32 {
2562 if 0xc < 2 {
2563 return Uint32FromInt32(-1)
2564 }
2565 return func() uint32 {
2566 if Int32(0x80) == Int32(0x80) {
2567 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2568 }
2569 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2570 }()<<23 | uint32_t(0xc)
2571 }(), func() uint32 {
2572 if 0xd < 2 {
2573 return Uint32FromInt32(-1)
2574 }
2575 return func() uint32 {
2576 if Int32(0x80) == Int32(0x80) {
2577 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2578 }
2579 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2580 }()<<23 | uint32_t(0xd)
2581 }(), func() uint32 {
2582 if 0xe < 2 {
2583 return Uint32FromInt32(-1)
2584 }
2585 return func() uint32 {
2586 if Int32(0x80) == Int32(0x80) {
2587 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2588 }
2589 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2590 }()<<23 | uint32_t(0xe)
2591 }(), func() uint32 {
2592 if 0xf < 2 {
2593 return Uint32FromInt32(-1)
2594 }
2595 return func() uint32 {
2596 if Int32(0x80) == Int32(0x80) {
2597 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2598 }
2599 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2600 }()<<23 | uint32_t(0xf)
2601 }(),
2602 func() uint32 {
2603 if 0x0+16 < 2 {
2604 return Uint32FromInt32(-1)
2605 }
2606 return func() uint32 {
2607 if Int32(0x80) == Int32(0x80) {
2608 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2609 }
2610 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2611 }()<<23 | uint32_t(0x0+16)
2612 }(), func() uint32 {
2613 if 0x1+16 < 2 {
2614 return Uint32FromInt32(-1)
2615 }
2616 return func() uint32 {
2617 if Int32(0x80) == Int32(0x80) {
2618 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2619 }
2620 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2621 }()<<23 | uint32_t(0x1+16)
2622 }(), func() uint32 {
2623 if 0x2+16 < 2 {
2624 return Uint32FromInt32(-1)
2625 }
2626 return func() uint32 {
2627 if Int32(0x80) == Int32(0x80) {
2628 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2629 }
2630 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2631 }()<<23 | uint32_t(0x2+16)
2632 }(), func() uint32 {
2633 if 0x3+16 < 2 {
2634 return Uint32FromInt32(-1)
2635 }
2636 return func() uint32 {
2637 if Int32(0x80) == Int32(0x80) {
2638 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2639 }
2640 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2641 }()<<23 | uint32_t(0x3+16)
2642 }(), func() uint32 {
2643 if 0x4+16 < 2 {
2644 return Uint32FromInt32(-1)
2645 }
2646 return func() uint32 {
2647 if Int32(0x80) == Int32(0x80) {
2648 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2649 }
2650 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2651 }()<<23 | uint32_t(0x4+16)
2652 }(), func() uint32 {
2653 if 0x5+16 < 2 {
2654 return Uint32FromInt32(-1)
2655 }
2656 return func() uint32 {
2657 if Int32(0x80) == Int32(0x80) {
2658 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2659 }
2660 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2661 }()<<23 | uint32_t(0x5+16)
2662 }(), func() uint32 {
2663 if 0x6+16 < 2 {
2664 return Uint32FromInt32(-1)
2665 }
2666 return func() uint32 {
2667 if Int32(0x80) == Int32(0x80) {
2668 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2669 }
2670 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2671 }()<<23 | uint32_t(0x6+16)
2672 }(), func() uint32 {
2673 if 0x7+16 < 2 {
2674 return Uint32FromInt32(-1)
2675 }
2676 return func() uint32 {
2677 if Int32(0x80) == Int32(0x80) {
2678 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2679 }
2680 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2681 }()<<23 | uint32_t(0x7+16)
2682 }(),
2683 func() uint32 {
2684 if 0x8+16 < 2 {
2685 return Uint32FromInt32(-1)
2686 }
2687 return func() uint32 {
2688 if Int32(0x80) == Int32(0x80) {
2689 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2690 }
2691 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2692 }()<<23 | uint32_t(0x8+16)
2693 }(), func() uint32 {
2694 if 0x9+16 < 2 {
2695 return Uint32FromInt32(-1)
2696 }
2697 return func() uint32 {
2698 if Int32(0x80) == Int32(0x80) {
2699 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2700 }
2701 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2702 }()<<23 | uint32_t(0x9+16)
2703 }(), func() uint32 {
2704 if 0xa+16 < 2 {
2705 return Uint32FromInt32(-1)
2706 }
2707 return func() uint32 {
2708 if Int32(0x80) == Int32(0x80) {
2709 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2710 }
2711 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2712 }()<<23 | uint32_t(0xa+16)
2713 }(), func() uint32 {
2714 if 0xb+16 < 2 {
2715 return Uint32FromInt32(-1)
2716 }
2717 return func() uint32 {
2718 if Int32(0x80) == Int32(0x80) {
2719 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2720 }
2721 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2722 }()<<23 | uint32_t(0xb+16)
2723 }(), func() uint32 {
2724 if 0xc+16 < 2 {
2725 return Uint32FromInt32(-1)
2726 }
2727 return func() uint32 {
2728 if Int32(0x80) == Int32(0x80) {
2729 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2730 }
2731 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2732 }()<<23 | uint32_t(0xc+16)
2733 }(), func() uint32 {
2734 if 0xd+16 < 2 {
2735 return Uint32FromInt32(-1)
2736 }
2737 return func() uint32 {
2738 if Int32(0x80) == Int32(0x80) {
2739 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2740 }
2741 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2742 }()<<23 | uint32_t(0xd+16)
2743 }(), func() uint32 {
2744 if 0xe+16 < 2 {
2745 return Uint32FromInt32(-1)
2746 }
2747 return func() uint32 {
2748 if Int32(0x80) == Int32(0x80) {
2749 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2750 }
2751 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2752 }()<<23 | uint32_t(0xe+16)
2753 }(), func() uint32 {
2754 if 0xf+16 < 2 {
2755 return Uint32FromInt32(-1)
2756 }
2757 return func() uint32 {
2758 if Int32(0x80) == Int32(0x80) {
2759 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2760 }
2761 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2762 }()<<23 | uint32_t(0xf+16)
2763 }(),
2764 func() uint32 {
2765 if 0x0 == 0 {
2766 return func() uint32 {
2767 if Int32(0xa0) == Int32(0x80) {
2768 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2769 }
2770 return Uint32(Uint32(0) - Uint32FromInt32(0xa0))
2771 }() << 23
2772 }
2773 return func() uint32 {
2774 if 0x0 == 0xd {
2775 return func() uint32 {
2776 if Int32(0x80) == Int32(0x80) {
2777 return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0))
2778 }
2779 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2780 }() << 23
2781 }
2782 return func() uint32 {
2783 if Int32(0x80) == Int32(0x80) {
2784 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2785 }
2786 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2787 }() << 23
2788 }()
2789 }() | uint32_t(func() uint32 {
2790 if Int32(0x80) == Int32(0x80) {
2791 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2792 }
2793 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2794 }()<<23)>>6 | uint32_t(0x0), func() uint32 {
2795 if 0x1 == 0 {
2796 return func() uint32 {
2797 if Int32(0xa0) == Int32(0x80) {
2798 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2799 }
2800 return Uint32(Uint32(0) - Uint32FromInt32(0xa0))
2801 }() << 23
2802 }
2803 return func() uint32 {
2804 if 0x1 == 0xd {
2805 return func() uint32 {
2806 if Int32(0x80) == Int32(0x80) {
2807 return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0))
2808 }
2809 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2810 }() << 23
2811 }
2812 return func() uint32 {
2813 if Int32(0x80) == Int32(0x80) {
2814 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2815 }
2816 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2817 }() << 23
2818 }()
2819 }() | uint32_t(func() uint32 {
2820 if Int32(0x80) == Int32(0x80) {
2821 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2822 }
2823 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2824 }()<<23)>>6 | uint32_t(0x1), func() uint32 {
2825 if 0x2 == 0 {
2826 return func() uint32 {
2827 if Int32(0xa0) == Int32(0x80) {
2828 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2829 }
2830 return Uint32(Uint32(0) - Uint32FromInt32(0xa0))
2831 }() << 23
2832 }
2833 return func() uint32 {
2834 if 0x2 == 0xd {
2835 return func() uint32 {
2836 if Int32(0x80) == Int32(0x80) {
2837 return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0))
2838 }
2839 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2840 }() << 23
2841 }
2842 return func() uint32 {
2843 if Int32(0x80) == Int32(0x80) {
2844 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2845 }
2846 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2847 }() << 23
2848 }()
2849 }() | uint32_t(func() uint32 {
2850 if Int32(0x80) == Int32(0x80) {
2851 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2852 }
2853 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2854 }()<<23)>>6 | uint32_t(0x2), func() uint32 {
2855 if 0x3 == 0 {
2856 return func() uint32 {
2857 if Int32(0xa0) == Int32(0x80) {
2858 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2859 }
2860 return Uint32(Uint32(0) - Uint32FromInt32(0xa0))
2861 }() << 23
2862 }
2863 return func() uint32 {
2864 if 0x3 == 0xd {
2865 return func() uint32 {
2866 if Int32(0x80) == Int32(0x80) {
2867 return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0))
2868 }
2869 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2870 }() << 23
2871 }
2872 return func() uint32 {
2873 if Int32(0x80) == Int32(0x80) {
2874 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2875 }
2876 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2877 }() << 23
2878 }()
2879 }() | uint32_t(func() uint32 {
2880 if Int32(0x80) == Int32(0x80) {
2881 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2882 }
2883 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2884 }()<<23)>>6 | uint32_t(0x3), func() uint32 {
2885 if 0x4 == 0 {
2886 return func() uint32 {
2887 if Int32(0xa0) == Int32(0x80) {
2888 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2889 }
2890 return Uint32(Uint32(0) - Uint32FromInt32(0xa0))
2891 }() << 23
2892 }
2893 return func() uint32 {
2894 if 0x4 == 0xd {
2895 return func() uint32 {
2896 if Int32(0x80) == Int32(0x80) {
2897 return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0))
2898 }
2899 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2900 }() << 23
2901 }
2902 return func() uint32 {
2903 if Int32(0x80) == Int32(0x80) {
2904 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2905 }
2906 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2907 }() << 23
2908 }()
2909 }() | uint32_t(func() uint32 {
2910 if Int32(0x80) == Int32(0x80) {
2911 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2912 }
2913 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2914 }()<<23)>>6 | uint32_t(0x4), func() uint32 {
2915 if 0x5 == 0 {
2916 return func() uint32 {
2917 if Int32(0xa0) == Int32(0x80) {
2918 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2919 }
2920 return Uint32(Uint32(0) - Uint32FromInt32(0xa0))
2921 }() << 23
2922 }
2923 return func() uint32 {
2924 if 0x5 == 0xd {
2925 return func() uint32 {
2926 if Int32(0x80) == Int32(0x80) {
2927 return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0))
2928 }
2929 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2930 }() << 23
2931 }
2932 return func() uint32 {
2933 if Int32(0x80) == Int32(0x80) {
2934 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2935 }
2936 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2937 }() << 23
2938 }()
2939 }() | uint32_t(func() uint32 {
2940 if Int32(0x80) == Int32(0x80) {
2941 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2942 }
2943 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2944 }()<<23)>>6 | uint32_t(0x5), func() uint32 {
2945 if 0x6 == 0 {
2946 return func() uint32 {
2947 if Int32(0xa0) == Int32(0x80) {
2948 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2949 }
2950 return Uint32(Uint32(0) - Uint32FromInt32(0xa0))
2951 }() << 23
2952 }
2953 return func() uint32 {
2954 if 0x6 == 0xd {
2955 return func() uint32 {
2956 if Int32(0x80) == Int32(0x80) {
2957 return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0))
2958 }
2959 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2960 }() << 23
2961 }
2962 return func() uint32 {
2963 if Int32(0x80) == Int32(0x80) {
2964 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2965 }
2966 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2967 }() << 23
2968 }()
2969 }() | uint32_t(func() uint32 {
2970 if Int32(0x80) == Int32(0x80) {
2971 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2972 }
2973 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2974 }()<<23)>>6 | uint32_t(0x6), func() uint32 {
2975 if 0x7 == 0 {
2976 return func() uint32 {
2977 if Int32(0xa0) == Int32(0x80) {
2978 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2979 }
2980 return Uint32(Uint32(0) - Uint32FromInt32(0xa0))
2981 }() << 23
2982 }
2983 return func() uint32 {
2984 if 0x7 == 0xd {
2985 return func() uint32 {
2986 if Int32(0x80) == Int32(0x80) {
2987 return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0))
2988 }
2989 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2990 }() << 23
2991 }
2992 return func() uint32 {
2993 if Int32(0x80) == Int32(0x80) {
2994 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
2995 }
2996 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
2997 }() << 23
2998 }()
2999 }() | uint32_t(func() uint32 {
3000 if Int32(0x80) == Int32(0x80) {
3001 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3002 }
3003 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3004 }()<<23)>>6 | uint32_t(0x7),
3005 func() uint32 {
3006 if 0x8 == 0 {
3007 return func() uint32 {
3008 if Int32(0xa0) == Int32(0x80) {
3009 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3010 }
3011 return Uint32(Uint32(0) - Uint32FromInt32(0xa0))
3012 }() << 23
3013 }
3014 return func() uint32 {
3015 if 0x8 == 0xd {
3016 return func() uint32 {
3017 if Int32(0x80) == Int32(0x80) {
3018 return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0))
3019 }
3020 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3021 }() << 23
3022 }
3023 return func() uint32 {
3024 if Int32(0x80) == Int32(0x80) {
3025 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3026 }
3027 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3028 }() << 23
3029 }()
3030 }() | uint32_t(func() uint32 {
3031 if Int32(0x80) == Int32(0x80) {
3032 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3033 }
3034 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3035 }()<<23)>>6 | uint32_t(0x8), func() uint32 {
3036 if 0x9 == 0 {
3037 return func() uint32 {
3038 if Int32(0xa0) == Int32(0x80) {
3039 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3040 }
3041 return Uint32(Uint32(0) - Uint32FromInt32(0xa0))
3042 }() << 23
3043 }
3044 return func() uint32 {
3045 if 0x9 == 0xd {
3046 return func() uint32 {
3047 if Int32(0x80) == Int32(0x80) {
3048 return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0))
3049 }
3050 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3051 }() << 23
3052 }
3053 return func() uint32 {
3054 if Int32(0x80) == Int32(0x80) {
3055 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3056 }
3057 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3058 }() << 23
3059 }()
3060 }() | uint32_t(func() uint32 {
3061 if Int32(0x80) == Int32(0x80) {
3062 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3063 }
3064 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3065 }()<<23)>>6 | uint32_t(0x9), func() uint32 {
3066 if 0xa == 0 {
3067 return func() uint32 {
3068 if Int32(0xa0) == Int32(0x80) {
3069 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3070 }
3071 return Uint32(Uint32(0) - Uint32FromInt32(0xa0))
3072 }() << 23
3073 }
3074 return func() uint32 {
3075 if 0xa == 0xd {
3076 return func() uint32 {
3077 if Int32(0x80) == Int32(0x80) {
3078 return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0))
3079 }
3080 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3081 }() << 23
3082 }
3083 return func() uint32 {
3084 if Int32(0x80) == Int32(0x80) {
3085 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3086 }
3087 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3088 }() << 23
3089 }()
3090 }() | uint32_t(func() uint32 {
3091 if Int32(0x80) == Int32(0x80) {
3092 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3093 }
3094 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3095 }()<<23)>>6 | uint32_t(0xa), func() uint32 {
3096 if 0xb == 0 {
3097 return func() uint32 {
3098 if Int32(0xa0) == Int32(0x80) {
3099 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3100 }
3101 return Uint32(Uint32(0) - Uint32FromInt32(0xa0))
3102 }() << 23
3103 }
3104 return func() uint32 {
3105 if 0xb == 0xd {
3106 return func() uint32 {
3107 if Int32(0x80) == Int32(0x80) {
3108 return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0))
3109 }
3110 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3111 }() << 23
3112 }
3113 return func() uint32 {
3114 if Int32(0x80) == Int32(0x80) {
3115 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3116 }
3117 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3118 }() << 23
3119 }()
3120 }() | uint32_t(func() uint32 {
3121 if Int32(0x80) == Int32(0x80) {
3122 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3123 }
3124 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3125 }()<<23)>>6 | uint32_t(0xb), func() uint32 {
3126 if 0xc == 0 {
3127 return func() uint32 {
3128 if Int32(0xa0) == Int32(0x80) {
3129 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3130 }
3131 return Uint32(Uint32(0) - Uint32FromInt32(0xa0))
3132 }() << 23
3133 }
3134 return func() uint32 {
3135 if 0xc == 0xd {
3136 return func() uint32 {
3137 if Int32(0x80) == Int32(0x80) {
3138 return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0))
3139 }
3140 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3141 }() << 23
3142 }
3143 return func() uint32 {
3144 if Int32(0x80) == Int32(0x80) {
3145 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3146 }
3147 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3148 }() << 23
3149 }()
3150 }() | uint32_t(func() uint32 {
3151 if Int32(0x80) == Int32(0x80) {
3152 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3153 }
3154 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3155 }()<<23)>>6 | uint32_t(0xc), func() uint32 {
3156 if 0xd == 0 {
3157 return func() uint32 {
3158 if Int32(0xa0) == Int32(0x80) {
3159 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3160 }
3161 return Uint32(Uint32(0) - Uint32FromInt32(0xa0))
3162 }() << 23
3163 }
3164 return func() uint32 {
3165 if 0xd == 0xd {
3166 return func() uint32 {
3167 if Int32(0x80) == Int32(0x80) {
3168 return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0))
3169 }
3170 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3171 }() << 23
3172 }
3173 return func() uint32 {
3174 if Int32(0x80) == Int32(0x80) {
3175 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3176 }
3177 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3178 }() << 23
3179 }()
3180 }() | uint32_t(func() uint32 {
3181 if Int32(0x80) == Int32(0x80) {
3182 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3183 }
3184 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3185 }()<<23)>>6 | uint32_t(0xd), func() uint32 {
3186 if 0xe == 0 {
3187 return func() uint32 {
3188 if Int32(0xa0) == Int32(0x80) {
3189 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3190 }
3191 return Uint32(Uint32(0) - Uint32FromInt32(0xa0))
3192 }() << 23
3193 }
3194 return func() uint32 {
3195 if 0xe == 0xd {
3196 return func() uint32 {
3197 if Int32(0x80) == Int32(0x80) {
3198 return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0))
3199 }
3200 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3201 }() << 23
3202 }
3203 return func() uint32 {
3204 if Int32(0x80) == Int32(0x80) {
3205 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3206 }
3207 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3208 }() << 23
3209 }()
3210 }() | uint32_t(func() uint32 {
3211 if Int32(0x80) == Int32(0x80) {
3212 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3213 }
3214 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3215 }()<<23)>>6 | uint32_t(0xe), func() uint32 {
3216 if 0xf == 0 {
3217 return func() uint32 {
3218 if Int32(0xa0) == Int32(0x80) {
3219 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3220 }
3221 return Uint32(Uint32(0) - Uint32FromInt32(0xa0))
3222 }() << 23
3223 }
3224 return func() uint32 {
3225 if 0xf == 0xd {
3226 return func() uint32 {
3227 if Int32(0x80) == Int32(0x80) {
3228 return Uint32(Uint32(0x40) - Uint32FromInt32(0xa0))
3229 }
3230 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3231 }() << 23
3232 }
3233 return func() uint32 {
3234 if Int32(0x80) == Int32(0x80) {
3235 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3236 }
3237 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3238 }() << 23
3239 }()
3240 }() | uint32_t(func() uint32 {
3241 if Int32(0x80) == Int32(0x80) {
3242 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3243 }
3244 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3245 }()<<23)>>6 | uint32_t(0xf),
3246 func() uint32 {
3247 if 0x0 >= 5 {
3248 return uint32(0)
3249 }
3250 return func() uint32 {
3251 if 0x0 == 0 {
3252 return func() uint32 {
3253 if Int32(0x90) == Int32(0x80) {
3254 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3255 }
3256 return Uint32(Uint32(0) - Uint32FromInt32(0x90))
3257 }() << 23
3258 }
3259 return func() uint32 {
3260 if 0x0 == 4 {
3261 return func() uint32 {
3262 if Int32(0x80) == Int32(0x80) {
3263 return Uint32(Uint32(0x40) - Uint32FromInt32(0x90))
3264 }
3265 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3266 }() << 23
3267 }
3268 return func() uint32 {
3269 if Int32(0x80) == Int32(0x80) {
3270 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3271 }
3272 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3273 }() << 23
3274 }()
3275 }()
3276 }() | uint32_t(func() uint32 {
3277 if Int32(0x80) == Int32(0x80) {
3278 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3279 }
3280 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3281 }()<<23)>>6 | uint32_t(func() uint32 {
3282 if Int32(0x80) == Int32(0x80) {
3283 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3284 }
3285 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3286 }()<<23)>>12 | uint32_t(0x0), func() uint32 {
3287 if 0x1 >= 5 {
3288 return uint32(0)
3289 }
3290 return func() uint32 {
3291 if 0x1 == 0 {
3292 return func() uint32 {
3293 if Int32(0x90) == Int32(0x80) {
3294 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3295 }
3296 return Uint32(Uint32(0) - Uint32FromInt32(0x90))
3297 }() << 23
3298 }
3299 return func() uint32 {
3300 if 0x1 == 4 {
3301 return func() uint32 {
3302 if Int32(0x80) == Int32(0x80) {
3303 return Uint32(Uint32(0x40) - Uint32FromInt32(0x90))
3304 }
3305 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3306 }() << 23
3307 }
3308 return func() uint32 {
3309 if Int32(0x80) == Int32(0x80) {
3310 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3311 }
3312 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3313 }() << 23
3314 }()
3315 }()
3316 }() | uint32_t(func() uint32 {
3317 if Int32(0x80) == Int32(0x80) {
3318 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3319 }
3320 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3321 }()<<23)>>6 | uint32_t(func() uint32 {
3322 if Int32(0x80) == Int32(0x80) {
3323 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3324 }
3325 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3326 }()<<23)>>12 | uint32_t(0x1), func() uint32 {
3327 if 0x2 >= 5 {
3328 return uint32(0)
3329 }
3330 return func() uint32 {
3331 if 0x2 == 0 {
3332 return func() uint32 {
3333 if Int32(0x90) == Int32(0x80) {
3334 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3335 }
3336 return Uint32(Uint32(0) - Uint32FromInt32(0x90))
3337 }() << 23
3338 }
3339 return func() uint32 {
3340 if 0x2 == 4 {
3341 return func() uint32 {
3342 if Int32(0x80) == Int32(0x80) {
3343 return Uint32(Uint32(0x40) - Uint32FromInt32(0x90))
3344 }
3345 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3346 }() << 23
3347 }
3348 return func() uint32 {
3349 if Int32(0x80) == Int32(0x80) {
3350 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3351 }
3352 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3353 }() << 23
3354 }()
3355 }()
3356 }() | uint32_t(func() uint32 {
3357 if Int32(0x80) == Int32(0x80) {
3358 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3359 }
3360 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3361 }()<<23)>>6 | uint32_t(func() uint32 {
3362 if Int32(0x80) == Int32(0x80) {
3363 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3364 }
3365 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3366 }()<<23)>>12 | uint32_t(0x2), func() uint32 {
3367 if 0x3 >= 5 {
3368 return uint32(0)
3369 }
3370 return func() uint32 {
3371 if 0x3 == 0 {
3372 return func() uint32 {
3373 if Int32(0x90) == Int32(0x80) {
3374 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3375 }
3376 return Uint32(Uint32(0) - Uint32FromInt32(0x90))
3377 }() << 23
3378 }
3379 return func() uint32 {
3380 if 0x3 == 4 {
3381 return func() uint32 {
3382 if Int32(0x80) == Int32(0x80) {
3383 return Uint32(Uint32(0x40) - Uint32FromInt32(0x90))
3384 }
3385 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3386 }() << 23
3387 }
3388 return func() uint32 {
3389 if Int32(0x80) == Int32(0x80) {
3390 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3391 }
3392 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3393 }() << 23
3394 }()
3395 }()
3396 }() | uint32_t(func() uint32 {
3397 if Int32(0x80) == Int32(0x80) {
3398 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3399 }
3400 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3401 }()<<23)>>6 | uint32_t(func() uint32 {
3402 if Int32(0x80) == Int32(0x80) {
3403 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3404 }
3405 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3406 }()<<23)>>12 | uint32_t(0x3), func() uint32 {
3407 if 0x4 >= 5 {
3408 return uint32(0)
3409 }
3410 return func() uint32 {
3411 if 0x4 == 0 {
3412 return func() uint32 {
3413 if Int32(0x90) == Int32(0x80) {
3414 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3415 }
3416 return Uint32(Uint32(0) - Uint32FromInt32(0x90))
3417 }() << 23
3418 }
3419 return func() uint32 {
3420 if 0x4 == 4 {
3421 return func() uint32 {
3422 if Int32(0x80) == Int32(0x80) {
3423 return Uint32(Uint32(0x40) - Uint32FromInt32(0x90))
3424 }
3425 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3426 }() << 23
3427 }
3428 return func() uint32 {
3429 if Int32(0x80) == Int32(0x80) {
3430 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3431 }
3432 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3433 }() << 23
3434 }()
3435 }()
3436 }() | uint32_t(func() uint32 {
3437 if Int32(0x80) == Int32(0x80) {
3438 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3439 }
3440 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3441 }()<<23)>>6 | uint32_t(func() uint32 {
3442 if Int32(0x80) == Int32(0x80) {
3443 return Uint32(Uint32(0x40) - Uint32FromInt32(0xc0))
3444 }
3445 return Uint32(Uint32(0) - Uint32FromInt32(0x80))
3446 }()<<23)>>12 | uint32_t(0x4),
3447} /* internal.c:18:16 */
3448
3449type wint_t = uint32 /* alltypes.h:190:18 */
3450
3451type wctype_t = uint64 /* alltypes.h:195:23 */
3452
3453type __mbstate_t = struct {
3454 __opaque1 uint32
3455 __opaque2 uint32
3456} /* alltypes.h:329:9 */
3457
3458type mbstate_t = __mbstate_t /* alltypes.h:329:63 */
3459
3460func Xmbrtowc(tls *TLS, wc uintptr, src uintptr, n size_t, st uintptr) size_t { /* mbrtowc.c:6:8: */
3461 bp := tls.Alloc(4)
3462 defer tls.Free(4)
3463
3464 var c uint32
3465 var s uintptr
3466 var N uint32
3467 // var dummy wchar_t at bp, 4
3468 s = src
3469 N = uint32(n)
3470
3471 if !!(st != 0) {
3472 goto __1
3473 }
3474 st = uintptr(unsafe.Pointer(&_sinternal_state))
3475__1:
3476 ;
3477 c = *(*uint32)(unsafe.Pointer(st))
3478
3479 if !!(s != 0) {
3480 goto __2
3481 }
3482 if !(c != 0) {
3483 goto __4
3484 }
3485 goto ilseq
3486__4:
3487 ;
3488 return uint64(0)
3489 goto __3
3490__2:
3491 if !!(wc != 0) {
3492 goto __5
3493 }
3494 wc = bp /* &dummy */
3495__5:
3496 ;
3497__3:
3498 ;
3499
3500 if !!(n != 0) {
3501 goto __6
3502 }
3503 return Uint64FromInt32(-2)
3504__6:
3505 ;
3506 if !!(c != 0) {
3507 goto __7
3508 }
3509 if !(int32(*(*uint8)(unsafe.Pointer(s))) < 0x80) {
3510 goto __8
3511 }
3512 return BoolUint64(!!(AssignPtrInt32(wc, wchar_t(*(*uint8)(unsafe.Pointer(s)))) != 0))
3513__8:
3514 ;
3515 if !(func() int32 {
3516 if !!(int32(*(*uintptr)(unsafe.Pointer((*__pthread)(unsafe.Pointer(__pthread_self(tls))).locale))) != 0) {
3517 return 4
3518 }
3519 return 1
3520 }() == 1) {
3521 goto __9
3522 }
3523 *(*wchar_t)(unsafe.Pointer(wc)) = 0xdfff & int32(int8(*(*uint8)(unsafe.Pointer(s))))
3524 return 1
3525__9:
3526 ;
3527 if !(uint32(*(*uint8)(unsafe.Pointer(s)))-0xc2 > 0xf4-0xc2) {
3528 goto __10
3529 }
3530 goto ilseq
3531__10:
3532 ;
3533 c = X__fsmu8[uint32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&s, 1))))-0xc2]
3534 n--
3535__7:
3536 ;
3537
3538 if !(n != 0) {
3539 goto __11
3540 }
3541 if !((int32(*(*uint8)(unsafe.Pointer(s)))>>3-0x10|(int32(*(*uint8)(unsafe.Pointer(s)))>>3+int32_t(c)>>26))&CplInt32(7) != 0) {
3542 goto __12
3543 }
3544 goto ilseq
3545__12:
3546 ;
3547loop:
3548 c = c<<6 | uint32(int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&s, 1))))-0x80)
3549 n--
3550 if !!(c&(uint32(1)<<31) != 0) {
3551 goto __13
3552 }
3553 *(*uint32)(unsafe.Pointer(st)) = uint32(0)
3554 *(*wchar_t)(unsafe.Pointer(wc)) = wchar_t(c)
3555 return size_t(N) - n
3556__13:
3557 ;
3558 if !(n != 0) {
3559 goto __14
3560 }
3561 if !(uint32(*(*uint8)(unsafe.Pointer(s)))-0x80 >= uint32(0x40)) {
3562 goto __15
3563 }
3564 goto ilseq
3565__15:
3566 ;
3567 goto loop
3568__14:
3569 ;
3570__11:
3571 ;
3572
3573 *(*uint32)(unsafe.Pointer(st)) = c
3574 return Uint64FromInt32(-2)
3575ilseq:
3576 *(*uint32)(unsafe.Pointer(st)) = uint32(0)
3577 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 84
3578 return Uint64FromInt32(-1)
3579}
3580
3581var _sinternal_state uint32 /* mbrtowc.c:8:18: */
3582
3583func Xmbsinit(tls *TLS, st uintptr) int32 { /* mbsinit.c:3:5: */
3584 return Bool32(!(st != 0) || !(int32(*(*uint32)(unsafe.Pointer(st))) != 0))
3585}
3586
3587type imaxdiv_t = struct {
3588 quot intmax_t
3589 rem intmax_t
3590} /* inttypes.h:14:40 */
3591
3592type socklen_t = uint32 /* alltypes.h:353:18 */
3593
3594type sa_family_t = uint16 /* alltypes.h:358:24 */
3595
3596type msghdr = struct {
3597 msg_name uintptr
3598 msg_namelen socklen_t
3599 _ [4]byte
3600 msg_iov uintptr
3601 msg_iovlen int32
3602 __pad1 int32
3603 msg_control uintptr
3604 msg_controllen socklen_t
3605 __pad2 int32
3606 msg_flags int32
3607 _ [4]byte
3608} /* socket.h:22:1 */
3609
3610type cmsghdr = struct {
3611 cmsg_len socklen_t
3612 __pad1 int32
3613 cmsg_level int32
3614 cmsg_type int32
3615} /* socket.h:44:1 */
3616
3617type linger = struct {
3618 l_onoff int32
3619 l_linger int32
3620} /* socket.h:74:1 */
3621
3622type sockaddr = struct {
3623 sa_family sa_family_t
3624 sa_data [14]uint8
3625} /* socket.h:367:1 */
3626
3627type sockaddr_storage = struct {
3628 ss_family sa_family_t
3629 __ss_padding [118]uint8
3630 __ss_align uint64
3631} /* socket.h:372:1 */
3632
3633type in_port_t = uint16_t /* in.h:12:18 */
3634type in_addr_t = uint32_t /* in.h:13:18 */
3635type in_addr = struct{ s_addr in_addr_t } /* in.h:14:1 */
3636
3637type sockaddr_in = struct {
3638 sin_family sa_family_t
3639 sin_port in_port_t
3640 sin_addr struct{ s_addr in_addr_t }
3641 sin_zero [8]uint8_t
3642} /* in.h:16:1 */
3643
3644type in6_addr = struct {
3645 __in6_union struct {
3646 _ [0]uint32
3647 __s6_addr [16]uint8_t
3648 }
3649} /* in.h:23:1 */
3650
3651type sockaddr_in6 = struct {
3652 sin6_family sa_family_t
3653 sin6_port in_port_t
3654 sin6_flowinfo uint32_t
3655 sin6_addr struct {
3656 __in6_union struct {
3657 _ [0]uint32
3658 __s6_addr [16]uint8_t
3659 }
3660 }
3661 sin6_scope_id uint32_t
3662} /* in.h:34:1 */
3663
3664type ipv6_mreq = struct {
3665 ipv6mr_multiaddr struct {
3666 __in6_union struct {
3667 _ [0]uint32
3668 __s6_addr [16]uint8_t
3669 }
3670 }
3671 ipv6mr_interface uint32
3672} /* in.h:42:1 */
3673
3674type ip_opts = struct {
3675 ip_dst struct{ s_addr in_addr_t }
3676 ip_opts [40]uint8
3677} /* in.h:229:1 */
3678
3679type ip_mreq = struct {
3680 imr_multiaddr struct{ s_addr in_addr_t }
3681 imr_interface struct{ s_addr in_addr_t }
3682} /* in.h:247:1 */
3683
3684type ip_mreqn = struct {
3685 imr_multiaddr struct{ s_addr in_addr_t }
3686 imr_address struct{ s_addr in_addr_t }
3687 imr_ifindex int32
3688} /* in.h:252:1 */
3689
3690type ip_mreq_source = struct {
3691 imr_multiaddr struct{ s_addr in_addr_t }
3692 imr_interface struct{ s_addr in_addr_t }
3693 imr_sourceaddr struct{ s_addr in_addr_t }
3694} /* in.h:258:1 */
3695
3696type ip_msfilter = struct {
3697 imsf_multiaddr struct{ s_addr in_addr_t }
3698 imsf_interface struct{ s_addr in_addr_t }
3699 imsf_fmode uint32_t
3700 imsf_numsrc uint32_t
3701 imsf_slist [1]struct{ s_addr in_addr_t }
3702} /* in.h:264:1 */
3703
3704type group_req = struct {
3705 gr_interface uint32_t
3706 _ [4]byte
3707 gr_group struct {
3708 ss_family sa_family_t
3709 __ss_padding [118]uint8
3710 __ss_align uint64
3711 }
3712} /* in.h:275:1 */
3713
3714type group_source_req = struct {
3715 gsr_interface uint32_t
3716 _ [4]byte
3717 gsr_group struct {
3718 ss_family sa_family_t
3719 __ss_padding [118]uint8
3720 __ss_align uint64
3721 }
3722 gsr_source struct {
3723 ss_family sa_family_t
3724 __ss_padding [118]uint8
3725 __ss_align uint64
3726 }
3727} /* in.h:280:1 */
3728
3729type group_filter = struct {
3730 gf_interface uint32_t
3731 _ [4]byte
3732 gf_group struct {
3733 ss_family sa_family_t
3734 __ss_padding [118]uint8
3735 __ss_align uint64
3736 }
3737 gf_fmode uint32_t
3738 gf_numsrc uint32_t
3739 gf_slist [1]struct {
3740 ss_family sa_family_t
3741 __ss_padding [118]uint8
3742 __ss_align uint64
3743 }
3744} /* in.h:286:1 */
3745
3746type in_pktinfo = struct {
3747 ipi_ifindex int32
3748 ipi_spec_dst struct{ s_addr in_addr_t }
3749 ipi_addr struct{ s_addr in_addr_t }
3750} /* in.h:297:1 */
3751
3752type in6_pktinfo = struct {
3753 ipi6_addr struct {
3754 __in6_union struct {
3755 _ [0]uint32
3756 __s6_addr [16]uint8_t
3757 }
3758 }
3759 ipi6_ifindex uint32
3760} /* in.h:303:1 */
3761
3762type ip6_mtuinfo = struct {
3763 ip6m_addr struct {
3764 sin6_family sa_family_t
3765 sin6_port in_port_t
3766 sin6_flowinfo uint32_t
3767 sin6_addr struct {
3768 __in6_union struct {
3769 _ [0]uint32
3770 __s6_addr [16]uint8_t
3771 }
3772 }
3773 sin6_scope_id uint32_t
3774 }
3775 ip6m_mtu uint32_t
3776} /* in.h:308:1 */
3777
3778type addrinfo = struct {
3779 ai_flags int32
3780 ai_family int32
3781 ai_socktype int32
3782 ai_protocol int32
3783 ai_addrlen socklen_t
3784 _ [4]byte
3785 ai_addr uintptr
3786 ai_canonname uintptr
3787 ai_next uintptr
3788} /* netdb.h:16:1 */
3789
3790// Legacy functions follow (marked OBsolete in SUS)
3791
3792type netent = struct {
3793 n_name uintptr
3794 n_aliases uintptr
3795 n_addrtype int32
3796 n_net uint32_t
3797} /* netdb.h:62:1 */
3798
3799type hostent = struct {
3800 h_name uintptr
3801 h_aliases uintptr
3802 h_addrtype int32
3803 h_length int32
3804 h_addr_list uintptr
3805} /* netdb.h:69:1 */
3806
3807type servent = struct {
3808 s_name uintptr
3809 s_aliases uintptr
3810 s_port int32
3811 _ [4]byte
3812 s_proto uintptr
3813} /* netdb.h:78:1 */
3814
3815type protoent = struct {
3816 p_name uintptr
3817 p_aliases uintptr
3818 p_proto int32
3819 _ [4]byte
3820} /* netdb.h:85:1 */
3821
3822type aibuf = struct {
3823 ai struct {
3824 ai_flags int32
3825 ai_family int32
3826 ai_socktype int32
3827 ai_protocol int32
3828 ai_addrlen socklen_t
3829 _ [4]byte
3830 ai_addr uintptr
3831 ai_canonname uintptr
3832 ai_next uintptr
3833 }
3834 sa struct {
3835 sin struct {
3836 sin_family sa_family_t
3837 sin_port in_port_t
3838 sin_addr struct{ s_addr in_addr_t }
3839 sin_zero [8]uint8_t
3840 }
3841 _ [12]byte
3842 }
3843 lock [1]int32
3844 slot int16
3845 ref int16
3846 _ [4]byte
3847} /* lookup.h:10:1 */
3848
3849type sa = struct {
3850 sin struct {
3851 sin_family sa_family_t
3852 sin_port in_port_t
3853 sin_addr struct{ s_addr in_addr_t }
3854 sin_zero [8]uint8_t
3855 }
3856 _ [12]byte
3857} /* lookup.h:10:1 */
3858
3859type address = struct {
3860 family int32
3861 scopeid uint32
3862 addr [16]uint8_t
3863 sortkey int32
3864} /* lookup.h:20:1 */
3865
3866type service = struct {
3867 port uint16_t
3868 proto uint8
3869 socktype uint8
3870} /* lookup.h:27:1 */
3871
3872type resolvconf = struct {
3873 ns [3]struct {
3874 family int32
3875 scopeid uint32
3876 addr [16]uint8_t
3877 sortkey int32
3878 }
3879 nns uint32
3880 attempts uint32
3881 ndots uint32
3882 timeout uint32
3883} /* lookup.h:34:1 */
3884
3885func Xfreeaddrinfo(tls *TLS, p uintptr) { /* freeaddrinfo.c:7:6: */
3886 var cnt size_t
3887 cnt = uint64(1)
3888__1:
3889 if !((*addrinfo)(unsafe.Pointer(p)).ai_next != 0) {
3890 goto __3
3891 }
3892 goto __2
3893__2:
3894 cnt++
3895 p = (*addrinfo)(unsafe.Pointer(p)).ai_next
3896 goto __1
3897 goto __3
3898__3:
3899 ;
3900 var b uintptr = p - uintptr(uint64(uintptr(0)))
3901 b -= 88 * uintptr((*aibuf)(unsafe.Pointer(b)).slot)
3902 //TODO LOCK(b->lock);
3903 if !(int32(AssignSubPtrInt16(b+82, int16(cnt))) != 0) {
3904 Xfree(tls, b)
3905 }
3906 //TODO else UNLOCK(b->lock);
3907}
3908
3909func Xgetaddrinfo(tls *TLS, host uintptr, serv uintptr, hint uintptr, res uintptr) int32 { /* getaddrinfo.c:12:5: */
3910 bp := tls.Alloc(1608)
3911 defer tls.Free(1608)
3912
3913 // var ports [2]service at bp, 8
3914
3915 // var addrs [48]address at bp+8, 1344
3916
3917 // var canon [256]uint8 at bp+1352, 256
3918
3919 var outcanon uintptr
3920 var nservs int32
3921 var naddrs int32
3922 var nais int32
3923 var canon_len int32
3924 var i int32
3925 var j int32
3926 var k int32
3927 var family int32 = 0
3928 var flags int32 = 0
3929 var proto int32 = 0
3930 var socktype int32 = 0
3931 var out uintptr
3932
3933 if !(host != 0) && !(serv != 0) {
3934 return -2
3935 }
3936
3937 if hint != 0 {
3938 family = (*addrinfo)(unsafe.Pointer(hint)).ai_family
3939 flags = (*addrinfo)(unsafe.Pointer(hint)).ai_flags
3940 proto = (*addrinfo)(unsafe.Pointer(hint)).ai_protocol
3941 socktype = (*addrinfo)(unsafe.Pointer(hint)).ai_socktype
3942
3943 var mask int32 = 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x400
3944 if flags&mask != flags {
3945 return -1
3946 }
3947
3948 switch family {
3949 case 2:
3950 fallthrough
3951 case 10:
3952 fallthrough
3953 case 0:
3954 break
3955 fallthrough
3956 default:
3957 return -6
3958 }
3959 }
3960
3961 if flags&0x20 != 0 {
3962 Xabort(tls) //TODO-
3963 // /* Define the "an address is configured" condition for address
3964 // * families via ability to create a socket for the family plus
3965 // * routability of the loopback address for the family. */
3966 // static const struct sockaddr_in lo4 = {
3967 // .sin_family = AF_INET, .sin_port = 65535,
3968 // .sin_addr.s_addr = __BYTE_ORDER == __BIG_ENDIAN
3969 // ? 0x7f000001 : 0x0100007f
3970 // };
3971 // static const struct sockaddr_in6 lo6 = {
3972 // .sin6_family = AF_INET6, .sin6_port = 65535,
3973 // .sin6_addr = IN6ADDR_LOOPBACK_INIT
3974 // };
3975 // int tf[2] = { AF_INET, AF_INET6 };
3976 // const void *ta[2] = { &lo4, &lo6 };
3977 // socklen_t tl[2] = { sizeof lo4, sizeof lo6 };
3978 // for (i=0; i<2; i++) {
3979 // if (family==tf[1-i]) continue;
3980 // int s = socket(tf[i], SOCK_CLOEXEC|SOCK_DGRAM,
3981 // IPPROTO_UDP);
3982 // if (s>=0) {
3983 // int cs;
3984 // pthread_setcancelstate(
3985 // PTHREAD_CANCEL_DISABLE, &cs);
3986 // int r = connect(s, ta[i], tl[i]);
3987 // pthread_setcancelstate(cs, 0);
3988 // close(s);
3989 // if (!r) continue;
3990 // }
3991 // switch (errno) {
3992 // case EADDRNOTAVAIL:
3993 // case EAFNOSUPPORT:
3994 // case EHOSTUNREACH:
3995 // case ENETDOWN:
3996 // case ENETUNREACH:
3997 // break;
3998 // default:
3999 // return EAI_SYSTEM;
4000 // }
4001 // if (family == tf[i]) return EAI_NONAME;
4002 // family = tf[1-i];
4003 // }
4004 }
4005
4006 nservs = X__lookup_serv(tls, bp, serv, proto, socktype, flags)
4007 if nservs < 0 {
4008 return nservs
4009 }
4010
4011 naddrs = X__lookup_name(tls, bp+8, bp+1352, host, family, flags)
4012 if naddrs < 0 {
4013 return naddrs
4014 }
4015
4016 nais = nservs * naddrs
4017 canon_len = int32(Xstrlen(tls, bp+1352))
4018 out = Xcalloc(tls, uint64(1), uint64(nais)*uint64(unsafe.Sizeof(aibuf{}))+uint64(canon_len)+uint64(1))
4019 if !(out != 0) {
4020 return -10
4021 }
4022
4023 if canon_len != 0 {
4024 outcanon = out + uintptr(nais)*88
4025 Xmemcpy(tls, outcanon, bp+1352, uint64(canon_len+1))
4026 } else {
4027 outcanon = uintptr(0)
4028 }
4029
4030 for k = AssignInt32(&i, 0); i < naddrs; i++ {
4031 j = 0
4032 __1:
4033 if !(j < nservs) {
4034 goto __3
4035 }
4036 {
4037 (*aibuf)(unsafe.Pointer(out + uintptr(k)*88)).slot = int16(k)
4038 //TODO out[k].ai = (struct addrinfo){
4039 //TODO .ai_family = addrs[i].family,
4040 //TODO .ai_socktype = ports[j].socktype,
4041 //TODO .ai_protocol = ports[j].proto,
4042 //TODO .ai_addrlen = addrs[i].family == AF_INET
4043 //TODO ? sizeof(struct sockaddr_in)
4044 //TODO : sizeof(struct sockaddr_in6),
4045 //TODO .ai_addr = (void *)&out[k].sa,
4046 //TODO .ai_canonname = outcanon };
4047 (*aibuf)(unsafe.Pointer(out + uintptr(k)*88)).ai.ai_family = (*address)(unsafe.Pointer(bp + 8 + uintptr(i)*28)).family
4048 (*aibuf)(unsafe.Pointer(out + uintptr(k)*88)).ai.ai_socktype = int32((*service)(unsafe.Pointer(bp + uintptr(j)*4)).socktype)
4049 (*aibuf)(unsafe.Pointer(out + uintptr(k)*88)).ai.ai_protocol = int32((*service)(unsafe.Pointer(bp + uintptr(j)*4)).proto)
4050 (*aibuf)(unsafe.Pointer(out + uintptr(k)*88)).ai.ai_addrlen = func() uint32 {
4051 if (*address)(unsafe.Pointer(bp+8+uintptr(i)*28)).family == 2 {
4052 return uint32(unsafe.Sizeof(sockaddr_in{}))
4053 }
4054 return uint32(unsafe.Sizeof(sockaddr_in6{}))
4055 }()
4056 (*aibuf)(unsafe.Pointer(out + uintptr(k)*88)).ai.ai_addr = out + uintptr(k)*88 + 48
4057 (*aibuf)(unsafe.Pointer(out + uintptr(k)*88)).ai.ai_canonname = outcanon
4058 if k != 0 {
4059 (*aibuf)(unsafe.Pointer(out + uintptr(k-1)*88)).ai.ai_next = out + uintptr(k)*88
4060 }
4061 switch (*address)(unsafe.Pointer(bp + 8 + uintptr(i)*28)).family {
4062 case 2:
4063 (*sockaddr_in)(unsafe.Pointer(out + uintptr(k)*88 + 48)).sin_family = sa_family_t(2)
4064 (*sockaddr_in)(unsafe.Pointer(out + uintptr(k)*88 + 48)).sin_port = Xhtons(tls, (*service)(unsafe.Pointer(bp+uintptr(j)*4)).port)
4065 Xmemcpy(tls, out+uintptr(k)*88+48+4, bp+8+uintptr(i)*28+8, uint64(4))
4066 break
4067 case 10:
4068 (*sockaddr_in6)(unsafe.Pointer(out + uintptr(k)*88 + 48)).sin6_family = sa_family_t(10)
4069 (*sockaddr_in6)(unsafe.Pointer(out + uintptr(k)*88 + 48)).sin6_port = Xhtons(tls, (*service)(unsafe.Pointer(bp+uintptr(j)*4)).port)
4070 (*sockaddr_in6)(unsafe.Pointer(out + uintptr(k)*88 + 48)).sin6_scope_id = (*address)(unsafe.Pointer(bp + 8 + uintptr(i)*28)).scopeid
4071 Xmemcpy(tls, out+uintptr(k)*88+48+8, bp+8+uintptr(i)*28+8, uint64(16))
4072 break
4073 }
4074
4075 }
4076 goto __2
4077 __2:
4078 j++
4079 k++
4080 goto __1
4081 goto __3
4082 __3:
4083 }
4084 (*aibuf)(unsafe.Pointer(out)).ref = int16(nais)
4085 *(*uintptr)(unsafe.Pointer(res)) = out
4086 return 0
4087}
4088
4089type ucred = struct {
4090 pid pid_t
4091 uid uid_t
4092 gid gid_t
4093} /* socket.h:57:1 */
4094
4095type mmsghdr = struct {
4096 msg_hdr struct {
4097 msg_name uintptr
4098 msg_namelen socklen_t
4099 _ [4]byte
4100 msg_iov uintptr
4101 msg_iovlen int32
4102 __pad1 int32
4103 msg_control uintptr
4104 msg_controllen socklen_t
4105 __pad2 int32
4106 msg_flags int32
4107 _ [4]byte
4108 }
4109 msg_len uint32
4110 _ [4]byte
4111} /* socket.h:63:1 */
4112
4113func Xgethostbyaddr(tls *TLS, a uintptr, l socklen_t, af int32) uintptr { /* gethostbyaddr.c:7:16: */
4114 bp := tls.Alloc(8)
4115 defer tls.Free(8)
4116
4117 var size size_t = uint64(63)
4118 // var res uintptr at bp, 8
4119
4120 var err int32
4121 for __ccgo := true; __ccgo; __ccgo = err == 34 {
4122 Xfree(tls, _sh)
4123 _sh = Xmalloc(tls, AssignAddUint64(&size, size+uint64(1)))
4124 if !(_sh != 0) {
4125 *(*int32)(unsafe.Pointer(X__h_errno_location(tls))) = 3
4126 return uintptr(0)
4127 }
4128 err = Xgethostbyaddr_r(tls, a, l, af, _sh,
4129 _sh+uintptr(1)*32, size-size_t(unsafe.Sizeof(hostent{})), bp, X__h_errno_location(tls))
4130 }
4131 if err != 0 {
4132 return uintptr(0)
4133 }
4134 return _sh
4135}
4136
4137var _sh uintptr /* gethostbyaddr.c:9:24: */
4138
4139func 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: */
4140 bp := tls.Alloc(28)
4141 defer tls.Free(28)
4142
4143 //TODO union {
4144 //TODO struct sockaddr_in sin;
4145 //TODO struct sockaddr_in6 sin6;
4146 //TODO } sa = { .sin.sin_family = af };
4147 *(*struct {
4148 sin sockaddr_in
4149 _ [12]byte
4150 })(unsafe.Pointer(bp)) = struct {
4151 sin sockaddr_in
4152 _ [12]byte
4153 }{} //TODO-
4154 (*sockaddr_in)(unsafe.Pointer(bp)).sin_family = sa_family_t(af) //TODO-
4155 var sl socklen_t
4156 if af == 10 {
4157 sl = uint32(unsafe.Sizeof(sockaddr_in6{}))
4158 } else {
4159 sl = uint32(unsafe.Sizeof(sockaddr_in{}))
4160 }
4161 var i int32
4162
4163 *(*uintptr)(unsafe.Pointer(res)) = uintptr(0)
4164
4165 // Load address argument into sockaddr structure
4166 if af == 10 && l == socklen_t(16) {
4167 Xmemcpy(tls, bp+8, a, uint64(16))
4168 } else if af == 2 && l == socklen_t(4) {
4169 Xmemcpy(tls, bp+4, a, uint64(4))
4170 } else {
4171 *(*int32)(unsafe.Pointer(err)) = 3
4172 return 22
4173 }
4174
4175 // Align buffer and check for space for pointers and ip address
4176 i = int32(uintptr_t(buf) & (uint64(unsafe.Sizeof(uintptr(0))) - uint64(1)))
4177 if !(i != 0) {
4178 i = int32(unsafe.Sizeof(uintptr(0)))
4179 }
4180 if buflen <= uint64(5)*uint64(unsafe.Sizeof(uintptr(0)))-uint64(i)+uint64(l) {
4181 return 34
4182 }
4183 buf += uintptr(uint64(unsafe.Sizeof(uintptr(0))) - uint64(i))
4184 buflen = buflen - (uint64(5)*uint64(unsafe.Sizeof(uintptr(0))) - uint64(i) + uint64(l))
4185
4186 (*hostent)(unsafe.Pointer(h)).h_addr_list = buf
4187 buf += uintptr(uint64(2) * uint64(unsafe.Sizeof(uintptr(0))))
4188 (*hostent)(unsafe.Pointer(h)).h_aliases = buf
4189 buf += uintptr(uint64(2) * uint64(unsafe.Sizeof(uintptr(0))))
4190
4191 *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_addr_list)) = buf
4192 Xmemcpy(tls, *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_addr_list)), a, uint64(l))
4193 buf += uintptr(l)
4194 *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_addr_list + 1*8)) = uintptr(0)
4195 *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_aliases)) = buf
4196 *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_aliases + 1*8)) = uintptr(0)
4197
4198 switch Xgetnameinfo(tls, bp, sl, buf, uint32(buflen), uintptr(0), uint32(0), 0) {
4199 case -3:
4200 *(*int32)(unsafe.Pointer(err)) = 2
4201 return 11
4202 case -12:
4203 return 34
4204 default:
4205 fallthrough
4206 case -10:
4207 fallthrough
4208 case -11:
4209 fallthrough
4210 case -4:
4211 *(*int32)(unsafe.Pointer(err)) = 3
4212 return *(*int32)(unsafe.Pointer(X___errno_location(tls)))
4213 case 0:
4214 break
4215 }
4216
4217 (*hostent)(unsafe.Pointer(h)).h_addrtype = af
4218 (*hostent)(unsafe.Pointer(h)).h_length = int32(l)
4219 (*hostent)(unsafe.Pointer(h)).h_name = *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_aliases))
4220 *(*uintptr)(unsafe.Pointer(res)) = h
4221 return 0
4222}
4223
4224func Xgethostbyname(tls *TLS, name uintptr) uintptr { /* gethostbyname.c:8:16: */
4225 return Xgethostbyname2(tls, name, 2)
4226}
4227
4228func Xgethostbyname2(tls *TLS, name uintptr, af int32) uintptr { /* gethostbyname2.c:8:16: */
4229 bp := tls.Alloc(8)
4230 defer tls.Free(8)
4231
4232 var size size_t = uint64(63)
4233 // var res uintptr at bp, 8
4234
4235 var err int32
4236 for __ccgo := true; __ccgo; __ccgo = err == 34 {
4237 Xfree(tls, _sh1)
4238 _sh1 = Xmalloc(tls, AssignAddUint64(&size, size+uint64(1)))
4239 if !(_sh1 != 0) {
4240 *(*int32)(unsafe.Pointer(X__h_errno_location(tls))) = 3
4241 return uintptr(0)
4242 }
4243 err = Xgethostbyname2_r(tls, name, af, _sh1,
4244 _sh1+uintptr(1)*32, size-size_t(unsafe.Sizeof(hostent{})), bp, X__h_errno_location(tls))
4245 }
4246 if err != 0 {
4247 return uintptr(0)
4248 }
4249 return _sh1
4250}
4251
4252var _sh1 uintptr /* gethostbyname2.c:10:24: */
4253
4254func 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: */
4255 bp := tls.Alloc(1600)
4256 defer tls.Free(1600)
4257
4258 // var addrs [48]address at bp, 1344
4259
4260 // var canon [256]uint8 at bp+1344, 256
4261
4262 var i int32
4263 var cnt int32
4264 var align size_t
4265 var need size_t
4266
4267 *(*uintptr)(unsafe.Pointer(res)) = uintptr(0)
4268 cnt = X__lookup_name(tls, bp, bp+1344, name, af, 0x02)
4269 if cnt < 0 {
4270 switch cnt {
4271 case -2:
4272 *(*int32)(unsafe.Pointer(err)) = 1
4273 return 2
4274 fallthrough
4275 case -3:
4276 *(*int32)(unsafe.Pointer(err)) = 2
4277 return 11
4278 fallthrough
4279 default:
4280 fallthrough
4281 case -4:
4282 *(*int32)(unsafe.Pointer(err)) = 3
4283 return 74
4284 fallthrough
4285 case -10:
4286 fallthrough
4287 case -11:
4288 *(*int32)(unsafe.Pointer(err)) = 3
4289 return *(*int32)(unsafe.Pointer(X___errno_location(tls)))
4290 }
4291 }
4292
4293 (*hostent)(unsafe.Pointer(h)).h_addrtype = af
4294 (*hostent)(unsafe.Pointer(h)).h_length = func() int32 {
4295 if af == 10 {
4296 return 16
4297 }
4298 return 4
4299 }()
4300
4301 // Align buffer
4302 align = -uintptr_t(buf) & (uint64(unsafe.Sizeof(uintptr(0))) - uint64(1))
4303
4304 need = uint64(4) * uint64(unsafe.Sizeof(uintptr(0)))
4305 need = need + uint64(cnt+1)*(uint64(unsafe.Sizeof(uintptr(0)))+uint64((*hostent)(unsafe.Pointer(h)).h_length))
4306 need = need + (Xstrlen(tls, name) + uint64(1))
4307 need = need + (Xstrlen(tls, bp+1344) + uint64(1))
4308 need = need + align
4309
4310 if need > buflen {
4311 return 34
4312 }
4313
4314 buf += uintptr(align)
4315 (*hostent)(unsafe.Pointer(h)).h_aliases = buf
4316 buf += uintptr(uint64(3) * uint64(unsafe.Sizeof(uintptr(0))))
4317 (*hostent)(unsafe.Pointer(h)).h_addr_list = buf
4318 buf += uintptr(uint64(cnt+1) * uint64(unsafe.Sizeof(uintptr(0))))
4319
4320 for i = 0; i < cnt; i++ {
4321 *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_addr_list + uintptr(i)*8)) = buf
4322 buf += uintptr((*hostent)(unsafe.Pointer(h)).h_length)
4323 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))
4324 }
4325 *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_addr_list + uintptr(i)*8)) = uintptr(0)
4326
4327 (*hostent)(unsafe.Pointer(h)).h_name = AssignPtrUintptr((*hostent)(unsafe.Pointer(h)).h_aliases, buf)
4328 Xstrcpy(tls, (*hostent)(unsafe.Pointer(h)).h_name, bp+1344)
4329 buf += uintptr(Xstrlen(tls, (*hostent)(unsafe.Pointer(h)).h_name) + uint64(1))
4330
4331 if Xstrcmp(tls, (*hostent)(unsafe.Pointer(h)).h_name, name) != 0 {
4332 *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_aliases + 1*8)) = buf
4333 Xstrcpy(tls, *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_aliases + 1*8)), name)
4334 buf += uintptr(Xstrlen(tls, *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_aliases + 1*8))) + uint64(1))
4335 } else {
4336 *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_aliases + 1*8)) = uintptr(0)
4337 }
4338
4339 *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).h_aliases + 2*8)) = uintptr(0)
4340
4341 *(*uintptr)(unsafe.Pointer(res)) = h
4342 return 0
4343}
4344
4345func Xgethostbyname_r(tls *TLS, name uintptr, h uintptr, buf uintptr, buflen size_t, res uintptr, err uintptr) int32 { /* gethostbyname_r.c:6:5: */
4346 return Xgethostbyname2_r(tls, name, 2, h, buf, buflen, res, err)
4347}
4348
4349type if_nameindex = struct {
4350 if_index uint32
4351 _ [4]byte
4352 if_name uintptr
4353} /* if.h:12:1 */
4354
4355type ifaddr = struct {
4356 ifa_addr struct {
4357 sa_family sa_family_t
4358 sa_data [14]uint8
4359 }
4360 ifa_ifu struct {
4361 ifu_broadaddr struct {
4362 sa_family sa_family_t
4363 sa_data [14]uint8
4364 }
4365 }
4366 ifa_ifp uintptr
4367 ifa_next uintptr
4368} /* if.h:51:1 */
4369
4370type ifmap = struct {
4371 mem_start uint64
4372 mem_end uint64
4373 base_addr uint16
4374 irq uint8
4375 dma uint8
4376 port uint8
4377 _ [3]byte
4378} /* if.h:64:1 */
4379
4380type ifreq = struct {
4381 ifr_ifrn struct{ ifrn_name [16]uint8 }
4382 ifr_ifru struct {
4383 _ [0]uint64
4384 ifru_addr struct {
4385 sa_family sa_family_t
4386 sa_data [14]uint8
4387 }
4388 _ [8]byte
4389 }
4390} /* if.h:76:1 */
4391
4392type ifconf = struct {
4393 ifc_len int32
4394 _ [4]byte
4395 ifc_ifcu struct{ ifcu_buf uintptr }
4396} /* if.h:116:1 */
4397
4398type ns_sect = uint32 /* nameser.h:37:3 */
4399
4400type __ns_msg = struct {
4401 _msg uintptr
4402 _eom uintptr
4403 _id uint16_t
4404 _flags uint16_t
4405 _counts [4]uint16_t
4406 _ [4]byte
4407 _sections [4]uintptr
4408 _sect ns_sect
4409 _rrnum int32
4410 _msg_ptr uintptr
4411} /* nameser.h:39:9 */
4412
4413type ns_msg = __ns_msg /* nameser.h:46:3 */
4414
4415type _ns_flagdata = struct {
4416 mask int32
4417 shift int32
4418} /* nameser.h:48:1 */
4419
4420type __ns_rr = struct {
4421 name [1025]uint8
4422 _ [1]byte
4423 __type uint16_t
4424 rr_class uint16_t
4425 _ [2]byte
4426 ttl uint32_t
4427 rdlength uint16_t
4428 _ [2]byte
4429 rdata uintptr
4430} /* nameser.h:59:9 */
4431
4432type ns_rr = __ns_rr /* nameser.h:66:3 */
4433
4434type ns_flag = uint32 /* nameser.h:87:3 */
4435
4436type ns_opcode = uint32 /* nameser.h:96:3 */
4437
4438type ns_rcode = uint32 /* nameser.h:115:3 */
4439
4440type ns_update_operation = uint32 /* nameser.h:121:3 */
4441
4442type ns_tsig_key1 = struct {
4443 name [1025]uint8
4444 alg [1025]uint8
4445 _ [6]byte
4446 data uintptr
4447 len int32
4448 _ [4]byte
4449} /* nameser.h:123:1 */
4450
4451type ns_tsig_key = ns_tsig_key1 /* nameser.h:128:28 */
4452
4453type ns_tcp_tsig_state1 = struct {
4454 counter int32
4455 _ [4]byte
4456 key uintptr
4457 ctx uintptr
4458 sig [512]uint8
4459 siglen int32
4460 _ [4]byte
4461} /* nameser.h:130:1 */
4462
4463type ns_tcp_tsig_state = ns_tcp_tsig_state1 /* nameser.h:137:34 */
4464
4465type ns_type = uint32 /* nameser.h:200:3 */
4466
4467type ns_class = uint32 /* nameser.h:219:3 */
4468
4469type ns_key_types = uint32 /* nameser.h:226:3 */
4470
4471type ns_cert_types = uint32 /* nameser.h:234:3 */
4472
4473type HEADER = struct {
4474 _ [0]uint32
4475 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 */
4476 qdcount uint32 /* unsigned qdcount: 16, unsigned ancount: 16 */
4477 nscount uint32 /* unsigned nscount: 16, unsigned arcount: 16 */
4478} /* nameser.h:353:3 */
4479
4480// unused; purely for broken apps
4481type __res_state = struct {
4482 retrans int32
4483 retry int32
4484 options uint64
4485 nscount int32
4486 nsaddr_list [3]struct {
4487 sin_family sa_family_t
4488 sin_port in_port_t
4489 sin_addr struct{ s_addr in_addr_t }
4490 sin_zero [8]uint8_t
4491 }
4492 id uint16
4493 _ [2]byte
4494 dnsrch [7]uintptr
4495 defdname [256]uint8
4496 pfcode uint64
4497 ndots uint32 /* unsigned ndots: 4, unsigned nsort: 4, unsigned ipv6_unavail: 1, unsigned unused: 23 */
4498 _ [4]byte
4499 sort_list [10]struct {
4500 addr struct{ s_addr in_addr_t }
4501 mask uint32_t
4502 }
4503 qhook uintptr
4504 rhook uintptr
4505 res_h_errno int32
4506 _vcsock int32
4507 _flags uint32
4508 _ [4]byte
4509 _u struct {
4510 _ [0]uint64
4511 pad [52]uint8
4512 _ [4]byte
4513 }
4514} /* resolv.h:26:9 */
4515
4516// unused; purely for broken apps
4517type res_state = uintptr /* resolv.h:62:3 */
4518
4519type res_sym = struct {
4520 number int32
4521 _ [4]byte
4522 name uintptr
4523 humanname uintptr
4524} /* resolv.h:70:1 */
4525
4526func itoa(tls *TLS, p uintptr, x uint32) uintptr { /* getnameinfo.c:18:13: */
4527 p += uintptr(uint64(3) * uint64(unsafe.Sizeof(int32(0))))
4528 *(*uint8)(unsafe.Pointer(PreDecUintptr(&p, 1))) = uint8(0)
4529 for __ccgo := true; __ccgo; __ccgo = x != 0 {
4530 *(*uint8)(unsafe.Pointer(PreDecUintptr(&p, 1))) = uint8(uint32('0') + x%uint32(10))
4531 x = x / uint32(10)
4532 }
4533 return p
4534}
4535
4536func mkptr4(tls *TLS, s uintptr, ip uintptr) { /* getnameinfo.c:28:13: */
4537 bp := tls.Alloc(32)
4538 defer tls.Free(32)
4539
4540 Xsprintf(tls, s, ts+25,
4541 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)))))
4542}
4543
4544func mkptr6(tls *TLS, s uintptr, ip uintptr) { /* getnameinfo.c:34:13: */
4545 var i int32
4546 for i = 15; i >= 0; i-- {
4547 *(*uint8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = _sxdigits[int32(*(*uint8)(unsafe.Pointer(ip + uintptr(i))))&15]
4548 *(*uint8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = uint8('.')
4549 *(*uint8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = _sxdigits[int32(*(*uint8)(unsafe.Pointer(ip + uintptr(i))))>>4]
4550 *(*uint8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = uint8('.')
4551 }
4552 Xstrcpy(tls, s, ts+50)
4553}
4554
4555var _sxdigits = *(*[17]uint8)(unsafe.Pointer(ts + 59)) /* getnameinfo.c:36:20 */
4556
4557func reverse_hosts(tls *TLS, buf uintptr, a uintptr, scopeid uint32, family int32) { /* getnameinfo.c:45:13: */
4558 bp := tls.Alloc(556)
4559 defer tls.Free(556)
4560
4561 // var line [512]uint8 at bp+16, 512
4562
4563 var p uintptr
4564 var z uintptr
4565 var _buf [1032]uint8
4566 _ = _buf
4567 // var atmp [16]uint8 at bp, 16
4568
4569 // var iplit address at bp+528, 28
4570
4571 //TODO FILE _f, *f = __fopen_rb_ca("/etc/hosts", &_f, _buf, sizeof _buf);
4572 var f uintptr = Xfopen(tls, ts+76, ts+87)
4573 if !(f != 0) {
4574 return
4575 }
4576 if family == 2 {
4577 Xmemcpy(tls, bp+uintptr(12), a, uint64(4))
4578 Xmemcpy(tls, bp, ts+90, uint64(12))
4579 a = bp /* &atmp[0] */
4580 }
4581 for Xfgets(tls, bp+16, int32(unsafe.Sizeof([512]uint8{})), f) != 0 {
4582 if AssignUintptr(&p, Xstrchr(tls, bp+16, '#')) != 0 {
4583 *(*uint8)(unsafe.Pointer(PostIncUintptr(&p, 1))) = uint8('\n')
4584 *(*uint8)(unsafe.Pointer(p)) = uint8(0)
4585 }
4586
4587 for p = bp + 16; /* &line[0] */ *(*uint8)(unsafe.Pointer(p)) != 0 && !(__isspace(tls, int32(*(*uint8)(unsafe.Pointer(p)))) != 0); p++ {
4588 }
4589 *(*uint8)(unsafe.Pointer(PostIncUintptr(&p, 1))) = uint8(0)
4590 if X__lookup_ipliteral(tls, bp+528, bp+16, 0) <= 0 {
4591 continue
4592 }
4593
4594 if (*address)(unsafe.Pointer(bp+528)).family == 2 {
4595 Xmemcpy(tls, bp+528+8+uintptr(12), bp+528+8, uint64(4))
4596 Xmemcpy(tls, bp+528+8, ts+90, uint64(12))
4597 (*address)(unsafe.Pointer(bp + 528 /* &iplit */)).scopeid = uint32(0)
4598 }
4599
4600 if Xmemcmp(tls, a, bp+528+8, uint64(16)) != 0 || (*address)(unsafe.Pointer(bp+528)).scopeid != scopeid {
4601 continue
4602 }
4603
4604 for ; *(*uint8)(unsafe.Pointer(p)) != 0 && __isspace(tls, int32(*(*uint8)(unsafe.Pointer(p)))) != 0; p++ {
4605 }
4606 for z = p; *(*uint8)(unsafe.Pointer(z)) != 0 && !(__isspace(tls, int32(*(*uint8)(unsafe.Pointer(z)))) != 0); z++ {
4607 }
4608 *(*uint8)(unsafe.Pointer(z)) = uint8(0)
4609 if (int64(z)-int64(p))/1 < int64(256) {
4610 Xmemcpy(tls, buf, p, uint64((int64(z)-int64(p))/1+int64(1)))
4611 break
4612 }
4613 }
4614 //TODO __fclose_ca(f);
4615 Xfclose(tls, f)
4616}
4617
4618func reverse_services(tls *TLS, buf uintptr, port int32, dgram int32) { /* getnameinfo.c:87:13: */
4619 Xabort(tls) //TODO-
4620 // unsigned long svport;
4621 // char line[128], *p, *z;
4622 // unsigned char _buf[1032];
4623 // FILE _f, *f = __fopen_rb_ca("/etc/services", &_f, _buf, sizeof _buf);
4624 // if (!f) return;
4625 // while (fgets(line, sizeof line, f)) {
4626 // if ((p=strchr(line, '#'))) *p++='\n', *p=0;
4627
4628 // for (p=line; *p && !isspace(*p); p++);
4629 // if (!*p) continue;
4630 // *p++ = 0;
4631 // svport = strtoul(p, &z, 10);
4632
4633 // if (svport != port || z==p) continue;
4634 // if (dgram && strncmp(z, "/udp", 4)) continue;
4635 // if (!dgram && strncmp(z, "/tcp", 4)) continue;
4636 // if (p-line > 32) continue;
4637
4638 // memcpy(buf, line, p-line);
4639 // break;
4640 // }
4641 // __fclose_ca(f);
4642}
4643
4644func 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: */
4645 bp := tls.Alloc(347)
4646 defer tls.Free(347)
4647
4648 // var ptr [78]uint8 at bp, 78
4649
4650 // var buf [256]uint8 at bp+78, 256
4651
4652 // var num [13]uint8 at bp+334, 13
4653
4654 var af int32 = int32((*sockaddr)(unsafe.Pointer(sa1)).sa_family)
4655 var a uintptr
4656 var scopeid uint32
4657
4658 switch af {
4659 case 2:
4660 a = sa1 + 4
4661 if uint64(sl) < uint64(unsafe.Sizeof(sockaddr_in{})) {
4662 return -6
4663 }
4664 mkptr4(tls, bp, a)
4665 scopeid = uint32(0)
4666 break
4667 case 10:
4668 a = sa1 + 8
4669 if uint64(sl) < uint64(unsafe.Sizeof(sockaddr_in6{})) {
4670 return -6
4671 }
4672 if Xmemcmp(tls, a, ts+90, uint64(12)) != 0 {
4673 mkptr6(tls, bp, a)
4674 } else {
4675 mkptr4(tls, bp, a+uintptr(12))
4676 }
4677 scopeid = (*sockaddr_in6)(unsafe.Pointer(sa1)).sin6_scope_id
4678 break
4679 default:
4680 return -6
4681 }
4682
4683 if node != 0 && nodelen != 0 {
4684 *(*uint8)(unsafe.Pointer(bp + 78)) = uint8(0)
4685 if !(flags&0x01 != 0) {
4686 reverse_hosts(tls, bp+78, a, scopeid, af)
4687 }
4688 if !(int32(*(*uint8)(unsafe.Pointer(bp + 78))) != 0) && !(flags&0x01 != 0) {
4689 Xabort(tls) //TODO-
4690 // unsigned char query[18+PTR_MAX], reply[512];
4691 // int qlen = __res_mkquery(0, ptr, 1, RR_PTR,
4692 // 0, 0, 0, query, sizeof query);
4693 // query[3] = 0; /* don't need AD flag */
4694 // int rlen = __res_send(query, qlen, reply, sizeof reply);
4695 // buf[0] = 0;
4696 // if (rlen > 0)
4697 // __dns_parse(reply, rlen, dns_parse_callback, buf);
4698 }
4699 if !(int32(*(*uint8)(unsafe.Pointer(bp + 78))) != 0) {
4700 if flags&0x08 != 0 {
4701 return -2
4702 }
4703 Xinet_ntop(tls, af, a, bp+78, uint32(unsafe.Sizeof([256]uint8{})))
4704 if scopeid != 0 {
4705 Xabort(tls) //TODO-
4706 // char *p = 0, tmp[IF_NAMESIZE+1];
4707 // if (!(flags & NI_NUMERICSCOPE) &&
4708 // (IN6_IS_ADDR_LINKLOCAL(a) ||
4709 // IN6_IS_ADDR_MC_LINKLOCAL(a)))
4710 // p = if_indextoname(scopeid, tmp+1);
4711 // if (!p)
4712 // p = itoa(num, scopeid);
4713 // *--p = '%';
4714 // strcat(buf, p);
4715 }
4716 }
4717 if Xstrlen(tls, bp+78) >= size_t(nodelen) {
4718 return -12
4719 }
4720 Xstrcpy(tls, node, bp+78)
4721 }
4722
4723 if serv != 0 && servlen != 0 {
4724 var p uintptr = bp + 78 /* buf */
4725 var port int32 = int32(Xntohs(tls, (*sockaddr_in)(unsafe.Pointer(sa1)).sin_port))
4726 *(*uint8)(unsafe.Pointer(bp + 78)) = uint8(0)
4727 if !(flags&0x02 != 0) {
4728 reverse_services(tls, bp+78, port, flags&0x10)
4729 }
4730 if !(int32(*(*uint8)(unsafe.Pointer(p))) != 0) {
4731 p = itoa(tls, bp+334, uint32(port))
4732 }
4733 if Xstrlen(tls, p) >= size_t(servlen) {
4734 return -12
4735 }
4736 Xstrcpy(tls, serv, p)
4737 }
4738
4739 return 0
4740}
4741
4742var Xh_errno int32 /* h_errno.c:4:5: */
4743
4744func X__h_errno_location(tls *TLS) uintptr { /* h_errno.c:6:5: */
4745 return uintptr(unsafe.Pointer(&Xh_errno))
4746}
4747
4748func X__inet_aton(tls *TLS, s0 uintptr, dest uintptr) int32 { /* inet_aton.c:7:5: */
4749 bp := tls.Alloc(40)
4750 defer tls.Free(40)
4751
4752 var s uintptr = s0
4753 var d uintptr = dest
4754 *(*[4]uint64)(unsafe.Pointer(bp /* a */)) = [4]uint64{0: uint64(0)}
4755 // var z uintptr at bp+32, 8
4756
4757 var i int32
4758
4759 for i = 0; i < 4; i++ {
4760 *(*uint64)(unsafe.Pointer(bp + uintptr(i)*8)) = Xstrtoul(tls, s, bp+32, 0)
4761 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 {
4762 if 0 != 0 {
4763 return Xisdigit(tls, int32(*(*uint8)(unsafe.Pointer(s))))
4764 }
4765 return Bool32(uint32(*(*uint8)(unsafe.Pointer(s)))-uint32('0') < uint32(10))
4766 }() != 0) {
4767 return 0
4768 }
4769 if !(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32))))) != 0) {
4770 break
4771 }
4772 s = *(*uintptr)(unsafe.Pointer(bp + 32)) + uintptr(1)
4773 }
4774 if i == 4 {
4775 return 0
4776 }
4777 switch i {
4778 case 0:
4779 *(*uint64)(unsafe.Pointer(bp + 1*8)) = *(*uint64)(unsafe.Pointer(bp)) & uint64(0xffffff)
4780 AssignShrPtrUint64(bp, int(24))
4781 fallthrough
4782 case 1:
4783 *(*uint64)(unsafe.Pointer(bp + 2*8)) = *(*uint64)(unsafe.Pointer(bp + 1*8)) & uint64(0xffff)
4784 AssignShrPtrUint64(bp+1*8, int(16))
4785 fallthrough
4786 case 2:
4787 *(*uint64)(unsafe.Pointer(bp + 3*8)) = *(*uint64)(unsafe.Pointer(bp + 2*8)) & uint64(0xff)
4788 AssignShrPtrUint64(bp+2*8, int(8))
4789 }
4790 for i = 0; i < 4; i++ {
4791 if *(*uint64)(unsafe.Pointer(bp + uintptr(i)*8)) > uint64(255) {
4792 return 0
4793 }
4794 *(*uint8)(unsafe.Pointer(d + uintptr(i))) = uint8(*(*uint64)(unsafe.Pointer(bp + uintptr(i)*8)))
4795 }
4796 return 1
4797}
4798
4799func Xinet_ntop(tls *TLS, af int32, a0 uintptr, s uintptr, l socklen_t) uintptr { /* inet_ntop.c:7:12: */
4800 bp := tls.Alloc(276)
4801 defer tls.Free(276)
4802
4803 var a uintptr = a0
4804 var i int32
4805 var j int32
4806 var max int32
4807 var best int32
4808 // var buf [100]uint8 at bp+176, 100
4809
4810 switch af {
4811 case 2:
4812 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 {
4813 return s
4814 }
4815 break
4816 case 10:
4817 if Xmemcmp(tls, a, ts+90, uint64(12)) != 0 {
4818 Xsnprintf(tls, bp+176, uint64(unsafe.Sizeof([100]uint8{})),
4819 ts+115,
4820 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))),
4821 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))),
4822 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))),
4823 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)))))
4824 } else {
4825 Xsnprintf(tls, bp+176, uint64(unsafe.Sizeof([100]uint8{})),
4826 ts+139,
4827 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))),
4828 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))),
4829 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))),
4830 int32(*(*uint8)(unsafe.Pointer(a + 12))), int32(*(*uint8)(unsafe.Pointer(a + 13))), int32(*(*uint8)(unsafe.Pointer(a + 14))), int32(*(*uint8)(unsafe.Pointer(a + 15)))))
4831 }
4832 // Replace longest /(^0|:)[:0]{2,}/ with "::"
4833 i = AssignInt32(&best, 0)
4834 max = 2
4835 for ; *(*uint8)(unsafe.Pointer(bp + 176 + uintptr(i))) != 0; i++ {
4836 if i != 0 && int32(*(*uint8)(unsafe.Pointer(bp + 176 + uintptr(i)))) != ':' {
4837 continue
4838 }
4839 j = int32(Xstrspn(tls, bp+176+uintptr(i), ts+169))
4840 if j > max {
4841 best = i
4842 max = j
4843 }
4844 }
4845 if max > 3 {
4846 *(*uint8)(unsafe.Pointer(bp + 176 + uintptr(best))) = AssignPtrUint8(bp+176+uintptr(best+1), uint8(':'))
4847 Xmemmove(tls, bp+176+uintptr(best)+uintptr(2), bp+176+uintptr(best)+uintptr(max), uint64(i-best-max+1))
4848 }
4849 if Xstrlen(tls, bp+176) < size_t(l) {
4850 Xstrcpy(tls, s, bp+176)
4851 return s
4852 }
4853 break
4854 default:
4855 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 97
4856 return uintptr(0)
4857 }
4858 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 28
4859 return uintptr(0)
4860}
4861
4862func hexval(tls *TLS, c uint32) int32 { /* inet_pton.c:7:12: */
4863 if c-uint32('0') < uint32(10) {
4864 return int32(c - uint32('0'))
4865 }
4866 c = c | uint32(32)
4867 if c-uint32('a') < uint32(6) {
4868 return int32(c - uint32('a') + uint32(10))
4869 }
4870 return -1
4871}
4872
4873func Xinet_pton(tls *TLS, af int32, s uintptr, a0 uintptr) int32 { /* inet_pton.c:15:5: */
4874 bp := tls.Alloc(16)
4875 defer tls.Free(16)
4876
4877 // var ip [8]uint16_t at bp, 16
4878
4879 var a uintptr = a0
4880 var i int32
4881 var j int32
4882 var v int32
4883 var d int32
4884 var brk int32 = -1
4885 var need_v4 int32 = 0
4886
4887 if af == 2 {
4888 for i = 0; i < 4; i++ {
4889 for v = AssignInt32(&j, 0); j < 3 && func() int32 {
4890 if 0 != 0 {
4891 return Xisdigit(tls, int32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))))
4892 }
4893 return Bool32(uint32(*(*uint8)(unsafe.Pointer(s + uintptr(j))))-uint32('0') < uint32(10))
4894 }() != 0; j++ {
4895 v = 10*v + int32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))) - '0'
4896 }
4897 if j == 0 || j > 1 && int32(*(*uint8)(unsafe.Pointer(s))) == '0' || v > 255 {
4898 return 0
4899 }
4900 *(*uint8)(unsafe.Pointer(a + uintptr(i))) = uint8(v)
4901 if int32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))) == 0 && i == 3 {
4902 return 1
4903 }
4904 if int32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))) != '.' {
4905 return 0
4906 }
4907 s += uintptr(j + 1)
4908 }
4909 return 0
4910 } else if af != 10 {
4911 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 97
4912 return -1
4913 }
4914
4915 if int32(*(*uint8)(unsafe.Pointer(s))) == ':' && int32(*(*uint8)(unsafe.Pointer(PreIncUintptr(&s, 1)))) != ':' {
4916 return 0
4917 }
4918
4919 for i = 0; ; i++ {
4920 if int32(*(*uint8)(unsafe.Pointer(s))) == ':' && brk < 0 {
4921 brk = i
4922 *(*uint16_t)(unsafe.Pointer(bp + uintptr(i&7)*2)) = uint16_t(0)
4923 if !(int32(*(*uint8)(unsafe.Pointer(PreIncUintptr(&s, 1)))) != 0) {
4924 break
4925 }
4926 if i == 7 {
4927 return 0
4928 }
4929 continue
4930 }
4931 for v = AssignInt32(&j, 0); j < 4 && AssignInt32(&d, hexval(tls, uint32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))))) >= 0; j++ {
4932 v = 16*v + d
4933 }
4934 if j == 0 {
4935 return 0
4936 }
4937 *(*uint16_t)(unsafe.Pointer(bp + uintptr(i&7)*2)) = uint16_t(v)
4938 if !(int32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))) != 0) && (brk >= 0 || i == 7) {
4939 break
4940 }
4941 if i == 7 {
4942 return 0
4943 }
4944 if int32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))) != ':' {
4945 if int32(*(*uint8)(unsafe.Pointer(s + uintptr(j)))) != '.' || i < 6 && brk < 0 {
4946 return 0
4947 }
4948 need_v4 = 1
4949 i++
4950 break
4951 }
4952 s += uintptr(j + 1)
4953 }
4954 if brk >= 0 {
4955 Xmemmove(tls, bp+uintptr(brk)*2+uintptr(7)*2-uintptr(i)*2, bp+uintptr(brk)*2, uint64(2*(i+1-brk)))
4956 for j = 0; j < 7-i; j++ {
4957 *(*uint16_t)(unsafe.Pointer(bp + uintptr(brk+j)*2)) = uint16_t(0)
4958 }
4959 }
4960 for j = 0; j < 8; j++ {
4961 *(*uint8)(unsafe.Pointer(PostIncUintptr(&a, 1))) = uint8(int32(*(*uint16_t)(unsafe.Pointer(bp + uintptr(j)*2))) >> 8)
4962 *(*uint8)(unsafe.Pointer(PostIncUintptr(&a, 1))) = uint8(*(*uint16_t)(unsafe.Pointer(bp + uintptr(j)*2)))
4963 }
4964 if need_v4 != 0 && Xinet_pton(tls, 2, s, a-uintptr(4)) <= 0 {
4965 return 0
4966 }
4967 return 1
4968}
4969
4970func X__lookup_ipliteral(tls *TLS, buf uintptr, name uintptr, family int32) int32 { /* lookup_ipliteral.c:12:5: */
4971 bp := tls.Alloc(96)
4972 defer tls.Free(96)
4973
4974 // var a4 in_addr at bp, 4
4975
4976 // var a6 in6_addr at bp+68, 16
4977
4978 if X__inet_aton(tls, name, bp) > 0 {
4979 if family == 10 { // wrong family
4980 return -2
4981 }
4982 Xmemcpy(tls, buf+8, bp, uint64(unsafe.Sizeof(in_addr{})))
4983 (*address)(unsafe.Pointer(buf)).family = 2
4984 (*address)(unsafe.Pointer(buf)).scopeid = uint32(0)
4985 return 1
4986 }
4987 // var tmp [64]uint8 at bp+4, 64
4988
4989 var p uintptr = Xstrchr(tls, name, '%')
4990 // var z uintptr at bp+88, 8
4991
4992 var scopeid uint64 = uint64(0)
4993 if p != 0 && (int64(p)-int64(name))/1 < int64(64) {
4994 Xmemcpy(tls, bp+4, name, uint64((int64(p)-int64(name))/1))
4995 *(*uint8)(unsafe.Pointer(bp + 4 + uintptr((int64(p)-int64(name))/1))) = uint8(0)
4996 name = bp + 4 /* &tmp[0] */
4997 }
4998
4999 if Xinet_pton(tls, 10, name, bp+68) <= 0 {
5000 return 0
5001 }
5002 if family == 2 { // wrong family
5003 return -2
5004 }
5005
5006 Xmemcpy(tls, buf+8, bp+68, uint64(unsafe.Sizeof(in6_addr{})))
5007 (*address)(unsafe.Pointer(buf)).family = 10
5008 if p != 0 {
5009 if func() int32 {
5010 if 0 != 0 {
5011 return Xisdigit(tls, int32(*(*uint8)(unsafe.Pointer(PreIncUintptr(&p, 1)))))
5012 }
5013 return Bool32(uint32(*(*uint8)(unsafe.Pointer(PreIncUintptr(&p, 1))))-uint32('0') < uint32(10))
5014 }() != 0 {
5015 scopeid = Xstrtoull(tls, p, bp+88, 10)
5016 } else {
5017 *(*uintptr)(unsafe.Pointer(bp + 88 /* z */)) = p - uintptr(1)
5018 }
5019 if *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 88)))) != 0 {
5020 Xabort(tls) //TODO-
5021 // if (!IN6_IS_ADDR_LINKLOCAL(&a6) &&
5022 // !IN6_IS_ADDR_MC_LINKLOCAL(&a6))
5023 // return EAI_NONAME;
5024 // scopeid = if_nametoindex(p);
5025 // if (!scopeid) return EAI_NONAME;
5026 }
5027 if scopeid > uint64(0xffffffff) {
5028 return -2
5029 }
5030 }
5031 (*address)(unsafe.Pointer(buf)).scopeid = uint32(scopeid)
5032 return 1
5033}
5034
5035func is_valid_hostname(tls *TLS, host uintptr) int32 { /* lookup_name.c:18:12: */
5036 var s uintptr
5037 //TODO if (strnlen(host, 255)-1 >= 254 || mbstowcs(0, host, 0) == -1) return 0;
5038 if Xstrnlen(tls, host, uint64(255))-uint64(1) >= uint64(254) {
5039 return 0
5040 }
5041 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++ {
5042 }
5043 return BoolInt32(!(*(*uint8)(unsafe.Pointer(s)) != 0))
5044}
5045
5046var Xzero_struct_address address /* lookup_name.c:27:16: */
5047
5048func name_from_null(tls *TLS, buf uintptr, name uintptr, family int32, flags int32) int32 { /* lookup_name.c:29:12: */
5049 var cnt int32 = 0
5050 if name != 0 {
5051 return 0
5052 }
5053 if flags&0x01 != 0 {
5054 //TODO if (family != AF_INET6)
5055 //TODO buf[cnt++] = (struct address){ .family = AF_INET };
5056 if family != 10 {
5057 var x = Xzero_struct_address
5058 x.family = 2
5059 *(*address)(unsafe.Pointer(buf + uintptr(PostIncInt32(&cnt, 1))*28)) = x
5060 }
5061 //TODO if (family != AF_INET)
5062 //TODO buf[cnt++] = (struct address){ .family = AF_INET6 };
5063 if family != 2 {
5064 var x = Xzero_struct_address
5065 x.family = 10
5066 *(*address)(unsafe.Pointer(buf + uintptr(PostIncInt32(&cnt, 1))*28)) = x
5067 }
5068 } else {
5069 Xabort(tls) //TODO-
5070 // if (family != AF_INET6)
5071 // buf[cnt++] = (struct address){ .family = AF_INET, .addr = { 127,0,0,1 } };
5072 // if (family != AF_INET)
5073 // buf[cnt++] = (struct address){ .family = AF_INET6, .addr = { [15] = 1 } };
5074 }
5075 return cnt
5076}
5077
5078func name_from_numeric(tls *TLS, buf uintptr, name uintptr, family int32) int32 { /* lookup_name.c:58:12: */
5079 return X__lookup_ipliteral(tls, buf, name, family)
5080}
5081
5082func name_from_hosts(tls *TLS, buf uintptr, canon uintptr, name uintptr, family int32) int32 { /* lookup_name.c:63:12: */
5083 bp := tls.Alloc(512)
5084 defer tls.Free(512)
5085
5086 // var line [512]uint8 at bp, 512
5087
5088 var l size_t = Xstrlen(tls, name)
5089 var cnt int32 = 0
5090 var badfam int32 = 0
5091 var _buf [1032]uint8
5092 _ = _buf
5093 //TODO FILE _f, *f = __fopen_rb_ca("/etc/hosts", &_f, _buf, sizeof _buf);
5094 var _f FILE
5095 _ = _f
5096 var f uintptr = Xfopen(tls, ts+76, ts+87)
5097 if !(f != 0) {
5098 switch *(*int32)(unsafe.Pointer(X___errno_location(tls))) {
5099 case 2:
5100 fallthrough
5101 case 20:
5102 fallthrough
5103 case 13:
5104 return 0
5105 fallthrough
5106 default:
5107 return -11
5108 }
5109 }
5110 for Xfgets(tls, bp, int32(unsafe.Sizeof([512]uint8{})), f) != 0 && cnt < 48 {
5111 var p uintptr
5112 var z uintptr
5113
5114 if AssignUintptr(&p, Xstrchr(tls, bp, '#')) != 0 {
5115 *(*uint8)(unsafe.Pointer(PostIncUintptr(&p, 1))) = uint8('\n')
5116 *(*uint8)(unsafe.Pointer(p)) = uint8(0)
5117 }
5118 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++ {
5119 }
5120 if !(p != 0) {
5121 continue
5122 }
5123
5124 // Isolate IP address to parse
5125 for p = bp; /* &line[0] */ *(*uint8)(unsafe.Pointer(p)) != 0 && !(__isspace(tls, int32(*(*uint8)(unsafe.Pointer(p)))) != 0); p++ {
5126 }
5127 *(*uint8)(unsafe.Pointer(PostIncUintptr(&p, 1))) = uint8(0)
5128 switch name_from_numeric(tls, buf+uintptr(cnt)*28, bp, family) {
5129 case 1:
5130 cnt++
5131 break
5132 case 0:
5133 continue
5134 default:
5135 badfam = -2
5136 continue
5137 }
5138
5139 // Extract first name as canonical name
5140 for ; *(*uint8)(unsafe.Pointer(p)) != 0 && __isspace(tls, int32(*(*uint8)(unsafe.Pointer(p)))) != 0; p++ {
5141 }
5142 for z = p; *(*uint8)(unsafe.Pointer(z)) != 0 && !(__isspace(tls, int32(*(*uint8)(unsafe.Pointer(z)))) != 0); z++ {
5143 }
5144 *(*uint8)(unsafe.Pointer(z)) = uint8(0)
5145 if is_valid_hostname(tls, p) != 0 {
5146 Xmemcpy(tls, canon, p, uint64((int64(z)-int64(p))/1+int64(1)))
5147 }
5148 }
5149 //TODO __fclose_ca(f);
5150 Xfclose(tls, f)
5151 if cnt != 0 {
5152 return cnt
5153 }
5154 return badfam
5155}
5156
5157type dpc_ctx = struct {
5158 addrs uintptr
5159 canon uintptr
5160 cnt int32
5161 _ [4]byte
5162} /* lookup_name.c:112:1 */
5163
5164func name_from_dns_search(tls *TLS, buf uintptr, canon uintptr, name uintptr, family int32) int32 { /* lookup_name.c:191:12: */
5165 return -1 //TODO-
5166 Xabort(tls)
5167 return int32(0) //TODO-
5168 // char search[256];
5169 // struct resolvconf conf;
5170 // size_t l, dots;
5171 // char *p, *z;
5172
5173 // if (__get_resolv_conf(&conf, search, sizeof search) < 0) return -1;
5174
5175 // /* Count dots, suppress search when >=ndots or name ends in
5176 // * a dot, which is an explicit request for global scope. */
5177 // for (dots=l=0; name[l]; l++) if (name[l]=='.') dots++;
5178 // if (dots >= conf.ndots || name[l-1]=='.') *search = 0;
5179
5180 // /* Strip final dot for canon, fail if multiple trailing dots. */
5181 // if (name[l-1]=='.') l--;
5182 // if (!l || name[l-1]=='.') return EAI_NONAME;
5183
5184 // /* This can never happen; the caller already checked length. */
5185 // if (l >= 256) return EAI_NONAME;
5186
5187 // /* Name with search domain appended is setup in canon[]. This both
5188 // * provides the desired default canonical name (if the requested
5189 // * name is not a CNAME record) and serves as a buffer for passing
5190 // * the full requested name to name_from_dns. */
5191 // memcpy(canon, name, l);
5192 // canon[l] = '.';
5193
5194 // for (p=search; *p; p=z) {
5195 // for (; isspace(*p); p++);
5196 // for (z=p; *z && !isspace(*z); z++);
5197 // if (z==p) break;
5198 // if (z-p < 256 - l - 1) {
5199 // memcpy(canon+l+1, p, z-p);
5200 // canon[z-p+1+l] = 0;
5201 // int cnt = name_from_dns(buf, canon, canon, family, &conf);
5202 // if (cnt) return cnt;
5203 // }
5204 // }
5205
5206 // canon[l] = 0;
5207 // return name_from_dns(buf, canon, name, family, &conf);
5208}
5209
5210type policy = struct {
5211 addr [16]uint8
5212 len uint8
5213 mask uint8
5214 prec uint8
5215 label uint8
5216} /* lookup_name.c:237:14 */
5217
5218var defpolicy = [6]policy{
5219 {addr: *(*[16]uint8)(unsafe.Pointer(ts + 172)), len: uint8(15), mask: uint8(0xff), prec: uint8(50)},
5220 {addr: *(*[16]uint8)(unsafe.Pointer(ts + 189)), len: uint8(11), mask: uint8(0xff), prec: uint8(35), label: uint8(4)},
5221 {addr: *(*[16]uint8)(unsafe.Pointer(ts + 205)), len: uint8(1), mask: uint8(0xff), prec: uint8(30), label: uint8(2)},
5222 {addr: *(*[16]uint8)(unsafe.Pointer(ts + 221)), len: uint8(3), mask: uint8(0xff), prec: uint8(5), label: uint8(5)},
5223 {addr: *(*[16]uint8)(unsafe.Pointer(ts + 237)), mask: uint8(0xfe), prec: uint8(3), label: uint8(13)},
5224 // Last rule must match all addresses to stop loop.
5225 {addr: *(*[16]uint8)(unsafe.Pointer(ts + 253)), prec: uint8(40), label: uint8(1)},
5226} /* lookup_name.c:241:3 */
5227
5228func policyof(tls *TLS, a uintptr) uintptr { /* lookup_name.c:259:28: */
5229 var i int32
5230 for i = 0; ; i++ {
5231 if Xmemcmp(tls, a, uintptr(unsafe.Pointer(&defpolicy))+uintptr(i)*20, uint64(defpolicy[i].len)) != 0 {
5232 continue
5233 }
5234 if int32(*(*uint8_t)(unsafe.Pointer(a + uintptr(defpolicy[i].len))))&int32(defpolicy[i].mask) !=
5235 int32(*(*uint8)(unsafe.Pointer(uintptr(unsafe.Pointer(&defpolicy)) + uintptr(i)*20 + uintptr(defpolicy[i].len)))) {
5236 continue
5237 }
5238 return uintptr(unsafe.Pointer(&defpolicy)) + uintptr(i)*20
5239 }
5240 return uintptr(0)
5241}
5242
5243func labelof(tls *TLS, a uintptr) int32 { /* lookup_name.c:272:12: */
5244 return int32((*policy)(unsafe.Pointer(policyof(tls, a))).label)
5245}
5246
5247func scopeof(tls *TLS, a uintptr) int32 { /* lookup_name.c:277:12: */
5248 if int32(*(*uint8_t)(unsafe.Pointer(a))) == 0xff {
5249 return int32(*(*uint8_t)(unsafe.Pointer(a + 1))) & 15
5250 }
5251 if int32(*(*uint8_t)(unsafe.Pointer(a))) == 0xfe && int32(*(*uint8_t)(unsafe.Pointer(a + 1)))&0xc0 == 0x80 {
5252 return 2
5253 }
5254 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 {
5255 return 2
5256 }
5257 if int32(*(*uint8_t)(unsafe.Pointer(a))) == 0xfe && int32(*(*uint8_t)(unsafe.Pointer(a + 1)))&0xc0 == 0xc0 {
5258 return 5
5259 }
5260 return 14
5261}
5262
5263func prefixmatch(tls *TLS, s uintptr, d uintptr) int32 { /* lookup_name.c:286:12: */
5264 // FIXME: The common prefix length should be limited to no greater
5265 // than the nominal length of the prefix portion of the source
5266 // address. However the definition of the source prefix length is
5267 // not clear and thus this limiting is not yet implemented.
5268 var i uint32
5269 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++ {
5270 }
5271 return int32(i)
5272}
5273
5274func addrcmp(tls *TLS, _a uintptr, _b uintptr) int32 { /* lookup_name.c:305:12: */
5275 var a uintptr = _a
5276 var b uintptr = _b
5277 return (*address)(unsafe.Pointer(b)).sortkey - (*address)(unsafe.Pointer(a)).sortkey
5278}
5279
5280func X__lookup_name(tls *TLS, buf uintptr, canon uintptr, name uintptr, family int32, flags int32) int32 { /* lookup_name.c:311:5: */
5281 bp := tls.Alloc(92)
5282 defer tls.Free(92)
5283
5284 var cnt int32 = 0
5285 var i int32
5286 var j int32
5287 _ = j
5288
5289 *(*uint8)(unsafe.Pointer(canon)) = uint8(0)
5290 if name != 0 {
5291 // reject empty name and check len so it fits into temp bufs
5292 var l size_t = Xstrnlen(tls, name, uint64(255))
5293 if l-uint64(1) >= uint64(254) {
5294 return -2
5295 }
5296 Xmemcpy(tls, canon, name, l+uint64(1))
5297 }
5298
5299 // Procedurally, a request for v6 addresses with the v4-mapped
5300 // flag set is like a request for unspecified family, followed
5301 // by filtering of the results.
5302 if flags&0x08 != 0 {
5303 if family == 10 {
5304 family = 0
5305 } else {
5306 flags = flags - 0x08
5307 }
5308 }
5309
5310 // Try each backend until there's at least one result.
5311 cnt = name_from_null(tls, buf, name, family, flags)
5312 if !(cnt != 0) {
5313 cnt = name_from_numeric(tls, buf, name, family)
5314 }
5315 if !(cnt != 0) && !(flags&0x04 != 0) {
5316 cnt = name_from_hosts(tls, buf, canon, name, family)
5317 if !(cnt != 0) {
5318 cnt = name_from_dns_search(tls, buf, canon, name, family)
5319 }
5320 }
5321 if cnt <= 0 {
5322 if cnt != 0 {
5323 return cnt
5324 }
5325 return -2
5326 }
5327
5328 // Filter/transform results for v4-mapped lookup, if requested.
5329 if flags&0x08 != 0 {
5330 Xabort(tls) //TODO-
5331 // if (!(flags & AI_ALL)) {
5332 // /* If any v6 results exist, remove v4 results. */
5333 // for (i=0; i<cnt && buf[i].family != AF_INET6; i++);
5334 // if (i<cnt) {
5335 // for (j=0; i<cnt; i++) {
5336 // if (buf[i].family == AF_INET6)
5337 // buf[j++] = buf[i];
5338 // }
5339 // cnt = i = j;
5340 // }
5341 // }
5342 // /* Translate any remaining v4 results to v6 */
5343 // for (i=0; i<cnt; i++) {
5344 // if (buf[i].family != AF_INET) continue;
5345 // memcpy(buf[i].addr+12, buf[i].addr, 4);
5346 // memcpy(buf[i].addr, "\0\0\0\0\0\0\0\0\0\0\xff\xff", 12);
5347 // buf[i].family = AF_INET6;
5348 // }
5349 }
5350
5351 // No further processing is needed if there are fewer than 2
5352 // results or if there are only IPv4 results.
5353 if cnt < 2 || family == 2 {
5354 return cnt
5355 }
5356 for i = 0; i < cnt; i++ {
5357 if (*address)(unsafe.Pointer(buf+uintptr(i)*28)).family != 2 {
5358 break
5359 }
5360 }
5361 if i == cnt {
5362 return cnt
5363 }
5364 var cs int32
5365 _ = cs
5366 //TODO pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &cs);
5367
5368 // The following implements a subset of RFC 3484/6724 destination
5369 // address selection by generating a single 31-bit sort key for
5370 // each address. Rules 3, 4, and 7 are omitted for having
5371 // excessive runtime and code size cost and dubious benefit.
5372 // So far the label/precedence table cannot be customized.
5373 for i = 0; i < cnt; i++ {
5374 var family int32 = (*address)(unsafe.Pointer(buf + uintptr(i)*28)).family
5375 var key int32 = 0
5376 *(*sockaddr_in6)(unsafe.Pointer(bp + 28 /* sa6 */)) = sockaddr_in6{}
5377 *(*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}
5378 *(*sockaddr_in)(unsafe.Pointer(bp + 72 /* sa4 */)) = sockaddr_in{}
5379 *(*sockaddr_in)(unsafe.Pointer(bp + 56 /* da4 */)) = sockaddr_in{sin_family: sa_family_t(2), sin_port: in_port_t(65535)}
5380 var sa1 uintptr
5381 var da uintptr
5382 // var salen socklen_t at bp+88, 4
5383
5384 var dalen socklen_t
5385 if family == 10 {
5386 Xmemcpy(tls, bp+8, buf+uintptr(i)*28+8, uint64(16))
5387 da = bp /* &da6 */
5388 dalen = socklen_t(unsafe.Sizeof(sockaddr_in6{}))
5389 sa1 = bp + 28 /* &sa6 */
5390 *(*socklen_t)(unsafe.Pointer(bp + 88 /* salen */)) = socklen_t(unsafe.Sizeof(sockaddr_in6{}))
5391 } else {
5392 Xmemcpy(tls, bp+28+8,
5393 ts+90, uint64(12))
5394 Xmemcpy(tls, bp+8+uintptr(12), buf+uintptr(i)*28+8, uint64(4))
5395 Xmemcpy(tls, bp+8,
5396 ts+90, uint64(12))
5397 Xmemcpy(tls, bp+8+uintptr(12), buf+uintptr(i)*28+8, uint64(4))
5398 Xmemcpy(tls, bp+56+4, buf+uintptr(i)*28+8, uint64(4))
5399 da = bp + 56 /* &da4 */
5400 dalen = socklen_t(unsafe.Sizeof(sockaddr_in{}))
5401 sa1 = bp + 72 /* &sa4 */
5402 *(*socklen_t)(unsafe.Pointer(bp + 88 /* salen */)) = socklen_t(unsafe.Sizeof(sockaddr_in{}))
5403 }
5404 var dpolicy uintptr = policyof(tls, bp+8)
5405 var dscope int32 = scopeof(tls, bp+8)
5406 var dlabel int32 = int32((*policy)(unsafe.Pointer(dpolicy)).label)
5407 var dprec int32 = int32((*policy)(unsafe.Pointer(dpolicy)).prec)
5408 var prefixlen int32 = 0
5409 var fd int32 = Xsocket(tls, family, 2|02000000, 17)
5410 if fd >= 0 {
5411 if !(Xconnect(tls, fd, da, dalen) != 0) {
5412 key = key | 0x40000000
5413 if !(Xgetsockname(tls, fd, sa1, bp+88) != 0) {
5414 if family == 2 {
5415 Xmemcpy(tls,
5416 bp+28+8+uintptr(12),
5417 bp+72+4, uint64(4))
5418 }
5419 if dscope == scopeof(tls, bp+28+8) {
5420 key = key | 0x20000000
5421 }
5422 if dlabel == labelof(tls, bp+28+8) {
5423 key = key | 0x10000000
5424 }
5425 prefixlen = prefixmatch(tls, bp+28+8,
5426 bp+8)
5427 }
5428 }
5429 Xclose(tls, fd)
5430 }
5431 key = key | dprec<<20
5432 key = key | (15-dscope)<<16
5433 key = key | prefixlen<<8
5434 key = key | (48-i)<<0
5435 (*address)(unsafe.Pointer(buf + uintptr(i)*28)).sortkey = key
5436 }
5437 Xqsort(tls, buf, uint64(cnt), uint64(unsafe.Sizeof(address{})), *(*uintptr)(unsafe.Pointer(&struct {
5438 f func(*TLS, uintptr, uintptr) int32
5439 }{addrcmp})))
5440
5441 //TODO pthread_setcancelstate(cs, 0);
5442
5443 return cnt
5444}
5445
5446func X__lookup_serv(tls *TLS, buf uintptr, name uintptr, proto int32, socktype int32, flags int32) int32 { /* lookup_serv.c:12:5: */
5447 bp := tls.Alloc(8)
5448 defer tls.Free(8)
5449
5450 var line [128]uint8
5451 _ = line
5452 var cnt int32 = 0
5453 var p uintptr
5454 _ = p
5455 *(*uintptr)(unsafe.Pointer(bp /* z */)) = ts + 13 /* "" */
5456 var port uint64 = uint64(0)
5457
5458 switch socktype {
5459 case 1:
5460 switch proto {
5461 case 0:
5462 proto = 6
5463 fallthrough
5464 case 6:
5465 break
5466 default:
5467 return -8
5468 }
5469 break
5470 case 2:
5471 switch proto {
5472 case 0:
5473 proto = 17
5474 fallthrough
5475 case 17:
5476 break
5477 default:
5478 return -8
5479 }
5480 fallthrough
5481 case 0:
5482 break
5483 default:
5484 if name != 0 {
5485 return -8
5486 }
5487 (*service)(unsafe.Pointer(buf)).port = uint16_t(0)
5488 (*service)(unsafe.Pointer(buf)).proto = uint8(proto)
5489 (*service)(unsafe.Pointer(buf)).socktype = uint8(socktype)
5490 return 1
5491 }
5492
5493 if name != 0 {
5494 if !(int32(*(*uint8)(unsafe.Pointer(name))) != 0) {
5495 return -8
5496 }
5497 port = Xstrtoul(tls, name, bp, 10)
5498 }
5499 if !(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp))))) != 0) {
5500 if port > uint64(65535) {
5501 return -8
5502 }
5503 if proto != 17 {
5504 (*service)(unsafe.Pointer(buf + uintptr(cnt)*4)).port = uint16_t(port)
5505 (*service)(unsafe.Pointer(buf + uintptr(cnt)*4)).socktype = uint8(1)
5506 (*service)(unsafe.Pointer(buf + uintptr(PostIncInt32(&cnt, 1))*4)).proto = uint8(6)
5507 }
5508 if proto != 6 {
5509 (*service)(unsafe.Pointer(buf + uintptr(cnt)*4)).port = uint16_t(port)
5510 (*service)(unsafe.Pointer(buf + uintptr(cnt)*4)).socktype = uint8(2)
5511 (*service)(unsafe.Pointer(buf + uintptr(PostIncInt32(&cnt, 1))*4)).proto = uint8(17)
5512 }
5513 return cnt
5514 }
5515
5516 if flags&0x400 != 0 {
5517 return -2
5518 }
5519
5520 var l size_t = Xstrlen(tls, name)
5521 _ = l
5522
5523 Xabort(tls) //TODO-
5524 // unsigned char _buf[1032];
5525 // FILE _f, *f = __fopen_rb_ca("/etc/services", &_f, _buf, sizeof _buf);
5526 // if (!f) switch (errno) {
5527 // case ENOENT:
5528 // case ENOTDIR:
5529 // case EACCES:
5530 // return EAI_SERVICE;
5531 // default:
5532 // return EAI_SYSTEM;
5533 // }
5534
5535 Xabort(tls) //TODO-
5536 // while (fgets(line, sizeof line, f) && cnt < MAXSERVS) {
5537 // if ((p=strchr(line, '#'))) *p++='\n', *p=0;
5538
5539 // /* Find service name */
5540 // for(p=line; (p=strstr(p, name)); p++) {
5541 // if (p>line && !isspace(p[-1])) continue;
5542 // if (p[l] && !isspace(p[l])) continue;
5543 // break;
5544 // }
5545 // if (!p) continue;
5546
5547 // /* Skip past canonical name at beginning of line */
5548 // for (p=line; *p && !isspace(*p); p++);
5549
5550 // port = strtoul(p, &z, 10);
5551 // if (port > 65535 || z==p) continue;
5552 // if (!strncmp(z, "/udp", 4)) {
5553 // if (proto == IPPROTO_TCP) continue;
5554 // buf[cnt].port = port;
5555 // buf[cnt].socktype = SOCK_DGRAM;
5556 // buf[cnt++].proto = IPPROTO_UDP;
5557 // }
5558 // if (!strncmp(z, "/tcp", 4)) {
5559 // if (proto == IPPROTO_UDP) continue;
5560 // buf[cnt].port = port;
5561 // buf[cnt].socktype = SOCK_STREAM;
5562 // buf[cnt++].proto = IPPROTO_TCP;
5563 // }
5564 // }
5565 // __fclose_ca(f);
5566 // return cnt > 0 ? cnt : EAI_SERVICE;
5567 Xabort(tls)
5568 return int32(0) //TODO-
5569}
5570
5571func temper(tls *TLS, x uint32) uint32 { /* rand_r.c:3:17: */
5572 x = x ^ x>>11
5573 x = x ^ x<<7&0x9D2C5680
5574 x = x ^ x<<15&0xEFC60000
5575 x = x ^ x>>18
5576 return x
5577}
5578
5579func Xrand_r(tls *TLS, seed uintptr) int32 { /* rand_r.c:12:5: */
5580 return int32(temper(tls, AssignPtrUint32(seed, *(*uint32)(unsafe.Pointer(seed))*uint32(1103515245)+uint32(12345))) / uint32(2))
5581}
5582
5583func X__lockfile(tls *TLS, f uintptr) int32 { /* __lockfile.c:4:5: */
5584 var owner int32 = (*FILE)(unsafe.Pointer(f)).lock
5585 var tid int32 = (*__pthread)(unsafe.Pointer(__pthread_self(tls))).tid
5586 if owner&CplInt32(0x40000000) == tid {
5587 return 0
5588 }
5589 owner = a_cas(tls, f+140, 0, tid)
5590 if !(owner != 0) {
5591 return 1
5592 }
5593 for AssignInt32(&owner, a_cas(tls, f+140, 0, tid|0x40000000)) != 0 {
5594 if owner&0x40000000 != 0 || a_cas(tls, f+140, owner, owner|0x40000000) == owner {
5595 __futexwait(tls, f+140, owner|0x40000000, 1)
5596 }
5597 }
5598 return 1
5599}
5600
5601func X__unlockfile(tls *TLS, f uintptr) { /* __lockfile.c:19:6: */
5602 if a_swap(tls, f+140, 0)&0x40000000 != 0 {
5603 __wake(tls, f+140, 1, 1)
5604 }
5605}
5606
5607func X__toread(tls *TLS, f uintptr) int32 { /* __toread.c:3:5: */
5608 *(*int32)(unsafe.Pointer(f + 136)) |= (*FILE)(unsafe.Pointer(f)).mode - 1
5609 if (*FILE)(unsafe.Pointer(f)).wpos != (*FILE)(unsafe.Pointer(f)).wbase {
5610 (*struct {
5611 f func(*TLS, uintptr, uintptr, size_t) size_t
5612 })(unsafe.Pointer(&struct{ uintptr }{(*FILE)(unsafe.Pointer(f)).write})).f(tls, f, uintptr(0), uint64(0))
5613 }
5614 (*FILE)(unsafe.Pointer(f)).wpos = AssignPtrUintptr(f+56, AssignPtrUintptr(f+32, uintptr(0)))
5615 if (*FILE)(unsafe.Pointer(f)).flags&uint32(4) != 0 {
5616 *(*uint32)(unsafe.Pointer(f)) |= uint32(32)
5617 return -1
5618 }
5619 (*FILE)(unsafe.Pointer(f)).rpos = AssignPtrUintptr(f+16, (*FILE)(unsafe.Pointer(f)).buf+uintptr((*FILE)(unsafe.Pointer(f)).buf_size))
5620 if (*FILE)(unsafe.Pointer(f)).flags&uint32(16) != 0 {
5621 return -1
5622 }
5623 return 0
5624}
5625
5626func X__toread_needs_stdio_exit(tls *TLS) { /* __toread.c:16:13: */
5627 X__builtin_abort(tls) //TODO-
5628 // __stdio_exit_needed();
5629}
5630
5631// This function assumes it will never be called if there is already
5632// data buffered for reading.
5633
5634func X__uflow(tls *TLS, f uintptr) int32 { /* __uflow.c:6:5: */
5635 bp := tls.Alloc(1)
5636 defer tls.Free(1)
5637
5638 // var c uint8 at bp, 1
5639
5640 if !(X__toread(tls, f) != 0) && (*struct {
5641 f func(*TLS, uintptr, uintptr, size_t) size_t
5642 })(unsafe.Pointer(&struct{ uintptr }{(*FILE)(unsafe.Pointer(f)).read})).f(tls, f, bp, uint64(1)) == uint64(1) {
5643 return int32(*(*uint8)(unsafe.Pointer(bp)))
5644 }
5645 return -1
5646}
5647
5648func Xsscanf(tls *TLS, s uintptr, fmt uintptr, va uintptr) int32 { /* sscanf.c:4:5: */
5649 var ret int32
5650 var ap va_list
5651 _ = ap
5652 ap = va
5653 ret = Xvsscanf(tls, s, fmt, ap)
5654 _ = ap
5655 return ret
5656}
5657
5658type wctrans_t = uintptr /* wctype.h:20:19 */
5659
5660func store_int(tls *TLS, dest uintptr, size int32, i uint64) { /* vfscanf.c:22:13: */
5661 if !(dest != 0) {
5662 return
5663 }
5664 switch size {
5665 case -2:
5666 *(*uint8)(unsafe.Pointer(dest)) = uint8(i)
5667 break
5668 case -1:
5669 *(*int16)(unsafe.Pointer(dest)) = int16(i)
5670 break
5671 case 0:
5672 *(*int32)(unsafe.Pointer(dest)) = int32(i)
5673 break
5674 case 1:
5675 *(*int64)(unsafe.Pointer(dest)) = int64(i)
5676 break
5677 case 3:
5678 *(*int64)(unsafe.Pointer(dest)) = int64(i)
5679 break
5680 }
5681}
5682
5683func arg_n(tls *TLS, ap va_list, n uint32) uintptr { /* vfscanf.c:44:13: */
5684 var p uintptr
5685 var i uint32
5686 var ap2 va_list
5687 _ = ap2
5688 ap2 = ap
5689 for i = n; i > uint32(1); i-- {
5690 VaUintptr(&ap2)
5691 }
5692 p = VaUintptr(&ap2)
5693 _ = ap2
5694 return p
5695}
5696
5697func Xvfscanf(tls *TLS, f uintptr, fmt uintptr, ap va_list) int32 { /* vfscanf.c:56:5: */
5698 bp := tls.Alloc(276)
5699 defer tls.Free(276)
5700
5701 var width int32
5702 var size int32
5703 var alloc int32
5704 var base int32
5705 var p uintptr
5706 var c int32
5707 var t int32
5708 var s uintptr
5709 var wcs uintptr
5710 // var st mbstate_t at bp+268, 8
5711
5712 var dest uintptr
5713 var invert int32
5714 var matches int32
5715 var x uint64
5716 var y float64
5717 var pos off_t
5718 // var scanset [257]uint8 at bp, 257
5719
5720 var i size_t
5721 var k size_t
5722 // var wc wchar_t at bp+260, 4
5723
5724 var __need_unlock int32
5725 var tmp uintptr
5726 var tmp1 uintptr
5727 alloc = 0
5728 dest = uintptr(0)
5729 matches = 0
5730 pos = int64(0)
5731 __need_unlock = func() int32 {
5732 if (*FILE)(unsafe.Pointer(f)).lock >= 0 {
5733 return X__lockfile(tls, f)
5734 }
5735 return 0
5736 }()
5737
5738 if !!(int32((*FILE)(unsafe.Pointer(f)).rpos) != 0) {
5739 goto __1
5740 }
5741 X__toread(tls, f)
5742__1:
5743 ;
5744 if !!(int32((*FILE)(unsafe.Pointer(f)).rpos) != 0) {
5745 goto __2
5746 }
5747 goto input_fail
5748__2:
5749 ;
5750
5751 p = fmt
5752__3:
5753 if !(*(*uint8)(unsafe.Pointer(p)) != 0) {
5754 goto __5
5755 }
5756
5757 alloc = 0
5758
5759 if !(__isspace(tls, int32(*(*uint8)(unsafe.Pointer(p)))) != 0) {
5760 goto __6
5761 }
5762__7:
5763 if !(__isspace(tls, int32(*(*uint8)(unsafe.Pointer(p + 1)))) != 0) {
5764 goto __8
5765 }
5766 p++
5767 goto __7
5768__8:
5769 ;
5770 X__shlim(tls, f, int64(0))
5771__9:
5772 if !(__isspace(tls, func() int32 {
5773 if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend {
5774 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1))))
5775 }
5776 return X__shgetc(tls, f)
5777 }()) != 0) {
5778 goto __10
5779 }
5780 goto __9
5781__10:
5782 ;
5783 if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) {
5784 (*FILE)(unsafe.Pointer(f)).rpos--
5785 } else {
5786 }
5787 pos = pos + ((*FILE)(unsafe.Pointer(f)).shcnt + (int64((*FILE)(unsafe.Pointer(f)).rpos)-int64((*FILE)(unsafe.Pointer(f)).buf))/1)
5788 goto __4
5789__6:
5790 ;
5791 if !(int32(*(*uint8)(unsafe.Pointer(p))) != '%' || int32(*(*uint8)(unsafe.Pointer(p + 1))) == '%') {
5792 goto __11
5793 }
5794 X__shlim(tls, f, int64(0))
5795 if !(int32(*(*uint8)(unsafe.Pointer(p))) == '%') {
5796 goto __12
5797 }
5798 p++
5799__14:
5800 if !(__isspace(tls, AssignInt32(&c, func() int32 {
5801 if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend {
5802 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1))))
5803 }
5804 return X__shgetc(tls, f)
5805 }())) != 0) {
5806 goto __15
5807 }
5808 goto __14
5809__15:
5810 ;
5811 goto __13
5812__12:
5813 c = func() int32 {
5814 if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend {
5815 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1))))
5816 }
5817 return X__shgetc(tls, f)
5818 }()
5819__13:
5820 ;
5821 if !(c != int32(*(*uint8)(unsafe.Pointer(p)))) {
5822 goto __16
5823 }
5824 if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) {
5825 (*FILE)(unsafe.Pointer(f)).rpos--
5826 } else {
5827 }
5828 if !(c < 0) {
5829 goto __17
5830 }
5831 goto input_fail
5832__17:
5833 ;
5834 goto match_fail
5835__16:
5836 ;
5837 pos = pos + ((*FILE)(unsafe.Pointer(f)).shcnt + (int64((*FILE)(unsafe.Pointer(f)).rpos)-int64((*FILE)(unsafe.Pointer(f)).buf))/1)
5838 goto __4
5839__11:
5840 ;
5841
5842 p++
5843 if !(int32(*(*uint8)(unsafe.Pointer(p))) == '*') {
5844 goto __18
5845 }
5846 dest = uintptr(0)
5847 p++
5848 goto __19
5849__18:
5850 if !(func() int32 {
5851 if 0 != 0 {
5852 return Xisdigit(tls, int32(*(*uint8)(unsafe.Pointer(p))))
5853 }
5854 return Bool32(uint32(*(*uint8)(unsafe.Pointer(p)))-uint32('0') < uint32(10))
5855 }() != 0 && int32(*(*uint8)(unsafe.Pointer(p + 1))) == '$') {
5856 goto __20
5857 }
5858 dest = arg_n(tls, ap, uint32(int32(*(*uint8)(unsafe.Pointer(p)))-'0'))
5859 p += uintptr(2)
5860 goto __21
5861__20:
5862 dest = VaUintptr(&ap)
5863__21:
5864 ;
5865__19:
5866 ;
5867
5868 width = 0
5869__22:
5870 if !(func() int32 {
5871 if 0 != 0 {
5872 return Xisdigit(tls, int32(*(*uint8)(unsafe.Pointer(p))))
5873 }
5874 return Bool32(uint32(*(*uint8)(unsafe.Pointer(p)))-uint32('0') < uint32(10))
5875 }() != 0) {
5876 goto __24
5877 }
5878 width = 10*width + int32(*(*uint8)(unsafe.Pointer(p))) - '0'
5879 goto __23
5880__23:
5881 p++
5882 goto __22
5883 goto __24
5884__24:
5885 ;
5886
5887 if !(int32(*(*uint8)(unsafe.Pointer(p))) == 'm') {
5888 goto __25
5889 }
5890 wcs = uintptr(0)
5891 s = uintptr(0)
5892 alloc = BoolInt32(!!(dest != 0))
5893 p++
5894 goto __26
5895__25:
5896 alloc = 0
5897__26:
5898 ;
5899
5900 size = 0
5901 switch int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&p, 1)))) {
5902 case 'h':
5903 goto __28
5904 case 'l':
5905 goto __29
5906 case 'j':
5907 goto __30
5908 case 'z':
5909 goto __31
5910 case 't':
5911 goto __32
5912 case 'L':
5913 goto __33
5914 case 'd':
5915 goto __34
5916 case 'i':
5917 goto __35
5918 case 'o':
5919 goto __36
5920 case 'u':
5921 goto __37
5922 case 'x':
5923 goto __38
5924 case 'a':
5925 goto __39
5926 case 'e':
5927 goto __40
5928 case 'f':
5929 goto __41
5930 case 'g':
5931 goto __42
5932 case 'A':
5933 goto __43
5934 case 'E':
5935 goto __44
5936 case 'F':
5937 goto __45
5938 case 'G':
5939 goto __46
5940 case 'X':
5941 goto __47
5942 case 's':
5943 goto __48
5944 case 'c':
5945 goto __49
5946 case '[':
5947 goto __50
5948 case 'S':
5949 goto __51
5950 case 'C':
5951 goto __52
5952 case 'p':
5953 goto __53
5954 case 'n':
5955 goto __54
5956 default:
5957 goto __55
5958 }
5959 goto __27
5960__28:
5961 if !(int32(*(*uint8)(unsafe.Pointer(p))) == 'h') {
5962 goto __56
5963 }
5964 p++
5965 size = -2
5966 goto __57
5967__56:
5968 size = -1
5969__57:
5970 ;
5971 goto __27
5972__29:
5973 if !(int32(*(*uint8)(unsafe.Pointer(p))) == 'l') {
5974 goto __58
5975 }
5976 p++
5977 size = 3
5978 goto __59
5979__58:
5980 size = 1
5981__59:
5982 ;
5983 goto __27
5984__30:
5985 size = 3
5986 goto __27
5987__31:
5988__32:
5989 size = 1
5990 goto __27
5991__33:
5992 size = 2
5993 goto __27
5994__34:
5995__35:
5996__36:
5997__37:
5998__38:
5999__39:
6000__40:
6001__41:
6002__42:
6003__43:
6004__44:
6005__45:
6006__46:
6007__47:
6008__48:
6009__49:
6010__50:
6011__51:
6012__52:
6013__53:
6014__54:
6015 p--
6016 goto __27
6017__55:
6018 goto fmt_fail
6019__27:
6020 ;
6021
6022 t = int32(*(*uint8)(unsafe.Pointer(p)))
6023
6024 // C or S
6025 if !(t&0x2f == 3) {
6026 goto __60
6027 }
6028 t = t | 32
6029 size = 1
6030__60:
6031 ;
6032
6033 switch t {
6034 case 'c':
6035 goto __62
6036 case '[':
6037 goto __63
6038 case 'n':
6039 goto __64
6040 default:
6041 goto __65
6042 }
6043 goto __61
6044__62:
6045 if !(width < 1) {
6046 goto __66
6047 }
6048 width = 1
6049__66:
6050 ;
6051__63:
6052 goto __61
6053__64:
6054 store_int(tls, dest, size, uint64(pos))
6055 // do not increment match count, etc!
6056 goto __4
6057__65:
6058 X__shlim(tls, f, int64(0))
6059__67:
6060 if !(__isspace(tls, func() int32 {
6061 if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend {
6062 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1))))
6063 }
6064 return X__shgetc(tls, f)
6065 }()) != 0) {
6066 goto __68
6067 }
6068 goto __67
6069__68:
6070 ;
6071 if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) {
6072 (*FILE)(unsafe.Pointer(f)).rpos--
6073 } else {
6074 }
6075 pos = pos + ((*FILE)(unsafe.Pointer(f)).shcnt + (int64((*FILE)(unsafe.Pointer(f)).rpos)-int64((*FILE)(unsafe.Pointer(f)).buf))/1)
6076__61:
6077 ;
6078
6079 X__shlim(tls, f, int64(width))
6080 if !(func() int32 {
6081 if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend {
6082 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1))))
6083 }
6084 return X__shgetc(tls, f)
6085 }() < 0) {
6086 goto __69
6087 }
6088 goto input_fail
6089__69:
6090 ;
6091 if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) {
6092 (*FILE)(unsafe.Pointer(f)).rpos--
6093 } else {
6094 }
6095
6096 switch t {
6097 case 's':
6098 goto __71
6099 case 'c':
6100 goto __72
6101 case '[':
6102 goto __73
6103 case 'p':
6104 goto __74
6105 case 'X':
6106 goto __75
6107 case 'x':
6108 goto __76
6109 case 'o':
6110 goto __77
6111 case 'd':
6112 goto __78
6113 case 'u':
6114 goto __79
6115 case 'i':
6116 goto __80
6117 case 'a':
6118 goto __81
6119 case 'A':
6120 goto __82
6121 case 'e':
6122 goto __83
6123 case 'E':
6124 goto __84
6125 case 'f':
6126 goto __85
6127 case 'F':
6128 goto __86
6129 case 'g':
6130 goto __87
6131 case 'G':
6132 goto __88
6133 }
6134 goto __70
6135__71:
6136__72:
6137__73:
6138 if !(t == 'c' || t == 's') {
6139 goto __89
6140 }
6141 Xmemset(tls, bp, -1, uint64(unsafe.Sizeof([257]uint8{})))
6142 *(*uint8)(unsafe.Pointer(bp)) = uint8(0)
6143 if !(t == 's') {
6144 goto __91
6145 }
6146 *(*uint8)(unsafe.Pointer(bp + 10)) = uint8(0)
6147 *(*uint8)(unsafe.Pointer(bp + 11)) = uint8(0)
6148 *(*uint8)(unsafe.Pointer(bp + 12)) = uint8(0)
6149 *(*uint8)(unsafe.Pointer(bp + 13)) = uint8(0)
6150 *(*uint8)(unsafe.Pointer(bp + 14)) = uint8(0)
6151 *(*uint8)(unsafe.Pointer(bp + 33)) = uint8(0)
6152__91:
6153 ;
6154 goto __90
6155__89:
6156 if !(int32(*(*uint8)(unsafe.Pointer(PreIncUintptr(&p, 1)))) == '^') {
6157 goto __92
6158 }
6159 p++
6160 invert = 1
6161 goto __93
6162__92:
6163 invert = 0
6164__93:
6165 ;
6166 Xmemset(tls, bp, invert, uint64(unsafe.Sizeof([257]uint8{})))
6167 *(*uint8)(unsafe.Pointer(bp)) = uint8(0)
6168 if !(int32(*(*uint8)(unsafe.Pointer(p))) == '-') {
6169 goto __94
6170 }
6171 p++
6172 *(*uint8)(unsafe.Pointer(bp + 46)) = uint8(1 - invert)
6173 goto __95
6174__94:
6175 if !(int32(*(*uint8)(unsafe.Pointer(p))) == ']') {
6176 goto __96
6177 }
6178 p++
6179 *(*uint8)(unsafe.Pointer(bp + 94)) = uint8(1 - invert)
6180__96:
6181 ;
6182__95:
6183 ;
6184__97:
6185 if !(int32(*(*uint8)(unsafe.Pointer(p))) != ']') {
6186 goto __99
6187 }
6188 if !!(int32(*(*uint8)(unsafe.Pointer(p))) != 0) {
6189 goto __100
6190 }
6191 goto fmt_fail
6192__100:
6193 ;
6194 if !(int32(*(*uint8)(unsafe.Pointer(p))) == '-' && *(*uint8)(unsafe.Pointer(p + 1)) != 0 && int32(*(*uint8)(unsafe.Pointer(p + 1))) != ']') {
6195 goto __101
6196 }
6197 c = int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&p, 1) + UintptrFromInt32(-1))))
6198__102:
6199 if !(c < int32(*(*uint8)(unsafe.Pointer(p)))) {
6200 goto __104
6201 }
6202 *(*uint8)(unsafe.Pointer(bp + uintptr(1+c))) = uint8(1 - invert)
6203 goto __103
6204__103:
6205 c++
6206 goto __102
6207 goto __104
6208__104:
6209 ;
6210__101:
6211 ;
6212 *(*uint8)(unsafe.Pointer(bp + uintptr(1+int32(*(*uint8)(unsafe.Pointer(p)))))) = uint8(1 - invert)
6213 goto __98
6214__98:
6215 p++
6216 goto __97
6217 goto __99
6218__99:
6219 ;
6220__90:
6221 ;
6222 wcs = uintptr(0)
6223 s = uintptr(0)
6224 i = uint64(0)
6225 if t == 'c' {
6226 k = uint64(uint32(width) + 1)
6227 } else {
6228 k = uint64(31)
6229 }
6230 if !(size == 1) {
6231 goto __105
6232 }
6233 if !(alloc != 0) {
6234 goto __107
6235 }
6236 wcs = Xmalloc(tls, k*size_t(unsafe.Sizeof(wchar_t(0))))
6237 if !!(wcs != 0) {
6238 goto __109
6239 }
6240 goto alloc_fail
6241__109:
6242 ;
6243 goto __108
6244__107:
6245 wcs = dest
6246__108:
6247 ;
6248 *(*mbstate_t)(unsafe.Pointer(bp + 268 /* st */)) = mbstate_t{}
6249__110:
6250 if !(*(*uint8)(unsafe.Pointer(bp + uintptr(AssignInt32(&c, func() int32 {
6251 if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend {
6252 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1))))
6253 }
6254 return X__shgetc(tls, f)
6255 }())+1))) != 0) {
6256 goto __111
6257 }
6258 switch Xmbrtowc(tls, bp+260, func() uintptr { *(*uint8)(unsafe.Pointer(bp + 264)) = uint8(c); return bp + 264 }(), uint64(1), bp+268 /* &st */) {
6259 case Uint64FromInt32(-1):
6260 goto __113
6261 case Uint64FromInt32(-2):
6262 goto __114
6263 }
6264 goto __112
6265__113:
6266 goto input_fail
6267__114:
6268 goto __110
6269__112:
6270 ;
6271 if !(wcs != 0) {
6272 goto __115
6273 }
6274 *(*wchar_t)(unsafe.Pointer(wcs + uintptr(PostIncUint64(&i, 1))*4)) = *(*wchar_t)(unsafe.Pointer(bp + 260 /* wc */))
6275__115:
6276 ;
6277 if !(alloc != 0 && i == k) {
6278 goto __116
6279 }
6280 k = k + (k + uint64(1))
6281 tmp = Xrealloc(tls, wcs, k*size_t(unsafe.Sizeof(wchar_t(0))))
6282 if !!(tmp != 0) {
6283 goto __117
6284 }
6285 goto alloc_fail
6286__117:
6287 ;
6288 wcs = tmp
6289__116:
6290 ;
6291 goto __110
6292__111:
6293 ;
6294 if !!(Xmbsinit(tls, bp+268) != 0) {
6295 goto __118
6296 }
6297 goto input_fail
6298__118:
6299 ;
6300 goto __106
6301__105:
6302 if !(alloc != 0) {
6303 goto __119
6304 }
6305 s = Xmalloc(tls, k)
6306 if !!(s != 0) {
6307 goto __121
6308 }
6309 goto alloc_fail
6310__121:
6311 ;
6312__122:
6313 if !(*(*uint8)(unsafe.Pointer(bp + uintptr(AssignInt32(&c, func() int32 {
6314 if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend {
6315 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1))))
6316 }
6317 return X__shgetc(tls, f)
6318 }())+1))) != 0) {
6319 goto __123
6320 }
6321 *(*uint8)(unsafe.Pointer(s + uintptr(PostIncUint64(&i, 1)))) = uint8(c)
6322 if !(i == k) {
6323 goto __124
6324 }
6325 k = k + (k + uint64(1))
6326 tmp1 = Xrealloc(tls, s, k)
6327 if !!(tmp1 != 0) {
6328 goto __125
6329 }
6330 goto alloc_fail
6331__125:
6332 ;
6333 s = tmp1
6334__124:
6335 ;
6336 goto __122
6337__123:
6338 ;
6339 goto __120
6340__119:
6341 if !(AssignUintptr(&s, dest) != 0) {
6342 goto __126
6343 }
6344__128:
6345 if !(*(*uint8)(unsafe.Pointer(bp + uintptr(AssignInt32(&c, func() int32 {
6346 if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend {
6347 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1))))
6348 }
6349 return X__shgetc(tls, f)
6350 }())+1))) != 0) {
6351 goto __129
6352 }
6353 *(*uint8)(unsafe.Pointer(s + uintptr(PostIncUint64(&i, 1)))) = uint8(c)
6354 goto __128
6355__129:
6356 ;
6357 goto __127
6358__126:
6359__130:
6360 if !(*(*uint8)(unsafe.Pointer(bp + uintptr(AssignInt32(&c, func() int32 {
6361 if (*FILE)(unsafe.Pointer(f)).rpos != (*FILE)(unsafe.Pointer(f)).shend {
6362 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).rpos, 1))))
6363 }
6364 return X__shgetc(tls, f)
6365 }())+1))) != 0) {
6366 goto __131
6367 }
6368 goto __130
6369__131:
6370 ;
6371__127:
6372 ;
6373__120:
6374 ;
6375__106:
6376 ;
6377 if (*FILE)(unsafe.Pointer(f)).shlim >= int64(0) {
6378 (*FILE)(unsafe.Pointer(f)).rpos--
6379 } else {
6380 }
6381 if !!((*FILE)(unsafe.Pointer(f)).shcnt+(int64((*FILE)(unsafe.Pointer(f)).rpos)-int64((*FILE)(unsafe.Pointer(f)).buf))/1 != 0) {
6382 goto __132
6383 }
6384 goto match_fail
6385__132:
6386 ;
6387 if !(t == 'c' && (*FILE)(unsafe.Pointer(f)).shcnt+(int64((*FILE)(unsafe.Pointer(f)).rpos)-int64((*FILE)(unsafe.Pointer(f)).buf))/1 != off_t(width)) {
6388 goto __133
6389 }
6390 goto match_fail
6391__133:
6392 ;
6393 if !(alloc != 0) {
6394 goto __134
6395 }
6396 if !(size == 1) {
6397 goto __135
6398 }
6399 *(*uintptr)(unsafe.Pointer(dest)) = wcs
6400 goto __136
6401__135:
6402 *(*uintptr)(unsafe.Pointer(dest)) = s
6403__136:
6404 ;
6405__134:
6406 ;
6407 if !(t != 'c') {
6408 goto __137
6409 }
6410 if !(wcs != 0) {
6411 goto __138
6412 }
6413 *(*wchar_t)(unsafe.Pointer(wcs + uintptr(i)*4)) = 0
6414__138:
6415 ;
6416 if !(s != 0) {
6417 goto __139
6418 }
6419 *(*uint8)(unsafe.Pointer(s + uintptr(i))) = uint8(0)
6420__139:
6421 ;
6422__137:
6423 ;
6424 goto __70
6425__74:
6426__75:
6427__76:
6428 base = 16
6429 goto int_common
6430__77:
6431 base = 8
6432 goto int_common
6433__78:
6434__79:
6435 base = 10
6436 goto int_common
6437__80:
6438 base = 0
6439int_common:
6440 x = X__intscan(tls, f, uint32(base), 0, 2*uint64(0x7fffffffffffffff)+uint64(1))
6441 if !!((*FILE)(unsafe.Pointer(f)).shcnt+(int64((*FILE)(unsafe.Pointer(f)).rpos)-int64((*FILE)(unsafe.Pointer(f)).buf))/1 != 0) {
6442 goto __140
6443 }
6444 goto match_fail
6445__140:
6446 ;
6447 if !(t == 'p' && dest != 0) {
6448 goto __141
6449 }
6450 *(*uintptr)(unsafe.Pointer(dest)) = uintptr(uintptr_t(x))
6451 goto __142
6452__141:
6453 store_int(tls, dest, size, x)
6454__142:
6455 ;
6456 goto __70
6457__81:
6458__82:
6459__83:
6460__84:
6461__85:
6462__86:
6463__87:
6464__88:
6465 y = X__floatscan(tls, f, size, 0)
6466 if !!((*FILE)(unsafe.Pointer(f)).shcnt+(int64((*FILE)(unsafe.Pointer(f)).rpos)-int64((*FILE)(unsafe.Pointer(f)).buf))/1 != 0) {
6467 goto __143
6468 }
6469 goto match_fail
6470__143:
6471 ;
6472 if !(dest != 0) {
6473 goto __144
6474 }
6475 switch size {
6476 case 0:
6477 goto __146
6478 case 1:
6479 goto __147
6480 case 2:
6481 goto __148
6482 }
6483 goto __145
6484__146:
6485 *(*float32)(unsafe.Pointer(dest)) = float32(y)
6486 goto __145
6487__147:
6488 *(*float64)(unsafe.Pointer(dest)) = y
6489 goto __145
6490__148:
6491 *(*float64)(unsafe.Pointer(dest)) = y
6492 goto __145
6493__145:
6494 ;
6495__144:
6496 ;
6497 goto __70
6498__70:
6499 ;
6500
6501 pos = pos + ((*FILE)(unsafe.Pointer(f)).shcnt + (int64((*FILE)(unsafe.Pointer(f)).rpos)-int64((*FILE)(unsafe.Pointer(f)).buf))/1)
6502 if !(dest != 0) {
6503 goto __149
6504 }
6505 matches++
6506__149:
6507 ;
6508 goto __4
6509__4:
6510 p++
6511 goto __3
6512 goto __5
6513__5:
6514 ;
6515 if !(0 != 0) {
6516 goto __150
6517 }
6518fmt_fail:
6519alloc_fail:
6520input_fail:
6521 if !!(matches != 0) {
6522 goto __151
6523 }
6524 matches--
6525__151:
6526 ;
6527match_fail:
6528 if !(alloc != 0) {
6529 goto __152
6530 }
6531 Xfree(tls, s)
6532 Xfree(tls, wcs)
6533__152:
6534 ;
6535__150:
6536 ;
6537__153:
6538 if !(__need_unlock != 0) {
6539 goto __156
6540 }
6541 X__unlockfile(tls, f)
6542__156:
6543 ;
6544 goto __154
6545__154:
6546 if 0 != 0 {
6547 goto __153
6548 }
6549 goto __155
6550__155:
6551 ;
6552 return matches
6553}
6554
6555func string_read(tls *TLS, f uintptr, buf uintptr, len size_t) size_t { /* vsscanf.c:4:15: */
6556 var src uintptr = (*FILE)(unsafe.Pointer(f)).cookie
6557 var k size_t = len + uint64(256)
6558 var end uintptr = Xmemchr(tls, src, 0, k)
6559 if end != 0 {
6560 k = size_t((int64(end) - int64(src)) / 1)
6561 }
6562 if k < len {
6563 len = k
6564 }
6565 Xmemcpy(tls, buf, src, len)
6566 (*FILE)(unsafe.Pointer(f)).rpos = src + uintptr(len)
6567 (*FILE)(unsafe.Pointer(f)).rend = src + uintptr(k)
6568 (*FILE)(unsafe.Pointer(f)).cookie = src + uintptr(k)
6569 return len
6570}
6571
6572func Xvsscanf(tls *TLS, s uintptr, fmt uintptr, ap va_list) int32 { /* vsscanf.c:18:5: */
6573 bp := tls.Alloc(232)
6574 defer tls.Free(232)
6575
6576 *(*FILE)(unsafe.Pointer(bp /* f */)) = FILE{read: *(*uintptr)(unsafe.Pointer(&struct {
6577 f func(*TLS, uintptr, uintptr, size_t) size_t
6578 }{string_read})), buf: s, lock: -1, cookie: s}
6579 return Xvfscanf(tls, bp, fmt, ap)
6580}
6581
6582func Xbsearch(tls *TLS, key uintptr, base uintptr, nel size_t, width size_t, cmp uintptr) uintptr { /* bsearch.c:3:6: */
6583 var try uintptr
6584 var sign int32
6585 for nel > uint64(0) {
6586 try = base + uintptr(width*(nel/uint64(2)))
6587 sign = (*struct {
6588 f func(*TLS, uintptr, uintptr) int32
6589 })(unsafe.Pointer(&struct{ uintptr }{cmp})).f(tls, key, try)
6590 if sign < 0 {
6591 nel = nel / uint64(2)
6592 } else if sign > 0 {
6593 base = try + uintptr(width)
6594 nel = nel - (nel/uint64(2) + uint64(1))
6595 } else {
6596 return try
6597 }
6598 }
6599 return uintptr(0)
6600}
6601
6602func strtox(tls *TLS, s uintptr, p uintptr, prec int32) float64 { /* strtod.c:6:20: */
6603 bp := tls.Alloc(232)
6604 defer tls.Free(232)
6605
6606 // var f FILE at bp, 232
6607
6608 (*FILE)(unsafe.Pointer(bp)).buf = AssignPtrUintptr(bp+8, s)
6609 (*FILE)(unsafe.Pointer(bp)).rend = UintptrFromInt32(-1)
6610 X__shlim(tls, bp, int64(0))
6611 var y float64 = X__floatscan(tls, bp, prec, 1)
6612 var cnt off_t = (*FILE)(unsafe.Pointer(bp)).shcnt + (int64((*FILE)(unsafe.Pointer(bp)).rpos)-int64((*FILE)(unsafe.Pointer(bp)).buf))/1
6613 if p != 0 {
6614 *(*uintptr)(unsafe.Pointer(p)) = func() uintptr {
6615 if cnt != 0 {
6616 return s + uintptr(cnt)
6617 }
6618 return s
6619 }()
6620 }
6621 return y
6622}
6623
6624func Xstrtof(tls *TLS, s uintptr, p uintptr) float32 { /* strtod.c:17:7: */
6625 return float32(strtox(tls, s, p, 0))
6626}
6627
6628func Xstrtod(tls *TLS, s uintptr, p uintptr) float64 { /* strtod.c:22:8: */
6629 return strtox(tls, s, p, 1)
6630}
6631
6632func Xstrtold(tls *TLS, s uintptr, p uintptr) float64 { /* strtod.c:27:13: */
6633 return strtox(tls, s, p, 2)
6634}
6635
6636func strtox1(tls *TLS, s uintptr, p uintptr, base int32, lim uint64) uint64 { /* strtol.c:8:27: */
6637 bp := tls.Alloc(232)
6638 defer tls.Free(232)
6639
6640 // var f FILE at bp, 232
6641
6642 (*FILE)(unsafe.Pointer(bp)).buf = AssignPtrUintptr(bp+8, s)
6643 (*FILE)(unsafe.Pointer(bp)).rend = UintptrFromInt32(-1)
6644 X__shlim(tls, bp, int64(0))
6645 var y uint64 = X__intscan(tls, bp, uint32(base), 1, lim)
6646 if p != 0 {
6647 var cnt size_t = size_t((*FILE)(unsafe.Pointer(bp)).shcnt + (int64((*FILE)(unsafe.Pointer(bp)).rpos)-int64((*FILE)(unsafe.Pointer(bp)).buf))/1)
6648 *(*uintptr)(unsafe.Pointer(p)) = s + uintptr(cnt)
6649 }
6650 return y
6651}
6652
6653func Xstrtoull(tls *TLS, s uintptr, p uintptr, base int32) uint64 { /* strtol.c:21:20: */
6654 return strtox1(tls, s, p, base, 2*uint64(0x7fffffffffffffff)+uint64(1))
6655}
6656
6657func Xstrtoll(tls *TLS, s uintptr, p uintptr, base int32) int64 { /* strtol.c:26:11: */
6658 return int64(strtox1(tls, s, p, base, Uint64FromInt64(-0x7fffffffffffffff-int64(1))))
6659}
6660
6661func Xstrtoul(tls *TLS, s uintptr, p uintptr, base int32) uint64 { /* strtol.c:31:15: */
6662 return uint64(strtox1(tls, s, p, base, 2*uint64(0x7fffffffffffffff)+uint64(1)))
6663}
6664
6665func Xstrtol(tls *TLS, s uintptr, p uintptr, base int32) int64 { /* strtol.c:36:6: */
6666 return int64(strtox1(tls, s, p, base, 0+Uint64FromInt64(Int64(-Int64(0x7fffffffffffffff))-Int64FromInt32(1))))
6667}
6668
6669func Xstrtoimax(tls *TLS, s uintptr, p uintptr, base int32) intmax_t { /* strtol.c:41:10: */
6670 return intmax_t(Xstrtoll(tls, s, p, base))
6671}
6672
6673func Xstrtoumax(tls *TLS, s uintptr, p uintptr, base int32) uintmax_t { /* strtol.c:46:11: */
6674 return uintmax_t(Xstrtoull(tls, s, p, base))
6675}
6676
6677func Xstrdup(tls *TLS, s uintptr) uintptr { /* strdup.c:4:6: */
6678 var l size_t = Xstrlen(tls, s)
6679 var d uintptr = Xmalloc(tls, l+uint64(1))
6680 if !(d != 0) {
6681 return uintptr(0)
6682 }
6683 return Xmemcpy(tls, d, s, l+uint64(1))
6684}
6685
6686func Xstrlcat(tls *TLS, d uintptr, s uintptr, n size_t) size_t { /* strlcat.c:4:8: */
6687 var l size_t = Xstrnlen(tls, d, n)
6688 if l == n {
6689 return l + Xstrlen(tls, s)
6690 }
6691 return l + Xstrlcpy(tls, d+uintptr(l), s, n-l)
6692}
6693
6694// Support signed or unsigned plain-char
6695
6696// Implementation choices...
6697
6698// Arbitrary numbers...
6699
6700// POSIX/SUS requirements follow. These numbers come directly
6701// from SUS and have nothing to do with the host system.
6702
6703func Xstrlcpy(tls *TLS, d uintptr, s uintptr, n size_t) size_t { /* strlcpy.c:11:8: */
6704 var d0 uintptr
6705 var wd uintptr
6706 var ws uintptr
6707 d0 = d
6708
6709 if !!(int32(PostDecUint64(&n, 1)) != 0) {
6710 goto __1
6711 }
6712 goto finish
6713__1:
6714 ;
6715 if !(uintptr_t(s)&(uint64(unsafe.Sizeof(size_t(0)))-uint64(1)) == uintptr_t(d)&(uint64(unsafe.Sizeof(size_t(0)))-uint64(1))) {
6716 goto __2
6717 }
6718__3:
6719 if !(uintptr_t(s)&(uint64(unsafe.Sizeof(size_t(0)))-uint64(1)) != 0 && n != 0 && AssignPtrUint8(d, *(*uint8)(unsafe.Pointer(s))) != 0) {
6720 goto __5
6721 }
6722 goto __4
6723__4:
6724 n--
6725 s++
6726 d++
6727 goto __3
6728 goto __5
6729__5:
6730 ;
6731 if !(n != 0 && *(*uint8)(unsafe.Pointer(s)) != 0) {
6732 goto __6
6733 }
6734 wd = d
6735 ws = s
6736__7:
6737 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)) {
6738 goto __9
6739 }
6740 *(*size_t)(unsafe.Pointer(wd)) = *(*uint64)(unsafe.Pointer(ws))
6741 goto __8
6742__8:
6743 n = n - size_t(unsafe.Sizeof(size_t(0)))
6744 ws += 8
6745 wd += 8
6746 goto __7
6747 goto __9
6748__9:
6749 ;
6750 d = wd
6751 s = ws
6752__6:
6753 ;
6754__2:
6755 ;
6756__10:
6757 if !(n != 0 && AssignPtrUint8(d, *(*uint8)(unsafe.Pointer(s))) != 0) {
6758 goto __12
6759 }
6760 goto __11
6761__11:
6762 n--
6763 s++
6764 d++
6765 goto __10
6766 goto __12
6767__12:
6768 ;
6769 *(*uint8)(unsafe.Pointer(d)) = uint8(0)
6770finish:
6771 return size_t((int64(d)-int64(d0))/1) + Xstrlen(tls, s)
6772}
6773
6774func Xstrncasecmp(tls *TLS, _l uintptr, _r uintptr, n size_t) int32 { /* strncasecmp.c:4:5: */
6775 var l uintptr = _l
6776 var r uintptr = _r
6777 if !(int32(PostDecUint64(&n, 1)) != 0) {
6778 return 0
6779 }
6780__1:
6781 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)))))) {
6782 goto __3
6783 }
6784 goto __2
6785__2:
6786 l++
6787 r++
6788 n--
6789 goto __1
6790 goto __3
6791__3:
6792 ;
6793 return Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(l)))) - Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(r))))
6794}
6795
6796func X__strncasecmp_l(tls *TLS, l uintptr, r uintptr, n size_t, loc locale_t) int32 { /* strncasecmp.c:12:5: */
6797 return Xstrncasecmp(tls, l, r, n)
6798}
6799
6800func Xstrncat(tls *TLS, d uintptr, s uintptr, n size_t) uintptr { /* strncat.c:3:6: */
6801 var a uintptr = d
6802 d += uintptr(Xstrlen(tls, d))
6803 for n != 0 && *(*uint8)(unsafe.Pointer(s)) != 0 {
6804 n--
6805 *(*uint8)(unsafe.Pointer(PostIncUintptr(&d, 1))) = *(*uint8)(unsafe.Pointer(PostIncUintptr(&s, 1)))
6806 }
6807 *(*uint8)(unsafe.Pointer(PostIncUintptr(&d, 1))) = uint8(0)
6808 return a
6809}
6810
6811func Xstrnlen(tls *TLS, s uintptr, n size_t) size_t { /* strnlen.c:3:8: */
6812 var p uintptr = Xmemchr(tls, s, 0, n)
6813 if p != 0 {
6814 return uint64((int64(p) - int64(s)) / 1)
6815 }
6816 return n
6817}
6818
6819func Xstrspn(tls *TLS, s uintptr, c uintptr) size_t { /* strspn.c:6:8: */
6820 bp := tls.Alloc(32)
6821 defer tls.Free(32)
6822
6823 var a uintptr = s
6824 *(*[4]size_t)(unsafe.Pointer(bp /* byteset */)) = [4]size_t{0: uint64(0)}
6825
6826 if !(int32(*(*uint8)(unsafe.Pointer(c))) != 0) {
6827 return uint64(0)
6828 }
6829 if !(int32(*(*uint8)(unsafe.Pointer(c + 1))) != 0) {
6830 for ; int32(*(*uint8)(unsafe.Pointer(s))) == int32(*(*uint8)(unsafe.Pointer(c))); s++ {
6831 }
6832 return size_t((int64(s) - int64(a)) / 1)
6833 }
6834
6835 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++ {
6836 }
6837 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++ {
6838 }
6839 return size_t((int64(s) - int64(a)) / 1)
6840}
6841
6842func Xstrtok(tls *TLS, s uintptr, sep uintptr) uintptr { /* strtok.c:3:6: */
6843 if !(s != 0) && !(int32(AssignUintptr(&s, _sp)) != 0) {
6844 return uintptr(0)
6845 }
6846 s += uintptr(Xstrspn(tls, s, sep))
6847 if !(int32(*(*uint8)(unsafe.Pointer(s))) != 0) {
6848 return AssignPtrUintptr(uintptr(unsafe.Pointer(&_sp)), uintptr(0))
6849 }
6850 _sp = s + uintptr(Xstrcspn(tls, s, sep))
6851 if *(*uint8)(unsafe.Pointer(_sp)) != 0 {
6852 *(*uint8)(unsafe.Pointer(PostIncUintptr(&_sp, 1))) = uint8(0)
6853 } else {
6854 _sp = uintptr(0)
6855 }
6856 return s
6857}
6858
6859var _sp uintptr /* strtok.c:5:14: */
6860
6861func X__ccgo_pthreadAttrGetDetachState(tls *TLS, a uintptr) int32 { /* pthread_attr_get.c:3:5: */
6862 return *(*int32)(unsafe.Pointer(a + 6*4))
6863}
6864
6865func Xpthread_attr_getdetachstate(tls *TLS, a uintptr, state uintptr) int32 { /* pthread_attr_get.c:7:5: */
6866 *(*int32)(unsafe.Pointer(state)) = *(*int32)(unsafe.Pointer(a + 6*4))
6867 return 0
6868}
6869
6870//
6871// int pthread_attr_getguardsize(const pthread_attr_t *restrict a, size_t *restrict size)
6872// {
6873// *size = a->_a_guardsize;
6874// return 0;
6875// }
6876//
6877// int pthread_attr_getinheritsched(const pthread_attr_t *restrict a, int *restrict inherit)
6878// {
6879// *inherit = a->_a_sched;
6880// return 0;
6881// }
6882//
6883// int pthread_attr_getschedparam(const pthread_attr_t *restrict a, struct sched_param *restrict param)
6884// {
6885// param->sched_priority = a->_a_prio;
6886// return 0;
6887// }
6888//
6889// int pthread_attr_getschedpolicy(const pthread_attr_t *restrict a, int *restrict policy)
6890// {
6891// *policy = a->_a_policy;
6892// return 0;
6893// }
6894//
6895// int pthread_attr_getscope(const pthread_attr_t *restrict a, int *restrict scope)
6896// {
6897// *scope = PTHREAD_SCOPE_SYSTEM;
6898// return 0;
6899// }
6900//
6901// int pthread_attr_getstack(const pthread_attr_t *restrict a, void **restrict addr, size_t *restrict size)
6902// {
6903// if (!a->_a_stackaddr)
6904// return EINVAL;
6905// *size = a->_a_stacksize;
6906// *addr = (void *)(a->_a_stackaddr - *size);
6907// return 0;
6908// }
6909//
6910// int pthread_attr_getstacksize(const pthread_attr_t *restrict a, size_t *restrict size)
6911// {
6912// *size = a->_a_stacksize;
6913// return 0;
6914// }
6915//
6916// int pthread_barrierattr_getpshared(const pthread_barrierattr_t *restrict a, int *restrict pshared)
6917// {
6918// *pshared = !!a->__attr;
6919// return 0;
6920// }
6921//
6922// int pthread_condattr_getclock(const pthread_condattr_t *restrict a, clockid_t *restrict clk)
6923// {
6924// *clk = a->__attr & 0x7fffffff;
6925// return 0;
6926// }
6927//
6928// int pthread_condattr_getpshared(const pthread_condattr_t *restrict a, int *restrict pshared)
6929// {
6930// *pshared = a->__attr>>31;
6931// return 0;
6932// }
6933//
6934// int pthread_mutexattr_getprotocol(const pthread_mutexattr_t *restrict a, int *restrict protocol)
6935// {
6936// *protocol = PTHREAD_PRIO_NONE;
6937// return 0;
6938// }
6939// int pthread_mutexattr_getpshared(const pthread_mutexattr_t *restrict a, int *restrict pshared)
6940// {
6941// *pshared = a->__attr / 128U % 2;
6942// return 0;
6943// }
6944//
6945// int pthread_mutexattr_getrobust(const pthread_mutexattr_t *restrict a, int *restrict robust)
6946// {
6947// *robust = a->__attr / 4U % 2;
6948// return 0;
6949// }
6950
6951func X__ccgo_pthreadMutexattrGettype(tls *TLS, a uintptr) int32 { /* pthread_attr_get.c:93:5: */
6952 return int32((*pthread_mutexattr_t)(unsafe.Pointer(a)).__attr & uint32(3))
6953}
6954
6955// int pthread_mutexattr_gettype(const pthread_mutexattr_t *restrict a, int *restrict type)
6956// {
6957// *type = a->__attr & 3;
6958// return 0;
6959// }
6960//
6961// int pthread_rwlockattr_getpshared(const pthread_rwlockattr_t *restrict a, int *restrict pshared)
6962// {
6963// *pshared = a->__attr[0];
6964// return 0;
6965// }
6966
6967func Xpthread_attr_setdetachstate(tls *TLS, a uintptr, state int32) int32 { /* pthread_attr_setdetachstate.c:3:5: */
6968 if uint32(state) > 1 {
6969 return 22
6970 }
6971 *(*int32)(unsafe.Pointer(a + 6*4)) = state
6972 return 0
6973}
6974
6975func X__ccgo_getMutexType(tls *TLS, m uintptr) int32 { /* pthread_mutex_lock.c:3:5: */
6976 return *(*int32)(unsafe.Pointer(m)) & 15
6977}
6978
6979// int __pthread_mutex_lock(pthread_mutex_t *m)
6980// {
6981// if ((m->_m_type&15) == PTHREAD_MUTEX_NORMAL
6982// && !a_cas(&m->_m_lock, 0, EBUSY))
6983// return 0;
6984//
6985// return __pthread_mutex_timedlock(m, 0);
6986// }
6987//
6988// weak_alias(__pthread_mutex_lock, pthread_mutex_lock);
6989
6990func Xpthread_mutexattr_destroy(tls *TLS, a uintptr) int32 { /* pthread_mutexattr_destroy.c:3:5: */
6991 return 0
6992}
6993
6994func Xpthread_mutexattr_init(tls *TLS, a uintptr) int32 { /* pthread_mutexattr_init.c:3:5: */
6995 *(*pthread_mutexattr_t)(unsafe.Pointer(a)) = pthread_mutexattr_t{}
6996 return 0
6997}
6998
6999func Xpthread_mutexattr_settype(tls *TLS, a uintptr, type1 int32) int32 { /* pthread_mutexattr_settype.c:3:5: */
7000 if uint32(type1) > uint32(2) {
7001 return 22
7002 }
7003 (*pthread_mutexattr_t)(unsafe.Pointer(a)).__attr = (*pthread_mutexattr_t)(unsafe.Pointer(a)).__attr&Uint32FromInt32(CplInt32(3)) | uint32(type1)
7004 return 0
7005}
7006
7007func init() {
7008 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&ptable)) + 0)) = uintptr(unsafe.Pointer(&table)) + uintptr(128)*2 // __ctype_b_loc.c:36:45:
7009}
7010
7011var 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"
7012var ts = (*reflect.StringHeader)(unsafe.Pointer(&ts1)).Data
Note: See TracBrowser for help on using the repository browser.