musl_darwin_arm64.go (143577B)
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_arm64.go -pkgname libc -static-locals-prefix _s -Iarch/aarch64 -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 3 package libc 4 5 import ( 6 "math" 7 "reflect" 8 "sync/atomic" 9 "unsafe" 10 ) 11 12 var _ = math.Pi 13 var _ reflect.Kind 14 var _ atomic.Value 15 var _ 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. 210 const ( /* copyright.c:194:1: */ 211 __musl__copyright__ = 0 212 ) 213 214 const ( /* nameser.h:117:1: */ 215 ns_uop_delete = 0 216 ns_uop_add = 1 217 ns_uop_max = 2 218 ) 219 220 const ( /* 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 275 const ( /* 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 286 const ( /* 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 293 const ( /* 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 301 const ( /* 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 312 const ( /* 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 326 const ( /* 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 335 const ( /* 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 354 type ptrdiff_t = int64 /* <builtin>:3:26 */ 355 356 type size_t = uint64 /* <builtin>:9:23 */ 357 358 type wchar_t = int32 /* <builtin>:15:24 */ 359 360 var X__darwin_check_fd_set_overflow uintptr /* <builtin>:146:5: */ 361 362 // pthread opaque structures 363 364 type __darwin_pthread_handler_rec = struct { 365 F__routine uintptr 366 F__arg uintptr 367 F__next uintptr 368 } /* table.c:1396:1 */ 369 370 type _opaque_pthread_attr_t = struct { 371 F__sig int64 372 F__opaque [56]int8 373 } /* table.c:1402:1 */ 374 375 type _opaque_pthread_cond_t = struct { 376 F__sig int64 377 F__opaque [40]int8 378 } /* table.c:1407:1 */ 379 380 type _opaque_pthread_condattr_t = struct { 381 F__sig int64 382 F__opaque [8]int8 383 } /* table.c:1412:1 */ 384 385 type _opaque_pthread_mutex_t = struct { 386 F__sig int64 387 F__opaque [56]int8 388 } /* table.c:1417:1 */ 389 390 type _opaque_pthread_mutexattr_t = struct { 391 F__sig int64 392 F__opaque [8]int8 393 } /* table.c:1422:1 */ 394 395 type _opaque_pthread_once_t = struct { 396 F__sig int64 397 F__opaque [8]int8 398 } /* table.c:1427:1 */ 399 400 type _opaque_pthread_rwlock_t = struct { 401 F__sig int64 402 F__opaque [192]int8 403 } /* table.c:1432:1 */ 404 405 type _opaque_pthread_rwlockattr_t = struct { 406 F__sig int64 407 F__opaque [16]int8 408 } /* table.c:1437:1 */ 409 410 type _opaque_pthread_t = struct { 411 F__sig int64 412 F__cleanup_stack uintptr 413 F__opaque [8176]int8 414 } /* table.c:1442:1 */ 415 416 type ct_rune_t = int32 /* table.c:1527:28 */ 417 418 type rune_t = int32 /* table.c:1536:25 */ 419 420 type wint_t = int32 /* table.c:1558:25 */ 421 422 type _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 430 type _RuneRange = struct { 431 F__nranges int32 432 F__ccgo_pad1 [4]byte 433 F__ranges uintptr 434 } /* table.c:1580:3 */ 435 436 type _RuneCharClass = struct { 437 F__name [14]int8 438 F__ccgo_pad1 [2]byte 439 F__mask uint32 440 } /* table.c:1585:3 */ 441 442 type _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 461 func 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 472 func 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 481 func 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 499 func Xisalnum(tls *TLS, _c int32) int32 { /* table.c:1718:1: */ 500 return X__istype(tls, _c, uint64(0x00000100|0x00000400)) 501 } 502 503 func Xisalpha(tls *TLS, _c int32) int32 { /* table.c:1724:1: */ 504 return X__istype(tls, _c, uint64(0x00000100)) 505 } 506 507 func Xisblank(tls *TLS, _c int32) int32 { /* table.c:1730:1: */ 508 return X__istype(tls, _c, uint64(0x00020000)) 509 } 510 511 func Xiscntrl(tls *TLS, _c int32) int32 { /* table.c:1736:1: */ 512 return X__istype(tls, _c, uint64(0x00000200)) 513 } 514 515 func Xisdigit(tls *TLS, _c int32) int32 { /* table.c:1743:1: */ 516 return X__isctype(tls, _c, uint64(0x00000400)) 517 } 518 519 func Xisgraph(tls *TLS, _c int32) int32 { /* table.c:1749:1: */ 520 return X__istype(tls, _c, uint64(0x00000800)) 521 } 522 523 func Xislower(tls *TLS, _c int32) int32 { /* table.c:1755:1: */ 524 return X__istype(tls, _c, uint64(0x00001000)) 525 } 526 527 func Xisprint(tls *TLS, _c int32) int32 { /* table.c:1761:1: */ 528 return X__istype(tls, _c, uint64(0x00040000)) 529 } 530 531 func Xispunct(tls *TLS, _c int32) int32 { /* table.c:1767:1: */ 532 return X__istype(tls, _c, uint64(0x00002000)) 533 } 534 535 func Xisupper(tls *TLS, _c int32) int32 { /* table.c:1779:1: */ 536 return X__istype(tls, _c, uint64(0x00008000)) 537 } 538 539 func Xisxdigit(tls *TLS, _c int32) int32 { /* table.c:1786:1: */ 540 return X__isctype(tls, _c, uint64(0x00010000)) 541 } 542 543 func Xtoascii(tls *TLS, _c int32) int32 { /* table.c:1792:1: */ 544 return _c & 0x7F 545 } 546 547 func Xdigittoint(tls *TLS, _c int32) int32 { /* table.c:1811:1: */ 548 return X__maskrune(tls, _c, uint64(0x0F)) 549 } 550 551 func Xishexnumber(tls *TLS, _c int32) int32 { /* table.c:1817:1: */ 552 return X__istype(tls, _c, uint64(0x00010000)) 553 } 554 555 func Xisideogram(tls *TLS, _c int32) int32 { /* table.c:1823:1: */ 556 return X__istype(tls, _c, uint64(0x00080000)) 557 } 558 559 func Xisnumber(tls *TLS, _c int32) int32 { /* table.c:1829:1: */ 560 return X__istype(tls, _c, uint64(0x00000400)) 561 } 562 563 func Xisphonogram(tls *TLS, _c int32) int32 { /* table.c:1835:1: */ 564 return X__istype(tls, _c, uint64(0x00200000)) 565 } 566 567 func Xisrune(tls *TLS, _c int32) int32 { /* table.c:1841:1: */ 568 return X__istype(tls, _c, uint64(0xFFFFFFF0)) 569 } 570 571 func Xisspecial(tls *TLS, _c int32) int32 { /* table.c:1847:1: */ 572 return X__istype(tls, _c, uint64(0x00100000)) 573 } 574 575 func 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 579 func X__toupper(tls *TLS, c int32) int32 { /* table.c:1876:20: */ 580 return Xtoupper(tls, c) 581 } 582 583 func X__tolower(tls *TLS, c int32) int32 { /* table.c:1878:20: */ 584 return Xtolower(tls, c) 585 } 586 587 var 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 641 var X_CurrentRuneLocale uintptr = 0 /* table.c:1940:13 */ 642 643 type div_t = struct { 644 Fquot int32 645 Frem int32 646 } /* stdlib.h:62:35 */ 647 type ldiv_t = struct { 648 Fquot int64 649 Frem int64 650 } /* stdlib.h:63:36 */ 651 type lldiv_t = struct { 652 Fquot int64 653 Frem int64 654 } /* stdlib.h:64:41 */ 655 656 type locale_t = uintptr /* alltypes.h:351:32 */ 657 658 type ssize_t = int64 /* alltypes.h:73:15 */ 659 660 type intptr_t = int64 /* alltypes.h:78:15 */ 661 662 type off_t = int64 /* alltypes.h:170:16 */ 663 664 type pid_t = int32 /* alltypes.h:243:13 */ 665 666 type uid_t = uint32 /* alltypes.h:253:18 */ 667 668 type gid_t = uint32 /* alltypes.h:258:18 */ 669 670 type useconds_t = uint32 /* alltypes.h:268:18 */ 671 672 func 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 745 oom: 746 Xfree(tls, r) 747 return -1 748 } 749 750 var _soldenv uintptr /* putenv.c:22:14: */ 751 752 func 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 760 func 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 783 var _senv_alloced uintptr /* setenv.c:7:14: */ 784 var _senv_alloced_n size_t /* setenv.c:8:16: */ 785 786 func 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 810 func 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 836 type uintptr_t = uint64 /* alltypes.h:63:24 */ 837 838 type int8_t = int8 /* alltypes.h:104:25 */ 839 840 type int16_t = int16 /* alltypes.h:109:25 */ 841 842 type int32_t = int32 /* alltypes.h:114:25 */ 843 844 type int64_t = int64 /* alltypes.h:119:25 */ 845 846 type intmax_t = int64 /* alltypes.h:124:25 */ 847 848 type uint8_t = uint8 /* alltypes.h:129:25 */ 849 850 type uint16_t = uint16 /* alltypes.h:134:25 */ 851 852 type uint32_t = uint32 /* alltypes.h:139:25 */ 853 854 type uint64_t = uint64 /* alltypes.h:144:25 */ 855 856 type uintmax_t = uint64 /* alltypes.h:154:25 */ 857 858 type int_fast8_t = int8_t /* stdint.h:22:16 */ 859 type int_fast64_t = int64_t /* stdint.h:23:17 */ 860 861 type int_least8_t = int8_t /* stdint.h:25:17 */ 862 type int_least16_t = int16_t /* stdint.h:26:17 */ 863 type int_least32_t = int32_t /* stdint.h:27:17 */ 864 type int_least64_t = int64_t /* stdint.h:28:17 */ 865 866 type uint_fast8_t = uint8_t /* stdint.h:30:17 */ 867 type uint_fast64_t = uint64_t /* stdint.h:31:18 */ 868 869 type uint_least8_t = uint8_t /* stdint.h:33:18 */ 870 type uint_least16_t = uint16_t /* stdint.h:34:18 */ 871 type uint_least32_t = uint32_t /* stdint.h:35:18 */ 872 type uint_least64_t = uint64_t /* stdint.h:36:18 */ 873 874 type int_fast16_t = int32_t /* stdint.h:1:17 */ 875 type int_fast32_t = int32_t /* stdint.h:2:17 */ 876 type uint_fast16_t = uint32_t /* stdint.h:3:18 */ 877 type uint_fast32_t = uint32_t /* stdint.h:4:18 */ 878 879 type _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:328:9 */ 914 915 type FILE = _IO_FILE /* alltypes.h:328:25 */ 916 917 type va_list = uintptr /* alltypes.h:334:27 */ 918 919 type _G_fpos64_t = struct { 920 F__ccgo_pad1 [0]uint64 921 F__opaque [16]int8 922 } /* stdio.h:54:9 */ 923 924 type fpos_t = _G_fpos64_t /* stdio.h:58:3 */ 925 926 type float_t = float32 /* alltypes.h:38:15 */ 927 928 type double_t = float64 /* alltypes.h:43:16 */ 929 930 func __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 940 func __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 950 func __isspace(tls *TLS, _c int32) int32 { /* ctype.h:26:21: */ 951 return Bool32(_c == ' ' || uint32(_c)-uint32('\t') < uint32(5)) 952 } 953 954 type syscall_arg_t = int64 /* syscall.h:22:14 */ 955 956 func 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 1023 func 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 1358 var _sth = [2]uint32_t{uint32_t(9007199), uint32_t(254740991)} /* floatscan.c:67:24 */ 1359 var _sp10s = [8]int32{10, 100, 1000, 10000, 1360 100000, 1000000, 10000000, 100000000} /* floatscan.c:80:19 */ 1361 1362 func 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 1551 func 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 1709 var 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 1728 func 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 ; 1999 done: 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 2033 func 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 2044 func 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 2066 type 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 2103 var 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 2105 func Xlocaleconv(tls *TLS) uintptr { /* localeconv.c:31:14: */ 2106 return uintptr(unsafe.Pointer(&posix_lconv)) 2107 } 2108 2109 func 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 2133 func 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 2157 func __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 2161 func X__fpclassifyl(tls *TLS, x float64) int32 { /* __fpclassifyl.c:4:5: */ 2162 return X__fpclassify(tls, x) 2163 } 2164 2165 func Xcopysignl(tls *TLS, x float64, y float64) float64 { /* copysignl.c:4:13: */ 2166 return Xcopysign(tls, x, y) 2167 } 2168 2169 func Xfabsl(tls *TLS, x float64) float64 { /* fabsl.c:3:13: */ 2170 return Xfabs(tls, x) 2171 } 2172 2173 func Xfmodl(tls *TLS, x float64, y float64) float64 { /* fmodl.c:4:13: */ 2174 return Xfmod(tls, x, y) 2175 } 2176 2177 func Xnanf(tls *TLS, s uintptr) float32 { /* nanf.c:3:7: */ 2178 return X__builtin_nanf(tls, ts+13) 2179 } 2180 2181 var toint double_t = float64(float64(1)) / 2.22044604925031308085e-16 /* rint.c:10:23 */ 2182 2183 func 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 2212 func 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 2248 func Xscalbnl(tls *TLS, x float64, n int32) float64 { /* scalbnl.c:4:13: */ 2249 return Xscalbn(tls, x, n) 2250 } 2251 2252 type max_align_t = struct { 2253 F__ll int64 2254 F__ld float64 2255 } /* alltypes.h:49:54 */ 2256 2257 type imaxdiv_t = struct { 2258 Fquot intmax_t 2259 Frem intmax_t 2260 } /* inttypes.h:14:40 */ 2261 2262 type iovec = struct { 2263 Fiov_base uintptr 2264 Fiov_len size_t 2265 } /* alltypes.h:363:1 */ 2266 2267 type socklen_t = uint32 /* alltypes.h:369:18 */ 2268 2269 type sa_family_t = uint16 /* alltypes.h:374:24 */ 2270 2271 type 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 2285 type 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 2292 type linger = struct { 2293 Fl_onoff int32 2294 Fl_linger int32 2295 } /* socket.h:74:1 */ 2296 2297 type sockaddr = struct { 2298 Fsa_family sa_family_t 2299 Fsa_data [14]int8 2300 } /* socket.h:367:1 */ 2301 2302 type 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 2308 type in_port_t = uint16_t /* in.h:12:18 */ 2309 type in_addr_t = uint32_t /* in.h:13:18 */ 2310 type in_addr = struct{ Fs_addr in_addr_t } /* in.h:14:1 */ 2311 2312 type 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 2319 type 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 2326 type 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 2339 type 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 2349 type ip_opts = struct { 2350 Fip_dst struct{ Fs_addr in_addr_t } 2351 Fip_opts [40]int8 2352 } /* in.h:229:1 */ 2353 2354 type 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 2359 type 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 2365 type 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 2371 type 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 2379 type 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 2389 type 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 2404 type 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 2421 type 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 2427 type 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 2437 type 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 2453 type 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 2467 type 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 2474 type 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 2482 type 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 2490 type 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 2497 type 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 2524 type 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 2534 type address = struct { 2535 Ffamily int32 2536 Fscopeid uint32 2537 Faddr [16]uint8_t 2538 Fsortkey int32 2539 } /* lookup.h:20:1 */ 2540 2541 type service = struct { 2542 Fport uint16_t 2543 Fproto uint8 2544 Fsocktype uint8 2545 } /* lookup.h:27:1 */ 2546 2547 type 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 2560 func 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 2584 type time_t = int64 /* alltypes.h:93:16 */ 2585 2586 type clockid_t = int32 /* alltypes.h:222:13 */ 2587 2588 type timespec = struct { 2589 Ftv_sec time_t 2590 Ftv_nsec int64 2591 } /* alltypes.h:237:1 */ 2592 2593 type pthread_t = uintptr /* alltypes.h:281:26 */ 2594 2595 type pthread_once_t = int32 /* alltypes.h:287:13 */ 2596 2597 type pthread_key_t = uint32 /* alltypes.h:292:18 */ 2598 2599 type pthread_spinlock_t = int32 /* alltypes.h:297:13 */ 2600 2601 type pthread_mutexattr_t = struct{ F__attr uint32 } /* alltypes.h:302:37 */ 2602 2603 type pthread_condattr_t = struct{ F__attr uint32 } /* alltypes.h:307:37 */ 2604 2605 type pthread_barrierattr_t = struct{ F__attr uint32 } /* alltypes.h:312:37 */ 2606 2607 type pthread_rwlockattr_t = struct{ F__attr [2]uint32 } /* alltypes.h:317:40 */ 2608 2609 type __sigset_t = struct{ F__bits [16]uint64 } /* alltypes.h:357:9 */ 2610 2611 type sigset_t = __sigset_t /* alltypes.h:357:71 */ 2612 2613 type pthread_attr_t = struct { 2614 F__u struct { 2615 F__ccgo_pad1 [0]uint64 2616 F__i [14]int32 2617 } 2618 } /* alltypes.h:380:147 */ 2619 2620 type pthread_mutex_t = struct { 2621 F__u struct { 2622 F__ccgo_pad1 [0]uint64 2623 F__i [10]int32 2624 } 2625 } /* alltypes.h:385:157 */ 2626 2627 type pthread_cond_t = struct { 2628 F__u struct { 2629 F__ccgo_pad1 [0]uint64 2630 F__i [12]int32 2631 } 2632 } /* alltypes.h:395:112 */ 2633 2634 type pthread_rwlock_t = struct { 2635 F__u struct { 2636 F__ccgo_pad1 [0]uint64 2637 F__i [14]int32 2638 } 2639 } /* alltypes.h:405:139 */ 2640 2641 type pthread_barrier_t = struct { 2642 F__u struct { 2643 F__ccgo_pad1 [0]uint64 2644 F__i [8]int32 2645 } 2646 } /* alltypes.h:410:137 */ 2647 2648 type 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 2659 type timer_t = uintptr /* alltypes.h:217:14 */ 2660 2661 type clock_t = int64 /* alltypes.h:227:14 */ 2662 2663 type 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 2678 type 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 2689 type __ptcb = struct { 2690 F__f uintptr 2691 F__x uintptr 2692 F__next uintptr 2693 } /* pthread.h:206:1 */ 2694 2695 func 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 2875 type ucred = struct { 2876 Fpid pid_t 2877 Fuid uid_t 2878 Fgid gid_t 2879 } /* socket.h:57:1 */ 2880 2881 type 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 2899 func 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 2923 var _sh uintptr /* gethostbyaddr.c:9:24: */ 2924 2925 func 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 3010 func Xgethostbyname(tls *TLS, name uintptr) uintptr { /* gethostbyname.c:8:16: */ 3011 return Xgethostbyname2(tls, name, 2) 3012 } 3013 3014 func 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 3038 var _sh1 uintptr /* gethostbyname2.c:10:24: */ 3039 3040 func 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 3131 type if_nameindex = struct { 3132 Fif_index uint32 3133 F__ccgo_pad1 [4]byte 3134 Fif_name uintptr 3135 } /* if.h:12:1 */ 3136 3137 type 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 3152 type 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 3162 type 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 3174 type 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 3180 type ns_sect = uint32 /* nameser.h:37:3 */ 3181 3182 type __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 3195 type ns_msg = __ns_msg /* nameser.h:46:3 */ 3196 3197 type _ns_flagdata = struct { 3198 Fmask int32 3199 Fshift int32 3200 } /* nameser.h:48:1 */ 3201 3202 type __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 3214 type ns_rr = __ns_rr /* nameser.h:66:3 */ 3215 3216 type ns_flag = uint32 /* nameser.h:87:3 */ 3217 3218 type ns_opcode = uint32 /* nameser.h:96:3 */ 3219 3220 type ns_rcode = uint32 /* nameser.h:115:3 */ 3221 3222 type ns_update_operation = uint32 /* nameser.h:121:3 */ 3223 3224 type 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 3233 type ns_tsig_key = ns_tsig_key1 /* nameser.h:128:28 */ 3234 3235 type 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 3245 type ns_tcp_tsig_state = ns_tcp_tsig_state1 /* nameser.h:137:34 */ 3246 3247 type ns_type = uint32 /* nameser.h:200:3 */ 3248 3249 type ns_class = uint32 /* nameser.h:219:3 */ 3250 3251 type ns_key_types = uint32 /* nameser.h:226:3 */ 3252 3253 type ns_cert_types = uint32 /* nameser.h:234:3 */ 3254 3255 type 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 3263 type __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 3299 type res_state = uintptr /* resolv.h:62:3 */ 3300 3301 type res_sym = struct { 3302 Fnumber int32 3303 F__ccgo_pad1 [4]byte 3304 Fname uintptr 3305 Fhumanname uintptr 3306 } /* resolv.h:70:1 */ 3307 3308 func 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 3318 func 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 3326 func 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 3337 var _sxdigits = *(*[17]int8)(unsafe.Pointer(ts + 59)) /* getnameinfo.c:36:20 */ 3338 3339 func 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 3400 func 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 3426 func 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 3524 var Xh_errno int32 /* h_errno.c:4:5: */ 3525 3526 func X__h_errno_location(tls *TLS) uintptr { /* h_errno.c:6:5: */ 3527 return uintptr(unsafe.Pointer(&Xh_errno)) 3528 } 3529 3530 func 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 3581 func 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 3644 func 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 3655 func 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 3752 func 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 3817 type mode_t = uint32 /* alltypes.h:160:18 */ 3818 3819 type 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 3829 func 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 3840 var Xzero_struct_address address /* lookup_name.c:27:16: */ 3841 3842 func 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 3872 func 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 3876 func 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 3951 type 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 3958 func 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 4004 type 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 4012 var 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 4022 func 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 4037 func labelof(tls *TLS, a uintptr) int32 { /* lookup_name.c:272:12: */ 4038 return int32((*policy)(unsafe.Pointer(policyof(tls, a))).Flabel) 4039 } 4040 4041 func 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 4057 func 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 4068 func 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 4074 func 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 4240 func 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 4365 func 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 4373 func 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 4377 func 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 4396 func 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 4404 func 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 4418 func 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 4438 func 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 4460 func Xstrtof(tls *TLS, s uintptr, p uintptr) float32 { /* strtod.c:17:7: */ 4461 return float32(strtox(tls, s, p, 0)) 4462 } 4463 4464 func Xstrtod(tls *TLS, s uintptr, p uintptr) float64 { /* strtod.c:22:8: */ 4465 return strtox(tls, s, p, 1) 4466 } 4467 4468 func Xstrtold(tls *TLS, s uintptr, p uintptr) float64 { /* strtod.c:27:13: */ 4469 return strtox(tls, s, p, 2) 4470 } 4471 4472 func 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 4489 func 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 4493 func 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 4497 func 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 4501 func 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 4505 func 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 4509 func 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 4522 func 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 4542 func 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 4551 func 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 4568 func 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) 4635 finish: 4636 return size_t((int64(d)-int64(d0))/1) + Xstrlen(tls, s) 4637 } 4638 4639 func 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 4661 func 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 4665 func 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 4676 func 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 4684 func 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 4707 func 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 4724 var _sp uintptr /* strtok.c:5:14: */ 4725 4726 func 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 4731 var 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" 4732 var ts = (*reflect.StringHeader)(unsafe.Pointer(&ts1)).Data