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