source: code/trunk/vendor/modernc.org/libc/musl_darwin_amd64.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: 140.2 KB
Line 
1// Code generated by 'ccgo -D__environ=environ -export-externs X -export-fields F -hide __syscall0,__syscall1,__syscall2,__syscall3,__syscall4,__syscall5,__syscall6 -hide isascii,isspace,tolower,toupper -nostdinc -nostdlib -o ../musl_darwin_amd64.go -pkgname libc -static-locals-prefix _s -Iarch/x86_64 -Iarch/generic -Iobj/src/internal -Isrc/include -Isrc/internal -Iobj/include -Iinclude copyright.c ../darwin/table.c src/env/putenv.c src/env/setenv.c src/env/unsetenv.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/network/freeaddrinfo.c src/network/getaddrinfo.c src/network/gethostbyaddr.c src/network/gethostbyaddr_r.c src/network/gethostbyname.c src/network/gethostbyname2.c src/network/gethostbyname2_r.c src/network/getnameinfo.c src/network/h_errno.c src/network/inet_aton.c src/network/inet_ntop.c src/network/inet_pton.c src/network/lookup_ipliteral.c src/network/lookup_name.c src/network/lookup_serv.c src/prng/rand_r.c src/stdio/__toread.c src/stdio/__uflow.c src/stdlib/bsearch.c src/stdlib/strtod.c src/stdlib/strtol.c src/string/strchrnul.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', DO NOT EDIT.
2
3package libc
4
5import (
6 "math"
7 "reflect"
8 "sync/atomic"
9 "unsafe"
10)
11
12var _ = math.Pi
13var _ reflect.Kind
14var _ atomic.Value
15var _ unsafe.Pointer
16
17// musl as a whole is licensed under the following standard MIT license:
18//
19// ----------------------------------------------------------------------
20// Copyright © 2005-2020 Rich Felker, et al.
21//
22// Permission is hereby granted, free of charge, to any person obtaining
23// a copy of this software and associated documentation files (the
24// "Software"), to deal in the Software without restriction, including
25// without limitation the rights to use, copy, modify, merge, publish,
26// distribute, sublicense, and/or sell copies of the Software, and to
27// permit persons to whom the Software is furnished to do so, subject to
28// the following conditions:
29//
30// The above copyright notice and this permission notice shall be
31// included in all copies or substantial portions of the Software.
32//
33// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
34// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
35// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
36// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
37// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
38// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
39// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
40// ----------------------------------------------------------------------
41//
42// Authors/contributors include:
43//
44// A. Wilcox
45// Ada Worcester
46// Alex Dowad
47// Alex Suykov
48// Alexander Monakov
49// Andre McCurdy
50// Andrew Kelley
51// Anthony G. Basile
52// Aric Belsito
53// Arvid Picciani
54// Bartosz Brachaczek
55// Benjamin Peterson
56// Bobby Bingham
57// Boris Brezillon
58// Brent Cook
59// Chris Spiegel
60// Clément Vasseur
61// Daniel Micay
62// Daniel Sabogal
63// Daurnimator
64// David Carlier
65// David Edelsohn
66// Denys Vlasenko
67// Dmitry Ivanov
68// Dmitry V. Levin
69// Drew DeVault
70// Emil Renner Berthing
71// Fangrui Song
72// Felix Fietkau
73// Felix Janda
74// Gianluca Anzolin
75// Hauke Mehrtens
76// He X
77// Hiltjo Posthuma
78// Isaac Dunham
79// Jaydeep Patil
80// Jens Gustedt
81// Jeremy Huntwork
82// Jo-Philipp Wich
83// Joakim Sindholt
84// John Spencer
85// Julien Ramseier
86// Justin Cormack
87// Kaarle Ritvanen
88// Khem Raj
89// Kylie McClain
90// Leah Neukirchen
91// Luca Barbato
92// Luka Perkov
93// M Farkas-Dyck (Strake)
94// Mahesh Bodapati
95// Markus Wichmann
96// Masanori Ogino
97// Michael Clark
98// Michael Forney
99// Mikhail Kremnyov
100// Natanael Copa
101// Nicholas J. Kain
102// orc
103// Pascal Cuoq
104// Patrick Oppenlander
105// Petr Hosek
106// Petr Skocik
107// Pierre Carrier
108// Reini Urban
109// Rich Felker
110// Richard Pennington
111// Ryan Fairfax
112// Samuel Holland
113// Segev Finer
114// Shiz
115// sin
116// Solar Designer
117// Stefan Kristiansson
118// Stefan O'Rear
119// Szabolcs Nagy
120// Timo Teräs
121// Trutz Behn
122// Valentin Ochs
123// Will Dietz
124// William Haddon
125// William Pitcock
126//
127// Portions of this software are derived from third-party works licensed
128// under terms compatible with the above MIT license:
129//
130// The TRE regular expression implementation (src/regex/reg* and
131// src/regex/tre*) is Copyright © 2001-2008 Ville Laurikari and licensed
132// under a 2-clause BSD license (license text in the source files). The
133// included version has been heavily modified by Rich Felker in 2012, in
134// the interests of size, simplicity, and namespace cleanliness.
135//
136// Much of the math library code (src/math/* and src/complex/*) is
137// Copyright © 1993,2004 Sun Microsystems or
138// Copyright © 2003-2011 David Schultz or
139// Copyright © 2003-2009 Steven G. Kargl or
140// Copyright © 2003-2009 Bruce D. Evans or
141// Copyright © 2008 Stephen L. Moshier or
142// Copyright © 2017-2018 Arm Limited
143// and labelled as such in comments in the individual source files. All
144// have been licensed under extremely permissive terms.
145//
146// The ARM memcpy code (src/string/arm/memcpy.S) is Copyright © 2008
147// The Android Open Source Project and is licensed under a two-clause BSD
148// license. It was taken from Bionic libc, used on Android.
149//
150// The AArch64 memcpy and memset code (src/string/aarch64/*) are
151// Copyright © 1999-2019, Arm Limited.
152//
153// The implementation of DES for crypt (src/crypt/crypt_des.c) is
154// Copyright © 1994 David Burren. It is licensed under a BSD license.
155//
156// The implementation of blowfish crypt (src/crypt/crypt_blowfish.c) was
157// originally written by Solar Designer and placed into the public
158// domain. The code also comes with a fallback permissive license for use
159// in jurisdictions that may not recognize the public domain.
160//
161// The smoothsort implementation (src/stdlib/qsort.c) is Copyright © 2011
162// Valentin Ochs and is licensed under an MIT-style license.
163//
164// The x86_64 port was written by Nicholas J. Kain and is licensed under
165// the standard MIT terms.
166//
167// The mips and microblaze ports were originally written by Richard
168// Pennington for use in the ellcc project. The original code was adapted
169// by Rich Felker for build system and code conventions during upstream
170// integration. It is licensed under the standard MIT terms.
171//
172// The mips64 port was contributed by Imagination Technologies and is
173// licensed under the standard MIT terms.
174//
175// The powerpc port was also originally written by Richard Pennington,
176// and later supplemented and integrated by John Spencer. It is licensed
177// under the standard MIT terms.
178//
179// All other files which have no copyright comments are original works
180// produced specifically for use as part of this library, written either
181// by Rich Felker, the main author of the library, or by one or more
182// contibutors listed above. Details on authorship of individual files
183// can be found in the git version control history of the project. The
184// omission of copyright and license comments in each file is in the
185// interest of source tree size.
186//
187// In addition, permission is hereby granted for all public header files
188// (include/* and arch/*/bits/*) and crt files intended to be linked into
189// applications (crt/*, ldso/dlstart.c, and arch/*/crt_arch.h) to omit
190// the copyright notice and permission notice otherwise required by the
191// license, and to use these files without any requirement of
192// attribution. These files include substantial contributions from:
193//
194// Bobby Bingham
195// John Spencer
196// Nicholas J. Kain
197// Rich Felker
198// Richard Pennington
199// Stefan Kristiansson
200// Szabolcs Nagy
201//
202// all of whom have explicitly granted such permission.
203//
204// This file previously contained text expressing a belief that most of
205// the files covered by the above exception were sufficiently trivial not
206// to be subject to copyright, resulting in confusion over whether it
207// negated the permissions granted in the license. In the spirit of
208// permissive licensing, and of not having licensing issues being an
209// obstacle to adoption, that text has been removed.
210const ( /* copyright.c:194:1: */
211 __musl__copyright__ = 0
212)
213
214const ( /* nameser.h:117:1: */
215 ns_uop_delete = 0
216 ns_uop_add = 1
217 ns_uop_max = 2
218)
219
220const ( /* nameser.h:147:1: */
221 ns_t_invalid = 0
222 ns_t_a = 1
223 ns_t_ns = 2
224 ns_t_md = 3
225 ns_t_mf = 4
226 ns_t_cname = 5
227 ns_t_soa = 6
228 ns_t_mb = 7
229 ns_t_mg = 8
230 ns_t_mr = 9
231 ns_t_null = 10
232 ns_t_wks = 11
233 ns_t_ptr = 12
234 ns_t_hinfo = 13
235 ns_t_minfo = 14
236 ns_t_mx = 15
237 ns_t_txt = 16
238 ns_t_rp = 17
239 ns_t_afsdb = 18
240 ns_t_x25 = 19
241 ns_t_isdn = 20
242 ns_t_rt = 21
243 ns_t_nsap = 22
244 ns_t_nsap_ptr = 23
245 ns_t_sig = 24
246 ns_t_key = 25
247 ns_t_px = 26
248 ns_t_gpos = 27
249 ns_t_aaaa = 28
250 ns_t_loc = 29
251 ns_t_nxt = 30
252 ns_t_eid = 31
253 ns_t_nimloc = 32
254 ns_t_srv = 33
255 ns_t_atma = 34
256 ns_t_naptr = 35
257 ns_t_kx = 36
258 ns_t_cert = 37
259 ns_t_a6 = 38
260 ns_t_dname = 39
261 ns_t_sink = 40
262 ns_t_opt = 41
263 ns_t_apl = 42
264 ns_t_tkey = 249
265 ns_t_tsig = 250
266 ns_t_ixfr = 251
267 ns_t_axfr = 252
268 ns_t_mailb = 253
269 ns_t_maila = 254
270 ns_t_any = 255
271 ns_t_zxfr = 256
272 ns_t_max = 65536
273)
274
275const ( /* nameser.h:210:1: */
276 ns_c_invalid = 0
277 ns_c_in = 1
278 ns_c_2 = 2
279 ns_c_chaos = 3
280 ns_c_hs = 4
281 ns_c_none = 254
282 ns_c_any = 255
283 ns_c_max = 65536
284)
285
286const ( /* nameser.h:221:1: */
287 ns_kt_rsa = 1
288 ns_kt_dh = 2
289 ns_kt_dsa = 3
290 ns_kt_private = 254
291)
292
293const ( /* nameser.h:228:1: */
294 cert_t_pkix = 1
295 cert_t_spki = 2
296 cert_t_pgp = 3
297 cert_t_url = 253
298 cert_t_oid = 254
299)
300
301const ( /* nameser.h:28:1: */
302 ns_s_qd = 0
303 ns_s_zn = 0
304 ns_s_an = 1
305 ns_s_pr = 1
306 ns_s_ns = 2
307 ns_s_ud = 2
308 ns_s_ar = 3
309 ns_s_max = 4
310)
311
312const ( /* nameser.h:75:1: */
313 ns_f_qr = 0
314 ns_f_opcode = 1
315 ns_f_aa = 2
316 ns_f_tc = 3
317 ns_f_rd = 4
318 ns_f_ra = 5
319 ns_f_z = 6
320 ns_f_ad = 7
321 ns_f_cd = 8
322 ns_f_rcode = 9
323 ns_f_max = 10
324)
325
326const ( /* nameser.h:89:1: */
327 ns_o_query = 0
328 ns_o_iquery = 1
329 ns_o_status = 2
330 ns_o_notify = 4
331 ns_o_update = 5
332 ns_o_max = 6
333)
334
335const ( /* nameser.h:98:1: */
336 ns_r_noerror = 0
337 ns_r_formerr = 1
338 ns_r_servfail = 2
339 ns_r_nxdomain = 3
340 ns_r_notimpl = 4
341 ns_r_refused = 5
342 ns_r_yxdomain = 6
343 ns_r_yxrrset = 7
344 ns_r_nxrrset = 8
345 ns_r_notauth = 9
346 ns_r_notzone = 10
347 ns_r_max = 11
348 ns_r_badvers = 16
349 ns_r_badsig = 16
350 ns_r_badkey = 17
351 ns_r_badtime = 18
352)
353
354type ptrdiff_t = int64 /* <builtin>:3:26 */
355
356type size_t = uint64 /* <builtin>:9:23 */
357
358type wchar_t = int32 /* <builtin>:15:24 */
359
360var X__darwin_check_fd_set_overflow uintptr /* <builtin>:146:5: */
361
362// pthread opaque structures
363
364type __darwin_pthread_handler_rec = struct {
365 F__routine uintptr
366 F__arg uintptr
367 F__next uintptr
368} /* table.c:1396:1 */
369
370type _opaque_pthread_attr_t = struct {
371 F__sig int64
372 F__opaque [56]int8
373} /* table.c:1402:1 */
374
375type _opaque_pthread_cond_t = struct {
376 F__sig int64
377 F__opaque [40]int8
378} /* table.c:1407:1 */
379
380type _opaque_pthread_condattr_t = struct {
381 F__sig int64
382 F__opaque [8]int8
383} /* table.c:1412:1 */
384
385type _opaque_pthread_mutex_t = struct {
386 F__sig int64
387 F__opaque [56]int8
388} /* table.c:1417:1 */
389
390type _opaque_pthread_mutexattr_t = struct {
391 F__sig int64
392 F__opaque [8]int8
393} /* table.c:1422:1 */
394
395type _opaque_pthread_once_t = struct {
396 F__sig int64
397 F__opaque [8]int8
398} /* table.c:1427:1 */
399
400type _opaque_pthread_rwlock_t = struct {
401 F__sig int64
402 F__opaque [192]int8
403} /* table.c:1432:1 */
404
405type _opaque_pthread_rwlockattr_t = struct {
406 F__sig int64
407 F__opaque [16]int8
408} /* table.c:1437:1 */
409
410type _opaque_pthread_t = struct {
411 F__sig int64
412 F__cleanup_stack uintptr
413 F__opaque [8176]int8
414} /* table.c:1442:1 */
415
416type ct_rune_t = int32 /* table.c:1527:28 */
417
418type rune_t = int32 /* table.c:1536:25 */
419
420type wint_t = int32 /* table.c:1558:25 */
421
422type _RuneEntry = struct {
423 F__min int32
424 F__max int32
425 F__map int32
426 F__ccgo_pad1 [4]byte
427 F__types uintptr
428} /* table.c:1575:3 */
429
430type _RuneRange = struct {
431 F__nranges int32
432 F__ccgo_pad1 [4]byte
433 F__ranges uintptr
434} /* table.c:1580:3 */
435
436type _RuneCharClass = struct {
437 F__name [14]int8
438 F__ccgo_pad1 [2]byte
439 F__mask uint32
440} /* table.c:1585:3 */
441
442type _RuneLocale = struct {
443 F__magic [8]int8
444 F__encoding [32]int8
445 F__sgetrune uintptr
446 F__sputrune uintptr
447 F__invalid_rune int32
448 F__runetype [256]uint32
449 F__maplower [256]int32
450 F__mapupper [256]int32
451 F__ccgo_pad1 [4]byte
452 F__runetype_ext _RuneRange
453 F__maplower_ext _RuneRange
454 F__mapupper_ext _RuneRange
455 F__variable uintptr
456 F__variable_len int32
457 F__ncharclasses int32
458 F__charclasses uintptr
459} /* table.c:1616:3 */
460
461func X__istype(tls *TLS, _c int32, _f uint64) int32 { /* table.c:1670:1: */
462
463 return func() int32 {
464 if Xisascii(tls, _c) != 0 {
465 return BoolInt32(!!(uint64(*(*uint32)(unsafe.Pointer(uintptr(unsafe.Pointer(&X_DefaultRuneLocale)) + 60 + uintptr(_c)*4)))&_f != 0))
466 }
467 return BoolInt32(!!(X__maskrune(tls, _c, _f) != 0))
468 }()
469
470}
471
472func X__isctype(tls *TLS, _c int32, _f uint64) int32 { /* table.c:1681:1: */
473
474 if _c < 0 || _c >= int32(1)<<8 {
475 return 0
476 }
477 return BoolInt32(!!(uint64(*(*uint32)(unsafe.Pointer(uintptr(unsafe.Pointer(&X_DefaultRuneLocale)) + 60 + uintptr(_c)*4)))&_f != 0))
478
479}
480
481func X__wcwidth(tls *TLS, _c int32) int32 { /* table.c:1700:1: */
482 var _x uint32
483
484 if _c == 0 {
485 return 0
486 }
487 _x = uint32(X__maskrune(tls, _c, uint64(0xe0000000|0x00040000)))
488 if int64(_x)&0xe0000000 != int64(0) {
489 return int32(int64(_x) & 0xe0000000 >> 30)
490 }
491 return func() int32 {
492 if int64(_x)&0x00040000 != int64(0) {
493 return 1
494 }
495 return -1
496 }()
497}
498
499func Xisalnum(tls *TLS, _c int32) int32 { /* table.c:1718:1: */
500 return X__istype(tls, _c, uint64(0x00000100|0x00000400))
501}
502
503func Xisalpha(tls *TLS, _c int32) int32 { /* table.c:1724:1: */
504 return X__istype(tls, _c, uint64(0x00000100))
505}
506
507func Xisblank(tls *TLS, _c int32) int32 { /* table.c:1730:1: */
508 return X__istype(tls, _c, uint64(0x00020000))
509}
510
511func Xiscntrl(tls *TLS, _c int32) int32 { /* table.c:1736:1: */
512 return X__istype(tls, _c, uint64(0x00000200))
513}
514
515func Xisdigit(tls *TLS, _c int32) int32 { /* table.c:1743:1: */
516 return X__isctype(tls, _c, uint64(0x00000400))
517}
518
519func Xisgraph(tls *TLS, _c int32) int32 { /* table.c:1749:1: */
520 return X__istype(tls, _c, uint64(0x00000800))
521}
522
523func Xislower(tls *TLS, _c int32) int32 { /* table.c:1755:1: */
524 return X__istype(tls, _c, uint64(0x00001000))
525}
526
527func Xisprint(tls *TLS, _c int32) int32 { /* table.c:1761:1: */
528 return X__istype(tls, _c, uint64(0x00040000))
529}
530
531func Xispunct(tls *TLS, _c int32) int32 { /* table.c:1767:1: */
532 return X__istype(tls, _c, uint64(0x00002000))
533}
534
535func Xisupper(tls *TLS, _c int32) int32 { /* table.c:1779:1: */
536 return X__istype(tls, _c, uint64(0x00008000))
537}
538
539func Xisxdigit(tls *TLS, _c int32) int32 { /* table.c:1786:1: */
540 return X__isctype(tls, _c, uint64(0x00010000))
541}
542
543func Xtoascii(tls *TLS, _c int32) int32 { /* table.c:1792:1: */
544 return _c & 0x7F
545}
546
547func Xdigittoint(tls *TLS, _c int32) int32 { /* table.c:1811:1: */
548 return X__maskrune(tls, _c, uint64(0x0F))
549}
550
551func Xishexnumber(tls *TLS, _c int32) int32 { /* table.c:1817:1: */
552 return X__istype(tls, _c, uint64(0x00010000))
553}
554
555func Xisideogram(tls *TLS, _c int32) int32 { /* table.c:1823:1: */
556 return X__istype(tls, _c, uint64(0x00080000))
557}
558
559func Xisnumber(tls *TLS, _c int32) int32 { /* table.c:1829:1: */
560 return X__istype(tls, _c, uint64(0x00000400))
561}
562
563func Xisphonogram(tls *TLS, _c int32) int32 { /* table.c:1835:1: */
564 return X__istype(tls, _c, uint64(0x00200000))
565}
566
567func Xisrune(tls *TLS, _c int32) int32 { /* table.c:1841:1: */
568 return X__istype(tls, _c, uint64(0xFFFFFFF0))
569}
570
571func Xisspecial(tls *TLS, _c int32) int32 { /* table.c:1847:1: */
572 return X__istype(tls, _c, uint64(0x00100000))
573}
574
575func X__maskrune(tls *TLS, _c int32, _f uint64) int32 { /* table.c:1871:2: */
576 return int32(uint32(int32(*(*uint32)(unsafe.Pointer(uintptr(unsafe.Pointer(&X_DefaultRuneLocale)) + 60 + uintptr(_c&0xff)*4)))) & uint32(_f))
577}
578
579func X__toupper(tls *TLS, c int32) int32 { /* table.c:1876:20: */
580 return Xtoupper(tls, c)
581}
582
583func X__tolower(tls *TLS, c int32) int32 { /* table.c:1878:20: */
584 return Xtolower(tls, c)
585}
586
587var X_DefaultRuneLocale = _RuneLocale{F__magic: [8]int8{int8(82), int8(117), int8(110), int8(101), int8(77), int8(97), int8(103), int8(65)}, F__encoding: [32]int8{int8(78), int8(79), int8(78), int8(69), int8(0), int8(0), int8(0), int8(0), int8(0), int8(0), int8(0), int8(0), int8(0), int8(0), int8(0), int8(0), int8(0), int8(0), int8(0), int8(0), int8(0), int8(0), int8(0), int8(0), int8(0), int8(0), int8(0), int8(0), int8(0), int8(0), int8(0), int8(0)}, F__invalid_rune: 0xfffd, F__runetype: [256]uint32{
588 uint32(0x200), uint32(0x200), uint32(0x200), uint32(0x200), uint32(0x200), uint32(0x200), uint32(0x200), uint32(0x200), uint32(0x200), uint32(0x24200), uint32(0x4200), uint32(0x4200), uint32(0x4200), uint32(0x4200), uint32(0x200), uint32(0x200),
589 uint32(0x200), uint32(0x200), uint32(0x200), uint32(0x200), uint32(0x200), uint32(0x200), uint32(0x200), uint32(0x200), uint32(0x200), uint32(0x200), uint32(0x200), uint32(0x200), uint32(0x200), uint32(0x200), uint32(0x200), uint32(0x200),
590 uint32(0x64000), uint32(0x42800), uint32(0x42800), uint32(0x42800), uint32(0x42800), uint32(0x42800), uint32(0x42800), uint32(0x42800), uint32(0x42800), uint32(0x42800), uint32(0x42800), uint32(0x42800), uint32(0x42800), uint32(0x42800), uint32(0x42800), uint32(0x42800),
591 uint32(0x50c00), uint32(0x50c01), uint32(0x50c02), uint32(0x50c03), uint32(0x50c04), uint32(0x50c05), uint32(0x50c06), uint32(0x50c07), uint32(0x50c08), uint32(0x50c09), uint32(0x42800), uint32(0x42800), uint32(0x42800), uint32(0x42800), uint32(0x42800), uint32(0x42800),
592 uint32(0x42800), uint32(0x5890a), uint32(0x5890b), uint32(0x5890c), uint32(0x5890d), uint32(0x5890e), uint32(0x5890f), uint32(0x48900), uint32(0x48900), uint32(0x48900), uint32(0x48900), uint32(0x48900), uint32(0x48900), uint32(0x48900), uint32(0x48900), uint32(0x48900),
593 uint32(0x48900), uint32(0x48900), uint32(0x48900), uint32(0x48900), uint32(0x48900), uint32(0x48900), uint32(0x48900), uint32(0x48900), uint32(0x48900), uint32(0x48900), uint32(0x48900), uint32(0x42800), uint32(0x42800), uint32(0x42800), uint32(0x42800), uint32(0x42800),
594 uint32(0x42800), uint32(0x5190a), uint32(0x5190b), uint32(0x5190c), uint32(0x5190d), uint32(0x5190e), uint32(0x5190f), uint32(0x41900), uint32(0x41900), uint32(0x41900), uint32(0x41900), uint32(0x41900), uint32(0x41900), uint32(0x41900), uint32(0x41900), uint32(0x41900),
595 uint32(0x41900), uint32(0x41900), uint32(0x41900), uint32(0x41900), uint32(0x41900), uint32(0x41900), uint32(0x41900), uint32(0x41900), uint32(0x41900), uint32(0x41900), uint32(0x41900), uint32(0x42800), uint32(0x42800), uint32(0x42800), uint32(0x42800), uint32(0x200),
596 uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0),
597 uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0),
598 uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0),
599 uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0),
600 uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0),
601 uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0),
602 uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0),
603 uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0), uint32(0x0),
604}, F__maplower: [256]int32{
605 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf,
606 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
607 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
608 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
609 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
610 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
611 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
612 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
613 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
614 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
615 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
616 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
617 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
618 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
619 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
620 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
621}, F__mapupper: [256]int32{
622 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf,
623 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
624 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
625 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
626 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
627 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
628 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
629 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
630 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
631 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
632 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
633 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
634 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
635 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
636 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
637 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
638},
639} /* table.c:1879:13 */
640
641var X_CurrentRuneLocale uintptr = 0 /* table.c:1940:13 */
642
643type div_t = struct {
644 Fquot int32
645 Frem int32
646} /* stdlib.h:62:35 */
647type ldiv_t = struct {
648 Fquot int64
649 Frem int64
650} /* stdlib.h:63:36 */
651type lldiv_t = struct {
652 Fquot int64
653 Frem int64
654} /* stdlib.h:64:41 */
655
656type locale_t = uintptr /* alltypes.h:343:32 */
657
658type ssize_t = int64 /* alltypes.h:65:15 */
659
660type intptr_t = int64 /* alltypes.h:70:15 */
661
662type off_t = int64 /* alltypes.h:162:16 */
663
664type pid_t = int32 /* alltypes.h:235:13 */
665
666type uid_t = uint32 /* alltypes.h:245:18 */
667
668type gid_t = uint32 /* alltypes.h:250:18 */
669
670type useconds_t = uint32 /* alltypes.h:260:18 */
671
672func X__putenv(tls *TLS, s uintptr, l size_t, r uintptr) int32 { /* putenv.c:8:5: */
673 var i size_t
674 var newenv uintptr
675 var tmp uintptr
676 //TODO for (char **e = __environ; *e; e++, i++)
677 var e uintptr
678 i = uint64(0)
679 if !(Environ() != 0) {
680 goto __1
681 }
682 //TODO for (char **e = __environ; *e; e++, i++)
683 e = Environ()
684__2:
685 if !(*(*uintptr)(unsafe.Pointer(e)) != 0) {
686 goto __4
687 }
688 if !!(Xstrncmp(tls, s, *(*uintptr)(unsafe.Pointer(e)), l+uint64(1)) != 0) {
689 goto __5
690 }
691 tmp = *(*uintptr)(unsafe.Pointer(e))
692 *(*uintptr)(unsafe.Pointer(e)) = s
693 X__env_rm_add(tls, tmp, r)
694 return 0
695__5:
696 ;
697 goto __3
698__3:
699 e += 8
700 i++
701 goto __2
702 goto __4
703__4:
704 ;
705__1:
706 ;
707 if !(Environ() == _soldenv) {
708 goto __6
709 }
710 newenv = Xrealloc(tls, _soldenv, uint64(unsafe.Sizeof(uintptr(0)))*(i+uint64(2)))
711 if !!(newenv != 0) {
712 goto __8
713 }
714 goto oom
715__8:
716 ;
717 goto __7
718__6:
719 newenv = Xmalloc(tls, uint64(unsafe.Sizeof(uintptr(0)))*(i+uint64(2)))
720 if !!(newenv != 0) {
721 goto __9
722 }
723 goto oom
724__9:
725 ;
726 if !(i != 0) {
727 goto __10
728 }
729 Xmemcpy(tls, newenv, Environ(), uint64(unsafe.Sizeof(uintptr(0)))*i)
730__10:
731 ;
732 Xfree(tls, _soldenv)
733__7:
734 ;
735 *(*uintptr)(unsafe.Pointer(newenv + uintptr(i)*8)) = s
736 *(*uintptr)(unsafe.Pointer(newenv + uintptr(i+uint64(1))*8)) = uintptr(0)
737 *(*uintptr)(unsafe.Pointer(EnvironP())) = AssignPtrUintptr(uintptr(unsafe.Pointer(&_soldenv)), newenv)
738 if !(r != 0) {
739 goto __11
740 }
741 X__env_rm_add(tls, uintptr(0), r)
742__11:
743 ;
744 return 0
745oom:
746 Xfree(tls, r)
747 return -1
748}
749
750var _soldenv uintptr /* putenv.c:22:14: */
751
752func Xputenv(tls *TLS, s uintptr) int32 { /* putenv.c:43:5: */
753 var l size_t = size_t((int64(X__strchrnul(tls, s, '=')) - int64(s)) / 1)
754 if !(l != 0) || !(int32(*(*int8)(unsafe.Pointer(s + uintptr(l)))) != 0) {
755 return Xunsetenv(tls, s)
756 }
757 return X__putenv(tls, s, l, uintptr(0))
758}
759
760func X__env_rm_add(tls *TLS, old uintptr, new uintptr) { /* setenv.c:5:6: */
761 //TODO for (size_t i=0; i < env_alloced_n; i++)
762 var i size_t = uint64(0)
763 for ; i < _senv_alloced_n; i++ {
764 if *(*uintptr)(unsafe.Pointer(_senv_alloced + uintptr(i)*8)) == old {
765 *(*uintptr)(unsafe.Pointer(_senv_alloced + uintptr(i)*8)) = new
766 Xfree(tls, old)
767 return
768 } else if !(int32(*(*uintptr)(unsafe.Pointer(_senv_alloced + uintptr(i)*8))) != 0) && new != 0 {
769 *(*uintptr)(unsafe.Pointer(_senv_alloced + uintptr(i)*8)) = new
770 new = uintptr(0)
771 }
772 }
773 if !(new != 0) {
774 return
775 }
776 var t uintptr = Xrealloc(tls, _senv_alloced, uint64(unsafe.Sizeof(uintptr(0)))*(_senv_alloced_n+uint64(1)))
777 if !(t != 0) {
778 return
779 }
780 *(*uintptr)(unsafe.Pointer(AssignPtrUintptr(uintptr(unsafe.Pointer(&_senv_alloced)), t) + uintptr(PostIncUint64(&_senv_alloced_n, 1))*8)) = new
781}
782
783var _senv_alloced uintptr /* setenv.c:7:14: */
784var _senv_alloced_n size_t /* setenv.c:8:16: */
785
786func Xsetenv(tls *TLS, var1 uintptr, value uintptr, overwrite int32) int32 { /* setenv.c:26:5: */
787 var s uintptr
788 var l1 size_t
789 var l2 size_t
790
791 if !(var1 != 0) || !(int32(AssignUint64(&l1, size_t((int64(X__strchrnul(tls, var1, '='))-int64(var1))/1))) != 0) || *(*int8)(unsafe.Pointer(var1 + uintptr(l1))) != 0 {
792 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 22
793 return -1
794 }
795 if !(overwrite != 0) && Xgetenv(tls, var1) != 0 {
796 return 0
797 }
798
799 l2 = Xstrlen(tls, value)
800 s = Xmalloc(tls, l1+l2+uint64(2))
801 if !(s != 0) {
802 return -1
803 }
804 Xmemcpy(tls, s, var1, l1)
805 *(*int8)(unsafe.Pointer(s + uintptr(l1))) = int8('=')
806 Xmemcpy(tls, s+uintptr(l1)+uintptr(1), value, l2+uint64(1))
807 return X__putenv(tls, s, l1, s)
808}
809
810func Xunsetenv(tls *TLS, name uintptr) int32 { /* unsetenv.c:9:5: */
811 var l size_t = size_t((int64(X__strchrnul(tls, name, '=')) - int64(name)) / 1)
812 if !(l != 0) || *(*int8)(unsafe.Pointer(name + uintptr(l))) != 0 {
813 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 22
814 return -1
815 }
816 if Environ() != 0 {
817 var e uintptr = Environ()
818 var eo uintptr = e
819 for ; *(*uintptr)(unsafe.Pointer(e)) != 0; e += 8 {
820 //TODO if (!strncmp(name, *e, l) && l[*e] == '=')
821 if !(Xstrncmp(tls, name, *(*uintptr)(unsafe.Pointer(e)), l) != 0) && int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(e)) + uintptr(l)))) == '=' {
822 X__env_rm_add(tls, *(*uintptr)(unsafe.Pointer(e)), uintptr(0))
823 } else if eo != e {
824 *(*uintptr)(unsafe.Pointer(PostIncUintptr(&eo, 8))) = *(*uintptr)(unsafe.Pointer(e))
825 } else {
826 eo += 8
827 }
828 }
829 if eo != e {
830 *(*uintptr)(unsafe.Pointer(eo)) = uintptr(0)
831 }
832 }
833 return 0
834}
835
836type uintptr_t = uint64 /* alltypes.h:55:24 */
837
838type int8_t = int8 /* alltypes.h:96:25 */
839
840type int16_t = int16 /* alltypes.h:101:25 */
841
842type int32_t = int32 /* alltypes.h:106:25 */
843
844type int64_t = int64 /* alltypes.h:111:25 */
845
846type intmax_t = int64 /* alltypes.h:116:25 */
847
848type uint8_t = uint8 /* alltypes.h:121:25 */
849
850type uint16_t = uint16 /* alltypes.h:126:25 */
851
852type uint32_t = uint32 /* alltypes.h:131:25 */
853
854type uint64_t = uint64 /* alltypes.h:136:25 */
855
856type uintmax_t = uint64 /* alltypes.h:146:25 */
857
858type int_fast8_t = int8_t /* stdint.h:22:16 */
859type int_fast64_t = int64_t /* stdint.h:23:17 */
860
861type int_least8_t = int8_t /* stdint.h:25:17 */
862type int_least16_t = int16_t /* stdint.h:26:17 */
863type int_least32_t = int32_t /* stdint.h:27:17 */
864type int_least64_t = int64_t /* stdint.h:28:17 */
865
866type uint_fast8_t = uint8_t /* stdint.h:30:17 */
867type uint_fast64_t = uint64_t /* stdint.h:31:18 */
868
869type uint_least8_t = uint8_t /* stdint.h:33:18 */
870type uint_least16_t = uint16_t /* stdint.h:34:18 */
871type uint_least32_t = uint32_t /* stdint.h:35:18 */
872type uint_least64_t = uint64_t /* stdint.h:36:18 */
873
874type int_fast16_t = int32_t /* stdint.h:1:17 */
875type int_fast32_t = int32_t /* stdint.h:2:17 */
876type uint_fast16_t = uint32_t /* stdint.h:3:18 */
877type uint_fast32_t = uint32_t /* stdint.h:4:18 */
878
879type _IO_FILE = struct {
880 Fflags uint32
881 F__ccgo_pad1 [4]byte
882 Frpos uintptr
883 Frend uintptr
884 Fclose uintptr
885 Fwend uintptr
886 Fwpos uintptr
887 Fmustbezero_1 uintptr
888 Fwbase uintptr
889 Fread uintptr
890 Fwrite uintptr
891 Fseek uintptr
892 Fbuf uintptr
893 Fbuf_size size_t
894 Fprev uintptr
895 Fnext uintptr
896 Ffd int32
897 Fpipe_pid int32
898 Flockcount int64
899 Fmode int32
900 Flock int32
901 Flbf int32
902 F__ccgo_pad2 [4]byte
903 Fcookie uintptr
904 Foff off_t
905 Fgetln_buf uintptr
906 Fmustbezero_2 uintptr
907 Fshend uintptr
908 Fshlim off_t
909 Fshcnt off_t
910 Fprev_locked uintptr
911 Fnext_locked uintptr
912 Flocale uintptr
913} /* alltypes.h:320:9 */
914
915type FILE = _IO_FILE /* alltypes.h:320:25 */
916
917type va_list = uintptr /* alltypes.h:326:27 */
918
919type _G_fpos64_t = struct {
920 F__ccgo_pad1 [0]uint64
921 F__opaque [16]int8
922} /* stdio.h:54:9 */
923
924type fpos_t = _G_fpos64_t /* stdio.h:58:3 */
925
926type float_t = float32 /* alltypes.h:29:15 */
927
928type double_t = float64 /* alltypes.h:34:16 */
929
930func __FLOAT_BITS(tls *TLS, __f float32) uint32 { /* math.h:55:26: */
931 bp := tls.Alloc(4)
932 defer tls.Free(4)
933
934 // var __u struct {F__f float32;} at bp, 4
935
936 *(*float32)(unsafe.Pointer(bp)) = __f
937 return *(*uint32)(unsafe.Pointer(bp))
938}
939
940func __DOUBLE_BITS(tls *TLS, __f float64) uint64 { /* math.h:61:36: */
941 bp := tls.Alloc(8)
942 defer tls.Free(8)
943
944 // var __u struct {F__f float64;} at bp, 8
945
946 *(*float64)(unsafe.Pointer(bp)) = __f
947 return *(*uint64)(unsafe.Pointer(bp))
948}
949
950func __isspace(tls *TLS, _c int32) int32 { /* ctype.h:26:21: */
951 return Bool32(_c == ' ' || uint32(_c)-uint32('\t') < uint32(5))
952}
953
954type syscall_arg_t = int64 /* syscall.h:22:14 */
955
956func scanexp(tls *TLS, f uintptr, pok int32) int64 { /* floatscan.c:37:18: */
957 var c int32
958 var x int32
959 var y int64
960 var neg int32 = 0
961
962 c = func() int32 {
963 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend {
964 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1))))
965 }
966 return X__shgetc(tls, f)
967 }()
968 if c == '+' || c == '-' {
969 neg = Bool32(c == '-')
970 c = func() int32 {
971 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend {
972 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1))))
973 }
974 return X__shgetc(tls, f)
975 }()
976 if uint32(c-'0') >= 10 && pok != 0 {
977 if (*FILE)(unsafe.Pointer(f)).Fshlim >= int64(0) {
978 (*FILE)(unsafe.Pointer(f)).Frpos--
979 } else {
980 }
981 }
982 }
983 if uint32(c-'0') >= 10 {
984 if (*FILE)(unsafe.Pointer(f)).Fshlim >= int64(0) {
985 (*FILE)(unsafe.Pointer(f)).Frpos--
986 } else {
987 }
988 return -0x7fffffffffffffff - int64(1)
989 }
990 for x = 0; uint32(c-'0') < 10 && x < 0x7fffffff/10; c = func() int32 {
991 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend {
992 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1))))
993 }
994 return X__shgetc(tls, f)
995 }() {
996 x = 10*x + c - '0'
997 }
998 for y = int64(x); uint32(c-'0') < 10 && y < 0x7fffffffffffffff/int64(100); c = func() int32 {
999 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend {
1000 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1))))
1001 }
1002 return X__shgetc(tls, f)
1003 }() {
1004 y = int64(10)*y + int64(c) - int64('0')
1005 }
1006 for ; uint32(c-'0') < 10; c = func() int32 {
1007 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend {
1008 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1))))
1009 }
1010 return X__shgetc(tls, f)
1011 }() {
1012 }
1013 if (*FILE)(unsafe.Pointer(f)).Fshlim >= int64(0) {
1014 (*FILE)(unsafe.Pointer(f)).Frpos--
1015 } else {
1016 }
1017 if neg != 0 {
1018 return -y
1019 }
1020 return y
1021}
1022
1023func decfloat(tls *TLS, f uintptr, c int32, bits int32, emin int32, sign int32, pok int32) float64 { /* floatscan.c:64:20: */
1024 bp := tls.Alloc(512)
1025 defer tls.Free(512)
1026
1027 // var x [128]uint32_t at bp, 512
1028
1029 var i int32
1030 var j int32
1031 var k int32
1032 var a int32
1033 var z int32
1034 var lrp int64 = int64(0)
1035 var dc int64 = int64(0)
1036 var e10 int64 = int64(0)
1037 var lnz int32 = 0
1038 var gotdig int32 = 0
1039 var gotrad int32 = 0
1040 var rp int32
1041 var e2 int32
1042 var emax int32 = -emin - bits + 3
1043 var denormal int32 = 0
1044 var y float64
1045 var frac float64 = float64(0)
1046 var bias float64 = float64(0)
1047
1048 j = 0
1049 k = 0
1050
1051 // Don't let leading zeros consume buffer space
1052 for ; c == '0'; c = func() int32 {
1053 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend {
1054 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1))))
1055 }
1056 return X__shgetc(tls, f)
1057 }() {
1058 gotdig = 1
1059 }
1060 if c == '.' {
1061 gotrad = 1
1062 for c = func() int32 {
1063 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend {
1064 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1))))
1065 }
1066 return X__shgetc(tls, f)
1067 }(); c == '0'; c = func() int32 {
1068 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend {
1069 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1))))
1070 }
1071 return X__shgetc(tls, f)
1072 }() {
1073 gotdig = 1
1074 lrp--
1075 }
1076 }
1077
1078 *(*uint32_t)(unsafe.Pointer(bp)) = uint32_t(0)
1079 for ; uint32(c-'0') < 10 || c == '.'; c = func() int32 {
1080 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend {
1081 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1))))
1082 }
1083 return X__shgetc(tls, f)
1084 }() {
1085 if c == '.' {
1086 if gotrad != 0 {
1087 break
1088 }
1089 gotrad = 1
1090 lrp = dc
1091 } else if k < 128-3 {
1092 dc++
1093 if c != '0' {
1094 lnz = int32(dc)
1095 }
1096 if j != 0 {
1097 *(*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')
1098 } else {
1099 *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) = uint32_t(c - '0')
1100 }
1101 if PreIncInt32(&j, 1) == 9 {
1102 k++
1103 j = 0
1104 }
1105 gotdig = 1
1106 } else {
1107 dc++
1108 if c != '0' {
1109 lnz = (128 - 4) * 9
1110 *(*uint32_t)(unsafe.Pointer(bp + 124*4)) |= uint32_t(1)
1111 }
1112 }
1113 }
1114 if !(gotrad != 0) {
1115 lrp = dc
1116 }
1117
1118 if gotdig != 0 && c|32 == 'e' {
1119 e10 = scanexp(tls, f, pok)
1120 if e10 == -0x7fffffffffffffff-int64(1) {
1121 if pok != 0 {
1122 if (*FILE)(unsafe.Pointer(f)).Fshlim >= int64(0) {
1123 (*FILE)(unsafe.Pointer(f)).Frpos--
1124 } else {
1125 }
1126 } else {
1127 X__shlim(tls, f, int64(0))
1128 return float64(0)
1129 }
1130 e10 = int64(0)
1131 }
1132 lrp = lrp + e10
1133 } else if c >= 0 {
1134 if (*FILE)(unsafe.Pointer(f)).Fshlim >= int64(0) {
1135 (*FILE)(unsafe.Pointer(f)).Frpos--
1136 } else {
1137 }
1138 }
1139 if !(gotdig != 0) {
1140 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 22
1141 X__shlim(tls, f, int64(0))
1142 return float64(0)
1143 }
1144
1145 // Handle zero specially to avoid nasty special cases later
1146 if !(int32(*(*uint32_t)(unsafe.Pointer(bp))) != 0) {
1147 return float64(sign) * 0.0
1148 }
1149
1150 // Optimize small integers (w/no exponent) and over/under-flow
1151 if lrp == dc && dc < int64(10) && (bits > 30 || *(*uint32_t)(unsafe.Pointer(bp))>>bits == uint32_t(0)) {
1152 return float64(sign) * float64(*(*uint32_t)(unsafe.Pointer(bp)))
1153 }
1154 if lrp > int64(-emin/2) {
1155 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34
1156 return float64(sign) * 1.79769313486231570815e+308 * 1.79769313486231570815e+308
1157 }
1158 if lrp < int64(emin-2*53) {
1159 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34
1160 return float64(sign) * 2.22507385850720138309e-308 * 2.22507385850720138309e-308
1161 }
1162
1163 // Align incomplete final B1B digit
1164 if j != 0 {
1165 for ; j < 9; j++ {
1166 *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) *= uint32_t(10)
1167 }
1168 k++
1169 j = 0
1170 }
1171
1172 a = 0
1173 z = k
1174 e2 = 0
1175 rp = int32(lrp)
1176
1177 // Optimize small to mid-size integers (even in exp. notation)
1178 if lnz < 9 && lnz <= rp && rp < 18 {
1179 if rp == 9 {
1180 return float64(sign) * float64(*(*uint32_t)(unsafe.Pointer(bp)))
1181 }
1182 if rp < 9 {
1183 return float64(sign) * float64(*(*uint32_t)(unsafe.Pointer(bp))) / float64(_sp10s[8-rp])
1184 }
1185 var bitlim int32 = bits - 3*(rp-9)
1186 if bitlim > 30 || *(*uint32_t)(unsafe.Pointer(bp))>>bitlim == uint32_t(0) {
1187 return float64(sign) * float64(*(*uint32_t)(unsafe.Pointer(bp))) * float64(_sp10s[rp-10])
1188 }
1189 }
1190
1191 // Drop trailing zeros
1192 for ; !(int32(*(*uint32_t)(unsafe.Pointer(bp + uintptr(z-1)*4))) != 0); z-- {
1193 }
1194
1195 // Align radix point to B1B digit boundary
1196 if rp%9 != 0 {
1197 var rpm9 int32
1198 if rp >= 0 {
1199 rpm9 = rp % 9
1200 } else {
1201 rpm9 = rp%9 + 9
1202 }
1203 var p10 int32 = _sp10s[8-rpm9]
1204 var carry uint32_t = uint32_t(0)
1205 for k = a; k != z; k++ {
1206 var tmp uint32_t = *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) % uint32_t(p10)
1207 *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) = *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4))/uint32_t(p10) + carry
1208 carry = uint32_t(1000000000/p10) * tmp
1209 if k == a && !(int32(*(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4))) != 0) {
1210 a = (a + 1) & (128 - 1)
1211 rp = rp - 9
1212 }
1213 }
1214 if carry != 0 {
1215 *(*uint32_t)(unsafe.Pointer(bp + uintptr(PostIncInt32(&z, 1))*4)) = carry
1216 }
1217 rp = rp + (9 - rpm9)
1218 }
1219
1220 // Upscale until desired number of bits are left of radix point
1221 for rp < 9*2 || rp == 9*2 && *(*uint32_t)(unsafe.Pointer(bp + uintptr(a)*4)) < _sth[0] {
1222 var carry uint32_t = uint32_t(0)
1223 e2 = e2 - 29
1224 for k = (z - 1) & (128 - 1); ; k = (k - 1) & (128 - 1) {
1225 var tmp uint64_t = uint64_t(*(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)))<<29 + uint64_t(carry)
1226 if tmp > uint64(1000000000) {
1227 carry = uint32_t(tmp / uint64(1000000000))
1228 *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) = uint32_t(tmp % uint64(1000000000))
1229 } else {
1230 carry = uint32_t(0)
1231 *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) = uint32_t(tmp)
1232 }
1233 if k == (z-1)&(128-1) && k != a && !(int32(*(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4))) != 0) {
1234 z = k
1235 }
1236 if k == a {
1237 break
1238 }
1239 }
1240 if carry != 0 {
1241 rp = rp + 9
1242 a = (a - 1) & (128 - 1)
1243 if a == z {
1244 z = (z - 1) & (128 - 1)
1245 *(*uint32_t)(unsafe.Pointer(bp + uintptr((z-1)&(128-1))*4)) |= *(*uint32_t)(unsafe.Pointer(bp + uintptr(z)*4))
1246 }
1247 *(*uint32_t)(unsafe.Pointer(bp + uintptr(a)*4)) = carry
1248 }
1249 }
1250
1251 // Downscale until exactly number of bits are left of radix point
1252 for {
1253 var carry uint32_t = uint32_t(0)
1254 var sh int32 = 1
1255 for i = 0; i < 2; i++ {
1256 k = (a + i) & (128 - 1)
1257 if k == z || *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) < _sth[i] {
1258 i = 2
1259 break
1260 }
1261 if *(*uint32_t)(unsafe.Pointer(bp + uintptr((a+i)&(128-1))*4)) > _sth[i] {
1262 break
1263 }
1264 }
1265 if i == 2 && rp == 9*2 {
1266 break
1267 }
1268 // FIXME: find a way to compute optimal sh
1269 if rp > 9+9*2 {
1270 sh = 9
1271 }
1272 e2 = e2 + sh
1273 for k = a; k != z; k = (k + 1) & (128 - 1) {
1274 var tmp uint32_t = *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) & uint32_t(int32(1)<<sh-1)
1275 *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) = *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4))>>sh + carry
1276 carry = uint32_t(int32(1000000000)>>sh) * tmp
1277 if k == a && !(int32(*(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4))) != 0) {
1278 a = (a + 1) & (128 - 1)
1279 i--
1280 rp = rp - 9
1281 }
1282 }
1283 if carry != 0 {
1284 if (z+1)&(128-1) != a {
1285 *(*uint32_t)(unsafe.Pointer(bp + uintptr(z)*4)) = carry
1286 z = (z + 1) & (128 - 1)
1287 } else {
1288 *(*uint32_t)(unsafe.Pointer(bp + uintptr((z-1)&(128-1))*4)) |= uint32_t(1)
1289 }
1290 }
1291 }
1292
1293 // Assemble desired bits into floating point variable
1294 for y = float64(AssignInt32(&i, 0)); i < 2; i++ {
1295 if (a+i)&(128-1) == z {
1296 *(*uint32_t)(unsafe.Pointer(bp + uintptr(AssignInt32(&z, (z+1)&(128-1))-1)*4)) = uint32_t(0)
1297 }
1298 y = 1000000000.0*y + float64(*(*uint32_t)(unsafe.Pointer(bp + uintptr((a+i)&(128-1))*4)))
1299 }
1300
1301 y = y * float64(sign)
1302
1303 // Limit precision for denormal results
1304 if bits > 53+e2-emin {
1305 bits = 53 + e2 - emin
1306 if bits < 0 {
1307 bits = 0
1308 }
1309 denormal = 1
1310 }
1311
1312 // Calculate bias term to force rounding, move out lower bits
1313 if bits < 53 {
1314 bias = Xcopysignl(tls, Xscalbn(tls, float64(1), 2*53-bits-1), y)
1315 frac = Xfmodl(tls, y, Xscalbn(tls, float64(1), 53-bits))
1316 y = y - frac
1317 y = y + bias
1318 }
1319
1320 // Process tail of decimal input so it can affect rounding
1321 if (a+i)&(128-1) != z {
1322 var t uint32_t = *(*uint32_t)(unsafe.Pointer(bp + uintptr((a+i)&(128-1))*4))
1323 if t < uint32_t(500000000) && (t != 0 || (a+i+1)&(128-1) != z) {
1324 frac = frac + 0.25*float64(sign)
1325 } else if t > uint32_t(500000000) {
1326 frac = frac + 0.75*float64(sign)
1327 } else if t == uint32_t(500000000) {
1328 if (a+i+1)&(128-1) == z {
1329 frac = frac + 0.5*float64(sign)
1330 } else {
1331 frac = frac + 0.75*float64(sign)
1332 }
1333 }
1334 if 53-bits >= 2 && !(Xfmodl(tls, frac, float64(1)) != 0) {
1335 frac += 1
1336 }
1337 }
1338
1339 y = y + frac
1340 y = y - bias
1341
1342 if (e2+53)&0x7fffffff > emax-5 {
1343 if Xfabsl(tls, y) >= float64(float64(2))/2.22044604925031308085e-16 {
1344 if denormal != 0 && bits == 53+e2-emin {
1345 denormal = 0
1346 }
1347 y = y * 0.5
1348 e2++
1349 }
1350 if e2+53 > emax || denormal != 0 && frac != 0 {
1351 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34
1352 }
1353 }
1354
1355 return Xscalbnl(tls, y, e2)
1356}
1357
1358var _sth = [2]uint32_t{uint32_t(9007199), uint32_t(254740991)} /* floatscan.c:67:24 */
1359var _sp10s = [8]int32{10, 100, 1000, 10000,
1360 100000, 1000000, 10000000, 100000000} /* floatscan.c:80:19 */
1361
1362func hexfloat(tls *TLS, f uintptr, bits int32, emin int32, sign int32, pok int32) float64 { /* floatscan.c:315:20: */
1363 var x uint32_t = uint32_t(0)
1364 var y float64 = float64(0)
1365 var scale float64 = float64(1)
1366 var bias float64 = float64(0)
1367 var gottail int32 = 0
1368 var gotrad int32 = 0
1369 var gotdig int32 = 0
1370 var rp int64 = int64(0)
1371 var dc int64 = int64(0)
1372 var e2 int64 = int64(0)
1373 var d int32
1374 var c int32
1375
1376 c = func() int32 {
1377 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend {
1378 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1))))
1379 }
1380 return X__shgetc(tls, f)
1381 }()
1382
1383 // Skip leading zeros
1384 for ; c == '0'; c = func() int32 {
1385 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend {
1386 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1))))
1387 }
1388 return X__shgetc(tls, f)
1389 }() {
1390 gotdig = 1
1391 }
1392
1393 if c == '.' {
1394 gotrad = 1
1395 c = func() int32 {
1396 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend {
1397 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1))))
1398 }
1399 return X__shgetc(tls, f)
1400 }()
1401 // Count zeros after the radix point before significand
1402 rp = int64(0)
1403 __1:
1404 if !(c == '0') {
1405 goto __3
1406 }
1407 gotdig = 1
1408 goto __2
1409 __2:
1410 c = func() int32 {
1411 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend {
1412 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1))))
1413 }
1414 return X__shgetc(tls, f)
1415 }()
1416 rp--
1417 goto __1
1418 goto __3
1419 __3:
1420 }
1421
1422 for ; uint32(c-'0') < 10 || uint32(c|32-'a') < 6 || c == '.'; c = func() int32 {
1423 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend {
1424 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1))))
1425 }
1426 return X__shgetc(tls, f)
1427 }() {
1428 if c == '.' {
1429 if gotrad != 0 {
1430 break
1431 }
1432 rp = dc
1433 gotrad = 1
1434 } else {
1435 gotdig = 1
1436 if c > '9' {
1437 d = c | 32 + 10 - 'a'
1438 } else {
1439 d = c - '0'
1440 }
1441 if dc < int64(8) {
1442 x = x*uint32_t(16) + uint32_t(d)
1443 } else if dc < int64(53/4+1) {
1444 y = y + float64(d)*AssignDivFloat64(&scale, float64(16))
1445 } else if d != 0 && !(gottail != 0) {
1446 y = y + 0.5*scale
1447 gottail = 1
1448 }
1449 dc++
1450 }
1451 }
1452 if !(gotdig != 0) {
1453 if (*FILE)(unsafe.Pointer(f)).Fshlim >= int64(0) {
1454 (*FILE)(unsafe.Pointer(f)).Frpos--
1455 } else {
1456 }
1457 if pok != 0 {
1458 if (*FILE)(unsafe.Pointer(f)).Fshlim >= int64(0) {
1459 (*FILE)(unsafe.Pointer(f)).Frpos--
1460 } else {
1461 }
1462 if gotrad != 0 {
1463 if (*FILE)(unsafe.Pointer(f)).Fshlim >= int64(0) {
1464 (*FILE)(unsafe.Pointer(f)).Frpos--
1465 } else {
1466 }
1467 }
1468 } else {
1469 X__shlim(tls, f, int64(0))
1470 }
1471 return float64(sign) * 0.0
1472 }
1473 if !(gotrad != 0) {
1474 rp = dc
1475 }
1476 for dc < int64(8) {
1477 x = x * uint32_t(16)
1478 dc++
1479 }
1480 if c|32 == 'p' {
1481 e2 = scanexp(tls, f, pok)
1482 if e2 == -0x7fffffffffffffff-int64(1) {
1483 if pok != 0 {
1484 if (*FILE)(unsafe.Pointer(f)).Fshlim >= int64(0) {
1485 (*FILE)(unsafe.Pointer(f)).Frpos--
1486 } else {
1487 }
1488 } else {
1489 X__shlim(tls, f, int64(0))
1490 return float64(0)
1491 }
1492 e2 = int64(0)
1493 }
1494 } else {
1495 if (*FILE)(unsafe.Pointer(f)).Fshlim >= int64(0) {
1496 (*FILE)(unsafe.Pointer(f)).Frpos--
1497 } else {
1498 }
1499 }
1500 e2 = e2 + (int64(4)*rp - int64(32))
1501
1502 if !(x != 0) {
1503 return float64(sign) * 0.0
1504 }
1505 if e2 > int64(-emin) {
1506 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34
1507 return float64(sign) * 1.79769313486231570815e+308 * 1.79769313486231570815e+308
1508 }
1509 if e2 < int64(emin-2*53) {
1510 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34
1511 return float64(sign) * 2.22507385850720138309e-308 * 2.22507385850720138309e-308
1512 }
1513
1514 for x < 0x80000000 {
1515 if y >= 0.5 {
1516 x = x + (x + uint32_t(1))
1517 y = y + (y - float64(1))
1518 } else {
1519 x = x + x
1520 y = y + y
1521 }
1522 e2--
1523 }
1524
1525 if int64(bits) > int64(32)+e2-int64(emin) {
1526 bits = int32(int64(32) + e2 - int64(emin))
1527 if bits < 0 {
1528 bits = 0
1529 }
1530 }
1531
1532 if bits < 53 {
1533 bias = Xcopysignl(tls, Xscalbn(tls, float64(1), 32+53-bits-1), float64(sign))
1534 }
1535
1536 if bits < 32 && y != 0 && !(x&uint32_t(1) != 0) {
1537 x++
1538 y = float64(0)
1539 }
1540
1541 y = bias + float64(sign)*float64(x) + float64(sign)*y
1542 y = y - bias
1543
1544 if !(y != 0) {
1545 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34
1546 }
1547
1548 return Xscalbnl(tls, y, int32(e2))
1549}
1550
1551func X__floatscan(tls *TLS, f uintptr, prec int32, pok int32) float64 { /* floatscan.c:427:13: */
1552 var sign int32 = 1
1553 var i size_t
1554 var bits int32
1555 var emin int32
1556 var c int32
1557
1558 switch prec {
1559 case 0:
1560 bits = 24
1561 emin = -125 - bits
1562 break
1563 case 1:
1564 bits = 53
1565 emin = -1021 - bits
1566 break
1567 case 2:
1568 bits = 53
1569 emin = -1021 - bits
1570 break
1571 default:
1572 return float64(0)
1573 }
1574
1575 for __isspace(tls, AssignInt32(&c, func() int32 {
1576 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend {
1577 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1))))
1578 }
1579 return X__shgetc(tls, f)
1580 }())) != 0 {
1581 }
1582
1583 if c == '+' || c == '-' {
1584 sign = sign - 2*Bool32(c == '-')
1585 c = func() int32 {
1586 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend {
1587 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1))))
1588 }
1589 return X__shgetc(tls, f)
1590 }()
1591 }
1592
1593 for i = uint64(0); i < uint64(8) && c|32 == int32(*(*int8)(unsafe.Pointer(ts /* "infinity" */ + uintptr(i)))); i++ {
1594 if i < uint64(7) {
1595 c = func() int32 {
1596 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend {
1597 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1))))
1598 }
1599 return X__shgetc(tls, f)
1600 }()
1601 }
1602 }
1603 if i == uint64(3) || i == uint64(8) || i > uint64(3) && pok != 0 {
1604 if i != uint64(8) {
1605 if (*FILE)(unsafe.Pointer(f)).Fshlim >= int64(0) {
1606 (*FILE)(unsafe.Pointer(f)).Frpos--
1607 } else {
1608 }
1609 if pok != 0 {
1610 for ; i > uint64(3); i-- {
1611 if (*FILE)(unsafe.Pointer(f)).Fshlim >= int64(0) {
1612 (*FILE)(unsafe.Pointer(f)).Frpos--
1613 } else {
1614 }
1615 }
1616 }
1617 }
1618 return float64(float32(sign) * X__builtin_inff(tls))
1619 }
1620 if !(i != 0) {
1621 for i = uint64(0); i < uint64(3) && c|32 == int32(*(*int8)(unsafe.Pointer(ts + 9 /* "nan" */ + uintptr(i)))); i++ {
1622 if i < uint64(2) {
1623 c = func() int32 {
1624 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend {
1625 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1))))
1626 }
1627 return X__shgetc(tls, f)
1628 }()
1629 }
1630 }
1631 }
1632 if i == uint64(3) {
1633 if func() int32 {
1634 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend {
1635 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1))))
1636 }
1637 return X__shgetc(tls, f)
1638 }() != '(' {
1639 if (*FILE)(unsafe.Pointer(f)).Fshlim >= int64(0) {
1640 (*FILE)(unsafe.Pointer(f)).Frpos--
1641 } else {
1642 }
1643 return float64(X__builtin_nanf(tls, ts+13))
1644 }
1645 for i = uint64(1); ; i++ {
1646 c = func() int32 {
1647 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend {
1648 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1))))
1649 }
1650 return X__shgetc(tls, f)
1651 }()
1652 if uint32(c-'0') < 10 || uint32(c-'A') < 26 || uint32(c-'a') < 26 || c == '_' {
1653 continue
1654 }
1655 if c == ')' {
1656 return float64(X__builtin_nanf(tls, ts+13))
1657 }
1658 if (*FILE)(unsafe.Pointer(f)).Fshlim >= int64(0) {
1659 (*FILE)(unsafe.Pointer(f)).Frpos--
1660 } else {
1661 }
1662 if !(pok != 0) {
1663 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 22
1664 X__shlim(tls, f, int64(0))
1665 return float64(0)
1666 }
1667 for PostDecUint64(&i, 1) != 0 {
1668 if (*FILE)(unsafe.Pointer(f)).Fshlim >= int64(0) {
1669 (*FILE)(unsafe.Pointer(f)).Frpos--
1670 } else {
1671 }
1672 }
1673 return float64(X__builtin_nanf(tls, ts+13))
1674 }
1675 return float64(X__builtin_nanf(tls, ts+13))
1676 }
1677
1678 if i != 0 {
1679 if (*FILE)(unsafe.Pointer(f)).Fshlim >= int64(0) {
1680 (*FILE)(unsafe.Pointer(f)).Frpos--
1681 } else {
1682 }
1683 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 22
1684 X__shlim(tls, f, int64(0))
1685 return float64(0)
1686 }
1687
1688 if c == '0' {
1689 c = func() int32 {
1690 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend {
1691 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1))))
1692 }
1693 return X__shgetc(tls, f)
1694 }()
1695 if c|32 == 'x' {
1696 return hexfloat(tls, f, bits, emin, sign, pok)
1697 }
1698 if (*FILE)(unsafe.Pointer(f)).Fshlim >= int64(0) {
1699 (*FILE)(unsafe.Pointer(f)).Frpos--
1700 } else {
1701 }
1702 c = '0'
1703 }
1704
1705 return decfloat(tls, f, c, bits, emin, sign, pok)
1706}
1707
1708// Lookup table for digit values. -1==255>=36 -> invalid
1709var table = [257]uint8{Uint8FromInt32(-1),
1710 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),
1711 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),
1712 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),
1713 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),
1714 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),
1715 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),
1716 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),
1717 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),
1718 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),
1719 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),
1720 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),
1721 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),
1722 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),
1723 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),
1724 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),
1725 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),
1726} /* intscan.c:7:28 */
1727
1728func X__intscan(tls *TLS, f uintptr, base uint32, pok int32, lim uint64) uint64 { /* intscan.c:26:20: */
1729 var val uintptr
1730 var c int32
1731 var neg int32
1732 var x uint32
1733 var y uint64
1734 var bs int32
1735 val = uintptr(unsafe.Pointer(&table)) + uintptr(1)
1736 neg = 0
1737 if !(base > uint32(36) || base == uint32(1)) {
1738 goto __1
1739 }
1740 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 22
1741 return uint64(0)
1742__1:
1743 ;
1744__2:
1745 if !(__isspace(tls, AssignInt32(&c, func() int32 {
1746 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend {
1747 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1))))
1748 }
1749 return X__shgetc(tls, f)
1750 }())) != 0) {
1751 goto __3
1752 }
1753 goto __2
1754__3:
1755 ;
1756 if !(c == '+' || c == '-') {
1757 goto __4
1758 }
1759 neg = -Bool32(c == '-')
1760 c = func() int32 {
1761 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend {
1762 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1))))
1763 }
1764 return X__shgetc(tls, f)
1765 }()
1766__4:
1767 ;
1768 if !((base == uint32(0) || base == uint32(16)) && c == '0') {
1769 goto __5
1770 }
1771 c = func() int32 {
1772 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend {
1773 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1))))
1774 }
1775 return X__shgetc(tls, f)
1776 }()
1777 if !(c|32 == 'x') {
1778 goto __7
1779 }
1780 c = func() int32 {
1781 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend {
1782 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1))))
1783 }
1784 return X__shgetc(tls, f)
1785 }()
1786 if !(int32(*(*uint8)(unsafe.Pointer(val + uintptr(c)))) >= 16) {
1787 goto __9
1788 }
1789 if (*FILE)(unsafe.Pointer(f)).Fshlim >= int64(0) {
1790 (*FILE)(unsafe.Pointer(f)).Frpos--
1791 } else {
1792 }
1793 if !(pok != 0) {
1794 goto __10
1795 }
1796 if (*FILE)(unsafe.Pointer(f)).Fshlim >= int64(0) {
1797 (*FILE)(unsafe.Pointer(f)).Frpos--
1798 } else {
1799 }
1800 goto __11
1801__10:
1802 X__shlim(tls, f, int64(0))
1803__11:
1804 ;
1805 return uint64(0)
1806__9:
1807 ;
1808 base = uint32(16)
1809 goto __8
1810__7:
1811 if !(base == uint32(0)) {
1812 goto __12
1813 }
1814 base = uint32(8)
1815__12:
1816 ;
1817__8:
1818 ;
1819 goto __6
1820__5:
1821 if !(base == uint32(0)) {
1822 goto __13
1823 }
1824 base = uint32(10)
1825__13:
1826 ;
1827 if !(uint32(*(*uint8)(unsafe.Pointer(val + uintptr(c)))) >= base) {
1828 goto __14
1829 }
1830 if (*FILE)(unsafe.Pointer(f)).Fshlim >= int64(0) {
1831 (*FILE)(unsafe.Pointer(f)).Frpos--
1832 } else {
1833 }
1834 X__shlim(tls, f, int64(0))
1835 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 22
1836 return uint64(0)
1837__14:
1838 ;
1839__6:
1840 ;
1841 if !(base == uint32(10)) {
1842 goto __15
1843 }
1844 x = uint32(0)
1845__17:
1846 if !(uint32(c-'0') < 10 && x <= 0xffffffff/uint32(10)-uint32(1)) {
1847 goto __19
1848 }
1849 x = x*uint32(10) + uint32(c-'0')
1850 goto __18
1851__18:
1852 c = func() int32 {
1853 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend {
1854 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1))))
1855 }
1856 return X__shgetc(tls, f)
1857 }()
1858 goto __17
1859 goto __19
1860__19:
1861 ;
1862 y = uint64(x)
1863__20:
1864 if !(uint32(c-'0') < 10 && y <= (2*uint64(0x7fffffffffffffff)+uint64(1))/uint64(10) && uint64(10)*y <= 2*uint64(0x7fffffffffffffff)+uint64(1)-uint64(c-'0')) {
1865 goto __22
1866 }
1867 y = y*uint64(10) + uint64(c-'0')
1868 goto __21
1869__21:
1870 c = func() int32 {
1871 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend {
1872 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1))))
1873 }
1874 return X__shgetc(tls, f)
1875 }()
1876 goto __20
1877 goto __22
1878__22:
1879 ;
1880 if !(uint32(c-'0') >= 10) {
1881 goto __23
1882 }
1883 goto done
1884__23:
1885 ;
1886 goto __16
1887__15:
1888 if !!(base&(base-uint32(1)) != 0) {
1889 goto __24
1890 }
1891 bs = int32(*(*int8)(unsafe.Pointer(ts + 14 + uintptr(uint32(0x17)*base>>5&uint32(7)))))
1892 x = uint32(0)
1893__26:
1894 if !(uint32(*(*uint8)(unsafe.Pointer(val + uintptr(c)))) < base && x <= 0xffffffff/uint32(32)) {
1895 goto __28
1896 }
1897 x = x<<bs | uint32(*(*uint8)(unsafe.Pointer(val + uintptr(c))))
1898 goto __27
1899__27:
1900 c = func() int32 {
1901 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend {
1902 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1))))
1903 }
1904 return X__shgetc(tls, f)
1905 }()
1906 goto __26
1907 goto __28
1908__28:
1909 ;
1910 y = uint64(x)
1911__29:
1912 if !(uint32(*(*uint8)(unsafe.Pointer(val + uintptr(c)))) < base && y <= uint64(2*uint64(0x7fffffffffffffff)+uint64(1))>>bs) {
1913 goto __31
1914 }
1915 y = y<<bs | uint64(*(*uint8)(unsafe.Pointer(val + uintptr(c))))
1916 goto __30
1917__30:
1918 c = func() int32 {
1919 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend {
1920 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1))))
1921 }
1922 return X__shgetc(tls, f)
1923 }()
1924 goto __29
1925 goto __31
1926__31:
1927 ;
1928 goto __25
1929__24:
1930 x = uint32(0)
1931__32:
1932 if !(uint32(*(*uint8)(unsafe.Pointer(val + uintptr(c)))) < base && x <= 0xffffffff/uint32(36)-uint32(1)) {
1933 goto __34
1934 }
1935 x = x*base + uint32(*(*uint8)(unsafe.Pointer(val + uintptr(c))))
1936 goto __33
1937__33:
1938 c = func() int32 {
1939 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend {
1940 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1))))
1941 }
1942 return X__shgetc(tls, f)
1943 }()
1944 goto __32
1945 goto __34
1946__34:
1947 ;
1948 y = uint64(x)
1949__35:
1950 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))))) {
1951 goto __37
1952 }
1953 y = y*uint64(base) + uint64(*(*uint8)(unsafe.Pointer(val + uintptr(c))))
1954 goto __36
1955__36:
1956 c = func() int32 {
1957 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend {
1958 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1))))
1959 }
1960 return X__shgetc(tls, f)
1961 }()
1962 goto __35
1963 goto __37
1964__37:
1965 ;
1966__25:
1967 ;
1968__16:
1969 ;
1970 if !(uint32(*(*uint8)(unsafe.Pointer(val + uintptr(c)))) < base) {
1971 goto __38
1972 }
1973__39:
1974 if !(uint32(*(*uint8)(unsafe.Pointer(val + uintptr(c)))) < base) {
1975 goto __41
1976 }
1977 goto __40
1978__40:
1979 c = func() int32 {
1980 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend {
1981 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1))))
1982 }
1983 return X__shgetc(tls, f)
1984 }()
1985 goto __39
1986 goto __41
1987__41:
1988 ;
1989 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34
1990 y = lim
1991 if !(lim&uint64(1) != 0) {
1992 goto __42
1993 }
1994 neg = 0
1995__42:
1996 ;
1997__38:
1998 ;
1999done:
2000 if (*FILE)(unsafe.Pointer(f)).Fshlim >= int64(0) {
2001 (*FILE)(unsafe.Pointer(f)).Frpos--
2002 } else {
2003 }
2004 if !(y >= lim) {
2005 goto __43
2006 }
2007 if !(!(lim&uint64(1) != 0) && !(neg != 0)) {
2008 goto __44
2009 }
2010 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34
2011 return lim - uint64(1)
2012 goto __45
2013__44:
2014 if !(y > lim) {
2015 goto __46
2016 }
2017 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34
2018 return lim
2019__46:
2020 ;
2021__45:
2022 ;
2023__43:
2024 ;
2025 return y ^ uint64(neg) - uint64(neg)
2026}
2027
2028// The shcnt field stores the number of bytes read so far, offset by
2029// the value of buf-rpos at the last function call (__shlim or __shgetc),
2030// so that between calls the inline shcnt macro can add rpos-buf to get
2031// the actual count.
2032
2033func X__shlim(tls *TLS, f uintptr, lim off_t) { /* shgetc.c:8:6: */
2034 (*FILE)(unsafe.Pointer(f)).Fshlim = lim
2035 (*FILE)(unsafe.Pointer(f)).Fshcnt = (int64((*FILE)(unsafe.Pointer(f)).Fbuf) - int64((*FILE)(unsafe.Pointer(f)).Frpos)) / 1
2036 // If lim is nonzero, rend must be a valid pointer.
2037 if lim != 0 && (int64((*FILE)(unsafe.Pointer(f)).Frend)-int64((*FILE)(unsafe.Pointer(f)).Frpos))/1 > lim {
2038 (*FILE)(unsafe.Pointer(f)).Fshend = (*FILE)(unsafe.Pointer(f)).Frpos + uintptr(lim)
2039 } else {
2040 (*FILE)(unsafe.Pointer(f)).Fshend = (*FILE)(unsafe.Pointer(f)).Frend
2041 }
2042}
2043
2044func X__shgetc(tls *TLS, f uintptr) int32 { /* shgetc.c:19:5: */
2045 var c int32
2046 var cnt off_t = (*FILE)(unsafe.Pointer(f)).Fshcnt + (int64((*FILE)(unsafe.Pointer(f)).Frpos)-int64((*FILE)(unsafe.Pointer(f)).Fbuf))/1
2047 if (*FILE)(unsafe.Pointer(f)).Fshlim != 0 && cnt >= (*FILE)(unsafe.Pointer(f)).Fshlim || AssignInt32(&c, X__uflow(tls, f)) < 0 {
2048 (*FILE)(unsafe.Pointer(f)).Fshcnt = (int64((*FILE)(unsafe.Pointer(f)).Fbuf)-int64((*FILE)(unsafe.Pointer(f)).Frpos))/1 + cnt
2049 (*FILE)(unsafe.Pointer(f)).Fshend = (*FILE)(unsafe.Pointer(f)).Frpos
2050 (*FILE)(unsafe.Pointer(f)).Fshlim = int64(-1)
2051 return -1
2052 }
2053 cnt++
2054 if (*FILE)(unsafe.Pointer(f)).Fshlim != 0 && (int64((*FILE)(unsafe.Pointer(f)).Frend)-int64((*FILE)(unsafe.Pointer(f)).Frpos))/1 > (*FILE)(unsafe.Pointer(f)).Fshlim-cnt {
2055 (*FILE)(unsafe.Pointer(f)).Fshend = (*FILE)(unsafe.Pointer(f)).Frpos + uintptr((*FILE)(unsafe.Pointer(f)).Fshlim-cnt)
2056 } else {
2057 (*FILE)(unsafe.Pointer(f)).Fshend = (*FILE)(unsafe.Pointer(f)).Frend
2058 }
2059 (*FILE)(unsafe.Pointer(f)).Fshcnt = (int64((*FILE)(unsafe.Pointer(f)).Fbuf)-int64((*FILE)(unsafe.Pointer(f)).Frpos))/1 + cnt
2060 if (*FILE)(unsafe.Pointer(f)).Frpos <= (*FILE)(unsafe.Pointer(f)).Fbuf {
2061 *(*uint8)(unsafe.Pointer((*FILE)(unsafe.Pointer(f)).Frpos + UintptrFromInt32(-1))) = uint8(c)
2062 }
2063 return c
2064}
2065
2066type lconv = struct {
2067 Fdecimal_point uintptr
2068 Fthousands_sep uintptr
2069 Fgrouping uintptr
2070 Fint_curr_symbol uintptr
2071 Fcurrency_symbol uintptr
2072 Fmon_decimal_point uintptr
2073 Fmon_thousands_sep uintptr
2074 Fmon_grouping uintptr
2075 Fpositive_sign uintptr
2076 Fnegative_sign uintptr
2077 Fint_frac_digits int8
2078 Ffrac_digits int8
2079 Fp_cs_precedes int8
2080 Fp_sep_by_space int8
2081 Fn_cs_precedes int8
2082 Fn_sep_by_space int8
2083 Fp_sign_posn int8
2084 Fn_sign_posn int8
2085 Fint_p_cs_precedes int8
2086 Fint_p_sep_by_space int8
2087 Fint_n_cs_precedes int8
2088 Fint_n_sep_by_space int8
2089 Fint_p_sign_posn int8
2090 Fint_n_sign_posn int8
2091 F__ccgo_pad1 [2]byte
2092} /* locale.h:24:1 */
2093
2094// Support signed or unsigned plain-char
2095
2096// Implementation choices...
2097
2098// Arbitrary numbers...
2099
2100// POSIX/SUS requirements follow. These numbers come directly
2101// from SUS and have nothing to do with the host system.
2102
2103var posix_lconv = lconv{Fdecimal_point: ts + 23, Fthousands_sep: ts + 13, Fgrouping: ts + 13, Fint_curr_symbol: ts + 13, Fcurrency_symbol: ts + 13, Fmon_decimal_point: ts + 13, Fmon_thousands_sep: ts + 13, Fmon_grouping: ts + 13, Fpositive_sign: ts + 13, Fnegative_sign: ts + 13, Fint_frac_digits: Int8FromInt32(255), Ffrac_digits: Int8FromInt32(255), Fp_cs_precedes: Int8FromInt32(255), Fp_sep_by_space: Int8FromInt32(255), Fn_cs_precedes: Int8FromInt32(255), Fn_sep_by_space: Int8FromInt32(255), Fp_sign_posn: Int8FromInt32(255), Fn_sign_posn: Int8FromInt32(255), Fint_p_cs_precedes: Int8FromInt32(255), Fint_p_sep_by_space: Int8FromInt32(255), Fint_n_cs_precedes: Int8FromInt32(255), Fint_n_sep_by_space: Int8FromInt32(255), Fint_p_sign_posn: Int8FromInt32(255), Fint_n_sign_posn: Int8FromInt32(255)} /* localeconv.c:4:27 */
2104
2105func Xlocaleconv(tls *TLS) uintptr { /* localeconv.c:31:14: */
2106 return uintptr(unsafe.Pointer(&posix_lconv))
2107}
2108
2109func X__fpclassify(tls *TLS, x float64) int32 { /* __fpclassify.c:4:5: */
2110 bp := tls.Alloc(8)
2111 defer tls.Free(8)
2112
2113 *(*struct{ Ff float64 })(unsafe.Pointer(bp)) = func() (r struct{ Ff float64 }) {
2114 *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&r)) + 0)) = x
2115 return r
2116 }()
2117 var e int32 = int32(*(*uint64_t)(unsafe.Pointer(bp)) >> 52 & uint64(0x7ff))
2118 if !(e != 0) {
2119 if *(*uint64_t)(unsafe.Pointer(bp))<<1 != 0 {
2120 return 3
2121 }
2122 return 2
2123 }
2124 if e == 0x7ff {
2125 if *(*uint64_t)(unsafe.Pointer(bp))<<12 != 0 {
2126 return 0
2127 }
2128 return 1
2129 }
2130 return 4
2131}
2132
2133func X__fpclassifyf(tls *TLS, x float32) int32 { /* __fpclassifyf.c:4:5: */
2134 bp := tls.Alloc(4)
2135 defer tls.Free(4)
2136
2137 *(*struct{ Ff float32 })(unsafe.Pointer(bp)) = func() (r struct{ Ff float32 }) {
2138 *(*float32)(unsafe.Pointer(uintptr(unsafe.Pointer(&r)) + 0)) = x
2139 return r
2140 }()
2141 var e int32 = int32(*(*uint32_t)(unsafe.Pointer(bp)) >> 23 & uint32_t(0xff))
2142 if !(e != 0) {
2143 if *(*uint32_t)(unsafe.Pointer(bp))<<1 != 0 {
2144 return 3
2145 }
2146 return 2
2147 }
2148 if e == 0xff {
2149 if *(*uint32_t)(unsafe.Pointer(bp))<<9 != 0 {
2150 return 0
2151 }
2152 return 1
2153 }
2154 return 4
2155}
2156
2157func __bswap32(tls *TLS, __x uint32_t) uint32_t { /* endian.h:24:26: */
2158 return __x>>24 | __x>>8&uint32_t(0xff00) | __x<<8&uint32_t(0xff0000) | __x<<24
2159}
2160
2161func X__fpclassifyl(tls *TLS, x float64) int32 { /* __fpclassifyl.c:4:5: */
2162 return X__fpclassify(tls, x)
2163}
2164
2165func Xcopysignl(tls *TLS, x float64, y float64) float64 { /* copysignl.c:4:13: */
2166 return Xcopysign(tls, x, y)
2167}
2168
2169func Xfabsl(tls *TLS, x float64) float64 { /* fabsl.c:3:13: */
2170 return Xfabs(tls, x)
2171}
2172
2173func Xfmodl(tls *TLS, x float64, y float64) float64 { /* fmodl.c:4:13: */
2174 return Xfmod(tls, x, y)
2175}
2176
2177func Xnanf(tls *TLS, s uintptr) float32 { /* nanf.c:3:7: */
2178 return X__builtin_nanf(tls, ts+13)
2179}
2180
2181var toint double_t = float64(float64(1)) / 2.22044604925031308085e-16 /* rint.c:10:23 */
2182
2183func Xrint(tls *TLS, x float64) float64 { /* rint.c:12:8: */
2184 bp := tls.Alloc(8)
2185 defer tls.Free(8)
2186
2187 *(*struct{ Ff float64 })(unsafe.Pointer(bp)) = func() (r struct{ Ff float64 }) {
2188 *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&r)) + 0)) = x
2189 return r
2190 }()
2191 var e int32 = int32(*(*uint64_t)(unsafe.Pointer(bp)) >> 52 & uint64(0x7ff))
2192 var s int32 = int32(*(*uint64_t)(unsafe.Pointer(bp)) >> 63)
2193 var y double_t
2194
2195 if e >= 0x3ff+52 {
2196 return x
2197 }
2198 if s != 0 {
2199 y = x - toint + toint
2200 } else {
2201 y = x + toint - toint
2202 }
2203 if y == float64(0) {
2204 if s != 0 {
2205 return -Float64FromFloat64(0.0)
2206 }
2207 return float64(0)
2208 }
2209 return y
2210}
2211
2212func Xscalbn(tls *TLS, x float64, n int32) float64 { /* scalbn.c:4:8: */
2213 bp := tls.Alloc(8)
2214 defer tls.Free(8)
2215
2216 // var u struct {Ff float64;} at bp, 8
2217
2218 var y double_t = x
2219
2220 if n > 1023 {
2221 y = y * 0x1p1023
2222 n = n - 1023
2223 if n > 1023 {
2224 y = y * 0x1p1023
2225 n = n - 1023
2226 if n > 1023 {
2227 n = 1023
2228 }
2229 }
2230 } else if n < -1022 {
2231 // make sure final n < -53 to avoid double
2232 // rounding in the subnormal range
2233 y = y * (float64(0x1p-1022) * 0x1p53)
2234 n = n + (1022 - 53)
2235 if n < -1022 {
2236 y = y * (float64(0x1p-1022) * 0x1p53)
2237 n = n + (1022 - 53)
2238 if n < -1022 {
2239 n = -1022
2240 }
2241 }
2242 }
2243 *(*uint64_t)(unsafe.Pointer(bp)) = uint64_t(0x3ff+n) << 52
2244 x = y * *(*float64)(unsafe.Pointer(bp))
2245 return x
2246}
2247
2248func Xscalbnl(tls *TLS, x float64, n int32) float64 { /* scalbnl.c:4:13: */
2249 return Xscalbn(tls, x, n)
2250}
2251
2252type max_align_t = struct {
2253 F__ll int64
2254 F__ld float64
2255} /* alltypes.h:41:54 */
2256
2257type imaxdiv_t = struct {
2258 Fquot intmax_t
2259 Frem intmax_t
2260} /* inttypes.h:14:40 */
2261
2262type iovec = struct {
2263 Fiov_base uintptr
2264 Fiov_len size_t
2265} /* alltypes.h:355:1 */
2266
2267type socklen_t = uint32 /* alltypes.h:361:18 */
2268
2269type sa_family_t = uint16 /* alltypes.h:366:24 */
2270
2271type msghdr = struct {
2272 Fmsg_name uintptr
2273 Fmsg_namelen socklen_t
2274 F__ccgo_pad1 [4]byte
2275 Fmsg_iov uintptr
2276 Fmsg_iovlen int32
2277 F__pad1 int32
2278 Fmsg_control uintptr
2279 Fmsg_controllen socklen_t
2280 F__pad2 int32
2281 Fmsg_flags int32
2282 F__ccgo_pad2 [4]byte
2283} /* socket.h:22:1 */
2284
2285type cmsghdr = struct {
2286 Fcmsg_len socklen_t
2287 F__pad1 int32
2288 Fcmsg_level int32
2289 Fcmsg_type int32
2290} /* socket.h:44:1 */
2291
2292type linger = struct {
2293 Fl_onoff int32
2294 Fl_linger int32
2295} /* socket.h:74:1 */
2296
2297type sockaddr = struct {
2298 Fsa_family sa_family_t
2299 Fsa_data [14]int8
2300} /* socket.h:367:1 */
2301
2302type sockaddr_storage = struct {
2303 Fss_family sa_family_t
2304 F__ss_padding [118]int8
2305 F__ss_align uint64
2306} /* socket.h:372:1 */
2307
2308type in_port_t = uint16_t /* in.h:12:18 */
2309type in_addr_t = uint32_t /* in.h:13:18 */
2310type in_addr = struct{ Fs_addr in_addr_t } /* in.h:14:1 */
2311
2312type sockaddr_in = struct {
2313 Fsin_family sa_family_t
2314 Fsin_port in_port_t
2315 Fsin_addr struct{ Fs_addr in_addr_t }
2316 Fsin_zero [8]uint8_t
2317} /* in.h:16:1 */
2318
2319type in6_addr = struct {
2320 F__in6_union struct {
2321 F__ccgo_pad1 [0]uint32
2322 F__s6_addr [16]uint8_t
2323 }
2324} /* in.h:23:1 */
2325
2326type sockaddr_in6 = struct {
2327 Fsin6_family sa_family_t
2328 Fsin6_port in_port_t
2329 Fsin6_flowinfo uint32_t
2330 Fsin6_addr struct {
2331 F__in6_union struct {
2332 F__ccgo_pad1 [0]uint32
2333 F__s6_addr [16]uint8_t
2334 }
2335 }
2336 Fsin6_scope_id uint32_t
2337} /* in.h:34:1 */
2338
2339type ipv6_mreq = struct {
2340 Fipv6mr_multiaddr struct {
2341 F__in6_union struct {
2342 F__ccgo_pad1 [0]uint32
2343 F__s6_addr [16]uint8_t
2344 }
2345 }
2346 Fipv6mr_interface uint32
2347} /* in.h:42:1 */
2348
2349type ip_opts = struct {
2350 Fip_dst struct{ Fs_addr in_addr_t }
2351 Fip_opts [40]int8
2352} /* in.h:229:1 */
2353
2354type ip_mreq = struct {
2355 Fimr_multiaddr struct{ Fs_addr in_addr_t }
2356 Fimr_interface struct{ Fs_addr in_addr_t }
2357} /* in.h:247:1 */
2358
2359type ip_mreqn = struct {
2360 Fimr_multiaddr struct{ Fs_addr in_addr_t }
2361 Fimr_address struct{ Fs_addr in_addr_t }
2362 Fimr_ifindex int32
2363} /* in.h:252:1 */
2364
2365type ip_mreq_source = struct {
2366 Fimr_multiaddr struct{ Fs_addr in_addr_t }
2367 Fimr_interface struct{ Fs_addr in_addr_t }
2368 Fimr_sourceaddr struct{ Fs_addr in_addr_t }
2369} /* in.h:258:1 */
2370
2371type ip_msfilter = struct {
2372 Fimsf_multiaddr struct{ Fs_addr in_addr_t }
2373 Fimsf_interface struct{ Fs_addr in_addr_t }
2374 Fimsf_fmode uint32_t
2375 Fimsf_numsrc uint32_t
2376 Fimsf_slist [1]struct{ Fs_addr in_addr_t }
2377} /* in.h:264:1 */
2378
2379type group_req = struct {
2380 Fgr_interface uint32_t
2381 F__ccgo_pad1 [4]byte
2382 Fgr_group struct {
2383 Fss_family sa_family_t
2384 F__ss_padding [118]int8
2385 F__ss_align uint64
2386 }
2387} /* in.h:275:1 */
2388
2389type group_source_req = struct {
2390 Fgsr_interface uint32_t
2391 F__ccgo_pad1 [4]byte
2392 Fgsr_group struct {
2393 Fss_family sa_family_t
2394 F__ss_padding [118]int8
2395 F__ss_align uint64
2396 }
2397 Fgsr_source struct {
2398 Fss_family sa_family_t
2399 F__ss_padding [118]int8
2400 F__ss_align uint64
2401 }
2402} /* in.h:280:1 */
2403
2404type group_filter = struct {
2405 Fgf_interface uint32_t
2406 F__ccgo_pad1 [4]byte
2407 Fgf_group struct {
2408 Fss_family sa_family_t
2409 F__ss_padding [118]int8
2410 F__ss_align uint64
2411 }
2412 Fgf_fmode uint32_t
2413 Fgf_numsrc uint32_t
2414 Fgf_slist [1]struct {
2415 Fss_family sa_family_t
2416 F__ss_padding [118]int8
2417 F__ss_align uint64
2418 }
2419} /* in.h:286:1 */
2420
2421type in_pktinfo = struct {
2422 Fipi_ifindex int32
2423 Fipi_spec_dst struct{ Fs_addr in_addr_t }
2424 Fipi_addr struct{ Fs_addr in_addr_t }
2425} /* in.h:297:1 */
2426
2427type in6_pktinfo = struct {
2428 Fipi6_addr struct {
2429 F__in6_union struct {
2430 F__ccgo_pad1 [0]uint32
2431 F__s6_addr [16]uint8_t
2432 }
2433 }
2434 Fipi6_ifindex uint32
2435} /* in.h:303:1 */
2436
2437type ip6_mtuinfo = struct {
2438 Fip6m_addr struct {
2439 Fsin6_family sa_family_t
2440 Fsin6_port in_port_t
2441 Fsin6_flowinfo uint32_t
2442 Fsin6_addr struct {
2443 F__in6_union struct {
2444 F__ccgo_pad1 [0]uint32
2445 F__s6_addr [16]uint8_t
2446 }
2447 }
2448 Fsin6_scope_id uint32_t
2449 }
2450 Fip6m_mtu uint32_t
2451} /* in.h:308:1 */
2452
2453type addrinfo = struct {
2454 Fai_flags int32
2455 Fai_family int32
2456 Fai_socktype int32
2457 Fai_protocol int32
2458 Fai_addrlen socklen_t
2459 F__ccgo_pad1 [4]byte
2460 Fai_addr uintptr
2461 Fai_canonname uintptr
2462 Fai_next uintptr
2463} /* netdb.h:16:1 */
2464
2465// Legacy functions follow (marked OBsolete in SUS)
2466
2467type netent = struct {
2468 Fn_name uintptr
2469 Fn_aliases uintptr
2470 Fn_addrtype int32
2471 Fn_net uint32_t
2472} /* netdb.h:62:1 */
2473
2474type hostent = struct {
2475 Fh_name uintptr
2476 Fh_aliases uintptr
2477 Fh_addrtype int32
2478 Fh_length int32
2479 Fh_addr_list uintptr
2480} /* netdb.h:69:1 */
2481
2482type servent = struct {
2483 Fs_name uintptr
2484 Fs_aliases uintptr
2485 Fs_port int32
2486 F__ccgo_pad1 [4]byte
2487 Fs_proto uintptr
2488} /* netdb.h:78:1 */
2489
2490type protoent = struct {
2491 Fp_name uintptr
2492 Fp_aliases uintptr
2493 Fp_proto int32
2494 F__ccgo_pad1 [4]byte
2495} /* netdb.h:85:1 */
2496
2497type aibuf = struct {
2498 Fai struct {
2499 Fai_flags int32
2500 Fai_family int32
2501 Fai_socktype int32
2502 Fai_protocol int32
2503 Fai_addrlen socklen_t
2504 F__ccgo_pad1 [4]byte
2505 Fai_addr uintptr
2506 Fai_canonname uintptr
2507 Fai_next uintptr
2508 }
2509 Fsa struct {
2510 Fsin struct {
2511 Fsin_family sa_family_t
2512 Fsin_port in_port_t
2513 Fsin_addr struct{ Fs_addr in_addr_t }
2514 Fsin_zero [8]uint8_t
2515 }
2516 F__ccgo_pad1 [12]byte
2517 }
2518 Flock [1]int32
2519 Fslot int16
2520 Fref int16
2521 F__ccgo_pad1 [4]byte
2522} /* lookup.h:10:1 */
2523
2524type sa = struct {
2525 Fsin struct {
2526 Fsin_family sa_family_t
2527 Fsin_port in_port_t
2528 Fsin_addr struct{ Fs_addr in_addr_t }
2529 Fsin_zero [8]uint8_t
2530 }
2531 F__ccgo_pad1 [12]byte
2532} /* lookup.h:10:1 */
2533
2534type address = struct {
2535 Ffamily int32
2536 Fscopeid uint32
2537 Faddr [16]uint8_t
2538 Fsortkey int32
2539} /* lookup.h:20:1 */
2540
2541type service = struct {
2542 Fport uint16_t
2543 Fproto uint8
2544 Fsocktype uint8
2545} /* lookup.h:27:1 */
2546
2547type resolvconf = struct {
2548 Fns [3]struct {
2549 Ffamily int32
2550 Fscopeid uint32
2551 Faddr [16]uint8_t
2552 Fsortkey int32
2553 }
2554 Fnns uint32
2555 Fattempts uint32
2556 Fndots uint32
2557 Ftimeout uint32
2558} /* lookup.h:34:1 */
2559
2560func Xfreeaddrinfo(tls *TLS, p uintptr) { /* freeaddrinfo.c:7:6: */
2561 var cnt size_t
2562 cnt = uint64(1)
2563__1:
2564 if !((*addrinfo)(unsafe.Pointer(p)).Fai_next != 0) {
2565 goto __3
2566 }
2567 goto __2
2568__2:
2569 cnt++
2570 p = (*addrinfo)(unsafe.Pointer(p)).Fai_next
2571 goto __1
2572 goto __3
2573__3:
2574 ;
2575 var b uintptr = p - uintptr(uint64(uintptr(0)))
2576 b -= 88 * uintptr((*aibuf)(unsafe.Pointer(b)).Fslot)
2577 //TODO LOCK(b->lock);
2578 if !(int32(AssignSubPtrInt16(b+82, int16(cnt))) != 0) {
2579 Xfree(tls, b)
2580 }
2581 //TODO else UNLOCK(b->lock);
2582}
2583
2584type time_t = int64 /* alltypes.h:85:16 */
2585
2586type clockid_t = int32 /* alltypes.h:214:13 */
2587
2588type timespec = struct {
2589 Ftv_sec time_t
2590 Ftv_nsec int64
2591} /* alltypes.h:229:1 */
2592
2593type pthread_t = uintptr /* alltypes.h:273:26 */
2594
2595type pthread_once_t = int32 /* alltypes.h:279:13 */
2596
2597type pthread_key_t = uint32 /* alltypes.h:284:18 */
2598
2599type pthread_spinlock_t = int32 /* alltypes.h:289:13 */
2600
2601type pthread_mutexattr_t = struct{ F__attr uint32 } /* alltypes.h:294:37 */
2602
2603type pthread_condattr_t = struct{ F__attr uint32 } /* alltypes.h:299:37 */
2604
2605type pthread_barrierattr_t = struct{ F__attr uint32 } /* alltypes.h:304:37 */
2606
2607type pthread_rwlockattr_t = struct{ F__attr [2]uint32 } /* alltypes.h:309:40 */
2608
2609type __sigset_t = struct{ F__bits [16]uint64 } /* alltypes.h:349:9 */
2610
2611type sigset_t = __sigset_t /* alltypes.h:349:71 */
2612
2613type pthread_attr_t = struct {
2614 F__u struct {
2615 F__ccgo_pad1 [0]uint64
2616 F__i [14]int32
2617 }
2618} /* alltypes.h:372:147 */
2619
2620type pthread_mutex_t = struct {
2621 F__u struct {
2622 F__ccgo_pad1 [0]uint64
2623 F__i [10]int32
2624 }
2625} /* alltypes.h:377:157 */
2626
2627type pthread_cond_t = struct {
2628 F__u struct {
2629 F__ccgo_pad1 [0]uint64
2630 F__i [12]int32
2631 }
2632} /* alltypes.h:387:112 */
2633
2634type pthread_rwlock_t = struct {
2635 F__u struct {
2636 F__ccgo_pad1 [0]uint64
2637 F__i [14]int32
2638 }
2639} /* alltypes.h:397:139 */
2640
2641type pthread_barrier_t = struct {
2642 F__u struct {
2643 F__ccgo_pad1 [0]uint64
2644 F__i [8]int32
2645 }
2646} /* alltypes.h:402:137 */
2647
2648type sched_param = struct {
2649 Fsched_priority int32
2650 F__reserved1 int32
2651 F__reserved2 [2]struct {
2652 F__reserved1 time_t
2653 F__reserved2 int64
2654 }
2655 F__reserved3 int32
2656 F__ccgo_pad1 [4]byte
2657} /* sched.h:19:1 */
2658
2659type timer_t = uintptr /* alltypes.h:209:14 */
2660
2661type clock_t = int64 /* alltypes.h:219:14 */
2662
2663type tm = struct {
2664 Ftm_sec int32
2665 Ftm_min int32
2666 Ftm_hour int32
2667 Ftm_mday int32
2668 Ftm_mon int32
2669 Ftm_year int32
2670 Ftm_wday int32
2671 Ftm_yday int32
2672 Ftm_isdst int32
2673 F__ccgo_pad1 [4]byte
2674 Ftm_gmtoff int64
2675 Ftm_zone uintptr
2676} /* time.h:38:1 */
2677
2678type itimerspec = struct {
2679 Fit_interval struct {
2680 Ftv_sec time_t
2681 Ftv_nsec int64
2682 }
2683 Fit_value struct {
2684 Ftv_sec time_t
2685 Ftv_nsec int64
2686 }
2687} /* time.h:80:1 */
2688
2689type __ptcb = struct {
2690 F__f uintptr
2691 F__x uintptr
2692 F__next uintptr
2693} /* pthread.h:206:1 */
2694
2695func Xgetaddrinfo(tls *TLS, host uintptr, serv uintptr, hint uintptr, res uintptr) int32 { /* getaddrinfo.c:12:5: */
2696 bp := tls.Alloc(1608)
2697 defer tls.Free(1608)
2698
2699 // var ports [2]service at bp, 8
2700
2701 // var addrs [48]address at bp+8, 1344
2702
2703 // var canon [256]int8 at bp+1352, 256
2704
2705 var outcanon uintptr
2706 var nservs int32
2707 var naddrs int32
2708 var nais int32
2709 var canon_len int32
2710 var i int32
2711 var j int32
2712 var k int32
2713 var family int32 = 0
2714 var flags int32 = 0
2715 var proto int32 = 0
2716 var socktype int32 = 0
2717 var out uintptr
2718
2719 if !(host != 0) && !(serv != 0) {
2720 return -2
2721 }
2722
2723 if hint != 0 {
2724 family = (*addrinfo)(unsafe.Pointer(hint)).Fai_family
2725 flags = (*addrinfo)(unsafe.Pointer(hint)).Fai_flags
2726 proto = (*addrinfo)(unsafe.Pointer(hint)).Fai_protocol
2727 socktype = (*addrinfo)(unsafe.Pointer(hint)).Fai_socktype
2728
2729 var mask int32 = 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x400
2730 if flags&mask != flags {
2731 return -1
2732 }
2733
2734 switch family {
2735 case 2:
2736 fallthrough
2737 case 10:
2738 fallthrough
2739 case 0:
2740 break
2741 fallthrough
2742 default:
2743 return -6
2744 }
2745 }
2746
2747 if flags&0x20 != 0 {
2748 Xabort(tls) //TODO-
2749 // /* Define the "an address is configured" condition for address
2750 // * families via ability to create a socket for the family plus
2751 // * routability of the loopback address for the family. */
2752 // static const struct sockaddr_in lo4 = {
2753 // .sin_family = AF_INET, .sin_port = 65535,
2754 // .sin_addr.s_addr = __BYTE_ORDER == __BIG_ENDIAN
2755 // ? 0x7f000001 : 0x0100007f
2756 // };
2757 // static const struct sockaddr_in6 lo6 = {
2758 // .sin6_family = AF_INET6, .sin6_port = 65535,
2759 // .sin6_addr = IN6ADDR_LOOPBACK_INIT
2760 // };
2761 // int tf[2] = { AF_INET, AF_INET6 };
2762 // const void *ta[2] = { &lo4, &lo6 };
2763 // socklen_t tl[2] = { sizeof lo4, sizeof lo6 };
2764 // for (i=0; i<2; i++) {
2765 // if (family==tf[1-i]) continue;
2766 // int s = socket(tf[i], SOCK_CLOEXEC|SOCK_DGRAM,
2767 // IPPROTO_UDP);
2768 // if (s>=0) {
2769 // int cs;
2770 // pthread_setcancelstate(
2771 // PTHREAD_CANCEL_DISABLE, &cs);
2772 // int r = connect(s, ta[i], tl[i]);
2773 // pthread_setcancelstate(cs, 0);
2774 // close(s);
2775 // if (!r) continue;
2776 // }
2777 // switch (errno) {
2778 // case EADDRNOTAVAIL:
2779 // case EAFNOSUPPORT:
2780 // case EHOSTUNREACH:
2781 // case ENETDOWN:
2782 // case ENETUNREACH:
2783 // break;
2784 // default:
2785 // return EAI_SYSTEM;
2786 // }
2787 // if (family == tf[i]) return EAI_NONAME;
2788 // family = tf[1-i];
2789 // }
2790 }
2791
2792 nservs = X__lookup_serv(tls, bp, serv, proto, socktype, flags)
2793 if nservs < 0 {
2794 return nservs
2795 }
2796
2797 naddrs = X__lookup_name(tls, bp+8, bp+1352, host, family, flags)
2798 if naddrs < 0 {
2799 return naddrs
2800 }
2801
2802 nais = nservs * naddrs
2803 canon_len = int32(Xstrlen(tls, bp+1352))
2804 out = Xcalloc(tls, uint64(1), uint64(nais)*uint64(unsafe.Sizeof(aibuf{}))+uint64(canon_len)+uint64(1))
2805 if !(out != 0) {
2806 return -10
2807 }
2808
2809 if canon_len != 0 {
2810 outcanon = out + uintptr(nais)*88
2811 Xmemcpy(tls, outcanon, bp+1352, uint64(canon_len+1))
2812 } else {
2813 outcanon = uintptr(0)
2814 }
2815
2816 for k = AssignInt32(&i, 0); i < naddrs; i++ {
2817 j = 0
2818 __1:
2819 if !(j < nservs) {
2820 goto __3
2821 }
2822 {
2823 (*aibuf)(unsafe.Pointer(out + uintptr(k)*88)).Fslot = int16(k)
2824 //TODO out[k].ai = (struct addrinfo){
2825 //TODO .ai_family = addrs[i].family,
2826 //TODO .ai_socktype = ports[j].socktype,
2827 //TODO .ai_protocol = ports[j].proto,
2828 //TODO .ai_addrlen = addrs[i].family == AF_INET
2829 //TODO ? sizeof(struct sockaddr_in)
2830 //TODO : sizeof(struct sockaddr_in6),
2831 //TODO .ai_addr = (void *)&out[k].sa,
2832 //TODO .ai_canonname = outcanon };
2833 (*aibuf)(unsafe.Pointer(out + uintptr(k)*88)).Fai.Fai_family = (*address)(unsafe.Pointer(bp + 8 + uintptr(i)*28)).Ffamily
2834 (*aibuf)(unsafe.Pointer(out + uintptr(k)*88)).Fai.Fai_socktype = int32((*service)(unsafe.Pointer(bp + uintptr(j)*4)).Fsocktype)
2835 (*aibuf)(unsafe.Pointer(out + uintptr(k)*88)).Fai.Fai_protocol = int32((*service)(unsafe.Pointer(bp + uintptr(j)*4)).Fproto)
2836 (*aibuf)(unsafe.Pointer(out + uintptr(k)*88)).Fai.Fai_addrlen = func() uint32 {
2837 if (*address)(unsafe.Pointer(bp+8+uintptr(i)*28)).Ffamily == 2 {
2838 return uint32(unsafe.Sizeof(sockaddr_in{}))
2839 }
2840 return uint32(unsafe.Sizeof(sockaddr_in6{}))
2841 }()
2842 (*aibuf)(unsafe.Pointer(out + uintptr(k)*88)).Fai.Fai_addr = out + uintptr(k)*88 + 48
2843 (*aibuf)(unsafe.Pointer(out + uintptr(k)*88)).Fai.Fai_canonname = outcanon
2844 if k != 0 {
2845 (*aibuf)(unsafe.Pointer(out + uintptr(k-1)*88)).Fai.Fai_next = out + uintptr(k)*88
2846 }
2847 switch (*address)(unsafe.Pointer(bp + 8 + uintptr(i)*28)).Ffamily {
2848 case 2:
2849 (*sockaddr_in)(unsafe.Pointer(out + uintptr(k)*88 + 48)).Fsin_family = sa_family_t(2)
2850 (*sockaddr_in)(unsafe.Pointer(out + uintptr(k)*88 + 48)).Fsin_port = Xhtons(tls, (*service)(unsafe.Pointer(bp+uintptr(j)*4)).Fport)
2851 Xmemcpy(tls, out+uintptr(k)*88+48+4, bp+8+uintptr(i)*28+8, uint64(4))
2852 break
2853 case 10:
2854 (*sockaddr_in6)(unsafe.Pointer(out + uintptr(k)*88 + 48)).Fsin6_family = sa_family_t(10)
2855 (*sockaddr_in6)(unsafe.Pointer(out + uintptr(k)*88 + 48)).Fsin6_port = Xhtons(tls, (*service)(unsafe.Pointer(bp+uintptr(j)*4)).Fport)
2856 (*sockaddr_in6)(unsafe.Pointer(out + uintptr(k)*88 + 48)).Fsin6_scope_id = (*address)(unsafe.Pointer(bp + 8 + uintptr(i)*28)).Fscopeid
2857 Xmemcpy(tls, out+uintptr(k)*88+48+8, bp+8+uintptr(i)*28+8, uint64(16))
2858 break
2859 }
2860
2861 }
2862 goto __2
2863 __2:
2864 j++
2865 k++
2866 goto __1
2867 goto __3
2868 __3:
2869 }
2870 (*aibuf)(unsafe.Pointer(out)).Fref = int16(nais)
2871 *(*uintptr)(unsafe.Pointer(res)) = out
2872 return 0
2873}
2874
2875type ucred = struct {
2876 Fpid pid_t
2877 Fuid uid_t
2878 Fgid gid_t
2879} /* socket.h:57:1 */
2880
2881type mmsghdr = struct {
2882 Fmsg_hdr struct {
2883 Fmsg_name uintptr
2884 Fmsg_namelen socklen_t
2885 F__ccgo_pad1 [4]byte
2886 Fmsg_iov uintptr
2887 Fmsg_iovlen int32
2888 F__pad1 int32
2889 Fmsg_control uintptr
2890 Fmsg_controllen socklen_t
2891 F__pad2 int32
2892 Fmsg_flags int32
2893 F__ccgo_pad2 [4]byte
2894 }
2895 Fmsg_len uint32
2896 F__ccgo_pad1 [4]byte
2897} /* socket.h:63:1 */
2898
2899func Xgethostbyaddr(tls *TLS, a uintptr, l socklen_t, af int32) uintptr { /* gethostbyaddr.c:7:16: */
2900 bp := tls.Alloc(8)
2901 defer tls.Free(8)
2902
2903 var size size_t = uint64(63)
2904 // var res uintptr at bp, 8
2905
2906 var err int32
2907 for __ccgo := true; __ccgo; __ccgo = err == 34 {
2908 Xfree(tls, _sh)
2909 _sh = Xmalloc(tls, AssignAddUint64(&size, size+uint64(1)))
2910 if !(_sh != 0) {
2911 *(*int32)(unsafe.Pointer(X__h_errno_location(tls))) = 3
2912 return uintptr(0)
2913 }
2914 err = Xgethostbyaddr_r(tls, a, l, af, _sh,
2915 _sh+uintptr(1)*32, size-size_t(unsafe.Sizeof(hostent{})), bp, X__h_errno_location(tls))
2916 }
2917 if err != 0 {
2918 return uintptr(0)
2919 }
2920 return _sh
2921}
2922
2923var _sh uintptr /* gethostbyaddr.c:9:24: */
2924
2925func 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: */
2926 bp := tls.Alloc(28)
2927 defer tls.Free(28)
2928
2929 //TODO union {
2930 //TODO struct sockaddr_in sin;
2931 //TODO struct sockaddr_in6 sin6;
2932 //TODO } sa = { .sin.sin_family = af };
2933 *(*struct {
2934 Fsin sockaddr_in
2935 F__ccgo_pad1 [12]byte
2936 })(unsafe.Pointer(bp)) = struct {
2937 Fsin sockaddr_in
2938 F__ccgo_pad1 [12]byte
2939 }{} //TODO-
2940 (*sockaddr_in)(unsafe.Pointer(bp)).Fsin_family = sa_family_t(af) //TODO-
2941 var sl socklen_t
2942 if af == 10 {
2943 sl = uint32(unsafe.Sizeof(sockaddr_in6{}))
2944 } else {
2945 sl = uint32(unsafe.Sizeof(sockaddr_in{}))
2946 }
2947 var i int32
2948
2949 *(*uintptr)(unsafe.Pointer(res)) = uintptr(0)
2950
2951 // Load address argument into sockaddr structure
2952 if af == 10 && l == socklen_t(16) {
2953 Xmemcpy(tls, bp+8, a, uint64(16))
2954 } else if af == 2 && l == socklen_t(4) {
2955 Xmemcpy(tls, bp+4, a, uint64(4))
2956 } else {
2957 *(*int32)(unsafe.Pointer(err)) = 3
2958 return 22
2959 }
2960
2961 // Align buffer and check for space for pointers and ip address
2962 i = int32(uintptr_t(buf) & (uint64(unsafe.Sizeof(uintptr(0))) - uint64(1)))
2963 if !(i != 0) {
2964 i = int32(unsafe.Sizeof(uintptr(0)))
2965 }
2966 if buflen <= uint64(5)*uint64(unsafe.Sizeof(uintptr(0)))-uint64(i)+uint64(l) {
2967 return 34
2968 }
2969 buf += uintptr(uint64(unsafe.Sizeof(uintptr(0))) - uint64(i))
2970 buflen = buflen - (uint64(5)*uint64(unsafe.Sizeof(uintptr(0))) - uint64(i) + uint64(l))
2971
2972 (*hostent)(unsafe.Pointer(h)).Fh_addr_list = buf
2973 buf += uintptr(uint64(2) * uint64(unsafe.Sizeof(uintptr(0))))
2974 (*hostent)(unsafe.Pointer(h)).Fh_aliases = buf
2975 buf += uintptr(uint64(2) * uint64(unsafe.Sizeof(uintptr(0))))
2976
2977 *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).Fh_addr_list)) = buf
2978 Xmemcpy(tls, *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).Fh_addr_list)), a, uint64(l))
2979 buf += uintptr(l)
2980 *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).Fh_addr_list + 1*8)) = uintptr(0)
2981 *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).Fh_aliases)) = buf
2982 *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).Fh_aliases + 1*8)) = uintptr(0)
2983
2984 switch Xgetnameinfo(tls, bp, sl, buf, uint32(buflen), uintptr(0), uint32(0), 0) {
2985 case -3:
2986 *(*int32)(unsafe.Pointer(err)) = 2
2987 return 11
2988 case -12:
2989 return 34
2990 default:
2991 fallthrough
2992 case -10:
2993 fallthrough
2994 case -11:
2995 fallthrough
2996 case -4:
2997 *(*int32)(unsafe.Pointer(err)) = 3
2998 return *(*int32)(unsafe.Pointer(X___errno_location(tls)))
2999 case 0:
3000 break
3001 }
3002
3003 (*hostent)(unsafe.Pointer(h)).Fh_addrtype = af
3004 (*hostent)(unsafe.Pointer(h)).Fh_length = int32(l)
3005 (*hostent)(unsafe.Pointer(h)).Fh_name = *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).Fh_aliases))
3006 *(*uintptr)(unsafe.Pointer(res)) = h
3007 return 0
3008}
3009
3010func Xgethostbyname(tls *TLS, name uintptr) uintptr { /* gethostbyname.c:8:16: */
3011 return Xgethostbyname2(tls, name, 2)
3012}
3013
3014func Xgethostbyname2(tls *TLS, name uintptr, af int32) uintptr { /* gethostbyname2.c:8:16: */
3015 bp := tls.Alloc(8)
3016 defer tls.Free(8)
3017
3018 var size size_t = uint64(63)
3019 // var res uintptr at bp, 8
3020
3021 var err int32
3022 for __ccgo := true; __ccgo; __ccgo = err == 34 {
3023 Xfree(tls, _sh1)
3024 _sh1 = Xmalloc(tls, AssignAddUint64(&size, size+uint64(1)))
3025 if !(_sh1 != 0) {
3026 *(*int32)(unsafe.Pointer(X__h_errno_location(tls))) = 3
3027 return uintptr(0)
3028 }
3029 err = Xgethostbyname2_r(tls, name, af, _sh1,
3030 _sh1+uintptr(1)*32, size-size_t(unsafe.Sizeof(hostent{})), bp, X__h_errno_location(tls))
3031 }
3032 if err != 0 {
3033 return uintptr(0)
3034 }
3035 return _sh1
3036}
3037
3038var _sh1 uintptr /* gethostbyname2.c:10:24: */
3039
3040func 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: */
3041 bp := tls.Alloc(1600)
3042 defer tls.Free(1600)
3043
3044 // var addrs [48]address at bp, 1344
3045
3046 // var canon [256]int8 at bp+1344, 256
3047
3048 var i int32
3049 var cnt int32
3050 var align size_t
3051 var need size_t
3052
3053 *(*uintptr)(unsafe.Pointer(res)) = uintptr(0)
3054 cnt = X__lookup_name(tls, bp, bp+1344, name, af, 0x02)
3055 if cnt < 0 {
3056 switch cnt {
3057 case -2:
3058 *(*int32)(unsafe.Pointer(err)) = 1
3059 return 2
3060 fallthrough
3061 case -3:
3062 *(*int32)(unsafe.Pointer(err)) = 2
3063 return 11
3064 fallthrough
3065 default:
3066 fallthrough
3067 case -4:
3068 *(*int32)(unsafe.Pointer(err)) = 3
3069 return 74
3070 fallthrough
3071 case -10:
3072 fallthrough
3073 case -11:
3074 *(*int32)(unsafe.Pointer(err)) = 3
3075 return *(*int32)(unsafe.Pointer(X___errno_location(tls)))
3076 }
3077 }
3078
3079 (*hostent)(unsafe.Pointer(h)).Fh_addrtype = af
3080 (*hostent)(unsafe.Pointer(h)).Fh_length = func() int32 {
3081 if af == 10 {
3082 return 16
3083 }
3084 return 4
3085 }()
3086
3087 // Align buffer
3088 align = -uintptr_t(buf) & (uint64(unsafe.Sizeof(uintptr(0))) - uint64(1))
3089
3090 need = uint64(4) * uint64(unsafe.Sizeof(uintptr(0)))
3091 need = need + uint64(cnt+1)*(uint64(unsafe.Sizeof(uintptr(0)))+uint64((*hostent)(unsafe.Pointer(h)).Fh_length))
3092 need = need + (Xstrlen(tls, name) + uint64(1))
3093 need = need + (Xstrlen(tls, bp+1344) + uint64(1))
3094 need = need + align
3095
3096 if need > buflen {
3097 return 34
3098 }
3099
3100 buf += uintptr(align)
3101 (*hostent)(unsafe.Pointer(h)).Fh_aliases = buf
3102 buf += uintptr(uint64(3) * uint64(unsafe.Sizeof(uintptr(0))))
3103 (*hostent)(unsafe.Pointer(h)).Fh_addr_list = buf
3104 buf += uintptr(uint64(cnt+1) * uint64(unsafe.Sizeof(uintptr(0))))
3105
3106 for i = 0; i < cnt; i++ {
3107 *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).Fh_addr_list + uintptr(i)*8)) = buf
3108 buf += uintptr((*hostent)(unsafe.Pointer(h)).Fh_length)
3109 Xmemcpy(tls, *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).Fh_addr_list + uintptr(i)*8)), bp+uintptr(i)*28+8, uint64((*hostent)(unsafe.Pointer(h)).Fh_length))
3110 }
3111 *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).Fh_addr_list + uintptr(i)*8)) = uintptr(0)
3112
3113 (*hostent)(unsafe.Pointer(h)).Fh_name = AssignPtrUintptr((*hostent)(unsafe.Pointer(h)).Fh_aliases, buf)
3114 Xstrcpy(tls, (*hostent)(unsafe.Pointer(h)).Fh_name, bp+1344)
3115 buf += uintptr(Xstrlen(tls, (*hostent)(unsafe.Pointer(h)).Fh_name) + uint64(1))
3116
3117 if Xstrcmp(tls, (*hostent)(unsafe.Pointer(h)).Fh_name, name) != 0 {
3118 *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).Fh_aliases + 1*8)) = buf
3119 Xstrcpy(tls, *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).Fh_aliases + 1*8)), name)
3120 buf += uintptr(Xstrlen(tls, *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).Fh_aliases + 1*8))) + uint64(1))
3121 } else {
3122 *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).Fh_aliases + 1*8)) = uintptr(0)
3123 }
3124
3125 *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).Fh_aliases + 2*8)) = uintptr(0)
3126
3127 *(*uintptr)(unsafe.Pointer(res)) = h
3128 return 0
3129}
3130
3131type if_nameindex = struct {
3132 Fif_index uint32
3133 F__ccgo_pad1 [4]byte
3134 Fif_name uintptr
3135} /* if.h:12:1 */
3136
3137type ifaddr = struct {
3138 Fifa_addr struct {
3139 Fsa_family sa_family_t
3140 Fsa_data [14]int8
3141 }
3142 Fifa_ifu struct {
3143 Fifu_broadaddr struct {
3144 Fsa_family sa_family_t
3145 Fsa_data [14]int8
3146 }
3147 }
3148 Fifa_ifp uintptr
3149 Fifa_next uintptr
3150} /* if.h:51:1 */
3151
3152type ifmap = struct {
3153 Fmem_start uint64
3154 Fmem_end uint64
3155 Fbase_addr uint16
3156 Firq uint8
3157 Fdma uint8
3158 Fport uint8
3159 F__ccgo_pad1 [3]byte
3160} /* if.h:64:1 */
3161
3162type ifreq = struct {
3163 Fifr_ifrn struct{ Fifrn_name [16]int8 }
3164 Fifr_ifru struct {
3165 F__ccgo_pad1 [0]uint64
3166 Fifru_addr struct {
3167 Fsa_family sa_family_t
3168 Fsa_data [14]int8
3169 }
3170 F__ccgo_pad2 [8]byte
3171 }
3172} /* if.h:76:1 */
3173
3174type ifconf = struct {
3175 Fifc_len int32
3176 F__ccgo_pad1 [4]byte
3177 Fifc_ifcu struct{ Fifcu_buf uintptr }
3178} /* if.h:116:1 */
3179
3180type ns_sect = uint32 /* nameser.h:37:3 */
3181
3182type __ns_msg = struct {
3183 F_msg uintptr
3184 F_eom uintptr
3185 F_id uint16_t
3186 F_flags uint16_t
3187 F_counts [4]uint16_t
3188 F__ccgo_pad1 [4]byte
3189 F_sections [4]uintptr
3190 F_sect ns_sect
3191 F_rrnum int32
3192 F_msg_ptr uintptr
3193} /* nameser.h:39:9 */
3194
3195type ns_msg = __ns_msg /* nameser.h:46:3 */
3196
3197type _ns_flagdata = struct {
3198 Fmask int32
3199 Fshift int32
3200} /* nameser.h:48:1 */
3201
3202type __ns_rr = struct {
3203 Fname [1025]int8
3204 F__ccgo_pad1 [1]byte
3205 Ftype uint16_t
3206 Frr_class uint16_t
3207 F__ccgo_pad2 [2]byte
3208 Fttl uint32_t
3209 Frdlength uint16_t
3210 F__ccgo_pad3 [2]byte
3211 Frdata uintptr
3212} /* nameser.h:59:9 */
3213
3214type ns_rr = __ns_rr /* nameser.h:66:3 */
3215
3216type ns_flag = uint32 /* nameser.h:87:3 */
3217
3218type ns_opcode = uint32 /* nameser.h:96:3 */
3219
3220type ns_rcode = uint32 /* nameser.h:115:3 */
3221
3222type ns_update_operation = uint32 /* nameser.h:121:3 */
3223
3224type ns_tsig_key1 = struct {
3225 Fname [1025]int8
3226 Falg [1025]int8
3227 F__ccgo_pad1 [6]byte
3228 Fdata uintptr
3229 Flen int32
3230 F__ccgo_pad2 [4]byte
3231} /* nameser.h:123:1 */
3232
3233type ns_tsig_key = ns_tsig_key1 /* nameser.h:128:28 */
3234
3235type ns_tcp_tsig_state1 = struct {
3236 Fcounter int32
3237 F__ccgo_pad1 [4]byte
3238 Fkey uintptr
3239 Fctx uintptr
3240 Fsig [512]uint8
3241 Fsiglen int32
3242 F__ccgo_pad2 [4]byte
3243} /* nameser.h:130:1 */
3244
3245type ns_tcp_tsig_state = ns_tcp_tsig_state1 /* nameser.h:137:34 */
3246
3247type ns_type = uint32 /* nameser.h:200:3 */
3248
3249type ns_class = uint32 /* nameser.h:219:3 */
3250
3251type ns_key_types = uint32 /* nameser.h:226:3 */
3252
3253type ns_cert_types = uint32 /* nameser.h:234:3 */
3254
3255type HEADER = struct {
3256 F__ccgo_pad1 [0]uint32
3257 Fid uint32 /* unsigned id: 16, unsigned rd: 1, unsigned tc: 1, unsigned aa: 1, unsigned opcode: 4, unsigned qr: 1, unsigned rcode: 4, unsigned cd: 1, unsigned ad: 1, unsigned unused: 1, unsigned ra: 1 */
3258 Fqdcount uint32 /* unsigned qdcount: 16, unsigned ancount: 16 */
3259 Fnscount uint32 /* unsigned nscount: 16, unsigned arcount: 16 */
3260} /* nameser.h:353:3 */
3261
3262// unused; purely for broken apps
3263type __res_state = struct {
3264 Fretrans int32
3265 Fretry int32
3266 Foptions uint64
3267 Fnscount int32
3268 Fnsaddr_list [3]struct {
3269 Fsin_family sa_family_t
3270 Fsin_port in_port_t
3271 Fsin_addr struct{ Fs_addr in_addr_t }
3272 Fsin_zero [8]uint8_t
3273 }
3274 Fid uint16
3275 F__ccgo_pad1 [2]byte
3276 Fdnsrch [7]uintptr
3277 Fdefdname [256]int8
3278 Fpfcode uint64
3279 Fndots uint32 /* unsigned ndots: 4, unsigned nsort: 4, unsigned ipv6_unavail: 1, unsigned unused: 23 */
3280 F__ccgo_pad2 [4]byte
3281 Fsort_list [10]struct {
3282 Faddr struct{ Fs_addr in_addr_t }
3283 Fmask uint32_t
3284 }
3285 Fqhook uintptr
3286 Frhook uintptr
3287 Fres_h_errno int32
3288 F_vcsock int32
3289 F_flags uint32
3290 F__ccgo_pad3 [4]byte
3291 F_u struct {
3292 F__ccgo_pad1 [0]uint64
3293 Fpad [52]int8
3294 F__ccgo_pad2 [4]byte
3295 }
3296} /* resolv.h:26:9 */
3297
3298// unused; purely for broken apps
3299type res_state = uintptr /* resolv.h:62:3 */
3300
3301type res_sym = struct {
3302 Fnumber int32
3303 F__ccgo_pad1 [4]byte
3304 Fname uintptr
3305 Fhumanname uintptr
3306} /* resolv.h:70:1 */
3307
3308func itoa(tls *TLS, p uintptr, x uint32) uintptr { /* getnameinfo.c:18:13: */
3309 p += uintptr(uint64(3) * uint64(unsafe.Sizeof(int32(0))))
3310 *(*int8)(unsafe.Pointer(PreDecUintptr(&p, 1))) = int8(0)
3311 for __ccgo := true; __ccgo; __ccgo = x != 0 {
3312 *(*int8)(unsafe.Pointer(PreDecUintptr(&p, 1))) = int8(uint32('0') + x%uint32(10))
3313 x = x / uint32(10)
3314 }
3315 return p
3316}
3317
3318func mkptr4(tls *TLS, s uintptr, ip uintptr) { /* getnameinfo.c:28:13: */
3319 bp := tls.Alloc(32)
3320 defer tls.Free(32)
3321
3322 Xsprintf(tls, s, ts+25,
3323 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)))))
3324}
3325
3326func mkptr6(tls *TLS, s uintptr, ip uintptr) { /* getnameinfo.c:34:13: */
3327 var i int32
3328 for i = 15; i >= 0; i-- {
3329 *(*int8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = _sxdigits[int32(*(*uint8)(unsafe.Pointer(ip + uintptr(i))))&15]
3330 *(*int8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = int8('.')
3331 *(*int8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = _sxdigits[int32(*(*uint8)(unsafe.Pointer(ip + uintptr(i))))>>4]
3332 *(*int8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = int8('.')
3333 }
3334 Xstrcpy(tls, s, ts+50)
3335}
3336
3337var _sxdigits = *(*[17]int8)(unsafe.Pointer(ts + 59)) /* getnameinfo.c:36:20 */
3338
3339func reverse_hosts(tls *TLS, buf uintptr, a uintptr, scopeid uint32, family int32) { /* getnameinfo.c:45:13: */
3340 bp := tls.Alloc(556)
3341 defer tls.Free(556)
3342
3343 // var line [512]int8 at bp+16, 512
3344
3345 var p uintptr
3346 var z uintptr
3347 var _buf [1032]uint8
3348 _ = _buf
3349 // var atmp [16]uint8 at bp, 16
3350
3351 // var iplit address at bp+528, 28
3352
3353 //TODO FILE _f, *f = __fopen_rb_ca("/etc/hosts", &_f, _buf, sizeof _buf);
3354 var f uintptr = Xfopen(tls, ts+76, ts+87)
3355 if !(f != 0) {
3356 return
3357 }
3358 if family == 2 {
3359 Xmemcpy(tls, bp+uintptr(12), a, uint64(4))
3360 Xmemcpy(tls, bp, ts+90, uint64(12))
3361 a = bp /* &atmp[0] */
3362 }
3363 for Xfgets(tls, bp+16, int32(unsafe.Sizeof([512]int8{})), f) != 0 {
3364 if AssignUintptr(&p, Xstrchr(tls, bp+16, '#')) != 0 {
3365 *(*int8)(unsafe.Pointer(PostIncUintptr(&p, 1))) = int8('\n')
3366 *(*int8)(unsafe.Pointer(p)) = int8(0)
3367 }
3368
3369 for p = bp + 16; /* &line[0] */ *(*int8)(unsafe.Pointer(p)) != 0 && !(__isspace(tls, int32(*(*int8)(unsafe.Pointer(p)))) != 0); p++ {
3370 }
3371 *(*int8)(unsafe.Pointer(PostIncUintptr(&p, 1))) = int8(0)
3372 if X__lookup_ipliteral(tls, bp+528, bp+16, 0) <= 0 {
3373 continue
3374 }
3375
3376 if (*address)(unsafe.Pointer(bp+528)).Ffamily == 2 {
3377 Xmemcpy(tls, bp+528+8+uintptr(12), bp+528+8, uint64(4))
3378 Xmemcpy(tls, bp+528+8, ts+90, uint64(12))
3379 (*address)(unsafe.Pointer(bp + 528 /* &iplit */)).Fscopeid = uint32(0)
3380 }
3381
3382 if Xmemcmp(tls, a, bp+528+8, uint64(16)) != 0 || (*address)(unsafe.Pointer(bp+528)).Fscopeid != scopeid {
3383 continue
3384 }
3385
3386 for ; *(*int8)(unsafe.Pointer(p)) != 0 && __isspace(tls, int32(*(*int8)(unsafe.Pointer(p)))) != 0; p++ {
3387 }
3388 for z = p; *(*int8)(unsafe.Pointer(z)) != 0 && !(__isspace(tls, int32(*(*int8)(unsafe.Pointer(z)))) != 0); z++ {
3389 }
3390 *(*int8)(unsafe.Pointer(z)) = int8(0)
3391 if (int64(z)-int64(p))/1 < int64(256) {
3392 Xmemcpy(tls, buf, p, uint64((int64(z)-int64(p))/1+int64(1)))
3393 break
3394 }
3395 }
3396 //TODO __fclose_ca(f);
3397 Xfclose(tls, f)
3398}
3399
3400func reverse_services(tls *TLS, buf uintptr, port int32, dgram int32) { /* getnameinfo.c:87:13: */
3401 Xabort(tls) //TODO-
3402 // unsigned long svport;
3403 // char line[128], *p, *z;
3404 // unsigned char _buf[1032];
3405 // FILE _f, *f = __fopen_rb_ca("/etc/services", &_f, _buf, sizeof _buf);
3406 // if (!f) return;
3407 // while (fgets(line, sizeof line, f)) {
3408 // if ((p=strchr(line, '#'))) *p++='\n', *p=0;
3409
3410 // for (p=line; *p && !isspace(*p); p++);
3411 // if (!*p) continue;
3412 // *p++ = 0;
3413 // svport = strtoul(p, &z, 10);
3414
3415 // if (svport != port || z==p) continue;
3416 // if (dgram && strncmp(z, "/udp", 4)) continue;
3417 // if (!dgram && strncmp(z, "/tcp", 4)) continue;
3418 // if (p-line > 32) continue;
3419
3420 // memcpy(buf, line, p-line);
3421 // break;
3422 // }
3423 // __fclose_ca(f);
3424}
3425
3426func 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: */
3427 bp := tls.Alloc(347)
3428 defer tls.Free(347)
3429
3430 // var ptr [78]int8 at bp, 78
3431
3432 // var buf [256]int8 at bp+78, 256
3433
3434 // var num [13]int8 at bp+334, 13
3435
3436 var af int32 = int32((*sockaddr)(unsafe.Pointer(sa1)).Fsa_family)
3437 var a uintptr
3438 var scopeid uint32
3439
3440 switch af {
3441 case 2:
3442 a = sa1 + 4
3443 if uint64(sl) < uint64(unsafe.Sizeof(sockaddr_in{})) {
3444 return -6
3445 }
3446 mkptr4(tls, bp, a)
3447 scopeid = uint32(0)
3448 break
3449 case 10:
3450 a = sa1 + 8
3451 if uint64(sl) < uint64(unsafe.Sizeof(sockaddr_in6{})) {
3452 return -6
3453 }
3454 if Xmemcmp(tls, a, ts+90, uint64(12)) != 0 {
3455 mkptr6(tls, bp, a)
3456 } else {
3457 mkptr4(tls, bp, a+uintptr(12))
3458 }
3459 scopeid = (*sockaddr_in6)(unsafe.Pointer(sa1)).Fsin6_scope_id
3460 break
3461 default:
3462 return -6
3463 }
3464
3465 if node != 0 && nodelen != 0 {
3466 *(*int8)(unsafe.Pointer(bp + 78)) = int8(0)
3467 if !(flags&0x01 != 0) {
3468 reverse_hosts(tls, bp+78, a, scopeid, af)
3469 }
3470 if !(int32(*(*int8)(unsafe.Pointer(bp + 78))) != 0) && !(flags&0x01 != 0) {
3471 Xabort(tls) //TODO-
3472 // unsigned char query[18+PTR_MAX], reply[512];
3473 // int qlen = __res_mkquery(0, ptr, 1, RR_PTR,
3474 // 0, 0, 0, query, sizeof query);
3475 // query[3] = 0; /* don't need AD flag */
3476 // int rlen = __res_send(query, qlen, reply, sizeof reply);
3477 // buf[0] = 0;
3478 // if (rlen > 0)
3479 // __dns_parse(reply, rlen, dns_parse_callback, buf);
3480 }
3481 if !(int32(*(*int8)(unsafe.Pointer(bp + 78))) != 0) {
3482 if flags&0x08 != 0 {
3483 return -2
3484 }
3485 Xinet_ntop(tls, af, a, bp+78, uint32(unsafe.Sizeof([256]int8{})))
3486 if scopeid != 0 {
3487 Xabort(tls) //TODO-
3488 // char *p = 0, tmp[IF_NAMESIZE+1];
3489 // if (!(flags & NI_NUMERICSCOPE) &&
3490 // (IN6_IS_ADDR_LINKLOCAL(a) ||
3491 // IN6_IS_ADDR_MC_LINKLOCAL(a)))
3492 // p = if_indextoname(scopeid, tmp+1);
3493 // if (!p)
3494 // p = itoa(num, scopeid);
3495 // *--p = '%';
3496 // strcat(buf, p);
3497 }
3498 }
3499 if Xstrlen(tls, bp+78) >= size_t(nodelen) {
3500 return -12
3501 }
3502 Xstrcpy(tls, node, bp+78)
3503 }
3504
3505 if serv != 0 && servlen != 0 {
3506 var p uintptr = bp + 78 /* buf */
3507 var port int32 = int32(Xntohs(tls, (*sockaddr_in)(unsafe.Pointer(sa1)).Fsin_port))
3508 *(*int8)(unsafe.Pointer(bp + 78)) = int8(0)
3509 if !(flags&0x02 != 0) {
3510 reverse_services(tls, bp+78, port, flags&0x10)
3511 }
3512 if !(int32(*(*int8)(unsafe.Pointer(p))) != 0) {
3513 p = itoa(tls, bp+334, uint32(port))
3514 }
3515 if Xstrlen(tls, p) >= size_t(servlen) {
3516 return -12
3517 }
3518 Xstrcpy(tls, serv, p)
3519 }
3520
3521 return 0
3522}
3523
3524var Xh_errno int32 /* h_errno.c:4:5: */
3525
3526func X__h_errno_location(tls *TLS) uintptr { /* h_errno.c:6:5: */
3527 return uintptr(unsafe.Pointer(&Xh_errno))
3528}
3529
3530func X__inet_aton(tls *TLS, s0 uintptr, dest uintptr) int32 { /* inet_aton.c:7:5: */
3531 bp := tls.Alloc(40)
3532 defer tls.Free(40)
3533
3534 var s uintptr = s0
3535 var d uintptr = dest
3536 *(*[4]uint64)(unsafe.Pointer(bp /* a */)) = [4]uint64{0: uint64(0)}
3537 // var z uintptr at bp+32, 8
3538
3539 var i int32
3540
3541 for i = 0; i < 4; i++ {
3542 *(*uint64)(unsafe.Pointer(bp + uintptr(i)*8)) = Xstrtoul(tls, s, bp+32, 0)
3543 if *(*uintptr)(unsafe.Pointer(bp + 32)) == s || *(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))) != 0 && int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32))))) != '.' || !(func() int32 {
3544 if 0 != 0 {
3545 return Xisdigit(tls, int32(*(*int8)(unsafe.Pointer(s))))
3546 }
3547 return Bool32(uint32(*(*int8)(unsafe.Pointer(s)))-uint32('0') < uint32(10))
3548 }() != 0) {
3549 return 0
3550 }
3551 if !(int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32))))) != 0) {
3552 break
3553 }
3554 s = *(*uintptr)(unsafe.Pointer(bp + 32)) + uintptr(1)
3555 }
3556 if i == 4 {
3557 return 0
3558 }
3559 switch i {
3560 case 0:
3561 *(*uint64)(unsafe.Pointer(bp + 1*8)) = *(*uint64)(unsafe.Pointer(bp)) & uint64(0xffffff)
3562 AssignShrPtrUint64(bp, int(24))
3563 fallthrough
3564 case 1:
3565 *(*uint64)(unsafe.Pointer(bp + 2*8)) = *(*uint64)(unsafe.Pointer(bp + 1*8)) & uint64(0xffff)
3566 AssignShrPtrUint64(bp+1*8, int(16))
3567 fallthrough
3568 case 2:
3569 *(*uint64)(unsafe.Pointer(bp + 3*8)) = *(*uint64)(unsafe.Pointer(bp + 2*8)) & uint64(0xff)
3570 AssignShrPtrUint64(bp+2*8, int(8))
3571 }
3572 for i = 0; i < 4; i++ {
3573 if *(*uint64)(unsafe.Pointer(bp + uintptr(i)*8)) > uint64(255) {
3574 return 0
3575 }
3576 *(*uint8)(unsafe.Pointer(d + uintptr(i))) = uint8(*(*uint64)(unsafe.Pointer(bp + uintptr(i)*8)))
3577 }
3578 return 1
3579}
3580
3581func Xinet_ntop(tls *TLS, af int32, a0 uintptr, s uintptr, l socklen_t) uintptr { /* inet_ntop.c:7:12: */
3582 bp := tls.Alloc(276)
3583 defer tls.Free(276)
3584
3585 var a uintptr = a0
3586 var i int32
3587 var j int32
3588 var max int32
3589 var best int32
3590 // var buf [100]int8 at bp+176, 100
3591
3592 switch af {
3593 case 2:
3594 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 {
3595 return s
3596 }
3597 break
3598 case 10:
3599 if Xmemcmp(tls, a, ts+90, uint64(12)) != 0 {
3600 Xsnprintf(tls, bp+176, uint64(unsafe.Sizeof([100]int8{})),
3601 ts+115,
3602 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))),
3603 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))),
3604 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))),
3605 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)))))
3606 } else {
3607 Xsnprintf(tls, bp+176, uint64(unsafe.Sizeof([100]int8{})),
3608 ts+139,
3609 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))),
3610 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))),
3611 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))),
3612 int32(*(*uint8)(unsafe.Pointer(a + 12))), int32(*(*uint8)(unsafe.Pointer(a + 13))), int32(*(*uint8)(unsafe.Pointer(a + 14))), int32(*(*uint8)(unsafe.Pointer(a + 15)))))
3613 }
3614 // Replace longest /(^0|:)[:0]{2,}/ with "::"
3615 i = AssignInt32(&best, 0)
3616 max = 2
3617 for ; *(*int8)(unsafe.Pointer(bp + 176 + uintptr(i))) != 0; i++ {
3618 if i != 0 && int32(*(*int8)(unsafe.Pointer(bp + 176 + uintptr(i)))) != ':' {
3619 continue
3620 }
3621 j = int32(Xstrspn(tls, bp+176+uintptr(i), ts+169))
3622 if j > max {
3623 best = i
3624 max = j
3625 }
3626 }
3627 if max > 3 {
3628 *(*int8)(unsafe.Pointer(bp + 176 + uintptr(best))) = AssignPtrInt8(bp+176+uintptr(best+1), int8(':'))
3629 Xmemmove(tls, bp+176+uintptr(best)+uintptr(2), bp+176+uintptr(best)+uintptr(max), uint64(i-best-max+1))
3630 }
3631 if Xstrlen(tls, bp+176) < size_t(l) {
3632 Xstrcpy(tls, s, bp+176)
3633 return s
3634 }
3635 break
3636 default:
3637 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 97
3638 return uintptr(0)
3639 }
3640 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 28
3641 return uintptr(0)
3642}
3643
3644func hexval(tls *TLS, c uint32) int32 { /* inet_pton.c:7:12: */
3645 if c-uint32('0') < uint32(10) {
3646 return int32(c - uint32('0'))
3647 }
3648 c = c | uint32(32)
3649 if c-uint32('a') < uint32(6) {
3650 return int32(c - uint32('a') + uint32(10))
3651 }
3652 return -1
3653}
3654
3655func Xinet_pton(tls *TLS, af int32, s uintptr, a0 uintptr) int32 { /* inet_pton.c:15:5: */
3656 bp := tls.Alloc(16)
3657 defer tls.Free(16)
3658
3659 // var ip [8]uint16_t at bp, 16
3660
3661 var a uintptr = a0
3662 var i int32
3663 var j int32
3664 var v int32
3665 var d int32
3666 var brk int32 = -1
3667 var need_v4 int32 = 0
3668
3669 if af == 2 {
3670 for i = 0; i < 4; i++ {
3671 for v = AssignInt32(&j, 0); j < 3 && func() int32 {
3672 if 0 != 0 {
3673 return Xisdigit(tls, int32(*(*int8)(unsafe.Pointer(s + uintptr(j)))))
3674 }
3675 return Bool32(uint32(*(*int8)(unsafe.Pointer(s + uintptr(j))))-uint32('0') < uint32(10))
3676 }() != 0; j++ {
3677 v = 10*v + int32(*(*int8)(unsafe.Pointer(s + uintptr(j)))) - '0'
3678 }
3679 if j == 0 || j > 1 && int32(*(*int8)(unsafe.Pointer(s))) == '0' || v > 255 {
3680 return 0
3681 }
3682 *(*uint8)(unsafe.Pointer(a + uintptr(i))) = uint8(v)
3683 if int32(*(*int8)(unsafe.Pointer(s + uintptr(j)))) == 0 && i == 3 {
3684 return 1
3685 }
3686 if int32(*(*int8)(unsafe.Pointer(s + uintptr(j)))) != '.' {
3687 return 0
3688 }
3689 s += uintptr(j + 1)
3690 }
3691 return 0
3692 } else if af != 10 {
3693 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 97
3694 return -1
3695 }
3696
3697 if int32(*(*int8)(unsafe.Pointer(s))) == ':' && int32(*(*int8)(unsafe.Pointer(PreIncUintptr(&s, 1)))) != ':' {
3698 return 0
3699 }
3700
3701 for i = 0; ; i++ {
3702 if int32(*(*int8)(unsafe.Pointer(s))) == ':' && brk < 0 {
3703 brk = i
3704 *(*uint16_t)(unsafe.Pointer(bp + uintptr(i&7)*2)) = uint16_t(0)
3705 if !(int32(*(*int8)(unsafe.Pointer(PreIncUintptr(&s, 1)))) != 0) {
3706 break
3707 }
3708 if i == 7 {
3709 return 0
3710 }
3711 continue
3712 }
3713 for v = AssignInt32(&j, 0); j < 4 && AssignInt32(&d, hexval(tls, uint32(*(*int8)(unsafe.Pointer(s + uintptr(j)))))) >= 0; j++ {
3714 v = 16*v + d
3715 }
3716 if j == 0 {
3717 return 0
3718 }
3719 *(*uint16_t)(unsafe.Pointer(bp + uintptr(i&7)*2)) = uint16_t(v)
3720 if !(int32(*(*int8)(unsafe.Pointer(s + uintptr(j)))) != 0) && (brk >= 0 || i == 7) {
3721 break
3722 }
3723 if i == 7 {
3724 return 0
3725 }
3726 if int32(*(*int8)(unsafe.Pointer(s + uintptr(j)))) != ':' {
3727 if int32(*(*int8)(unsafe.Pointer(s + uintptr(j)))) != '.' || i < 6 && brk < 0 {
3728 return 0
3729 }
3730 need_v4 = 1
3731 i++
3732 break
3733 }
3734 s += uintptr(j + 1)
3735 }
3736 if brk >= 0 {
3737 Xmemmove(tls, bp+uintptr(brk)*2+uintptr(7)*2-uintptr(i)*2, bp+uintptr(brk)*2, uint64(2*(i+1-brk)))
3738 for j = 0; j < 7-i; j++ {
3739 *(*uint16_t)(unsafe.Pointer(bp + uintptr(brk+j)*2)) = uint16_t(0)
3740 }
3741 }
3742 for j = 0; j < 8; j++ {
3743 *(*uint8)(unsafe.Pointer(PostIncUintptr(&a, 1))) = uint8(int32(*(*uint16_t)(unsafe.Pointer(bp + uintptr(j)*2))) >> 8)
3744 *(*uint8)(unsafe.Pointer(PostIncUintptr(&a, 1))) = uint8(*(*uint16_t)(unsafe.Pointer(bp + uintptr(j)*2)))
3745 }
3746 if need_v4 != 0 && Xinet_pton(tls, 2, s, a-uintptr(4)) <= 0 {
3747 return 0
3748 }
3749 return 1
3750}
3751
3752func X__lookup_ipliteral(tls *TLS, buf uintptr, name uintptr, family int32) int32 { /* lookup_ipliteral.c:12:5: */
3753 bp := tls.Alloc(96)
3754 defer tls.Free(96)
3755
3756 // var a4 in_addr at bp, 4
3757
3758 // var a6 in6_addr at bp+68, 16
3759
3760 if X__inet_aton(tls, name, bp) > 0 {
3761 if family == 10 { // wrong family
3762 return -2
3763 }
3764 Xmemcpy(tls, buf+8, bp, uint64(unsafe.Sizeof(in_addr{})))
3765 (*address)(unsafe.Pointer(buf)).Ffamily = 2
3766 (*address)(unsafe.Pointer(buf)).Fscopeid = uint32(0)
3767 return 1
3768 }
3769 // var tmp [64]int8 at bp+4, 64
3770
3771 var p uintptr = Xstrchr(tls, name, '%')
3772 // var z uintptr at bp+88, 8
3773
3774 var scopeid uint64 = uint64(0)
3775 if p != 0 && (int64(p)-int64(name))/1 < int64(64) {
3776 Xmemcpy(tls, bp+4, name, uint64((int64(p)-int64(name))/1))
3777 *(*int8)(unsafe.Pointer(bp + 4 + uintptr((int64(p)-int64(name))/1))) = int8(0)
3778 name = bp + 4 /* &tmp[0] */
3779 }
3780
3781 if Xinet_pton(tls, 10, name, bp+68) <= 0 {
3782 return 0
3783 }
3784 if family == 2 { // wrong family
3785 return -2
3786 }
3787
3788 Xmemcpy(tls, buf+8, bp+68, uint64(unsafe.Sizeof(in6_addr{})))
3789 (*address)(unsafe.Pointer(buf)).Ffamily = 10
3790 if p != 0 {
3791 if func() int32 {
3792 if 0 != 0 {
3793 return Xisdigit(tls, int32(*(*int8)(unsafe.Pointer(PreIncUintptr(&p, 1)))))
3794 }
3795 return Bool32(uint32(*(*int8)(unsafe.Pointer(PreIncUintptr(&p, 1))))-uint32('0') < uint32(10))
3796 }() != 0 {
3797 scopeid = Xstrtoull(tls, p, bp+88, 10)
3798 } else {
3799 *(*uintptr)(unsafe.Pointer(bp + 88 /* z */)) = p - uintptr(1)
3800 }
3801 if *(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 88)))) != 0 {
3802 Xabort(tls) //TODO-
3803 // if (!IN6_IS_ADDR_LINKLOCAL(&a6) &&
3804 // !IN6_IS_ADDR_MC_LINKLOCAL(&a6))
3805 // return EAI_NONAME;
3806 // scopeid = if_nametoindex(p);
3807 // if (!scopeid) return EAI_NONAME;
3808 }
3809 if scopeid > uint64(0xffffffff) {
3810 return -2
3811 }
3812 }
3813 (*address)(unsafe.Pointer(buf)).Fscopeid = uint32(scopeid)
3814 return 1
3815}
3816
3817type mode_t = uint32 /* alltypes.h:152:18 */
3818
3819type flock = struct {
3820 Fl_type int16
3821 Fl_whence int16
3822 F__ccgo_pad1 [4]byte
3823 Fl_start off_t
3824 Fl_len off_t
3825 Fl_pid pid_t
3826 F__ccgo_pad2 [4]byte
3827} /* fcntl.h:24:1 */
3828
3829func is_valid_hostname(tls *TLS, host uintptr) int32 { /* lookup_name.c:18:12: */
3830 var s uintptr
3831 //TODO if (strnlen(host, 255)-1 >= 254 || mbstowcs(0, host, 0) == -1) return 0;
3832 if Xstrnlen(tls, host, uint64(255))-uint64(1) >= uint64(254) {
3833 return 0
3834 }
3835 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++ {
3836 }
3837 return BoolInt32(!(*(*uint8)(unsafe.Pointer(s)) != 0))
3838}
3839
3840var Xzero_struct_address address /* lookup_name.c:27:16: */
3841
3842func name_from_null(tls *TLS, buf uintptr, name uintptr, family int32, flags int32) int32 { /* lookup_name.c:29:12: */
3843 var cnt int32 = 0
3844 if name != 0 {
3845 return 0
3846 }
3847 if flags&0x01 != 0 {
3848 //TODO if (family != AF_INET6)
3849 //TODO buf[cnt++] = (struct address){ .family = AF_INET };
3850 if family != 10 {
3851 var x = Xzero_struct_address
3852 x.Ffamily = 2
3853 *(*address)(unsafe.Pointer(buf + uintptr(PostIncInt32(&cnt, 1))*28)) = x
3854 }
3855 //TODO if (family != AF_INET)
3856 //TODO buf[cnt++] = (struct address){ .family = AF_INET6 };
3857 if family != 2 {
3858 var x = Xzero_struct_address
3859 x.Ffamily = 10
3860 *(*address)(unsafe.Pointer(buf + uintptr(PostIncInt32(&cnt, 1))*28)) = x
3861 }
3862 } else {
3863 Xabort(tls) //TODO-
3864 // if (family != AF_INET6)
3865 // buf[cnt++] = (struct address){ .family = AF_INET, .addr = { 127,0,0,1 } };
3866 // if (family != AF_INET)
3867 // buf[cnt++] = (struct address){ .family = AF_INET6, .addr = { [15] = 1 } };
3868 }
3869 return cnt
3870}
3871
3872func name_from_numeric(tls *TLS, buf uintptr, name uintptr, family int32) int32 { /* lookup_name.c:58:12: */
3873 return X__lookup_ipliteral(tls, buf, name, family)
3874}
3875
3876func name_from_hosts(tls *TLS, buf uintptr, canon uintptr, name uintptr, family int32) int32 { /* lookup_name.c:63:12: */
3877 bp := tls.Alloc(512)
3878 defer tls.Free(512)
3879
3880 // var line [512]int8 at bp, 512
3881
3882 var l size_t = Xstrlen(tls, name)
3883 var cnt int32 = 0
3884 var badfam int32 = 0
3885 var _buf [1032]uint8
3886 _ = _buf
3887 //TODO FILE _f, *f = __fopen_rb_ca("/etc/hosts", &_f, _buf, sizeof _buf);
3888 var _f FILE
3889 _ = _f
3890 var f uintptr = Xfopen(tls, ts+76, ts+87)
3891 if !(f != 0) {
3892 switch *(*int32)(unsafe.Pointer(X___errno_location(tls))) {
3893 case 2:
3894 fallthrough
3895 case 20:
3896 fallthrough
3897 case 13:
3898 return 0
3899 fallthrough
3900 default:
3901 return -11
3902 }
3903 }
3904 for Xfgets(tls, bp, int32(unsafe.Sizeof([512]int8{})), f) != 0 && cnt < 48 {
3905 var p uintptr
3906 var z uintptr
3907
3908 if AssignUintptr(&p, Xstrchr(tls, bp, '#')) != 0 {
3909 *(*int8)(unsafe.Pointer(PostIncUintptr(&p, 1))) = int8('\n')
3910 *(*int8)(unsafe.Pointer(p)) = int8(0)
3911 }
3912 for p = bp + uintptr(1); AssignUintptr(&p, Xstrstr(tls, p, name)) != 0 && (!(__isspace(tls, int32(*(*int8)(unsafe.Pointer(p + UintptrFromInt32(-1))))) != 0) || !(__isspace(tls, int32(*(*int8)(unsafe.Pointer(p + uintptr(l))))) != 0)); p++ {
3913 }
3914 if !(p != 0) {
3915 continue
3916 }
3917
3918 // Isolate IP address to parse
3919 for p = bp; /* &line[0] */ *(*int8)(unsafe.Pointer(p)) != 0 && !(__isspace(tls, int32(*(*int8)(unsafe.Pointer(p)))) != 0); p++ {
3920 }
3921 *(*int8)(unsafe.Pointer(PostIncUintptr(&p, 1))) = int8(0)
3922 switch name_from_numeric(tls, buf+uintptr(cnt)*28, bp, family) {
3923 case 1:
3924 cnt++
3925 break
3926 case 0:
3927 continue
3928 default:
3929 badfam = -2
3930 continue
3931 }
3932
3933 // Extract first name as canonical name
3934 for ; *(*int8)(unsafe.Pointer(p)) != 0 && __isspace(tls, int32(*(*int8)(unsafe.Pointer(p)))) != 0; p++ {
3935 }
3936 for z = p; *(*int8)(unsafe.Pointer(z)) != 0 && !(__isspace(tls, int32(*(*int8)(unsafe.Pointer(z)))) != 0); z++ {
3937 }
3938 *(*int8)(unsafe.Pointer(z)) = int8(0)
3939 if is_valid_hostname(tls, p) != 0 {
3940 Xmemcpy(tls, canon, p, uint64((int64(z)-int64(p))/1+int64(1)))
3941 }
3942 }
3943 //TODO __fclose_ca(f);
3944 Xfclose(tls, f)
3945 if cnt != 0 {
3946 return cnt
3947 }
3948 return badfam
3949}
3950
3951type dpc_ctx = struct {
3952 Faddrs uintptr
3953 Fcanon uintptr
3954 Fcnt int32
3955 F__ccgo_pad1 [4]byte
3956} /* lookup_name.c:112:1 */
3957
3958func name_from_dns_search(tls *TLS, buf uintptr, canon uintptr, name uintptr, family int32) int32 { /* lookup_name.c:191:12: */
3959 return -1 //TODO-
3960 Xabort(tls)
3961 return int32(0) //TODO-
3962 // char search[256];
3963 // struct resolvconf conf;
3964 // size_t l, dots;
3965 // char *p, *z;
3966
3967 // if (__get_resolv_conf(&conf, search, sizeof search) < 0) return -1;
3968
3969 // /* Count dots, suppress search when >=ndots or name ends in
3970 // * a dot, which is an explicit request for global scope. */
3971 // for (dots=l=0; name[l]; l++) if (name[l]=='.') dots++;
3972 // if (dots >= conf.ndots || name[l-1]=='.') *search = 0;
3973
3974 // /* Strip final dot for canon, fail if multiple trailing dots. */
3975 // if (name[l-1]=='.') l--;
3976 // if (!l || name[l-1]=='.') return EAI_NONAME;
3977
3978 // /* This can never happen; the caller already checked length. */
3979 // if (l >= 256) return EAI_NONAME;
3980
3981 // /* Name with search domain appended is setup in canon[]. This both
3982 // * provides the desired default canonical name (if the requested
3983 // * name is not a CNAME record) and serves as a buffer for passing
3984 // * the full requested name to name_from_dns. */
3985 // memcpy(canon, name, l);
3986 // canon[l] = '.';
3987
3988 // for (p=search; *p; p=z) {
3989 // for (; isspace(*p); p++);
3990 // for (z=p; *z && !isspace(*z); z++);
3991 // if (z==p) break;
3992 // if (z-p < 256 - l - 1) {
3993 // memcpy(canon+l+1, p, z-p);
3994 // canon[z-p+1+l] = 0;
3995 // int cnt = name_from_dns(buf, canon, canon, family, &conf);
3996 // if (cnt) return cnt;
3997 // }
3998 // }
3999
4000 // canon[l] = 0;
4001 // return name_from_dns(buf, canon, name, family, &conf);
4002}
4003
4004type policy = struct {
4005 Faddr [16]uint8
4006 Flen uint8
4007 Fmask uint8
4008 Fprec uint8
4009 Flabel uint8
4010} /* lookup_name.c:237:14 */
4011
4012var defpolicy = [6]policy{
4013 {Faddr: *(*[16]uint8)(unsafe.Pointer(ts + 172)), Flen: uint8(15), Fmask: uint8(0xff), Fprec: uint8(50)},
4014 {Faddr: *(*[16]uint8)(unsafe.Pointer(ts + 189)), Flen: uint8(11), Fmask: uint8(0xff), Fprec: uint8(35), Flabel: uint8(4)},
4015 {Faddr: *(*[16]uint8)(unsafe.Pointer(ts + 205)), Flen: uint8(1), Fmask: uint8(0xff), Fprec: uint8(30), Flabel: uint8(2)},
4016 {Faddr: *(*[16]uint8)(unsafe.Pointer(ts + 221)), Flen: uint8(3), Fmask: uint8(0xff), Fprec: uint8(5), Flabel: uint8(5)},
4017 {Faddr: *(*[16]uint8)(unsafe.Pointer(ts + 237)), Fmask: uint8(0xfe), Fprec: uint8(3), Flabel: uint8(13)},
4018 // Last rule must match all addresses to stop loop.
4019 {Faddr: *(*[16]uint8)(unsafe.Pointer(ts + 253)), Fprec: uint8(40), Flabel: uint8(1)},
4020} /* lookup_name.c:241:3 */
4021
4022func policyof(tls *TLS, a uintptr) uintptr { /* lookup_name.c:259:28: */
4023 var i int32
4024 for i = 0; ; i++ {
4025 if Xmemcmp(tls, a, uintptr(unsafe.Pointer(&defpolicy))+uintptr(i)*20, uint64(defpolicy[i].Flen)) != 0 {
4026 continue
4027 }
4028 if int32(*(*uint8_t)(unsafe.Pointer(a + uintptr(defpolicy[i].Flen))))&int32(defpolicy[i].Fmask) !=
4029 int32(*(*uint8)(unsafe.Pointer(uintptr(unsafe.Pointer(&defpolicy)) + uintptr(i)*20 + uintptr(defpolicy[i].Flen)))) {
4030 continue
4031 }
4032 return uintptr(unsafe.Pointer(&defpolicy)) + uintptr(i)*20
4033 }
4034 return uintptr(0)
4035}
4036
4037func labelof(tls *TLS, a uintptr) int32 { /* lookup_name.c:272:12: */
4038 return int32((*policy)(unsafe.Pointer(policyof(tls, a))).Flabel)
4039}
4040
4041func scopeof(tls *TLS, a uintptr) int32 { /* lookup_name.c:277:12: */
4042 if int32(*(*uint8_t)(unsafe.Pointer(a))) == 0xff {
4043 return int32(*(*uint8_t)(unsafe.Pointer(a + 1))) & 15
4044 }
4045 if int32(*(*uint8_t)(unsafe.Pointer(a))) == 0xfe && int32(*(*uint8_t)(unsafe.Pointer(a + 1)))&0xc0 == 0x80 {
4046 return 2
4047 }
4048 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 {
4049 return 2
4050 }
4051 if int32(*(*uint8_t)(unsafe.Pointer(a))) == 0xfe && int32(*(*uint8_t)(unsafe.Pointer(a + 1)))&0xc0 == 0xc0 {
4052 return 5
4053 }
4054 return 14
4055}
4056
4057func prefixmatch(tls *TLS, s uintptr, d uintptr) int32 { /* lookup_name.c:286:12: */
4058 // FIXME: The common prefix length should be limited to no greater
4059 // than the nominal length of the prefix portion of the source
4060 // address. However the definition of the source prefix length is
4061 // not clear and thus this limiting is not yet implemented.
4062 var i uint32
4063 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++ {
4064 }
4065 return int32(i)
4066}
4067
4068func addrcmp(tls *TLS, _a uintptr, _b uintptr) int32 { /* lookup_name.c:305:12: */
4069 var a uintptr = _a
4070 var b uintptr = _b
4071 return (*address)(unsafe.Pointer(b)).Fsortkey - (*address)(unsafe.Pointer(a)).Fsortkey
4072}
4073
4074func X__lookup_name(tls *TLS, buf uintptr, canon uintptr, name uintptr, family int32, flags int32) int32 { /* lookup_name.c:311:5: */
4075 bp := tls.Alloc(92)
4076 defer tls.Free(92)
4077
4078 var cnt int32 = 0
4079 var i int32
4080 var j int32
4081 _ = j
4082
4083 *(*int8)(unsafe.Pointer(canon)) = int8(0)
4084 if name != 0 {
4085 // reject empty name and check len so it fits into temp bufs
4086 var l size_t = Xstrnlen(tls, name, uint64(255))
4087 if l-uint64(1) >= uint64(254) {
4088 return -2
4089 }
4090 Xmemcpy(tls, canon, name, l+uint64(1))
4091 }
4092
4093 // Procedurally, a request for v6 addresses with the v4-mapped
4094 // flag set is like a request for unspecified family, followed
4095 // by filtering of the results.
4096 if flags&0x08 != 0 {
4097 if family == 10 {
4098 family = 0
4099 } else {
4100 flags = flags - 0x08
4101 }
4102 }
4103
4104 // Try each backend until there's at least one result.
4105 cnt = name_from_null(tls, buf, name, family, flags)
4106 if !(cnt != 0) {
4107 cnt = name_from_numeric(tls, buf, name, family)
4108 }
4109 if !(cnt != 0) && !(flags&0x04 != 0) {
4110 cnt = name_from_hosts(tls, buf, canon, name, family)
4111 if !(cnt != 0) {
4112 cnt = name_from_dns_search(tls, buf, canon, name, family)
4113 }
4114 }
4115 if cnt <= 0 {
4116 if cnt != 0 {
4117 return cnt
4118 }
4119 return -2
4120 }
4121
4122 // Filter/transform results for v4-mapped lookup, if requested.
4123 if flags&0x08 != 0 {
4124 Xabort(tls) //TODO-
4125 // if (!(flags & AI_ALL)) {
4126 // /* If any v6 results exist, remove v4 results. */
4127 // for (i=0; i<cnt && buf[i].family != AF_INET6; i++);
4128 // if (i<cnt) {
4129 // for (j=0; i<cnt; i++) {
4130 // if (buf[i].family == AF_INET6)
4131 // buf[j++] = buf[i];
4132 // }
4133 // cnt = i = j;
4134 // }
4135 // }
4136 // /* Translate any remaining v4 results to v6 */
4137 // for (i=0; i<cnt; i++) {
4138 // if (buf[i].family != AF_INET) continue;
4139 // memcpy(buf[i].addr+12, buf[i].addr, 4);
4140 // memcpy(buf[i].addr, "\0\0\0\0\0\0\0\0\0\0\xff\xff", 12);
4141 // buf[i].family = AF_INET6;
4142 // }
4143 }
4144
4145 // No further processing is needed if there are fewer than 2
4146 // results or if there are only IPv4 results.
4147 if cnt < 2 || family == 2 {
4148 return cnt
4149 }
4150 for i = 0; i < cnt; i++ {
4151 if (*address)(unsafe.Pointer(buf+uintptr(i)*28)).Ffamily != 2 {
4152 break
4153 }
4154 }
4155 if i == cnt {
4156 return cnt
4157 }
4158 var cs int32
4159 _ = cs
4160 //TODO pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &cs);
4161
4162 // The following implements a subset of RFC 3484/6724 destination
4163 // address selection by generating a single 31-bit sort key for
4164 // each address. Rules 3, 4, and 7 are omitted for having
4165 // excessive runtime and code size cost and dubious benefit.
4166 // So far the label/precedence table cannot be customized.
4167 for i = 0; i < cnt; i++ {
4168 var family int32 = (*address)(unsafe.Pointer(buf + uintptr(i)*28)).Ffamily
4169 var key int32 = 0
4170 *(*sockaddr_in6)(unsafe.Pointer(bp + 28 /* sa6 */)) = sockaddr_in6{}
4171 *(*sockaddr_in6)(unsafe.Pointer(bp /* da6 */)) = sockaddr_in6{Fsin6_family: sa_family_t(10), Fsin6_port: in_port_t(65535), Fsin6_scope_id: (*address)(unsafe.Pointer(buf + uintptr(i)*28)).Fscopeid}
4172 *(*sockaddr_in)(unsafe.Pointer(bp + 72 /* sa4 */)) = sockaddr_in{}
4173 *(*sockaddr_in)(unsafe.Pointer(bp + 56 /* da4 */)) = sockaddr_in{Fsin_family: sa_family_t(2), Fsin_port: in_port_t(65535)}
4174 var sa1 uintptr
4175 var da uintptr
4176 // var salen socklen_t at bp+88, 4
4177
4178 var dalen socklen_t
4179 if family == 10 {
4180 Xmemcpy(tls, bp+8, buf+uintptr(i)*28+8, uint64(16))
4181 da = bp /* &da6 */
4182 dalen = socklen_t(unsafe.Sizeof(sockaddr_in6{}))
4183 sa1 = bp + 28 /* &sa6 */
4184 *(*socklen_t)(unsafe.Pointer(bp + 88 /* salen */)) = socklen_t(unsafe.Sizeof(sockaddr_in6{}))
4185 } else {
4186 Xmemcpy(tls, bp+28+8,
4187 ts+90, uint64(12))
4188 Xmemcpy(tls, bp+8+uintptr(12), buf+uintptr(i)*28+8, uint64(4))
4189 Xmemcpy(tls, bp+8,
4190 ts+90, uint64(12))
4191 Xmemcpy(tls, bp+8+uintptr(12), buf+uintptr(i)*28+8, uint64(4))
4192 Xmemcpy(tls, bp+56+4, buf+uintptr(i)*28+8, uint64(4))
4193 da = bp + 56 /* &da4 */
4194 dalen = socklen_t(unsafe.Sizeof(sockaddr_in{}))
4195 sa1 = bp + 72 /* &sa4 */
4196 *(*socklen_t)(unsafe.Pointer(bp + 88 /* salen */)) = socklen_t(unsafe.Sizeof(sockaddr_in{}))
4197 }
4198 var dpolicy uintptr = policyof(tls, bp+8)
4199 var dscope int32 = scopeof(tls, bp+8)
4200 var dlabel int32 = int32((*policy)(unsafe.Pointer(dpolicy)).Flabel)
4201 var dprec int32 = int32((*policy)(unsafe.Pointer(dpolicy)).Fprec)
4202 var prefixlen int32 = 0
4203 var fd int32 = Xsocket(tls, family, 2|02000000, 17)
4204 if fd >= 0 {
4205 if !(Xconnect(tls, fd, da, dalen) != 0) {
4206 key = key | 0x40000000
4207 if !(Xgetsockname(tls, fd, sa1, bp+88) != 0) {
4208 if family == 2 {
4209 Xmemcpy(tls,
4210 bp+28+8+uintptr(12),
4211 bp+72+4, uint64(4))
4212 }
4213 if dscope == scopeof(tls, bp+28+8) {
4214 key = key | 0x20000000
4215 }
4216 if dlabel == labelof(tls, bp+28+8) {
4217 key = key | 0x10000000
4218 }
4219 prefixlen = prefixmatch(tls, bp+28+8,
4220 bp+8)
4221 }
4222 }
4223 Xclose(tls, fd)
4224 }
4225 key = key | dprec<<20
4226 key = key | (15-dscope)<<16
4227 key = key | prefixlen<<8
4228 key = key | (48-i)<<0
4229 (*address)(unsafe.Pointer(buf + uintptr(i)*28)).Fsortkey = key
4230 }
4231 Xqsort(tls, buf, uint64(cnt), uint64(unsafe.Sizeof(address{})), *(*uintptr)(unsafe.Pointer(&struct {
4232 f func(*TLS, uintptr, uintptr) int32
4233 }{addrcmp})))
4234
4235 //TODO pthread_setcancelstate(cs, 0);
4236
4237 return cnt
4238}
4239
4240func X__lookup_serv(tls *TLS, buf uintptr, name uintptr, proto int32, socktype int32, flags int32) int32 { /* lookup_serv.c:12:5: */
4241 bp := tls.Alloc(8)
4242 defer tls.Free(8)
4243
4244 var line [128]int8
4245 _ = line
4246 var cnt int32 = 0
4247 var p uintptr
4248 _ = p
4249 *(*uintptr)(unsafe.Pointer(bp /* z */)) = ts + 13 /* "" */
4250 var port uint64 = uint64(0)
4251
4252 switch socktype {
4253 case 1:
4254 switch proto {
4255 case 0:
4256 proto = 6
4257 fallthrough
4258 case 6:
4259 break
4260 default:
4261 return -8
4262 }
4263 break
4264 case 2:
4265 switch proto {
4266 case 0:
4267 proto = 17
4268 fallthrough
4269 case 17:
4270 break
4271 default:
4272 return -8
4273 }
4274 fallthrough
4275 case 0:
4276 break
4277 default:
4278 if name != 0 {
4279 return -8
4280 }
4281 (*service)(unsafe.Pointer(buf)).Fport = uint16_t(0)
4282 (*service)(unsafe.Pointer(buf)).Fproto = uint8(proto)
4283 (*service)(unsafe.Pointer(buf)).Fsocktype = uint8(socktype)
4284 return 1
4285 }
4286
4287 if name != 0 {
4288 if !(int32(*(*int8)(unsafe.Pointer(name))) != 0) {
4289 return -8
4290 }
4291 port = Xstrtoul(tls, name, bp, 10)
4292 }
4293 if !(int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp))))) != 0) {
4294 if port > uint64(65535) {
4295 return -8
4296 }
4297 if proto != 17 {
4298 (*service)(unsafe.Pointer(buf + uintptr(cnt)*4)).Fport = uint16_t(port)
4299 (*service)(unsafe.Pointer(buf + uintptr(cnt)*4)).Fsocktype = uint8(1)
4300 (*service)(unsafe.Pointer(buf + uintptr(PostIncInt32(&cnt, 1))*4)).Fproto = uint8(6)
4301 }
4302 if proto != 6 {
4303 (*service)(unsafe.Pointer(buf + uintptr(cnt)*4)).Fport = uint16_t(port)
4304 (*service)(unsafe.Pointer(buf + uintptr(cnt)*4)).Fsocktype = uint8(2)
4305 (*service)(unsafe.Pointer(buf + uintptr(PostIncInt32(&cnt, 1))*4)).Fproto = uint8(17)
4306 }
4307 return cnt
4308 }
4309
4310 if flags&0x400 != 0 {
4311 return -2
4312 }
4313
4314 var l size_t = Xstrlen(tls, name)
4315 _ = l
4316
4317 Xabort(tls) //TODO-
4318 // unsigned char _buf[1032];
4319 // FILE _f, *f = __fopen_rb_ca("/etc/services", &_f, _buf, sizeof _buf);
4320 // if (!f) switch (errno) {
4321 // case ENOENT:
4322 // case ENOTDIR:
4323 // case EACCES:
4324 // return EAI_SERVICE;
4325 // default:
4326 // return EAI_SYSTEM;
4327 // }
4328
4329 Xabort(tls) //TODO-
4330 // while (fgets(line, sizeof line, f) && cnt < MAXSERVS) {
4331 // if ((p=strchr(line, '#'))) *p++='\n', *p=0;
4332
4333 // /* Find service name */
4334 // for(p=line; (p=strstr(p, name)); p++) {
4335 // if (p>line && !isspace(p[-1])) continue;
4336 // if (p[l] && !isspace(p[l])) continue;
4337 // break;
4338 // }
4339 // if (!p) continue;
4340
4341 // /* Skip past canonical name at beginning of line */
4342 // for (p=line; *p && !isspace(*p); p++);
4343
4344 // port = strtoul(p, &z, 10);
4345 // if (port > 65535 || z==p) continue;
4346 // if (!strncmp(z, "/udp", 4)) {
4347 // if (proto == IPPROTO_TCP) continue;
4348 // buf[cnt].port = port;
4349 // buf[cnt].socktype = SOCK_DGRAM;
4350 // buf[cnt++].proto = IPPROTO_UDP;
4351 // }
4352 // if (!strncmp(z, "/tcp", 4)) {
4353 // if (proto == IPPROTO_UDP) continue;
4354 // buf[cnt].port = port;
4355 // buf[cnt].socktype = SOCK_STREAM;
4356 // buf[cnt++].proto = IPPROTO_TCP;
4357 // }
4358 // }
4359 // __fclose_ca(f);
4360 // return cnt > 0 ? cnt : EAI_SERVICE;
4361 Xabort(tls)
4362 return int32(0) //TODO-
4363}
4364
4365func temper(tls *TLS, x uint32) uint32 { /* rand_r.c:3:17: */
4366 x = x ^ x>>11
4367 x = x ^ x<<7&0x9D2C5680
4368 x = x ^ x<<15&0xEFC60000
4369 x = x ^ x>>18
4370 return x
4371}
4372
4373func Xrand_r(tls *TLS, seed uintptr) int32 { /* rand_r.c:12:5: */
4374 return int32(temper(tls, AssignPtrUint32(seed, *(*uint32)(unsafe.Pointer(seed))*uint32(1103515245)+uint32(12345))) / uint32(2))
4375}
4376
4377func X__toread(tls *TLS, f uintptr) int32 { /* __toread.c:3:5: */
4378 *(*int32)(unsafe.Pointer(f + 136)) |= (*FILE)(unsafe.Pointer(f)).Fmode - 1
4379 if (*FILE)(unsafe.Pointer(f)).Fwpos != (*FILE)(unsafe.Pointer(f)).Fwbase {
4380 (*struct {
4381 f func(*TLS, uintptr, uintptr, size_t) size_t
4382 })(unsafe.Pointer(&struct{ uintptr }{(*FILE)(unsafe.Pointer(f)).Fwrite})).f(tls, f, uintptr(0), uint64(0))
4383 }
4384 (*FILE)(unsafe.Pointer(f)).Fwpos = AssignPtrUintptr(f+56, AssignPtrUintptr(f+32, uintptr(0)))
4385 if (*FILE)(unsafe.Pointer(f)).Fflags&uint32(4) != 0 {
4386 *(*uint32)(unsafe.Pointer(f)) |= uint32(32)
4387 return -1
4388 }
4389 (*FILE)(unsafe.Pointer(f)).Frpos = AssignPtrUintptr(f+16, (*FILE)(unsafe.Pointer(f)).Fbuf+uintptr((*FILE)(unsafe.Pointer(f)).Fbuf_size))
4390 if (*FILE)(unsafe.Pointer(f)).Fflags&uint32(16) != 0 {
4391 return -1
4392 }
4393 return 0
4394}
4395
4396func X__toread_needs_stdio_exit(tls *TLS) { /* __toread.c:16:13: */
4397 X__builtin_abort(tls) //TODO-
4398 // __stdio_exit_needed();
4399}
4400
4401// This function assumes it will never be called if there is already
4402// data buffered for reading.
4403
4404func X__uflow(tls *TLS, f uintptr) int32 { /* __uflow.c:6:5: */
4405 bp := tls.Alloc(1)
4406 defer tls.Free(1)
4407
4408 // var c uint8 at bp, 1
4409
4410 if !(X__toread(tls, f) != 0) && (*struct {
4411 f func(*TLS, uintptr, uintptr, size_t) size_t
4412 })(unsafe.Pointer(&struct{ uintptr }{(*FILE)(unsafe.Pointer(f)).Fread})).f(tls, f, bp, uint64(1)) == uint64(1) {
4413 return int32(*(*uint8)(unsafe.Pointer(bp)))
4414 }
4415 return -1
4416}
4417
4418func Xbsearch(tls *TLS, key uintptr, base uintptr, nel size_t, width size_t, cmp uintptr) uintptr { /* bsearch.c:3:6: */
4419 var try uintptr
4420 var sign int32
4421 for nel > uint64(0) {
4422 try = base + uintptr(width*(nel/uint64(2)))
4423 sign = (*struct {
4424 f func(*TLS, uintptr, uintptr) int32
4425 })(unsafe.Pointer(&struct{ uintptr }{cmp})).f(tls, key, try)
4426 if sign < 0 {
4427 nel = nel / uint64(2)
4428 } else if sign > 0 {
4429 base = try + uintptr(width)
4430 nel = nel - (nel/uint64(2) + uint64(1))
4431 } else {
4432 return try
4433 }
4434 }
4435 return uintptr(0)
4436}
4437
4438func strtox(tls *TLS, s uintptr, p uintptr, prec int32) float64 { /* strtod.c:6:20: */
4439 bp := tls.Alloc(232)
4440 defer tls.Free(232)
4441
4442 // var f FILE at bp, 232
4443
4444 (*FILE)(unsafe.Pointer(bp)).Fbuf = AssignPtrUintptr(bp+8, s)
4445 (*FILE)(unsafe.Pointer(bp)).Frend = UintptrFromInt32(-1)
4446 X__shlim(tls, bp, int64(0))
4447 var y float64 = X__floatscan(tls, bp, prec, 1)
4448 var cnt off_t = (*FILE)(unsafe.Pointer(bp)).Fshcnt + (int64((*FILE)(unsafe.Pointer(bp)).Frpos)-int64((*FILE)(unsafe.Pointer(bp)).Fbuf))/1
4449 if p != 0 {
4450 *(*uintptr)(unsafe.Pointer(p)) = func() uintptr {
4451 if cnt != 0 {
4452 return s + uintptr(cnt)
4453 }
4454 return s
4455 }()
4456 }
4457 return y
4458}
4459
4460func Xstrtof(tls *TLS, s uintptr, p uintptr) float32 { /* strtod.c:17:7: */
4461 return float32(strtox(tls, s, p, 0))
4462}
4463
4464func Xstrtod(tls *TLS, s uintptr, p uintptr) float64 { /* strtod.c:22:8: */
4465 return strtox(tls, s, p, 1)
4466}
4467
4468func Xstrtold(tls *TLS, s uintptr, p uintptr) float64 { /* strtod.c:27:13: */
4469 return strtox(tls, s, p, 2)
4470}
4471
4472func strtox1(tls *TLS, s uintptr, p uintptr, base int32, lim uint64) uint64 { /* strtol.c:8:27: */
4473 bp := tls.Alloc(232)
4474 defer tls.Free(232)
4475
4476 // var f FILE at bp, 232
4477
4478 (*FILE)(unsafe.Pointer(bp)).Fbuf = AssignPtrUintptr(bp+8, s)
4479 (*FILE)(unsafe.Pointer(bp)).Frend = UintptrFromInt32(-1)
4480 X__shlim(tls, bp, int64(0))
4481 var y uint64 = X__intscan(tls, bp, uint32(base), 1, lim)
4482 if p != 0 {
4483 var cnt size_t = size_t((*FILE)(unsafe.Pointer(bp)).Fshcnt + (int64((*FILE)(unsafe.Pointer(bp)).Frpos)-int64((*FILE)(unsafe.Pointer(bp)).Fbuf))/1)
4484 *(*uintptr)(unsafe.Pointer(p)) = s + uintptr(cnt)
4485 }
4486 return y
4487}
4488
4489func Xstrtoull(tls *TLS, s uintptr, p uintptr, base int32) uint64 { /* strtol.c:21:20: */
4490 return strtox1(tls, s, p, base, 2*uint64(0x7fffffffffffffff)+uint64(1))
4491}
4492
4493func Xstrtoll(tls *TLS, s uintptr, p uintptr, base int32) int64 { /* strtol.c:26:11: */
4494 return int64(strtox1(tls, s, p, base, Uint64FromInt64(-0x7fffffffffffffff-int64(1))))
4495}
4496
4497func Xstrtoul(tls *TLS, s uintptr, p uintptr, base int32) uint64 { /* strtol.c:31:15: */
4498 return uint64(strtox1(tls, s, p, base, 2*uint64(0x7fffffffffffffff)+uint64(1)))
4499}
4500
4501func Xstrtol(tls *TLS, s uintptr, p uintptr, base int32) int64 { /* strtol.c:36:6: */
4502 return int64(strtox1(tls, s, p, base, 0+Uint64FromInt64(Int64(-Int64(0x7fffffffffffffff))-Int64FromInt32(1))))
4503}
4504
4505func Xstrtoimax(tls *TLS, s uintptr, p uintptr, base int32) intmax_t { /* strtol.c:41:10: */
4506 return intmax_t(Xstrtoll(tls, s, p, base))
4507}
4508
4509func Xstrtoumax(tls *TLS, s uintptr, p uintptr, base int32) uintmax_t { /* strtol.c:46:11: */
4510 return uintmax_t(Xstrtoull(tls, s, p, base))
4511}
4512
4513// Support signed or unsigned plain-char
4514
4515// Implementation choices...
4516
4517// Arbitrary numbers...
4518
4519// POSIX/SUS requirements follow. These numbers come directly
4520// from SUS and have nothing to do with the host system.
4521
4522func X__strchrnul(tls *TLS, s uintptr, c int32) uintptr { /* strchrnul.c:10:6: */
4523 c = int32(uint8(c))
4524 if !(c != 0) {
4525 return s + uintptr(Xstrlen(tls, s))
4526 }
4527 var w uintptr
4528 for ; uintptr_t(s)%uintptr_t(unsafe.Sizeof(size_t(0))) != 0; s++ {
4529 if !(int32(*(*int8)(unsafe.Pointer(s))) != 0) || int32(*(*uint8)(unsafe.Pointer(s))) == c {
4530 return s
4531 }
4532 }
4533 var k size_t = Uint64(Uint64FromInt32(-1)) / uint64(255) * size_t(c)
4534 for w = s; !((*(*uint64)(unsafe.Pointer(w))-Uint64(Uint64FromInt32(-1))/uint64(255)) & ^*(*uint64)(unsafe.Pointer(w)) & (Uint64(Uint64FromInt32(-1))/uint64(255)*uint64(255/2+1)) != 0) && !((*(*uint64)(unsafe.Pointer(w))^k-Uint64(Uint64FromInt32(-1))/uint64(255)) & ^(*(*uint64)(unsafe.Pointer(w))^k) & (Uint64(Uint64FromInt32(-1))/uint64(255)*uint64(255/2+1)) != 0); w += 8 {
4535 }
4536 s = w
4537 for ; *(*int8)(unsafe.Pointer(s)) != 0 && int32(*(*uint8)(unsafe.Pointer(s))) != c; s++ {
4538 }
4539 return s
4540}
4541
4542func Xstrdup(tls *TLS, s uintptr) uintptr { /* strdup.c:4:6: */
4543 var l size_t = Xstrlen(tls, s)
4544 var d uintptr = Xmalloc(tls, l+uint64(1))
4545 if !(d != 0) {
4546 return uintptr(0)
4547 }
4548 return Xmemcpy(tls, d, s, l+uint64(1))
4549}
4550
4551func Xstrlcat(tls *TLS, d uintptr, s uintptr, n size_t) size_t { /* strlcat.c:4:8: */
4552 var l size_t = Xstrnlen(tls, d, n)
4553 if l == n {
4554 return l + Xstrlen(tls, s)
4555 }
4556 return l + Xstrlcpy(tls, d+uintptr(l), s, n-l)
4557}
4558
4559// Support signed or unsigned plain-char
4560
4561// Implementation choices...
4562
4563// Arbitrary numbers...
4564
4565// POSIX/SUS requirements follow. These numbers come directly
4566// from SUS and have nothing to do with the host system.
4567
4568func Xstrlcpy(tls *TLS, d uintptr, s uintptr, n size_t) size_t { /* strlcpy.c:11:8: */
4569 var d0 uintptr
4570 var wd uintptr
4571 var ws uintptr
4572 d0 = d
4573
4574 if !!(int32(PostDecUint64(&n, 1)) != 0) {
4575 goto __1
4576 }
4577 goto finish
4578__1:
4579 ;
4580 if !(uintptr_t(s)&(uint64(unsafe.Sizeof(size_t(0)))-uint64(1)) == uintptr_t(d)&(uint64(unsafe.Sizeof(size_t(0)))-uint64(1))) {
4581 goto __2
4582 }
4583__3:
4584 if !(uintptr_t(s)&(uint64(unsafe.Sizeof(size_t(0)))-uint64(1)) != 0 && n != 0 && AssignPtrInt8(d, *(*int8)(unsafe.Pointer(s))) != 0) {
4585 goto __5
4586 }
4587 goto __4
4588__4:
4589 n--
4590 s++
4591 d++
4592 goto __3
4593 goto __5
4594__5:
4595 ;
4596 if !(n != 0 && *(*int8)(unsafe.Pointer(s)) != 0) {
4597 goto __6
4598 }
4599 wd = d
4600 ws = s
4601__7:
4602 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)) {
4603 goto __9
4604 }
4605 *(*size_t)(unsafe.Pointer(wd)) = *(*uint64)(unsafe.Pointer(ws))
4606 goto __8
4607__8:
4608 n = n - size_t(unsafe.Sizeof(size_t(0)))
4609 ws += 8
4610 wd += 8
4611 goto __7
4612 goto __9
4613__9:
4614 ;
4615 d = wd
4616 s = ws
4617__6:
4618 ;
4619__2:
4620 ;
4621__10:
4622 if !(n != 0 && AssignPtrInt8(d, *(*int8)(unsafe.Pointer(s))) != 0) {
4623 goto __12
4624 }
4625 goto __11
4626__11:
4627 n--
4628 s++
4629 d++
4630 goto __10
4631 goto __12
4632__12:
4633 ;
4634 *(*int8)(unsafe.Pointer(d)) = int8(0)
4635finish:
4636 return size_t((int64(d)-int64(d0))/1) + Xstrlen(tls, s)
4637}
4638
4639func Xstrncasecmp(tls *TLS, _l uintptr, _r uintptr, n size_t) int32 { /* strncasecmp.c:4:5: */
4640 var l uintptr = _l
4641 var r uintptr = _r
4642 if !(int32(PostDecUint64(&n, 1)) != 0) {
4643 return 0
4644 }
4645__1:
4646 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)))))) {
4647 goto __3
4648 }
4649 goto __2
4650__2:
4651 l++
4652 r++
4653 n--
4654 goto __1
4655 goto __3
4656__3:
4657 ;
4658 return Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(l)))) - Xtolower(tls, int32(*(*uint8)(unsafe.Pointer(r))))
4659}
4660
4661func X__strncasecmp_l(tls *TLS, l uintptr, r uintptr, n size_t, loc locale_t) int32 { /* strncasecmp.c:12:5: */
4662 return Xstrncasecmp(tls, l, r, n)
4663}
4664
4665func Xstrncat(tls *TLS, d uintptr, s uintptr, n size_t) uintptr { /* strncat.c:3:6: */
4666 var a uintptr = d
4667 d += uintptr(Xstrlen(tls, d))
4668 for n != 0 && *(*int8)(unsafe.Pointer(s)) != 0 {
4669 n--
4670 *(*int8)(unsafe.Pointer(PostIncUintptr(&d, 1))) = *(*int8)(unsafe.Pointer(PostIncUintptr(&s, 1)))
4671 }
4672 *(*int8)(unsafe.Pointer(PostIncUintptr(&d, 1))) = int8(0)
4673 return a
4674}
4675
4676func Xstrnlen(tls *TLS, s uintptr, n size_t) size_t { /* strnlen.c:3:8: */
4677 var p uintptr = Xmemchr(tls, s, 0, n)
4678 if p != 0 {
4679 return uint64((int64(p) - int64(s)) / 1)
4680 }
4681 return n
4682}
4683
4684func Xstrspn(tls *TLS, s uintptr, c uintptr) size_t { /* strspn.c:6:8: */
4685 bp := tls.Alloc(32)
4686 defer tls.Free(32)
4687
4688 var a uintptr = s
4689 *(*[4]size_t)(unsafe.Pointer(bp /* byteset */)) = [4]size_t{0: uint64(0)}
4690
4691 if !(int32(*(*int8)(unsafe.Pointer(c))) != 0) {
4692 return uint64(0)
4693 }
4694 if !(int32(*(*int8)(unsafe.Pointer(c + 1))) != 0) {
4695 for ; int32(*(*int8)(unsafe.Pointer(s))) == int32(*(*int8)(unsafe.Pointer(c))); s++ {
4696 }
4697 return size_t((int64(s) - int64(a)) / 1)
4698 }
4699
4700 for ; *(*int8)(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++ {
4701 }
4702 for ; *(*int8)(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++ {
4703 }
4704 return size_t((int64(s) - int64(a)) / 1)
4705}
4706
4707func Xstrtok(tls *TLS, s uintptr, sep uintptr) uintptr { /* strtok.c:3:6: */
4708 if !(s != 0) && !(int32(AssignUintptr(&s, _sp)) != 0) {
4709 return uintptr(0)
4710 }
4711 s += uintptr(Xstrspn(tls, s, sep))
4712 if !(int32(*(*int8)(unsafe.Pointer(s))) != 0) {
4713 return AssignPtrUintptr(uintptr(unsafe.Pointer(&_sp)), uintptr(0))
4714 }
4715 _sp = s + uintptr(Xstrcspn(tls, s, sep))
4716 if *(*int8)(unsafe.Pointer(_sp)) != 0 {
4717 *(*int8)(unsafe.Pointer(PostIncUintptr(&_sp, 1))) = int8(0)
4718 } else {
4719 _sp = uintptr(0)
4720 }
4721 return s
4722}
4723
4724var _sp uintptr /* strtok.c:5:14: */
4725
4726func init() {
4727 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&X_CurrentRuneLocale)) + 0)) = uintptr(unsafe.Pointer(&X_DefaultRuneLocale)) // table.c:1940:35:
4728 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&X_CurrentRuneLocale)) + 0)) = uintptr(unsafe.Pointer(&X_DefaultRuneLocale)) // table.c:1940:35:
4729}
4730
4731var 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"
4732var ts = (*reflect.StringHeader)(unsafe.Pointer(&ts1)).Data
Note: See TracBrowser for help on using the repository browser.