musl_openbsd_amd64.go (123954B)
1 // Code generated by 'ccgo -export-externs X -export-fields F -hide __syscall0,__syscall1,__syscall2,__syscall3,__syscall4,__syscall5,__syscall6,getnameinfo,gethostbyaddr_r, -nostdinc -nostdlib -o ../musl_openbsd_amd64.go -pkgname libc -static-locals-prefix _s -Iarch/x86_64 -Iarch/generic -Iobj/src/internal -Isrc/include -Isrc/internal -Iobj/include -Iinclude copyright.c ../openbsd/ctype_.c src/ctype/isalnum.c src/ctype/isalpha.c src/ctype/isdigit.c src/ctype/islower.c src/ctype/isprint.c src/ctype/isspace.c src/ctype/isupper.c src/ctype/isxdigit.c src/internal/floatscan.c src/internal/intscan.c src/internal/shgetc.c src/math/copysignl.c src/math/fabsl.c src/math/fmodl.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/stdio/__toread.c src/stdio/__uflow.c src/stdlib/bsearch.c src/stdlib/strtod.c src/stdlib/strtol.c src/string/strdup.c src/string/strnlen.c src/string/strspn.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 // # 1 "lib/libc/gen/ctype_.c" 361 // # 1 "<built-in>" 362 // # 1 "<command-line>" 363 // # 1 "lib/libc/gen/ctype_.c" 364 // # 36 "lib/libc/gen/ctype_.c" 365 // # 1 "./include/ctype.h" 1 366 // # 43 "./include/ctype.h" 367 // # 1 "./sys/sys/cdefs.h" 1 368 // # 41 "./sys/sys/cdefs.h" 369 // # 1 "./machine/cdefs.h" 1 370 // # 42 "./sys/sys/cdefs.h" 2 371 // # 44 "./include/ctype.h" 2 372 // # 57 "./include/ctype.h" 373 // typedef void *locale_t; 374 // 375 // 376 // 377 // 378 // 379 // extern const char *_ctype_; 380 // extern const short *_tolower_tab_; 381 // extern const short *_toupper_tab_; 382 // 383 // 384 // int isalnum(int); 385 // int isalpha(int); 386 // int iscntrl(int); 387 // int isdigit(int); 388 // int isgraph(int); 389 // int islower(int); 390 // int isprint(int); 391 // int ispunct(int); 392 // int isspace(int); 393 // int isupper(int); 394 // int isxdigit(int); 395 // int tolower(int); 396 // int toupper(int); 397 // 398 // 399 // 400 // int isblank(int); 401 // 402 // 403 // 404 // int isascii(int); 405 // int toascii(int); 406 // int _tolower(int); 407 // int _toupper(int); 408 // 409 // 410 // 411 // int isalnum_l(int, locale_t); 412 // int isalpha_l(int, locale_t); 413 // int isblank_l(int, locale_t); 414 // int iscntrl_l(int, locale_t); 415 // int isdigit_l(int, locale_t); 416 // int isgraph_l(int, locale_t); 417 // int islower_l(int, locale_t); 418 // int isprint_l(int, locale_t); 419 // int ispunct_l(int, locale_t); 420 // int isspace_l(int, locale_t); 421 // int isupper_l(int, locale_t); 422 // int isxdigit_l(int, locale_t); 423 // int tolower_l(int, locale_t); 424 // int toupper_l(int, locale_t); 425 // 426 // 427 // 428 // 429 // 430 // 431 // extern __inline __attribute__((__gnu_inline__)) int isalnum(int _c) 432 // { 433 // return (_c == -1 ? 0 : ((_ctype_ + 1)[(unsigned char)_c] & (0x01|0x02|0x04))); 434 // } 435 // 436 // extern __inline __attribute__((__gnu_inline__)) int isalpha(int _c) 437 // { 438 // return (_c == -1 ? 0 : ((_ctype_ + 1)[(unsigned char)_c] & (0x01|0x02))); 439 // } 440 // 441 // extern __inline __attribute__((__gnu_inline__)) int iscntrl(int _c) 442 // { 443 // return (_c == -1 ? 0 : ((_ctype_ + 1)[(unsigned char)_c] & 0x20)); 444 // } 445 // 446 // extern __inline __attribute__((__gnu_inline__)) int isdigit(int _c) 447 // { 448 // return (_c == -1 ? 0 : ((_ctype_ + 1)[(unsigned char)_c] & 0x04)); 449 // } 450 // 451 // extern __inline __attribute__((__gnu_inline__)) int isgraph(int _c) 452 // { 453 // return (_c == -1 ? 0 : ((_ctype_ + 1)[(unsigned char)_c] & (0x10|0x01|0x02|0x04))); 454 // } 455 // 456 // extern __inline __attribute__((__gnu_inline__)) int islower(int _c) 457 // { 458 // return (_c == -1 ? 0 : ((_ctype_ + 1)[(unsigned char)_c] & 0x02)); 459 // } 460 // 461 // extern __inline __attribute__((__gnu_inline__)) int isprint(int _c) 462 // { 463 // return (_c == -1 ? 0 : ((_ctype_ + 1)[(unsigned char)_c] & (0x10|0x01|0x02|0x04|0x80))); 464 // } 465 // 466 // extern __inline __attribute__((__gnu_inline__)) int ispunct(int _c) 467 // { 468 // return (_c == -1 ? 0 : ((_ctype_ + 1)[(unsigned char)_c] & 0x10)); 469 // } 470 // 471 // extern __inline __attribute__((__gnu_inline__)) int isspace(int _c) 472 // { 473 // return (_c == -1 ? 0 : ((_ctype_ + 1)[(unsigned char)_c] & 0x08)); 474 // } 475 // 476 // extern __inline __attribute__((__gnu_inline__)) int isupper(int _c) 477 // { 478 // return (_c == -1 ? 0 : ((_ctype_ + 1)[(unsigned char)_c] & 0x01)); 479 // } 480 // 481 // extern __inline __attribute__((__gnu_inline__)) int isxdigit(int _c) 482 // { 483 // return (_c == -1 ? 0 : ((_ctype_ + 1)[(unsigned char)_c] & (0x04|0x40))); 484 // } 485 // 486 // extern __inline __attribute__((__gnu_inline__)) int tolower(int _c) 487 // { 488 // if ((unsigned int)_c > 255) 489 // return (_c); 490 // return ((_tolower_tab_ + 1)[_c]); 491 // } 492 // 493 // extern __inline __attribute__((__gnu_inline__)) int toupper(int _c) 494 // { 495 // if ((unsigned int)_c > 255) 496 // return (_c); 497 // return ((_toupper_tab_ + 1)[_c]); 498 // } 499 // 500 // 501 502 // extern __inline __attribute__((__gnu_inline__)) 503 func Xisblank(tls *TLS, _c int32) int32 { /* ctype_.c:144:5: */ 504 return Bool32(_c == ' ' || _c == '\t') 505 } 506 507 // extern __inline __attribute__((__gnu_inline__)) int isascii(int _c) 508 // { 509 // return ((unsigned int)_c <= 0177); 510 // } 511 // 512 // extern __inline __attribute__((__gnu_inline__)) int toascii(int _c) 513 // { 514 // return (_c & 0177); 515 // } 516 // 517 // extern __inline __attribute__((__gnu_inline__)) int _tolower(int _c) 518 // { 519 // return (_c - 'A' + 'a'); 520 // } 521 // 522 // extern __inline __attribute__((__gnu_inline__)) int _toupper(int _c) 523 // { 524 // return (_c - 'a' + 'A'); 525 // } 526 // 527 // 528 // 529 // extern __inline __attribute__((__gnu_inline__)) int 530 // isalnum_l(int _c, locale_t _l __attribute__((__unused__))) 531 // { 532 // return isalnum(_c); 533 // } 534 // 535 // extern __inline __attribute__((__gnu_inline__)) int 536 // isalpha_l(int _c, locale_t _l __attribute__((__unused__))) 537 // { 538 // return isalpha(_c); 539 // } 540 // 541 // extern __inline __attribute__((__gnu_inline__)) int 542 // isblank_l(int _c, locale_t _l __attribute__((__unused__))) 543 // { 544 // return isblank(_c); 545 // } 546 // 547 // extern __inline __attribute__((__gnu_inline__)) int 548 // iscntrl_l(int _c, locale_t _l __attribute__((__unused__))) 549 // { 550 // return iscntrl(_c); 551 // } 552 // 553 // extern __inline __attribute__((__gnu_inline__)) int 554 // isdigit_l(int _c, locale_t _l __attribute__((__unused__))) 555 // { 556 // return isdigit(_c); 557 // } 558 // 559 // extern __inline __attribute__((__gnu_inline__)) int 560 // isgraph_l(int _c, locale_t _l __attribute__((__unused__))) 561 // { 562 // return isgraph(_c); 563 // } 564 // 565 // extern __inline __attribute__((__gnu_inline__)) int 566 // islower_l(int _c, locale_t _l __attribute__((__unused__))) 567 // { 568 // return islower(_c); 569 // } 570 // 571 // extern __inline __attribute__((__gnu_inline__)) int 572 // isprint_l(int _c, locale_t _l __attribute__((__unused__))) 573 // { 574 // return isprint(_c); 575 // } 576 // 577 // extern __inline __attribute__((__gnu_inline__)) int 578 // ispunct_l(int _c, locale_t _l __attribute__((__unused__))) 579 // { 580 // return ispunct(_c); 581 // } 582 // 583 // extern __inline __attribute__((__gnu_inline__)) int 584 // isspace_l(int _c, locale_t _l __attribute__((__unused__))) 585 // { 586 // return isspace(_c); 587 // } 588 // 589 // extern __inline __attribute__((__gnu_inline__)) int 590 // isupper_l(int _c, locale_t _l __attribute__((__unused__))) 591 // { 592 // return isupper(_c); 593 // } 594 // 595 // extern __inline __attribute__((__gnu_inline__)) int 596 // isxdigit_l(int _c, locale_t _l __attribute__((__unused__))) 597 // { 598 // return isxdigit(_c); 599 // } 600 // 601 // extern __inline __attribute__((__gnu_inline__)) int 602 // tolower_l(int _c, locale_t _l __attribute__((__unused__))) 603 // { 604 // return tolower(_c); 605 // } 606 // 607 // extern __inline __attribute__((__gnu_inline__)) int 608 // toupper_l(int _c, locale_t _l __attribute__((__unused__))) 609 // { 610 // return toupper(_c); 611 // } 612 // 613 // 614 // 615 // 616 // 617 // # 37 "lib/libc/gen/ctype_.c" 2 618 // # 1 "./lib/libc/include/ctype_private.h" 1 619 // 620 // 621 // 622 // 623 // 624 // # 5 "./lib/libc/include/ctype_private.h" 625 // #pragma GCC visibility push(hidden) 626 // # 5 "./lib/libc/include/ctype_private.h" 627 // 628 // extern const char _C_ctype_[]; 629 // extern const short _C_toupper_[]; 630 // extern const short _C_tolower_[]; 631 // 632 // # 9 "./lib/libc/include/ctype_private.h" 633 // #pragma GCC visibility pop 634 // # 9 "./lib/libc/include/ctype_private.h" 635 // 636 // # 38 "lib/libc/gen/ctype_.c" 2 637 638 var X_C_ctype_ = [257]int8{ 639 int8(0), 640 int8(0x20), int8(0x20), int8(0x20), int8(0x20), int8(0x20), int8(0x20), int8(0x20), int8(0x20), 641 int8(0x20), int8(0x20 | 0x08), int8(0x20 | 0x08), int8(0x20 | 0x08), int8(0x20 | 0x08), int8(0x20 | 0x08), int8(0x20), int8(0x20), 642 int8(0x20), int8(0x20), int8(0x20), int8(0x20), int8(0x20), int8(0x20), int8(0x20), int8(0x20), 643 int8(0x20), int8(0x20), int8(0x20), int8(0x20), int8(0x20), int8(0x20), int8(0x20), int8(0x20), 644 int8(0x08 | int32(Int8FromInt32(0x80))), int8(0x10), int8(0x10), int8(0x10), int8(0x10), int8(0x10), int8(0x10), int8(0x10), 645 int8(0x10), int8(0x10), int8(0x10), int8(0x10), int8(0x10), int8(0x10), int8(0x10), int8(0x10), 646 int8(0x04), int8(0x04), int8(0x04), int8(0x04), int8(0x04), int8(0x04), int8(0x04), int8(0x04), 647 int8(0x04), int8(0x04), int8(0x10), int8(0x10), int8(0x10), int8(0x10), int8(0x10), int8(0x10), 648 int8(0x10), int8(0x01 | 0x40), int8(0x01 | 0x40), int8(0x01 | 0x40), int8(0x01 | 0x40), int8(0x01 | 0x40), int8(0x01 | 0x40), int8(0x01), 649 int8(0x01), int8(0x01), int8(0x01), int8(0x01), int8(0x01), int8(0x01), int8(0x01), int8(0x01), 650 int8(0x01), int8(0x01), int8(0x01), int8(0x01), int8(0x01), int8(0x01), int8(0x01), int8(0x01), 651 int8(0x01), int8(0x01), int8(0x01), int8(0x10), int8(0x10), int8(0x10), int8(0x10), int8(0x10), 652 int8(0x10), int8(0x02 | 0x40), int8(0x02 | 0x40), int8(0x02 | 0x40), int8(0x02 | 0x40), int8(0x02 | 0x40), int8(0x02 | 0x40), int8(0x02), 653 int8(0x02), int8(0x02), int8(0x02), int8(0x02), int8(0x02), int8(0x02), int8(0x02), int8(0x02), 654 int8(0x02), int8(0x02), int8(0x02), int8(0x02), int8(0x02), int8(0x02), int8(0x02), int8(0x02), 655 int8(0x02), int8(0x02), int8(0x02), int8(0x10), int8(0x10), int8(0x10), int8(0x10), int8(0x20), 656 657 int8(0), int8(0), int8(0), int8(0), int8(0), int8(0), int8(0), int8(0), 658 int8(0), int8(0), int8(0), int8(0), int8(0), int8(0), int8(0), int8(0), 659 int8(0), int8(0), int8(0), int8(0), int8(0), int8(0), int8(0), int8(0), 660 int8(0), int8(0), int8(0), int8(0), int8(0), int8(0), int8(0), int8(0), 661 int8(0), int8(0), int8(0), int8(0), int8(0), int8(0), int8(0), int8(0), 662 int8(0), int8(0), int8(0), int8(0), int8(0), int8(0), int8(0), int8(0), 663 int8(0), int8(0), int8(0), int8(0), int8(0), int8(0), int8(0), int8(0), 664 int8(0), int8(0), int8(0), int8(0), int8(0), int8(0), int8(0), int8(0), 665 int8(0), int8(0), int8(0), int8(0), int8(0), int8(0), int8(0), int8(0), 666 int8(0), int8(0), int8(0), int8(0), int8(0), int8(0), int8(0), int8(0), 667 int8(0), int8(0), int8(0), int8(0), int8(0), int8(0), int8(0), int8(0), 668 int8(0), int8(0), int8(0), int8(0), int8(0), int8(0), int8(0), int8(0), 669 int8(0), int8(0), int8(0), int8(0), int8(0), int8(0), int8(0), int8(0), 670 int8(0), int8(0), int8(0), int8(0), int8(0), int8(0), int8(0), int8(0), 671 int8(0), int8(0), int8(0), int8(0), int8(0), int8(0), int8(0), int8(0), 672 int8(0), int8(0), int8(0), int8(0), int8(0), int8(0), int8(0), int8(0), 673 } /* ctype_.c:282:12 */ 674 675 var X_ctype_ uintptr = 0 /* ctype_.c:319:12 */ 676 677 func __isspace(tls *TLS, _c int32) int32 { /* ctype.h:26:21: */ 678 return Bool32(_c == ' ' || uint32(_c)-uint32('\t') < uint32(5)) 679 } 680 681 type locale_t = uintptr /* alltypes.h:343:32 */ 682 683 func Xisalnum(tls *TLS, c int32) int32 { /* isalnum.c:3:5: */ 684 return Bool32(func() int32 { 685 if 0 != 0 { 686 return Xisalpha(tls, c) 687 } 688 return Bool32(uint32(c)|uint32(32)-uint32('a') < uint32(26)) 689 }() != 0 || func() int32 { 690 if 0 != 0 { 691 return Xisdigit(tls, c) 692 } 693 return Bool32(uint32(c)-uint32('0') < uint32(10)) 694 }() != 0) 695 } 696 697 func X__isalnum_l(tls *TLS, c int32, l locale_t) int32 { /* isalnum.c:8:5: */ 698 return Xisalnum(tls, c) 699 } 700 701 func Xisalpha(tls *TLS, c int32) int32 { /* isalpha.c:4:5: */ 702 return Bool32(uint32(c)|uint32(32)-uint32('a') < uint32(26)) 703 } 704 705 func X__isalpha_l(tls *TLS, c int32, l locale_t) int32 { /* isalpha.c:9:5: */ 706 return Xisalpha(tls, c) 707 } 708 709 func Xisdigit(tls *TLS, c int32) int32 { /* isdigit.c:4:5: */ 710 return Bool32(uint32(c)-uint32('0') < uint32(10)) 711 } 712 713 func X__isdigit_l(tls *TLS, c int32, l locale_t) int32 { /* isdigit.c:9:5: */ 714 return Xisdigit(tls, c) 715 } 716 717 func Xislower(tls *TLS, c int32) int32 { /* islower.c:4:5: */ 718 return Bool32(uint32(c)-uint32('a') < uint32(26)) 719 } 720 721 func X__islower_l(tls *TLS, c int32, l locale_t) int32 { /* islower.c:9:5: */ 722 return Xislower(tls, c) 723 } 724 725 func Xisprint(tls *TLS, c int32) int32 { /* isprint.c:4:5: */ 726 return Bool32(uint32(c)-uint32(0x20) < uint32(0x5f)) 727 } 728 729 func X__isprint_l(tls *TLS, c int32, l locale_t) int32 { /* isprint.c:9:5: */ 730 return Xisprint(tls, c) 731 } 732 733 func Xisspace(tls *TLS, c int32) int32 { /* isspace.c:4:5: */ 734 return Bool32(c == ' ' || uint32(c)-uint32('\t') < uint32(5)) 735 } 736 737 func X__isspace_l(tls *TLS, c int32, l locale_t) int32 { /* isspace.c:9:5: */ 738 return Xisspace(tls, c) 739 } 740 741 func Xisupper(tls *TLS, c int32) int32 { /* isupper.c:4:5: */ 742 return Bool32(uint32(c)-uint32('A') < uint32(26)) 743 } 744 745 func X__isupper_l(tls *TLS, c int32, l locale_t) int32 { /* isupper.c:9:5: */ 746 return Xisupper(tls, c) 747 } 748 749 func Xisxdigit(tls *TLS, c int32) int32 { /* isxdigit.c:3:5: */ 750 return Bool32(func() int32 { 751 if 0 != 0 { 752 return Xisdigit(tls, c) 753 } 754 return Bool32(uint32(c)-uint32('0') < uint32(10)) 755 }() != 0 || uint32(c)|uint32(32)-uint32('a') < uint32(6)) 756 } 757 758 func X__isxdigit_l(tls *TLS, c int32, l locale_t) int32 { /* isxdigit.c:8:5: */ 759 return Xisxdigit(tls, c) 760 } 761 762 type uintptr_t = uint64 /* alltypes.h:55:24 */ 763 764 type intptr_t = int64 /* alltypes.h:70:15 */ 765 766 type int8_t = int8 /* alltypes.h:96:25 */ 767 768 type int16_t = int16 /* alltypes.h:101:25 */ 769 770 type int32_t = int32 /* alltypes.h:106:25 */ 771 772 type int64_t = int64 /* alltypes.h:111:25 */ 773 774 type intmax_t = int64 /* alltypes.h:116:25 */ 775 776 type uint8_t = uint8 /* alltypes.h:121:25 */ 777 778 type uint16_t = uint16 /* alltypes.h:126:25 */ 779 780 type uint32_t = uint32 /* alltypes.h:131:25 */ 781 782 type uint64_t = uint64 /* alltypes.h:136:25 */ 783 784 type uintmax_t = uint64 /* alltypes.h:146:25 */ 785 786 type int_fast8_t = int8_t /* stdint.h:22:16 */ 787 type int_fast64_t = int64_t /* stdint.h:23:17 */ 788 789 type int_least8_t = int8_t /* stdint.h:25:17 */ 790 type int_least16_t = int16_t /* stdint.h:26:17 */ 791 type int_least32_t = int32_t /* stdint.h:27:17 */ 792 type int_least64_t = int64_t /* stdint.h:28:17 */ 793 794 type uint_fast8_t = uint8_t /* stdint.h:30:17 */ 795 type uint_fast64_t = uint64_t /* stdint.h:31:18 */ 796 797 type uint_least8_t = uint8_t /* stdint.h:33:18 */ 798 type uint_least16_t = uint16_t /* stdint.h:34:18 */ 799 type uint_least32_t = uint32_t /* stdint.h:35:18 */ 800 type uint_least64_t = uint64_t /* stdint.h:36:18 */ 801 802 type int_fast16_t = int32_t /* stdint.h:1:17 */ 803 type int_fast32_t = int32_t /* stdint.h:2:17 */ 804 type uint_fast16_t = uint32_t /* stdint.h:3:18 */ 805 type uint_fast32_t = uint32_t /* stdint.h:4:18 */ 806 807 type ssize_t = int64 /* alltypes.h:65:15 */ 808 809 type off_t = int64 /* alltypes.h:162:16 */ 810 811 type _IO_FILE = struct { 812 Fflags uint32 813 F__ccgo_pad1 [4]byte 814 Frpos uintptr 815 Frend uintptr 816 Fclose uintptr 817 Fwend uintptr 818 Fwpos uintptr 819 Fmustbezero_1 uintptr 820 Fwbase uintptr 821 Fread uintptr 822 Fwrite uintptr 823 Fseek uintptr 824 Fbuf uintptr 825 Fbuf_size size_t 826 Fprev uintptr 827 Fnext uintptr 828 Ffd int32 829 Fpipe_pid int32 830 Flockcount int64 831 Fmode int32 832 Flock int32 833 Flbf int32 834 F__ccgo_pad2 [4]byte 835 Fcookie uintptr 836 Foff off_t 837 Fgetln_buf uintptr 838 Fmustbezero_2 uintptr 839 Fshend uintptr 840 Fshlim off_t 841 Fshcnt off_t 842 Fprev_locked uintptr 843 Fnext_locked uintptr 844 Flocale uintptr 845 } /* alltypes.h:320:9 */ 846 847 type FILE = _IO_FILE /* alltypes.h:320:25 */ 848 849 type va_list = uintptr /* alltypes.h:326:27 */ 850 851 type _G_fpos64_t = struct { 852 F__ccgo_pad1 [0]uint64 853 F__opaque [16]int8 854 } /* stdio.h:54:9 */ 855 856 type fpos_t = _G_fpos64_t /* stdio.h:58:3 */ 857 858 type float_t = float32 /* alltypes.h:29:15 */ 859 860 type double_t = float64 /* alltypes.h:34:16 */ 861 862 func __FLOAT_BITS(tls *TLS, __f float32) uint32 { /* math.h:55:26: */ 863 bp := tls.Alloc(4) 864 defer tls.Free(4) 865 866 // var __u struct {F__f float32;} at bp, 4 867 868 *(*float32)(unsafe.Pointer(bp)) = __f 869 return *(*uint32)(unsafe.Pointer(bp)) 870 } 871 872 func __DOUBLE_BITS(tls *TLS, __f float64) uint64 { /* math.h:61:36: */ 873 bp := tls.Alloc(8) 874 defer tls.Free(8) 875 876 // var __u struct {F__f float64;} at bp, 8 877 878 *(*float64)(unsafe.Pointer(bp)) = __f 879 return *(*uint64)(unsafe.Pointer(bp)) 880 } 881 882 type syscall_arg_t = int64 /* syscall.h:22:14 */ 883 884 func scanexp(tls *TLS, f uintptr, pok int32) int64 { /* floatscan.c:37:18: */ 885 var c int32 886 var x int32 887 var y int64 888 var neg int32 = 0 889 890 c = func() int32 { 891 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend { 892 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1)))) 893 } 894 return X__shgetc(tls, f) 895 }() 896 if c == '+' || c == '-' { 897 neg = Bool32(c == '-') 898 c = func() int32 { 899 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend { 900 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1)))) 901 } 902 return X__shgetc(tls, f) 903 }() 904 if uint32(c-'0') >= 10 && pok != 0 { 905 if (*FILE)(unsafe.Pointer(f)).Fshlim >= int64(0) { 906 (*FILE)(unsafe.Pointer(f)).Frpos-- 907 } else { 908 } 909 } 910 } 911 if uint32(c-'0') >= 10 { 912 if (*FILE)(unsafe.Pointer(f)).Fshlim >= int64(0) { 913 (*FILE)(unsafe.Pointer(f)).Frpos-- 914 } else { 915 } 916 return -0x7fffffffffffffff - int64(1) 917 } 918 for x = 0; uint32(c-'0') < 10 && x < 0x7fffffff/10; c = func() int32 { 919 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend { 920 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1)))) 921 } 922 return X__shgetc(tls, f) 923 }() { 924 x = 10*x + c - '0' 925 } 926 for y = int64(x); uint32(c-'0') < 10 && y < 0x7fffffffffffffff/int64(100); c = func() int32 { 927 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend { 928 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1)))) 929 } 930 return X__shgetc(tls, f) 931 }() { 932 y = int64(10)*y + int64(c) - int64('0') 933 } 934 for ; uint32(c-'0') < 10; c = func() int32 { 935 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend { 936 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1)))) 937 } 938 return X__shgetc(tls, f) 939 }() { 940 } 941 if (*FILE)(unsafe.Pointer(f)).Fshlim >= int64(0) { 942 (*FILE)(unsafe.Pointer(f)).Frpos-- 943 } else { 944 } 945 if neg != 0 { 946 return -y 947 } 948 return y 949 } 950 951 func decfloat(tls *TLS, f uintptr, c int32, bits int32, emin int32, sign int32, pok int32) float64 { /* floatscan.c:64:20: */ 952 bp := tls.Alloc(512) 953 defer tls.Free(512) 954 955 // var x [128]uint32_t at bp, 512 956 957 var i int32 958 var j int32 959 var k int32 960 var a int32 961 var z int32 962 var lrp int64 = int64(0) 963 var dc int64 = int64(0) 964 var e10 int64 = int64(0) 965 var lnz int32 = 0 966 var gotdig int32 = 0 967 var gotrad int32 = 0 968 var rp int32 969 var e2 int32 970 var emax int32 = -emin - bits + 3 971 var denormal int32 = 0 972 var y float64 973 var frac float64 = float64(0) 974 var bias float64 = float64(0) 975 976 j = 0 977 k = 0 978 979 // Don't let leading zeros consume buffer space 980 for ; c == '0'; c = func() int32 { 981 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend { 982 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1)))) 983 } 984 return X__shgetc(tls, f) 985 }() { 986 gotdig = 1 987 } 988 if c == '.' { 989 gotrad = 1 990 for 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 }(); c == '0'; c = func() int32 { 996 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend { 997 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1)))) 998 } 999 return X__shgetc(tls, f) 1000 }() { 1001 gotdig = 1 1002 lrp-- 1003 } 1004 } 1005 1006 *(*uint32_t)(unsafe.Pointer(bp)) = uint32_t(0) 1007 for ; uint32(c-'0') < 10 || c == '.'; c = func() int32 { 1008 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend { 1009 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1)))) 1010 } 1011 return X__shgetc(tls, f) 1012 }() { 1013 if c == '.' { 1014 if gotrad != 0 { 1015 break 1016 } 1017 gotrad = 1 1018 lrp = dc 1019 } else if k < 128-3 { 1020 dc++ 1021 if c != '0' { 1022 lnz = int32(dc) 1023 } 1024 if j != 0 { 1025 *(*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') 1026 } else { 1027 *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) = uint32_t(c - '0') 1028 } 1029 if PreIncInt32(&j, 1) == 9 { 1030 k++ 1031 j = 0 1032 } 1033 gotdig = 1 1034 } else { 1035 dc++ 1036 if c != '0' { 1037 lnz = (128 - 4) * 9 1038 *(*uint32_t)(unsafe.Pointer(bp + 124*4)) |= uint32_t(1) 1039 } 1040 } 1041 } 1042 if !(gotrad != 0) { 1043 lrp = dc 1044 } 1045 1046 if gotdig != 0 && c|32 == 'e' { 1047 e10 = scanexp(tls, f, pok) 1048 if e10 == -0x7fffffffffffffff-int64(1) { 1049 if pok != 0 { 1050 if (*FILE)(unsafe.Pointer(f)).Fshlim >= int64(0) { 1051 (*FILE)(unsafe.Pointer(f)).Frpos-- 1052 } else { 1053 } 1054 } else { 1055 X__shlim(tls, f, int64(0)) 1056 return float64(0) 1057 } 1058 e10 = int64(0) 1059 } 1060 lrp = lrp + e10 1061 } else if c >= 0 { 1062 if (*FILE)(unsafe.Pointer(f)).Fshlim >= int64(0) { 1063 (*FILE)(unsafe.Pointer(f)).Frpos-- 1064 } else { 1065 } 1066 } 1067 if !(gotdig != 0) { 1068 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 22 1069 X__shlim(tls, f, int64(0)) 1070 return float64(0) 1071 } 1072 1073 // Handle zero specially to avoid nasty special cases later 1074 if !(int32(*(*uint32_t)(unsafe.Pointer(bp))) != 0) { 1075 return float64(sign) * 0.0 1076 } 1077 1078 // Optimize small integers (w/no exponent) and over/under-flow 1079 if lrp == dc && dc < int64(10) && (bits > 30 || *(*uint32_t)(unsafe.Pointer(bp))>>bits == uint32_t(0)) { 1080 return float64(sign) * float64(*(*uint32_t)(unsafe.Pointer(bp))) 1081 } 1082 if lrp > int64(-emin/2) { 1083 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34 1084 return float64(sign) * 1.79769313486231570815e+308 * 1.79769313486231570815e+308 1085 } 1086 if lrp < int64(emin-2*53) { 1087 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34 1088 return float64(sign) * 2.22507385850720138309e-308 * 2.22507385850720138309e-308 1089 } 1090 1091 // Align incomplete final B1B digit 1092 if j != 0 { 1093 for ; j < 9; j++ { 1094 *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) *= uint32_t(10) 1095 } 1096 k++ 1097 j = 0 1098 } 1099 1100 a = 0 1101 z = k 1102 e2 = 0 1103 rp = int32(lrp) 1104 1105 // Optimize small to mid-size integers (even in exp. notation) 1106 if lnz < 9 && lnz <= rp && rp < 18 { 1107 if rp == 9 { 1108 return float64(sign) * float64(*(*uint32_t)(unsafe.Pointer(bp))) 1109 } 1110 if rp < 9 { 1111 return float64(sign) * float64(*(*uint32_t)(unsafe.Pointer(bp))) / float64(_sp10s[8-rp]) 1112 } 1113 var bitlim int32 = bits - 3*(rp-9) 1114 if bitlim > 30 || *(*uint32_t)(unsafe.Pointer(bp))>>bitlim == uint32_t(0) { 1115 return float64(sign) * float64(*(*uint32_t)(unsafe.Pointer(bp))) * float64(_sp10s[rp-10]) 1116 } 1117 } 1118 1119 // Drop trailing zeros 1120 for ; !(int32(*(*uint32_t)(unsafe.Pointer(bp + uintptr(z-1)*4))) != 0); z-- { 1121 } 1122 1123 // Align radix point to B1B digit boundary 1124 if rp%9 != 0 { 1125 var rpm9 int32 1126 if rp >= 0 { 1127 rpm9 = rp % 9 1128 } else { 1129 rpm9 = rp%9 + 9 1130 } 1131 var p10 int32 = _sp10s[8-rpm9] 1132 var carry uint32_t = uint32_t(0) 1133 for k = a; k != z; k++ { 1134 var tmp uint32_t = *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) % uint32_t(p10) 1135 *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) = *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4))/uint32_t(p10) + carry 1136 carry = uint32_t(1000000000/p10) * tmp 1137 if k == a && !(int32(*(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4))) != 0) { 1138 a = (a + 1) & (128 - 1) 1139 rp = rp - 9 1140 } 1141 } 1142 if carry != 0 { 1143 *(*uint32_t)(unsafe.Pointer(bp + uintptr(PostIncInt32(&z, 1))*4)) = carry 1144 } 1145 rp = rp + (9 - rpm9) 1146 } 1147 1148 // Upscale until desired number of bits are left of radix point 1149 for rp < 9*2 || rp == 9*2 && *(*uint32_t)(unsafe.Pointer(bp + uintptr(a)*4)) < _sth[0] { 1150 var carry uint32_t = uint32_t(0) 1151 e2 = e2 - 29 1152 for k = (z - 1) & (128 - 1); ; k = (k - 1) & (128 - 1) { 1153 var tmp uint64_t = uint64_t(*(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)))<<29 + uint64_t(carry) 1154 if tmp > uint64(1000000000) { 1155 carry = uint32_t(tmp / uint64(1000000000)) 1156 *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) = uint32_t(tmp % uint64(1000000000)) 1157 } else { 1158 carry = uint32_t(0) 1159 *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) = uint32_t(tmp) 1160 } 1161 if k == (z-1)&(128-1) && k != a && !(int32(*(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4))) != 0) { 1162 z = k 1163 } 1164 if k == a { 1165 break 1166 } 1167 } 1168 if carry != 0 { 1169 rp = rp + 9 1170 a = (a - 1) & (128 - 1) 1171 if a == z { 1172 z = (z - 1) & (128 - 1) 1173 *(*uint32_t)(unsafe.Pointer(bp + uintptr((z-1)&(128-1))*4)) |= *(*uint32_t)(unsafe.Pointer(bp + uintptr(z)*4)) 1174 } 1175 *(*uint32_t)(unsafe.Pointer(bp + uintptr(a)*4)) = carry 1176 } 1177 } 1178 1179 // Downscale until exactly number of bits are left of radix point 1180 for { 1181 var carry uint32_t = uint32_t(0) 1182 var sh int32 = 1 1183 for i = 0; i < 2; i++ { 1184 k = (a + i) & (128 - 1) 1185 if k == z || *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) < _sth[i] { 1186 i = 2 1187 break 1188 } 1189 if *(*uint32_t)(unsafe.Pointer(bp + uintptr((a+i)&(128-1))*4)) > _sth[i] { 1190 break 1191 } 1192 } 1193 if i == 2 && rp == 9*2 { 1194 break 1195 } 1196 // FIXME: find a way to compute optimal sh 1197 if rp > 9+9*2 { 1198 sh = 9 1199 } 1200 e2 = e2 + sh 1201 for k = a; k != z; k = (k + 1) & (128 - 1) { 1202 var tmp uint32_t = *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) & uint32_t(int32(1)<<sh-1) 1203 *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4)) = *(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4))>>sh + carry 1204 carry = uint32_t(int32(1000000000)>>sh) * tmp 1205 if k == a && !(int32(*(*uint32_t)(unsafe.Pointer(bp + uintptr(k)*4))) != 0) { 1206 a = (a + 1) & (128 - 1) 1207 i-- 1208 rp = rp - 9 1209 } 1210 } 1211 if carry != 0 { 1212 if (z+1)&(128-1) != a { 1213 *(*uint32_t)(unsafe.Pointer(bp + uintptr(z)*4)) = carry 1214 z = (z + 1) & (128 - 1) 1215 } else { 1216 *(*uint32_t)(unsafe.Pointer(bp + uintptr((z-1)&(128-1))*4)) |= uint32_t(1) 1217 } 1218 } 1219 } 1220 1221 // Assemble desired bits into floating point variable 1222 for y = float64(AssignInt32(&i, 0)); i < 2; i++ { 1223 if (a+i)&(128-1) == z { 1224 *(*uint32_t)(unsafe.Pointer(bp + uintptr(AssignInt32(&z, (z+1)&(128-1))-1)*4)) = uint32_t(0) 1225 } 1226 y = 1000000000.0*y + float64(*(*uint32_t)(unsafe.Pointer(bp + uintptr((a+i)&(128-1))*4))) 1227 } 1228 1229 y = y * float64(sign) 1230 1231 // Limit precision for denormal results 1232 if bits > 53+e2-emin { 1233 bits = 53 + e2 - emin 1234 if bits < 0 { 1235 bits = 0 1236 } 1237 denormal = 1 1238 } 1239 1240 // Calculate bias term to force rounding, move out lower bits 1241 if bits < 53 { 1242 bias = Xcopysignl(tls, Xscalbn(tls, float64(1), 2*53-bits-1), y) 1243 frac = Xfmodl(tls, y, Xscalbn(tls, float64(1), 53-bits)) 1244 y = y - frac 1245 y = y + bias 1246 } 1247 1248 // Process tail of decimal input so it can affect rounding 1249 if (a+i)&(128-1) != z { 1250 var t uint32_t = *(*uint32_t)(unsafe.Pointer(bp + uintptr((a+i)&(128-1))*4)) 1251 if t < uint32_t(500000000) && (t != 0 || (a+i+1)&(128-1) != z) { 1252 frac = frac + 0.25*float64(sign) 1253 } else if t > uint32_t(500000000) { 1254 frac = frac + 0.75*float64(sign) 1255 } else if t == uint32_t(500000000) { 1256 if (a+i+1)&(128-1) == z { 1257 frac = frac + 0.5*float64(sign) 1258 } else { 1259 frac = frac + 0.75*float64(sign) 1260 } 1261 } 1262 if 53-bits >= 2 && !(Xfmodl(tls, frac, float64(1)) != 0) { 1263 frac += 1 1264 } 1265 } 1266 1267 y = y + frac 1268 y = y - bias 1269 1270 if (e2+53)&0x7fffffff > emax-5 { 1271 if Xfabsl(tls, y) >= float64(float64(2))/2.22044604925031308085e-16 { 1272 if denormal != 0 && bits == 53+e2-emin { 1273 denormal = 0 1274 } 1275 y = y * 0.5 1276 e2++ 1277 } 1278 if e2+53 > emax || denormal != 0 && frac != 0 { 1279 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34 1280 } 1281 } 1282 1283 return Xscalbnl(tls, y, e2) 1284 } 1285 1286 var _sth = [2]uint32_t{uint32_t(9007199), uint32_t(254740991)} /* floatscan.c:67:24 */ 1287 var _sp10s = [8]int32{10, 100, 1000, 10000, 1288 100000, 1000000, 10000000, 100000000} /* floatscan.c:80:19 */ 1289 1290 func hexfloat(tls *TLS, f uintptr, bits int32, emin int32, sign int32, pok int32) float64 { /* floatscan.c:315:20: */ 1291 var x uint32_t = uint32_t(0) 1292 var y float64 = float64(0) 1293 var scale float64 = float64(1) 1294 var bias float64 = float64(0) 1295 var gottail int32 = 0 1296 var gotrad int32 = 0 1297 var gotdig int32 = 0 1298 var rp int64 = int64(0) 1299 var dc int64 = int64(0) 1300 var e2 int64 = int64(0) 1301 var d int32 1302 var c int32 1303 1304 c = func() int32 { 1305 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend { 1306 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1)))) 1307 } 1308 return X__shgetc(tls, f) 1309 }() 1310 1311 // Skip leading zeros 1312 for ; c == '0'; c = func() int32 { 1313 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend { 1314 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1)))) 1315 } 1316 return X__shgetc(tls, f) 1317 }() { 1318 gotdig = 1 1319 } 1320 1321 if c == '.' { 1322 gotrad = 1 1323 c = func() int32 { 1324 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend { 1325 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1)))) 1326 } 1327 return X__shgetc(tls, f) 1328 }() 1329 // Count zeros after the radix point before significand 1330 rp = int64(0) 1331 __1: 1332 if !(c == '0') { 1333 goto __3 1334 } 1335 gotdig = 1 1336 goto __2 1337 __2: 1338 c = func() int32 { 1339 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend { 1340 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1)))) 1341 } 1342 return X__shgetc(tls, f) 1343 }() 1344 rp-- 1345 goto __1 1346 goto __3 1347 __3: 1348 } 1349 1350 for ; uint32(c-'0') < 10 || uint32(c|32-'a') < 6 || c == '.'; c = func() int32 { 1351 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend { 1352 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1)))) 1353 } 1354 return X__shgetc(tls, f) 1355 }() { 1356 if c == '.' { 1357 if gotrad != 0 { 1358 break 1359 } 1360 rp = dc 1361 gotrad = 1 1362 } else { 1363 gotdig = 1 1364 if c > '9' { 1365 d = c | 32 + 10 - 'a' 1366 } else { 1367 d = c - '0' 1368 } 1369 if dc < int64(8) { 1370 x = x*uint32_t(16) + uint32_t(d) 1371 } else if dc < int64(53/4+1) { 1372 y = y + float64(d)*AssignDivFloat64(&scale, float64(16)) 1373 } else if d != 0 && !(gottail != 0) { 1374 y = y + 0.5*scale 1375 gottail = 1 1376 } 1377 dc++ 1378 } 1379 } 1380 if !(gotdig != 0) { 1381 if (*FILE)(unsafe.Pointer(f)).Fshlim >= int64(0) { 1382 (*FILE)(unsafe.Pointer(f)).Frpos-- 1383 } else { 1384 } 1385 if pok != 0 { 1386 if (*FILE)(unsafe.Pointer(f)).Fshlim >= int64(0) { 1387 (*FILE)(unsafe.Pointer(f)).Frpos-- 1388 } else { 1389 } 1390 if gotrad != 0 { 1391 if (*FILE)(unsafe.Pointer(f)).Fshlim >= int64(0) { 1392 (*FILE)(unsafe.Pointer(f)).Frpos-- 1393 } else { 1394 } 1395 } 1396 } else { 1397 X__shlim(tls, f, int64(0)) 1398 } 1399 return float64(sign) * 0.0 1400 } 1401 if !(gotrad != 0) { 1402 rp = dc 1403 } 1404 for dc < int64(8) { 1405 x = x * uint32_t(16) 1406 dc++ 1407 } 1408 if c|32 == 'p' { 1409 e2 = scanexp(tls, f, pok) 1410 if e2 == -0x7fffffffffffffff-int64(1) { 1411 if pok != 0 { 1412 if (*FILE)(unsafe.Pointer(f)).Fshlim >= int64(0) { 1413 (*FILE)(unsafe.Pointer(f)).Frpos-- 1414 } else { 1415 } 1416 } else { 1417 X__shlim(tls, f, int64(0)) 1418 return float64(0) 1419 } 1420 e2 = int64(0) 1421 } 1422 } else { 1423 if (*FILE)(unsafe.Pointer(f)).Fshlim >= int64(0) { 1424 (*FILE)(unsafe.Pointer(f)).Frpos-- 1425 } else { 1426 } 1427 } 1428 e2 = e2 + (int64(4)*rp - int64(32)) 1429 1430 if !(x != 0) { 1431 return float64(sign) * 0.0 1432 } 1433 if e2 > int64(-emin) { 1434 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34 1435 return float64(sign) * 1.79769313486231570815e+308 * 1.79769313486231570815e+308 1436 } 1437 if e2 < int64(emin-2*53) { 1438 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34 1439 return float64(sign) * 2.22507385850720138309e-308 * 2.22507385850720138309e-308 1440 } 1441 1442 for x < 0x80000000 { 1443 if y >= 0.5 { 1444 x = x + (x + uint32_t(1)) 1445 y = y + (y - float64(1)) 1446 } else { 1447 x = x + x 1448 y = y + y 1449 } 1450 e2-- 1451 } 1452 1453 if int64(bits) > int64(32)+e2-int64(emin) { 1454 bits = int32(int64(32) + e2 - int64(emin)) 1455 if bits < 0 { 1456 bits = 0 1457 } 1458 } 1459 1460 if bits < 53 { 1461 bias = Xcopysignl(tls, Xscalbn(tls, float64(1), 32+53-bits-1), float64(sign)) 1462 } 1463 1464 if bits < 32 && y != 0 && !(x&uint32_t(1) != 0) { 1465 x++ 1466 y = float64(0) 1467 } 1468 1469 y = bias + float64(sign)*float64(x) + float64(sign)*y 1470 y = y - bias 1471 1472 if !(y != 0) { 1473 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34 1474 } 1475 1476 return Xscalbnl(tls, y, int32(e2)) 1477 } 1478 1479 func X__floatscan(tls *TLS, f uintptr, prec int32, pok int32) float64 { /* floatscan.c:427:13: */ 1480 var sign int32 = 1 1481 var i size_t 1482 var bits int32 1483 var emin int32 1484 var c int32 1485 1486 switch prec { 1487 case 0: 1488 bits = 24 1489 emin = -125 - bits 1490 break 1491 case 1: 1492 bits = 53 1493 emin = -1021 - bits 1494 break 1495 case 2: 1496 bits = 53 1497 emin = -1021 - bits 1498 break 1499 default: 1500 return float64(0) 1501 } 1502 1503 for __isspace(tls, AssignInt32(&c, func() int32 { 1504 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend { 1505 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1)))) 1506 } 1507 return X__shgetc(tls, f) 1508 }())) != 0 { 1509 } 1510 1511 if c == '+' || c == '-' { 1512 sign = sign - 2*Bool32(c == '-') 1513 c = func() int32 { 1514 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend { 1515 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1)))) 1516 } 1517 return X__shgetc(tls, f) 1518 }() 1519 } 1520 1521 for i = uint64(0); i < uint64(8) && c|32 == int32(*(*int8)(unsafe.Pointer(ts /* "infinity" */ + uintptr(i)))); i++ { 1522 if i < uint64(7) { 1523 c = func() int32 { 1524 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend { 1525 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1)))) 1526 } 1527 return X__shgetc(tls, f) 1528 }() 1529 } 1530 } 1531 if i == uint64(3) || i == uint64(8) || i > uint64(3) && pok != 0 { 1532 if i != uint64(8) { 1533 if (*FILE)(unsafe.Pointer(f)).Fshlim >= int64(0) { 1534 (*FILE)(unsafe.Pointer(f)).Frpos-- 1535 } else { 1536 } 1537 if pok != 0 { 1538 for ; i > uint64(3); i-- { 1539 if (*FILE)(unsafe.Pointer(f)).Fshlim >= int64(0) { 1540 (*FILE)(unsafe.Pointer(f)).Frpos-- 1541 } else { 1542 } 1543 } 1544 } 1545 } 1546 return float64(float32(sign) * X__builtin_inff(tls)) 1547 } 1548 if !(i != 0) { 1549 for i = uint64(0); i < uint64(3) && c|32 == int32(*(*int8)(unsafe.Pointer(ts + 9 /* "nan" */ + uintptr(i)))); i++ { 1550 if i < uint64(2) { 1551 c = func() int32 { 1552 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend { 1553 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1)))) 1554 } 1555 return X__shgetc(tls, f) 1556 }() 1557 } 1558 } 1559 } 1560 if i == uint64(3) { 1561 if func() int32 { 1562 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend { 1563 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1)))) 1564 } 1565 return X__shgetc(tls, f) 1566 }() != '(' { 1567 if (*FILE)(unsafe.Pointer(f)).Fshlim >= int64(0) { 1568 (*FILE)(unsafe.Pointer(f)).Frpos-- 1569 } else { 1570 } 1571 return float64(X__builtin_nanf(tls, ts+13)) 1572 } 1573 for i = uint64(1); ; i++ { 1574 c = func() int32 { 1575 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend { 1576 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1)))) 1577 } 1578 return X__shgetc(tls, f) 1579 }() 1580 if uint32(c-'0') < 10 || uint32(c-'A') < 26 || uint32(c-'a') < 26 || c == '_' { 1581 continue 1582 } 1583 if c == ')' { 1584 return float64(X__builtin_nanf(tls, ts+13)) 1585 } 1586 if (*FILE)(unsafe.Pointer(f)).Fshlim >= int64(0) { 1587 (*FILE)(unsafe.Pointer(f)).Frpos-- 1588 } else { 1589 } 1590 if !(pok != 0) { 1591 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 22 1592 X__shlim(tls, f, int64(0)) 1593 return float64(0) 1594 } 1595 for PostDecUint64(&i, 1) != 0 { 1596 if (*FILE)(unsafe.Pointer(f)).Fshlim >= int64(0) { 1597 (*FILE)(unsafe.Pointer(f)).Frpos-- 1598 } else { 1599 } 1600 } 1601 return float64(X__builtin_nanf(tls, ts+13)) 1602 } 1603 return float64(X__builtin_nanf(tls, ts+13)) 1604 } 1605 1606 if i != 0 { 1607 if (*FILE)(unsafe.Pointer(f)).Fshlim >= int64(0) { 1608 (*FILE)(unsafe.Pointer(f)).Frpos-- 1609 } else { 1610 } 1611 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 22 1612 X__shlim(tls, f, int64(0)) 1613 return float64(0) 1614 } 1615 1616 if c == '0' { 1617 c = func() int32 { 1618 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend { 1619 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1)))) 1620 } 1621 return X__shgetc(tls, f) 1622 }() 1623 if c|32 == 'x' { 1624 return hexfloat(tls, f, bits, emin, sign, pok) 1625 } 1626 if (*FILE)(unsafe.Pointer(f)).Fshlim >= int64(0) { 1627 (*FILE)(unsafe.Pointer(f)).Frpos-- 1628 } else { 1629 } 1630 c = '0' 1631 } 1632 1633 return decfloat(tls, f, c, bits, emin, sign, pok) 1634 } 1635 1636 // Lookup table for digit values. -1==255>=36 -> invalid 1637 var table = [257]uint8{Uint8FromInt32(-1), 1638 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), 1639 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), 1640 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), 1641 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), 1642 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), 1643 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), 1644 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), 1645 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), 1646 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), 1647 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), 1648 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), 1649 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), 1650 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), 1651 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), 1652 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), 1653 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), 1654 } /* intscan.c:7:28 */ 1655 1656 func X__intscan(tls *TLS, f uintptr, base uint32, pok int32, lim uint64) uint64 { /* intscan.c:26:20: */ 1657 var val uintptr 1658 var c int32 1659 var neg int32 1660 var x uint32 1661 var y uint64 1662 var bs int32 1663 val = uintptr(unsafe.Pointer(&table)) + uintptr(1) 1664 neg = 0 1665 if !(base > uint32(36) || base == uint32(1)) { 1666 goto __1 1667 } 1668 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 22 1669 return uint64(0) 1670 __1: 1671 ; 1672 __2: 1673 if !(__isspace(tls, AssignInt32(&c, func() int32 { 1674 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend { 1675 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1)))) 1676 } 1677 return X__shgetc(tls, f) 1678 }())) != 0) { 1679 goto __3 1680 } 1681 goto __2 1682 __3: 1683 ; 1684 if !(c == '+' || c == '-') { 1685 goto __4 1686 } 1687 neg = -Bool32(c == '-') 1688 c = func() int32 { 1689 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend { 1690 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1)))) 1691 } 1692 return X__shgetc(tls, f) 1693 }() 1694 __4: 1695 ; 1696 if !((base == uint32(0) || base == uint32(16)) && c == '0') { 1697 goto __5 1698 } 1699 c = func() int32 { 1700 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend { 1701 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1)))) 1702 } 1703 return X__shgetc(tls, f) 1704 }() 1705 if !(c|32 == 'x') { 1706 goto __7 1707 } 1708 c = func() int32 { 1709 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend { 1710 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1)))) 1711 } 1712 return X__shgetc(tls, f) 1713 }() 1714 if !(int32(*(*uint8)(unsafe.Pointer(val + uintptr(c)))) >= 16) { 1715 goto __9 1716 } 1717 if (*FILE)(unsafe.Pointer(f)).Fshlim >= int64(0) { 1718 (*FILE)(unsafe.Pointer(f)).Frpos-- 1719 } else { 1720 } 1721 if !(pok != 0) { 1722 goto __10 1723 } 1724 if (*FILE)(unsafe.Pointer(f)).Fshlim >= int64(0) { 1725 (*FILE)(unsafe.Pointer(f)).Frpos-- 1726 } else { 1727 } 1728 goto __11 1729 __10: 1730 X__shlim(tls, f, int64(0)) 1731 __11: 1732 ; 1733 return uint64(0) 1734 __9: 1735 ; 1736 base = uint32(16) 1737 goto __8 1738 __7: 1739 if !(base == uint32(0)) { 1740 goto __12 1741 } 1742 base = uint32(8) 1743 __12: 1744 ; 1745 __8: 1746 ; 1747 goto __6 1748 __5: 1749 if !(base == uint32(0)) { 1750 goto __13 1751 } 1752 base = uint32(10) 1753 __13: 1754 ; 1755 if !(uint32(*(*uint8)(unsafe.Pointer(val + uintptr(c)))) >= base) { 1756 goto __14 1757 } 1758 if (*FILE)(unsafe.Pointer(f)).Fshlim >= int64(0) { 1759 (*FILE)(unsafe.Pointer(f)).Frpos-- 1760 } else { 1761 } 1762 X__shlim(tls, f, int64(0)) 1763 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 22 1764 return uint64(0) 1765 __14: 1766 ; 1767 __6: 1768 ; 1769 if !(base == uint32(10)) { 1770 goto __15 1771 } 1772 x = uint32(0) 1773 __17: 1774 if !(uint32(c-'0') < 10 && x <= 0xffffffff/uint32(10)-uint32(1)) { 1775 goto __19 1776 } 1777 x = x*uint32(10) + uint32(c-'0') 1778 goto __18 1779 __18: 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 goto __17 1787 goto __19 1788 __19: 1789 ; 1790 y = uint64(x) 1791 __20: 1792 if !(uint32(c-'0') < 10 && y <= (2*uint64(0x7fffffffffffffff)+uint64(1))/uint64(10) && uint64(10)*y <= 2*uint64(0x7fffffffffffffff)+uint64(1)-uint64(c-'0')) { 1793 goto __22 1794 } 1795 y = y*uint64(10) + uint64(c-'0') 1796 goto __21 1797 __21: 1798 c = func() int32 { 1799 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend { 1800 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1)))) 1801 } 1802 return X__shgetc(tls, f) 1803 }() 1804 goto __20 1805 goto __22 1806 __22: 1807 ; 1808 if !(uint32(c-'0') >= 10) { 1809 goto __23 1810 } 1811 goto done 1812 __23: 1813 ; 1814 goto __16 1815 __15: 1816 if !!(base&(base-uint32(1)) != 0) { 1817 goto __24 1818 } 1819 bs = int32(*(*int8)(unsafe.Pointer(ts + 14 + uintptr(uint32(0x17)*base>>5&uint32(7))))) 1820 x = uint32(0) 1821 __26: 1822 if !(uint32(*(*uint8)(unsafe.Pointer(val + uintptr(c)))) < base && x <= 0xffffffff/uint32(32)) { 1823 goto __28 1824 } 1825 x = x<<bs | uint32(*(*uint8)(unsafe.Pointer(val + uintptr(c)))) 1826 goto __27 1827 __27: 1828 c = func() int32 { 1829 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend { 1830 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1)))) 1831 } 1832 return X__shgetc(tls, f) 1833 }() 1834 goto __26 1835 goto __28 1836 __28: 1837 ; 1838 y = uint64(x) 1839 __29: 1840 if !(uint32(*(*uint8)(unsafe.Pointer(val + uintptr(c)))) < base && y <= uint64(2*uint64(0x7fffffffffffffff)+uint64(1))>>bs) { 1841 goto __31 1842 } 1843 y = y<<bs | uint64(*(*uint8)(unsafe.Pointer(val + uintptr(c)))) 1844 goto __30 1845 __30: 1846 c = func() int32 { 1847 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend { 1848 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1)))) 1849 } 1850 return X__shgetc(tls, f) 1851 }() 1852 goto __29 1853 goto __31 1854 __31: 1855 ; 1856 goto __25 1857 __24: 1858 x = uint32(0) 1859 __32: 1860 if !(uint32(*(*uint8)(unsafe.Pointer(val + uintptr(c)))) < base && x <= 0xffffffff/uint32(36)-uint32(1)) { 1861 goto __34 1862 } 1863 x = x*base + uint32(*(*uint8)(unsafe.Pointer(val + uintptr(c)))) 1864 goto __33 1865 __33: 1866 c = func() int32 { 1867 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend { 1868 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1)))) 1869 } 1870 return X__shgetc(tls, f) 1871 }() 1872 goto __32 1873 goto __34 1874 __34: 1875 ; 1876 y = uint64(x) 1877 __35: 1878 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))))) { 1879 goto __37 1880 } 1881 y = y*uint64(base) + uint64(*(*uint8)(unsafe.Pointer(val + uintptr(c)))) 1882 goto __36 1883 __36: 1884 c = func() int32 { 1885 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend { 1886 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1)))) 1887 } 1888 return X__shgetc(tls, f) 1889 }() 1890 goto __35 1891 goto __37 1892 __37: 1893 ; 1894 __25: 1895 ; 1896 __16: 1897 ; 1898 if !(uint32(*(*uint8)(unsafe.Pointer(val + uintptr(c)))) < base) { 1899 goto __38 1900 } 1901 __39: 1902 if !(uint32(*(*uint8)(unsafe.Pointer(val + uintptr(c)))) < base) { 1903 goto __41 1904 } 1905 goto __40 1906 __40: 1907 c = func() int32 { 1908 if (*FILE)(unsafe.Pointer(f)).Frpos != (*FILE)(unsafe.Pointer(f)).Fshend { 1909 return int32(*(*uint8)(unsafe.Pointer(PostIncUintptr(&(*FILE)(unsafe.Pointer(f)).Frpos, 1)))) 1910 } 1911 return X__shgetc(tls, f) 1912 }() 1913 goto __39 1914 goto __41 1915 __41: 1916 ; 1917 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34 1918 y = lim 1919 if !(lim&uint64(1) != 0) { 1920 goto __42 1921 } 1922 neg = 0 1923 __42: 1924 ; 1925 __38: 1926 ; 1927 done: 1928 if (*FILE)(unsafe.Pointer(f)).Fshlim >= int64(0) { 1929 (*FILE)(unsafe.Pointer(f)).Frpos-- 1930 } else { 1931 } 1932 if !(y >= lim) { 1933 goto __43 1934 } 1935 if !(!(lim&uint64(1) != 0) && !(neg != 0)) { 1936 goto __44 1937 } 1938 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34 1939 return lim - uint64(1) 1940 goto __45 1941 __44: 1942 if !(y > lim) { 1943 goto __46 1944 } 1945 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 34 1946 return lim 1947 __46: 1948 ; 1949 __45: 1950 ; 1951 __43: 1952 ; 1953 return y ^ uint64(neg) - uint64(neg) 1954 } 1955 1956 // The shcnt field stores the number of bytes read so far, offset by 1957 // the value of buf-rpos at the last function call (__shlim or __shgetc), 1958 // so that between calls the inline shcnt macro can add rpos-buf to get 1959 // the actual count. 1960 1961 func X__shlim(tls *TLS, f uintptr, lim off_t) { /* shgetc.c:8:6: */ 1962 (*FILE)(unsafe.Pointer(f)).Fshlim = lim 1963 (*FILE)(unsafe.Pointer(f)).Fshcnt = (int64((*FILE)(unsafe.Pointer(f)).Fbuf) - int64((*FILE)(unsafe.Pointer(f)).Frpos)) / 1 1964 // If lim is nonzero, rend must be a valid pointer. 1965 if lim != 0 && (int64((*FILE)(unsafe.Pointer(f)).Frend)-int64((*FILE)(unsafe.Pointer(f)).Frpos))/1 > lim { 1966 (*FILE)(unsafe.Pointer(f)).Fshend = (*FILE)(unsafe.Pointer(f)).Frpos + uintptr(lim) 1967 } else { 1968 (*FILE)(unsafe.Pointer(f)).Fshend = (*FILE)(unsafe.Pointer(f)).Frend 1969 } 1970 } 1971 1972 func X__shgetc(tls *TLS, f uintptr) int32 { /* shgetc.c:19:5: */ 1973 var c int32 1974 var cnt off_t = (*FILE)(unsafe.Pointer(f)).Fshcnt + (int64((*FILE)(unsafe.Pointer(f)).Frpos)-int64((*FILE)(unsafe.Pointer(f)).Fbuf))/1 1975 if (*FILE)(unsafe.Pointer(f)).Fshlim != 0 && cnt >= (*FILE)(unsafe.Pointer(f)).Fshlim || AssignInt32(&c, X__uflow(tls, f)) < 0 { 1976 (*FILE)(unsafe.Pointer(f)).Fshcnt = (int64((*FILE)(unsafe.Pointer(f)).Fbuf)-int64((*FILE)(unsafe.Pointer(f)).Frpos))/1 + cnt 1977 (*FILE)(unsafe.Pointer(f)).Fshend = (*FILE)(unsafe.Pointer(f)).Frpos 1978 (*FILE)(unsafe.Pointer(f)).Fshlim = int64(-1) 1979 return -1 1980 } 1981 cnt++ 1982 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 { 1983 (*FILE)(unsafe.Pointer(f)).Fshend = (*FILE)(unsafe.Pointer(f)).Frpos + uintptr((*FILE)(unsafe.Pointer(f)).Fshlim-cnt) 1984 } else { 1985 (*FILE)(unsafe.Pointer(f)).Fshend = (*FILE)(unsafe.Pointer(f)).Frend 1986 } 1987 (*FILE)(unsafe.Pointer(f)).Fshcnt = (int64((*FILE)(unsafe.Pointer(f)).Fbuf)-int64((*FILE)(unsafe.Pointer(f)).Frpos))/1 + cnt 1988 if (*FILE)(unsafe.Pointer(f)).Frpos <= (*FILE)(unsafe.Pointer(f)).Fbuf { 1989 *(*uint8)(unsafe.Pointer((*FILE)(unsafe.Pointer(f)).Frpos + UintptrFromInt32(-1))) = uint8(c) 1990 } 1991 return c 1992 } 1993 1994 func __bswap32(tls *TLS, __x uint32_t) uint32_t { /* endian.h:24:26: */ 1995 return __x>>24 | __x>>8&uint32_t(0xff00) | __x<<8&uint32_t(0xff0000) | __x<<24 1996 } 1997 1998 func Xcopysignl(tls *TLS, x float64, y float64) float64 { /* copysignl.c:4:13: */ 1999 return Xcopysign(tls, x, y) 2000 } 2001 2002 func Xfabsl(tls *TLS, x float64) float64 { /* fabsl.c:3:13: */ 2003 return Xfabs(tls, x) 2004 } 2005 2006 func Xfmodl(tls *TLS, x float64, y float64) float64 { /* fmodl.c:4:13: */ 2007 return Xfmod(tls, x, y) 2008 } 2009 2010 var toint double_t = float64(float64(1)) / 2.22044604925031308085e-16 /* rint.c:10:23 */ 2011 2012 func Xrint(tls *TLS, x float64) float64 { /* rint.c:12:8: */ 2013 bp := tls.Alloc(8) 2014 defer tls.Free(8) 2015 2016 *(*struct{ Ff float64 })(unsafe.Pointer(bp)) = func() (r struct{ Ff float64 }) { 2017 *(*float64)(unsafe.Pointer(uintptr(unsafe.Pointer(&r)) + 0)) = x 2018 return r 2019 }() 2020 var e int32 = int32(*(*uint64_t)(unsafe.Pointer(bp)) >> 52 & uint64(0x7ff)) 2021 var s int32 = int32(*(*uint64_t)(unsafe.Pointer(bp)) >> 63) 2022 var y double_t 2023 2024 if e >= 0x3ff+52 { 2025 return x 2026 } 2027 if s != 0 { 2028 y = x - toint + toint 2029 } else { 2030 y = x + toint - toint 2031 } 2032 if y == float64(0) { 2033 if s != 0 { 2034 return -Float64FromFloat64(0.0) 2035 } 2036 return float64(0) 2037 } 2038 return y 2039 } 2040 2041 func Xscalbn(tls *TLS, x float64, n int32) float64 { /* scalbn.c:4:8: */ 2042 bp := tls.Alloc(8) 2043 defer tls.Free(8) 2044 2045 // var u struct {Ff float64;} at bp, 8 2046 2047 var y double_t = x 2048 2049 if n > 1023 { 2050 y = y * 0x1p1023 2051 n = n - 1023 2052 if n > 1023 { 2053 y = y * 0x1p1023 2054 n = n - 1023 2055 if n > 1023 { 2056 n = 1023 2057 } 2058 } 2059 } else if n < -1022 { 2060 // make sure final n < -53 to avoid double 2061 // rounding in the subnormal range 2062 y = y * (float64(0x1p-1022) * 0x1p53) 2063 n = n + (1022 - 53) 2064 if n < -1022 { 2065 y = y * (float64(0x1p-1022) * 0x1p53) 2066 n = n + (1022 - 53) 2067 if n < -1022 { 2068 n = -1022 2069 } 2070 } 2071 } 2072 *(*uint64_t)(unsafe.Pointer(bp)) = uint64_t(0x3ff+n) << 52 2073 x = y * *(*float64)(unsafe.Pointer(bp)) 2074 return x 2075 } 2076 2077 func Xscalbnl(tls *TLS, x float64, n int32) float64 { /* scalbnl.c:4:13: */ 2078 return Xscalbn(tls, x, n) 2079 } 2080 2081 type div_t = struct { 2082 Fquot int32 2083 Frem int32 2084 } /* stdlib.h:62:35 */ 2085 type ldiv_t = struct { 2086 Fquot int64 2087 Frem int64 2088 } /* stdlib.h:63:36 */ 2089 type lldiv_t = struct { 2090 Fquot int64 2091 Frem int64 2092 } /* stdlib.h:64:41 */ 2093 2094 type max_align_t = struct { 2095 F__ll int64 2096 F__ld float64 2097 } /* alltypes.h:41:54 */ 2098 2099 type imaxdiv_t = struct { 2100 Fquot intmax_t 2101 Frem intmax_t 2102 } /* inttypes.h:14:40 */ 2103 2104 type pid_t = int32 /* alltypes.h:235:13 */ 2105 2106 type uid_t = uint32 /* alltypes.h:245:18 */ 2107 2108 type gid_t = uint32 /* alltypes.h:250:18 */ 2109 2110 type iovec = struct { 2111 Fiov_base uintptr 2112 Fiov_len size_t 2113 } /* alltypes.h:355:1 */ 2114 2115 type socklen_t = uint32 /* alltypes.h:361:18 */ 2116 2117 type sa_family_t = uint16 /* alltypes.h:366:24 */ 2118 2119 type msghdr = struct { 2120 Fmsg_name uintptr 2121 Fmsg_namelen socklen_t 2122 F__ccgo_pad1 [4]byte 2123 Fmsg_iov uintptr 2124 Fmsg_iovlen int32 2125 F__pad1 int32 2126 Fmsg_control uintptr 2127 Fmsg_controllen socklen_t 2128 F__pad2 int32 2129 Fmsg_flags int32 2130 F__ccgo_pad2 [4]byte 2131 } /* socket.h:22:1 */ 2132 2133 type cmsghdr = struct { 2134 Fcmsg_len socklen_t 2135 F__pad1 int32 2136 Fcmsg_level int32 2137 Fcmsg_type int32 2138 } /* socket.h:44:1 */ 2139 2140 type linger = struct { 2141 Fl_onoff int32 2142 Fl_linger int32 2143 } /* socket.h:74:1 */ 2144 2145 type sockaddr = struct { 2146 Fsa_family sa_family_t 2147 Fsa_data [14]int8 2148 } /* socket.h:367:1 */ 2149 2150 type sockaddr_storage = struct { 2151 Fss_family sa_family_t 2152 F__ss_padding [118]int8 2153 F__ss_align uint64 2154 } /* socket.h:372:1 */ 2155 2156 type in_port_t = uint16_t /* in.h:12:18 */ 2157 type in_addr_t = uint32_t /* in.h:13:18 */ 2158 type in_addr = struct{ Fs_addr in_addr_t } /* in.h:14:1 */ 2159 2160 type sockaddr_in = struct { 2161 Fsin_family sa_family_t 2162 Fsin_port in_port_t 2163 Fsin_addr struct{ Fs_addr in_addr_t } 2164 Fsin_zero [8]uint8_t 2165 } /* in.h:16:1 */ 2166 2167 type in6_addr = struct { 2168 F__in6_union struct { 2169 F__ccgo_pad1 [0]uint32 2170 F__s6_addr [16]uint8_t 2171 } 2172 } /* in.h:23:1 */ 2173 2174 type sockaddr_in6 = struct { 2175 Fsin6_family sa_family_t 2176 Fsin6_port in_port_t 2177 Fsin6_flowinfo uint32_t 2178 Fsin6_addr struct { 2179 F__in6_union struct { 2180 F__ccgo_pad1 [0]uint32 2181 F__s6_addr [16]uint8_t 2182 } 2183 } 2184 Fsin6_scope_id uint32_t 2185 } /* in.h:34:1 */ 2186 2187 type ipv6_mreq = struct { 2188 Fipv6mr_multiaddr struct { 2189 F__in6_union struct { 2190 F__ccgo_pad1 [0]uint32 2191 F__s6_addr [16]uint8_t 2192 } 2193 } 2194 Fipv6mr_interface uint32 2195 } /* in.h:42:1 */ 2196 2197 type ip_opts = struct { 2198 Fip_dst struct{ Fs_addr in_addr_t } 2199 Fip_opts [40]int8 2200 } /* in.h:229:1 */ 2201 2202 type ip_mreq = struct { 2203 Fimr_multiaddr struct{ Fs_addr in_addr_t } 2204 Fimr_interface struct{ Fs_addr in_addr_t } 2205 } /* in.h:247:1 */ 2206 2207 type ip_mreqn = struct { 2208 Fimr_multiaddr struct{ Fs_addr in_addr_t } 2209 Fimr_address struct{ Fs_addr in_addr_t } 2210 Fimr_ifindex int32 2211 } /* in.h:252:1 */ 2212 2213 type ip_mreq_source = struct { 2214 Fimr_multiaddr struct{ Fs_addr in_addr_t } 2215 Fimr_interface struct{ Fs_addr in_addr_t } 2216 Fimr_sourceaddr struct{ Fs_addr in_addr_t } 2217 } /* in.h:258:1 */ 2218 2219 type ip_msfilter = struct { 2220 Fimsf_multiaddr struct{ Fs_addr in_addr_t } 2221 Fimsf_interface struct{ Fs_addr in_addr_t } 2222 Fimsf_fmode uint32_t 2223 Fimsf_numsrc uint32_t 2224 Fimsf_slist [1]struct{ Fs_addr in_addr_t } 2225 } /* in.h:264:1 */ 2226 2227 type group_req = struct { 2228 Fgr_interface uint32_t 2229 F__ccgo_pad1 [4]byte 2230 Fgr_group struct { 2231 Fss_family sa_family_t 2232 F__ss_padding [118]int8 2233 F__ss_align uint64 2234 } 2235 } /* in.h:275:1 */ 2236 2237 type group_source_req = struct { 2238 Fgsr_interface uint32_t 2239 F__ccgo_pad1 [4]byte 2240 Fgsr_group struct { 2241 Fss_family sa_family_t 2242 F__ss_padding [118]int8 2243 F__ss_align uint64 2244 } 2245 Fgsr_source struct { 2246 Fss_family sa_family_t 2247 F__ss_padding [118]int8 2248 F__ss_align uint64 2249 } 2250 } /* in.h:280:1 */ 2251 2252 type group_filter = struct { 2253 Fgf_interface uint32_t 2254 F__ccgo_pad1 [4]byte 2255 Fgf_group struct { 2256 Fss_family sa_family_t 2257 F__ss_padding [118]int8 2258 F__ss_align uint64 2259 } 2260 Fgf_fmode uint32_t 2261 Fgf_numsrc uint32_t 2262 Fgf_slist [1]struct { 2263 Fss_family sa_family_t 2264 F__ss_padding [118]int8 2265 F__ss_align uint64 2266 } 2267 } /* in.h:286:1 */ 2268 2269 type in_pktinfo = struct { 2270 Fipi_ifindex int32 2271 Fipi_spec_dst struct{ Fs_addr in_addr_t } 2272 Fipi_addr struct{ Fs_addr in_addr_t } 2273 } /* in.h:297:1 */ 2274 2275 type in6_pktinfo = struct { 2276 Fipi6_addr struct { 2277 F__in6_union struct { 2278 F__ccgo_pad1 [0]uint32 2279 F__s6_addr [16]uint8_t 2280 } 2281 } 2282 Fipi6_ifindex uint32 2283 } /* in.h:303:1 */ 2284 2285 type ip6_mtuinfo = struct { 2286 Fip6m_addr struct { 2287 Fsin6_family sa_family_t 2288 Fsin6_port in_port_t 2289 Fsin6_flowinfo uint32_t 2290 Fsin6_addr struct { 2291 F__in6_union struct { 2292 F__ccgo_pad1 [0]uint32 2293 F__s6_addr [16]uint8_t 2294 } 2295 } 2296 Fsin6_scope_id uint32_t 2297 } 2298 Fip6m_mtu uint32_t 2299 } /* in.h:308:1 */ 2300 2301 type addrinfo = struct { 2302 Fai_flags int32 2303 Fai_family int32 2304 Fai_socktype int32 2305 Fai_protocol int32 2306 Fai_addrlen socklen_t 2307 F__ccgo_pad1 [4]byte 2308 Fai_addr uintptr 2309 Fai_canonname uintptr 2310 Fai_next uintptr 2311 } /* netdb.h:16:1 */ 2312 2313 // Legacy functions follow (marked OBsolete in SUS) 2314 2315 type netent = struct { 2316 Fn_name uintptr 2317 Fn_aliases uintptr 2318 Fn_addrtype int32 2319 Fn_net uint32_t 2320 } /* netdb.h:62:1 */ 2321 2322 type hostent = struct { 2323 Fh_name uintptr 2324 Fh_aliases uintptr 2325 Fh_addrtype int32 2326 Fh_length int32 2327 Fh_addr_list uintptr 2328 } /* netdb.h:69:1 */ 2329 2330 type servent = struct { 2331 Fs_name uintptr 2332 Fs_aliases uintptr 2333 Fs_port int32 2334 F__ccgo_pad1 [4]byte 2335 Fs_proto uintptr 2336 } /* netdb.h:78:1 */ 2337 2338 type protoent = struct { 2339 Fp_name uintptr 2340 Fp_aliases uintptr 2341 Fp_proto int32 2342 F__ccgo_pad1 [4]byte 2343 } /* netdb.h:85:1 */ 2344 2345 type aibuf = struct { 2346 Fai struct { 2347 Fai_flags int32 2348 Fai_family int32 2349 Fai_socktype int32 2350 Fai_protocol int32 2351 Fai_addrlen socklen_t 2352 F__ccgo_pad1 [4]byte 2353 Fai_addr uintptr 2354 Fai_canonname uintptr 2355 Fai_next uintptr 2356 } 2357 Fsa struct { 2358 Fsin struct { 2359 Fsin_family sa_family_t 2360 Fsin_port in_port_t 2361 Fsin_addr struct{ Fs_addr in_addr_t } 2362 Fsin_zero [8]uint8_t 2363 } 2364 F__ccgo_pad1 [12]byte 2365 } 2366 Flock [1]int32 2367 Fslot int16 2368 Fref int16 2369 F__ccgo_pad1 [4]byte 2370 } /* lookup.h:10:1 */ 2371 2372 type sa = struct { 2373 Fsin struct { 2374 Fsin_family sa_family_t 2375 Fsin_port in_port_t 2376 Fsin_addr struct{ Fs_addr in_addr_t } 2377 Fsin_zero [8]uint8_t 2378 } 2379 F__ccgo_pad1 [12]byte 2380 } /* lookup.h:10:1 */ 2381 2382 type address = struct { 2383 Ffamily int32 2384 Fscopeid uint32 2385 Faddr [16]uint8_t 2386 Fsortkey int32 2387 } /* lookup.h:20:1 */ 2388 2389 type service = struct { 2390 Fport uint16_t 2391 Fproto uint8 2392 Fsocktype uint8 2393 } /* lookup.h:27:1 */ 2394 2395 type resolvconf = struct { 2396 Fns [3]struct { 2397 Ffamily int32 2398 Fscopeid uint32 2399 Faddr [16]uint8_t 2400 Fsortkey int32 2401 } 2402 Fnns uint32 2403 Fattempts uint32 2404 Fndots uint32 2405 Ftimeout uint32 2406 } /* lookup.h:34:1 */ 2407 2408 func Xfreeaddrinfo(tls *TLS, p uintptr) { /* freeaddrinfo.c:7:6: */ 2409 var cnt size_t 2410 cnt = uint64(1) 2411 __1: 2412 if !((*addrinfo)(unsafe.Pointer(p)).Fai_next != 0) { 2413 goto __3 2414 } 2415 goto __2 2416 __2: 2417 cnt++ 2418 p = (*addrinfo)(unsafe.Pointer(p)).Fai_next 2419 goto __1 2420 goto __3 2421 __3: 2422 ; 2423 var b uintptr = p - uintptr(uint64(uintptr(0))) 2424 b -= 88 * uintptr((*aibuf)(unsafe.Pointer(b)).Fslot) 2425 //TODO LOCK(b->lock); 2426 if !(int32(AssignSubPtrInt16(b+82, int16(cnt))) != 0) { 2427 Xfree(tls, b) 2428 } 2429 //TODO else UNLOCK(b->lock); 2430 } 2431 2432 type time_t = int64 /* alltypes.h:85:16 */ 2433 2434 type clockid_t = int32 /* alltypes.h:214:13 */ 2435 2436 type timespec = struct { 2437 Ftv_sec time_t 2438 Ftv_nsec int64 2439 } /* alltypes.h:229:1 */ 2440 2441 type pthread_t = uintptr /* alltypes.h:273:26 */ 2442 2443 type pthread_once_t = int32 /* alltypes.h:279:13 */ 2444 2445 type pthread_key_t = uint32 /* alltypes.h:284:18 */ 2446 2447 type pthread_spinlock_t = int32 /* alltypes.h:289:13 */ 2448 2449 type pthread_mutexattr_t = struct{ F__attr uint32 } /* alltypes.h:294:37 */ 2450 2451 type pthread_condattr_t = struct{ F__attr uint32 } /* alltypes.h:299:37 */ 2452 2453 type pthread_barrierattr_t = struct{ F__attr uint32 } /* alltypes.h:304:37 */ 2454 2455 type pthread_rwlockattr_t = struct{ F__attr [2]uint32 } /* alltypes.h:309:40 */ 2456 2457 type __sigset_t = struct{ F__bits [16]uint64 } /* alltypes.h:349:9 */ 2458 2459 type sigset_t = __sigset_t /* alltypes.h:349:71 */ 2460 2461 type pthread_attr_t = struct { 2462 F__u struct { 2463 F__ccgo_pad1 [0]uint64 2464 F__i [14]int32 2465 } 2466 } /* alltypes.h:372:147 */ 2467 2468 type pthread_mutex_t = struct { 2469 F__u struct { 2470 F__ccgo_pad1 [0]uint64 2471 F__i [10]int32 2472 } 2473 } /* alltypes.h:377:157 */ 2474 2475 type pthread_cond_t = struct { 2476 F__u struct { 2477 F__ccgo_pad1 [0]uint64 2478 F__i [12]int32 2479 } 2480 } /* alltypes.h:387:112 */ 2481 2482 type pthread_rwlock_t = struct { 2483 F__u struct { 2484 F__ccgo_pad1 [0]uint64 2485 F__i [14]int32 2486 } 2487 } /* alltypes.h:397:139 */ 2488 2489 type pthread_barrier_t = struct { 2490 F__u struct { 2491 F__ccgo_pad1 [0]uint64 2492 F__i [8]int32 2493 } 2494 } /* alltypes.h:402:137 */ 2495 2496 type sched_param = struct { 2497 Fsched_priority int32 2498 F__reserved1 int32 2499 F__reserved2 [2]struct { 2500 F__reserved1 time_t 2501 F__reserved2 int64 2502 } 2503 F__reserved3 int32 2504 F__ccgo_pad1 [4]byte 2505 } /* sched.h:19:1 */ 2506 2507 type timer_t = uintptr /* alltypes.h:209:14 */ 2508 2509 type clock_t = int64 /* alltypes.h:219:14 */ 2510 2511 type tm = struct { 2512 Ftm_sec int32 2513 Ftm_min int32 2514 Ftm_hour int32 2515 Ftm_mday int32 2516 Ftm_mon int32 2517 Ftm_year int32 2518 Ftm_wday int32 2519 Ftm_yday int32 2520 Ftm_isdst int32 2521 F__ccgo_pad1 [4]byte 2522 Ftm_gmtoff int64 2523 Ftm_zone uintptr 2524 } /* time.h:38:1 */ 2525 2526 type itimerspec = struct { 2527 Fit_interval struct { 2528 Ftv_sec time_t 2529 Ftv_nsec int64 2530 } 2531 Fit_value struct { 2532 Ftv_sec time_t 2533 Ftv_nsec int64 2534 } 2535 } /* time.h:80:1 */ 2536 2537 type __ptcb = struct { 2538 F__f uintptr 2539 F__x uintptr 2540 F__next uintptr 2541 } /* pthread.h:206:1 */ 2542 2543 type useconds_t = uint32 /* alltypes.h:260:18 */ 2544 2545 func Xgetaddrinfo(tls *TLS, host uintptr, serv uintptr, hint uintptr, res uintptr) int32 { /* getaddrinfo.c:12:5: */ 2546 bp := tls.Alloc(1608) 2547 defer tls.Free(1608) 2548 2549 // var ports [2]service at bp, 8 2550 2551 // var addrs [48]address at bp+8, 1344 2552 2553 // var canon [256]int8 at bp+1352, 256 2554 2555 var outcanon uintptr 2556 var nservs int32 2557 var naddrs int32 2558 var nais int32 2559 var canon_len int32 2560 var i int32 2561 var j int32 2562 var k int32 2563 var family int32 = 0 2564 var flags int32 = 0 2565 var proto int32 = 0 2566 var socktype int32 = 0 2567 var out uintptr 2568 2569 if !(host != 0) && !(serv != 0) { 2570 return -2 2571 } 2572 2573 if hint != 0 { 2574 family = (*addrinfo)(unsafe.Pointer(hint)).Fai_family 2575 flags = (*addrinfo)(unsafe.Pointer(hint)).Fai_flags 2576 proto = (*addrinfo)(unsafe.Pointer(hint)).Fai_protocol 2577 socktype = (*addrinfo)(unsafe.Pointer(hint)).Fai_socktype 2578 2579 var mask int32 = 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x400 2580 if flags&mask != flags { 2581 return -1 2582 } 2583 2584 switch family { 2585 case 2: 2586 fallthrough 2587 case 10: 2588 fallthrough 2589 case 0: 2590 break 2591 fallthrough 2592 default: 2593 return -6 2594 } 2595 } 2596 2597 if flags&0x20 != 0 { 2598 Xabort(tls) //TODO- 2599 // /* Define the "an address is configured" condition for address 2600 // * families via ability to create a socket for the family plus 2601 // * routability of the loopback address for the family. */ 2602 // static const struct sockaddr_in lo4 = { 2603 // .sin_family = AF_INET, .sin_port = 65535, 2604 // .sin_addr.s_addr = __BYTE_ORDER == __BIG_ENDIAN 2605 // ? 0x7f000001 : 0x0100007f 2606 // }; 2607 // static const struct sockaddr_in6 lo6 = { 2608 // .sin6_family = AF_INET6, .sin6_port = 65535, 2609 // .sin6_addr = IN6ADDR_LOOPBACK_INIT 2610 // }; 2611 // int tf[2] = { AF_INET, AF_INET6 }; 2612 // const void *ta[2] = { &lo4, &lo6 }; 2613 // socklen_t tl[2] = { sizeof lo4, sizeof lo6 }; 2614 // for (i=0; i<2; i++) { 2615 // if (family==tf[1-i]) continue; 2616 // int s = socket(tf[i], SOCK_CLOEXEC|SOCK_DGRAM, 2617 // IPPROTO_UDP); 2618 // if (s>=0) { 2619 // int cs; 2620 // pthread_setcancelstate( 2621 // PTHREAD_CANCEL_DISABLE, &cs); 2622 // int r = connect(s, ta[i], tl[i]); 2623 // pthread_setcancelstate(cs, 0); 2624 // close(s); 2625 // if (!r) continue; 2626 // } 2627 // switch (errno) { 2628 // case EADDRNOTAVAIL: 2629 // case EAFNOSUPPORT: 2630 // case EHOSTUNREACH: 2631 // case ENETDOWN: 2632 // case ENETUNREACH: 2633 // break; 2634 // default: 2635 // return EAI_SYSTEM; 2636 // } 2637 // if (family == tf[i]) return EAI_NONAME; 2638 // family = tf[1-i]; 2639 // } 2640 } 2641 2642 nservs = X__lookup_serv(tls, bp, serv, proto, socktype, flags) 2643 if nservs < 0 { 2644 return nservs 2645 } 2646 2647 naddrs = X__lookup_name(tls, bp+8, bp+1352, host, family, flags) 2648 if naddrs < 0 { 2649 return naddrs 2650 } 2651 2652 nais = nservs * naddrs 2653 canon_len = int32(Xstrlen(tls, bp+1352)) 2654 out = Xcalloc(tls, uint64(1), uint64(nais)*uint64(unsafe.Sizeof(aibuf{}))+uint64(canon_len)+uint64(1)) 2655 if !(out != 0) { 2656 return -10 2657 } 2658 2659 if canon_len != 0 { 2660 outcanon = out + uintptr(nais)*88 2661 Xmemcpy(tls, outcanon, bp+1352, uint64(canon_len+1)) 2662 } else { 2663 outcanon = uintptr(0) 2664 } 2665 2666 for k = AssignInt32(&i, 0); i < naddrs; i++ { 2667 j = 0 2668 __1: 2669 if !(j < nservs) { 2670 goto __3 2671 } 2672 { 2673 (*aibuf)(unsafe.Pointer(out + uintptr(k)*88)).Fslot = int16(k) 2674 //TODO out[k].ai = (struct addrinfo){ 2675 //TODO .ai_family = addrs[i].family, 2676 //TODO .ai_socktype = ports[j].socktype, 2677 //TODO .ai_protocol = ports[j].proto, 2678 //TODO .ai_addrlen = addrs[i].family == AF_INET 2679 //TODO ? sizeof(struct sockaddr_in) 2680 //TODO : sizeof(struct sockaddr_in6), 2681 //TODO .ai_addr = (void *)&out[k].sa, 2682 //TODO .ai_canonname = outcanon }; 2683 (*aibuf)(unsafe.Pointer(out + uintptr(k)*88)).Fai.Fai_family = (*address)(unsafe.Pointer(bp + 8 + uintptr(i)*28)).Ffamily 2684 (*aibuf)(unsafe.Pointer(out + uintptr(k)*88)).Fai.Fai_socktype = int32((*service)(unsafe.Pointer(bp + uintptr(j)*4)).Fsocktype) 2685 (*aibuf)(unsafe.Pointer(out + uintptr(k)*88)).Fai.Fai_protocol = int32((*service)(unsafe.Pointer(bp + uintptr(j)*4)).Fproto) 2686 (*aibuf)(unsafe.Pointer(out + uintptr(k)*88)).Fai.Fai_addrlen = func() uint32 { 2687 if (*address)(unsafe.Pointer(bp+8+uintptr(i)*28)).Ffamily == 2 { 2688 return uint32(unsafe.Sizeof(sockaddr_in{})) 2689 } 2690 return uint32(unsafe.Sizeof(sockaddr_in6{})) 2691 }() 2692 (*aibuf)(unsafe.Pointer(out + uintptr(k)*88)).Fai.Fai_addr = out + uintptr(k)*88 + 48 2693 (*aibuf)(unsafe.Pointer(out + uintptr(k)*88)).Fai.Fai_canonname = outcanon 2694 if k != 0 { 2695 (*aibuf)(unsafe.Pointer(out + uintptr(k-1)*88)).Fai.Fai_next = out + uintptr(k)*88 2696 } 2697 switch (*address)(unsafe.Pointer(bp + 8 + uintptr(i)*28)).Ffamily { 2698 case 2: 2699 (*sockaddr_in)(unsafe.Pointer(out + uintptr(k)*88 + 48)).Fsin_family = sa_family_t(2) 2700 (*sockaddr_in)(unsafe.Pointer(out + uintptr(k)*88 + 48)).Fsin_port = Xhtons(tls, (*service)(unsafe.Pointer(bp+uintptr(j)*4)).Fport) 2701 Xmemcpy(tls, out+uintptr(k)*88+48+4, bp+8+uintptr(i)*28+8, uint64(4)) 2702 break 2703 case 10: 2704 (*sockaddr_in6)(unsafe.Pointer(out + uintptr(k)*88 + 48)).Fsin6_family = sa_family_t(10) 2705 (*sockaddr_in6)(unsafe.Pointer(out + uintptr(k)*88 + 48)).Fsin6_port = Xhtons(tls, (*service)(unsafe.Pointer(bp+uintptr(j)*4)).Fport) 2706 (*sockaddr_in6)(unsafe.Pointer(out + uintptr(k)*88 + 48)).Fsin6_scope_id = (*address)(unsafe.Pointer(bp + 8 + uintptr(i)*28)).Fscopeid 2707 Xmemcpy(tls, out+uintptr(k)*88+48+8, bp+8+uintptr(i)*28+8, uint64(16)) 2708 break 2709 } 2710 2711 } 2712 goto __2 2713 __2: 2714 j++ 2715 k++ 2716 goto __1 2717 goto __3 2718 __3: 2719 } 2720 (*aibuf)(unsafe.Pointer(out)).Fref = int16(nais) 2721 *(*uintptr)(unsafe.Pointer(res)) = out 2722 return 0 2723 } 2724 2725 type ucred = struct { 2726 Fpid pid_t 2727 Fuid uid_t 2728 Fgid gid_t 2729 } /* socket.h:57:1 */ 2730 2731 type mmsghdr = struct { 2732 Fmsg_hdr struct { 2733 Fmsg_name uintptr 2734 Fmsg_namelen socklen_t 2735 F__ccgo_pad1 [4]byte 2736 Fmsg_iov uintptr 2737 Fmsg_iovlen int32 2738 F__pad1 int32 2739 Fmsg_control uintptr 2740 Fmsg_controllen socklen_t 2741 F__pad2 int32 2742 Fmsg_flags int32 2743 F__ccgo_pad2 [4]byte 2744 } 2745 Fmsg_len uint32 2746 F__ccgo_pad1 [4]byte 2747 } /* socket.h:63:1 */ 2748 2749 func Xgethostbyaddr(tls *TLS, a uintptr, l socklen_t, af int32) uintptr { /* gethostbyaddr.c:7:16: */ 2750 bp := tls.Alloc(8) 2751 defer tls.Free(8) 2752 2753 var size size_t = uint64(63) 2754 // var res uintptr at bp, 8 2755 2756 var err int32 2757 for __ccgo := true; __ccgo; __ccgo = err == 34 { 2758 Xfree(tls, _sh) 2759 _sh = Xmalloc(tls, AssignAddUint64(&size, size+uint64(1))) 2760 if !(_sh != 0) { 2761 *(*int32)(unsafe.Pointer(X__h_errno_location(tls))) = 3 2762 return uintptr(0) 2763 } 2764 err = Xgethostbyaddr_r(tls, a, l, af, _sh, 2765 _sh+uintptr(1)*32, size-size_t(unsafe.Sizeof(hostent{})), bp, X__h_errno_location(tls)) 2766 } 2767 if err != 0 { 2768 return uintptr(0) 2769 } 2770 return _sh 2771 } 2772 2773 var _sh uintptr /* gethostbyaddr.c:9:24: */ 2774 2775 func Xgethostbyname(tls *TLS, name uintptr) uintptr { /* gethostbyname.c:8:16: */ 2776 return Xgethostbyname2(tls, name, 2) 2777 } 2778 2779 func Xgethostbyname2(tls *TLS, name uintptr, af int32) uintptr { /* gethostbyname2.c:8:16: */ 2780 bp := tls.Alloc(8) 2781 defer tls.Free(8) 2782 2783 var size size_t = uint64(63) 2784 // var res uintptr at bp, 8 2785 2786 var err int32 2787 for __ccgo := true; __ccgo; __ccgo = err == 34 { 2788 Xfree(tls, _sh1) 2789 _sh1 = Xmalloc(tls, AssignAddUint64(&size, size+uint64(1))) 2790 if !(_sh1 != 0) { 2791 *(*int32)(unsafe.Pointer(X__h_errno_location(tls))) = 3 2792 return uintptr(0) 2793 } 2794 err = Xgethostbyname2_r(tls, name, af, _sh1, 2795 _sh1+uintptr(1)*32, size-size_t(unsafe.Sizeof(hostent{})), bp, X__h_errno_location(tls)) 2796 } 2797 if err != 0 { 2798 return uintptr(0) 2799 } 2800 return _sh1 2801 } 2802 2803 var _sh1 uintptr /* gethostbyname2.c:10:24: */ 2804 2805 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: */ 2806 bp := tls.Alloc(1600) 2807 defer tls.Free(1600) 2808 2809 // var addrs [48]address at bp, 1344 2810 2811 // var canon [256]int8 at bp+1344, 256 2812 2813 var i int32 2814 var cnt int32 2815 var align size_t 2816 var need size_t 2817 2818 *(*uintptr)(unsafe.Pointer(res)) = uintptr(0) 2819 cnt = X__lookup_name(tls, bp, bp+1344, name, af, 0x02) 2820 if cnt < 0 { 2821 switch cnt { 2822 case -2: 2823 *(*int32)(unsafe.Pointer(err)) = 1 2824 return 2 2825 fallthrough 2826 case -3: 2827 *(*int32)(unsafe.Pointer(err)) = 2 2828 return 11 2829 fallthrough 2830 default: 2831 fallthrough 2832 case -4: 2833 *(*int32)(unsafe.Pointer(err)) = 3 2834 return 74 2835 fallthrough 2836 case -10: 2837 fallthrough 2838 case -11: 2839 *(*int32)(unsafe.Pointer(err)) = 3 2840 return *(*int32)(unsafe.Pointer(X___errno_location(tls))) 2841 } 2842 } 2843 2844 (*hostent)(unsafe.Pointer(h)).Fh_addrtype = af 2845 (*hostent)(unsafe.Pointer(h)).Fh_length = func() int32 { 2846 if af == 10 { 2847 return 16 2848 } 2849 return 4 2850 }() 2851 2852 // Align buffer 2853 align = -uintptr_t(buf) & (uint64(unsafe.Sizeof(uintptr(0))) - uint64(1)) 2854 2855 need = uint64(4) * uint64(unsafe.Sizeof(uintptr(0))) 2856 need = need + uint64(cnt+1)*(uint64(unsafe.Sizeof(uintptr(0)))+uint64((*hostent)(unsafe.Pointer(h)).Fh_length)) 2857 need = need + (Xstrlen(tls, name) + uint64(1)) 2858 need = need + (Xstrlen(tls, bp+1344) + uint64(1)) 2859 need = need + align 2860 2861 if need > buflen { 2862 return 34 2863 } 2864 2865 buf += uintptr(align) 2866 (*hostent)(unsafe.Pointer(h)).Fh_aliases = buf 2867 buf += uintptr(uint64(3) * uint64(unsafe.Sizeof(uintptr(0)))) 2868 (*hostent)(unsafe.Pointer(h)).Fh_addr_list = buf 2869 buf += uintptr(uint64(cnt+1) * uint64(unsafe.Sizeof(uintptr(0)))) 2870 2871 for i = 0; i < cnt; i++ { 2872 *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).Fh_addr_list + uintptr(i)*8)) = buf 2873 buf += uintptr((*hostent)(unsafe.Pointer(h)).Fh_length) 2874 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)) 2875 } 2876 *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).Fh_addr_list + uintptr(i)*8)) = uintptr(0) 2877 2878 (*hostent)(unsafe.Pointer(h)).Fh_name = AssignPtrUintptr((*hostent)(unsafe.Pointer(h)).Fh_aliases, buf) 2879 Xstrcpy(tls, (*hostent)(unsafe.Pointer(h)).Fh_name, bp+1344) 2880 buf += uintptr(Xstrlen(tls, (*hostent)(unsafe.Pointer(h)).Fh_name) + uint64(1)) 2881 2882 if Xstrcmp(tls, (*hostent)(unsafe.Pointer(h)).Fh_name, name) != 0 { 2883 *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).Fh_aliases + 1*8)) = buf 2884 Xstrcpy(tls, *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).Fh_aliases + 1*8)), name) 2885 buf += uintptr(Xstrlen(tls, *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).Fh_aliases + 1*8))) + uint64(1)) 2886 } else { 2887 *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).Fh_aliases + 1*8)) = uintptr(0) 2888 } 2889 2890 *(*uintptr)(unsafe.Pointer((*hostent)(unsafe.Pointer(h)).Fh_aliases + 2*8)) = uintptr(0) 2891 2892 *(*uintptr)(unsafe.Pointer(res)) = h 2893 return 0 2894 } 2895 2896 type if_nameindex = struct { 2897 Fif_index uint32 2898 F__ccgo_pad1 [4]byte 2899 Fif_name uintptr 2900 } /* if.h:12:1 */ 2901 2902 type ifaddr = struct { 2903 Fifa_addr struct { 2904 Fsa_family sa_family_t 2905 Fsa_data [14]int8 2906 } 2907 Fifa_ifu struct { 2908 Fifu_broadaddr struct { 2909 Fsa_family sa_family_t 2910 Fsa_data [14]int8 2911 } 2912 } 2913 Fifa_ifp uintptr 2914 Fifa_next uintptr 2915 } /* if.h:51:1 */ 2916 2917 type ifmap = struct { 2918 Fmem_start uint64 2919 Fmem_end uint64 2920 Fbase_addr uint16 2921 Firq uint8 2922 Fdma uint8 2923 Fport uint8 2924 F__ccgo_pad1 [3]byte 2925 } /* if.h:64:1 */ 2926 2927 type ifreq = struct { 2928 Fifr_ifrn struct{ Fifrn_name [16]int8 } 2929 Fifr_ifru struct { 2930 F__ccgo_pad1 [0]uint64 2931 Fifru_addr struct { 2932 Fsa_family sa_family_t 2933 Fsa_data [14]int8 2934 } 2935 F__ccgo_pad2 [8]byte 2936 } 2937 } /* if.h:76:1 */ 2938 2939 type ifconf = struct { 2940 Fifc_len int32 2941 F__ccgo_pad1 [4]byte 2942 Fifc_ifcu struct{ Fifcu_buf uintptr } 2943 } /* if.h:116:1 */ 2944 2945 type ns_sect = uint32 /* nameser.h:37:3 */ 2946 2947 type __ns_msg = struct { 2948 F_msg uintptr 2949 F_eom uintptr 2950 F_id uint16_t 2951 F_flags uint16_t 2952 F_counts [4]uint16_t 2953 F__ccgo_pad1 [4]byte 2954 F_sections [4]uintptr 2955 F_sect ns_sect 2956 F_rrnum int32 2957 F_msg_ptr uintptr 2958 } /* nameser.h:39:9 */ 2959 2960 type ns_msg = __ns_msg /* nameser.h:46:3 */ 2961 2962 type _ns_flagdata = struct { 2963 Fmask int32 2964 Fshift int32 2965 } /* nameser.h:48:1 */ 2966 2967 type __ns_rr = struct { 2968 Fname [1025]int8 2969 F__ccgo_pad1 [1]byte 2970 Ftype uint16_t 2971 Frr_class uint16_t 2972 F__ccgo_pad2 [2]byte 2973 Fttl uint32_t 2974 Frdlength uint16_t 2975 F__ccgo_pad3 [2]byte 2976 Frdata uintptr 2977 } /* nameser.h:59:9 */ 2978 2979 type ns_rr = __ns_rr /* nameser.h:66:3 */ 2980 2981 type ns_flag = uint32 /* nameser.h:87:3 */ 2982 2983 type ns_opcode = uint32 /* nameser.h:96:3 */ 2984 2985 type ns_rcode = uint32 /* nameser.h:115:3 */ 2986 2987 type ns_update_operation = uint32 /* nameser.h:121:3 */ 2988 2989 type ns_tsig_key1 = struct { 2990 Fname [1025]int8 2991 Falg [1025]int8 2992 F__ccgo_pad1 [6]byte 2993 Fdata uintptr 2994 Flen int32 2995 F__ccgo_pad2 [4]byte 2996 } /* nameser.h:123:1 */ 2997 2998 type ns_tsig_key = ns_tsig_key1 /* nameser.h:128:28 */ 2999 3000 type ns_tcp_tsig_state1 = struct { 3001 Fcounter int32 3002 F__ccgo_pad1 [4]byte 3003 Fkey uintptr 3004 Fctx uintptr 3005 Fsig [512]uint8 3006 Fsiglen int32 3007 F__ccgo_pad2 [4]byte 3008 } /* nameser.h:130:1 */ 3009 3010 type ns_tcp_tsig_state = ns_tcp_tsig_state1 /* nameser.h:137:34 */ 3011 3012 type ns_type = uint32 /* nameser.h:200:3 */ 3013 3014 type ns_class = uint32 /* nameser.h:219:3 */ 3015 3016 type ns_key_types = uint32 /* nameser.h:226:3 */ 3017 3018 type ns_cert_types = uint32 /* nameser.h:234:3 */ 3019 3020 type HEADER = struct { 3021 F__ccgo_pad1 [0]uint32 3022 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 */ 3023 Fqdcount uint32 /* unsigned qdcount: 16, unsigned ancount: 16 */ 3024 Fnscount uint32 /* unsigned nscount: 16, unsigned arcount: 16 */ 3025 } /* nameser.h:353:3 */ 3026 3027 // unused; purely for broken apps 3028 type __res_state = struct { 3029 Fretrans int32 3030 Fretry int32 3031 Foptions uint64 3032 Fnscount int32 3033 Fnsaddr_list [3]struct { 3034 Fsin_family sa_family_t 3035 Fsin_port in_port_t 3036 Fsin_addr struct{ Fs_addr in_addr_t } 3037 Fsin_zero [8]uint8_t 3038 } 3039 Fid uint16 3040 F__ccgo_pad1 [2]byte 3041 Fdnsrch [7]uintptr 3042 Fdefdname [256]int8 3043 Fpfcode uint64 3044 Fndots uint32 /* unsigned ndots: 4, unsigned nsort: 4, unsigned ipv6_unavail: 1, unsigned unused: 23 */ 3045 F__ccgo_pad2 [4]byte 3046 Fsort_list [10]struct { 3047 Faddr struct{ Fs_addr in_addr_t } 3048 Fmask uint32_t 3049 } 3050 Fqhook uintptr 3051 Frhook uintptr 3052 Fres_h_errno int32 3053 F_vcsock int32 3054 F_flags uint32 3055 F__ccgo_pad3 [4]byte 3056 F_u struct { 3057 F__ccgo_pad1 [0]uint64 3058 Fpad [52]int8 3059 F__ccgo_pad2 [4]byte 3060 } 3061 } /* resolv.h:26:9 */ 3062 3063 // unused; purely for broken apps 3064 type res_state = uintptr /* resolv.h:62:3 */ 3065 3066 type res_sym = struct { 3067 Fnumber int32 3068 F__ccgo_pad1 [4]byte 3069 Fname uintptr 3070 Fhumanname uintptr 3071 } /* resolv.h:70:1 */ 3072 3073 func itoa(tls *TLS, p uintptr, x uint32) uintptr { /* getnameinfo.c:18:13: */ 3074 p += uintptr(uint64(3) * uint64(unsafe.Sizeof(int32(0)))) 3075 *(*int8)(unsafe.Pointer(PreDecUintptr(&p, 1))) = int8(0) 3076 for __ccgo := true; __ccgo; __ccgo = x != 0 { 3077 *(*int8)(unsafe.Pointer(PreDecUintptr(&p, 1))) = int8(uint32('0') + x%uint32(10)) 3078 x = x / uint32(10) 3079 } 3080 return p 3081 } 3082 3083 func mkptr4(tls *TLS, s uintptr, ip uintptr) { /* getnameinfo.c:28:13: */ 3084 bp := tls.Alloc(32) 3085 defer tls.Free(32) 3086 3087 Xsprintf(tls, s, ts+23, 3088 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))))) 3089 } 3090 3091 func mkptr6(tls *TLS, s uintptr, ip uintptr) { /* getnameinfo.c:34:13: */ 3092 var i int32 3093 for i = 15; i >= 0; i-- { 3094 *(*int8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = _sxdigits[int32(*(*uint8)(unsafe.Pointer(ip + uintptr(i))))&15] 3095 *(*int8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = int8('.') 3096 *(*int8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = _sxdigits[int32(*(*uint8)(unsafe.Pointer(ip + uintptr(i))))>>4] 3097 *(*int8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = int8('.') 3098 } 3099 Xstrcpy(tls, s, ts+48) 3100 } 3101 3102 var _sxdigits = *(*[17]int8)(unsafe.Pointer(ts + 57)) /* getnameinfo.c:36:20 */ 3103 3104 func reverse_hosts(tls *TLS, buf uintptr, a uintptr, scopeid uint32, family int32) { /* getnameinfo.c:45:13: */ 3105 bp := tls.Alloc(556) 3106 defer tls.Free(556) 3107 3108 // var line [512]int8 at bp+16, 512 3109 3110 var p uintptr 3111 var z uintptr 3112 var _buf [1032]uint8 3113 _ = _buf 3114 // var atmp [16]uint8 at bp, 16 3115 3116 // var iplit address at bp+528, 28 3117 3118 //TODO FILE _f, *f = __fopen_rb_ca("/etc/hosts", &_f, _buf, sizeof _buf); 3119 var f uintptr = Xfopen(tls, ts+74, ts+85) 3120 if !(f != 0) { 3121 return 3122 } 3123 if family == 2 { 3124 Xmemcpy(tls, bp+uintptr(12), a, uint64(4)) 3125 Xmemcpy(tls, bp, ts+88, uint64(12)) 3126 a = bp /* &atmp[0] */ 3127 } 3128 for Xfgets(tls, bp+16, int32(unsafe.Sizeof([512]int8{})), f) != 0 { 3129 if AssignUintptr(&p, Xstrchr(tls, bp+16, '#')) != 0 { 3130 *(*int8)(unsafe.Pointer(PostIncUintptr(&p, 1))) = int8('\n') 3131 *(*int8)(unsafe.Pointer(p)) = int8(0) 3132 } 3133 3134 for p = bp + 16; /* &line[0] */ *(*int8)(unsafe.Pointer(p)) != 0 && !(__isspace(tls, int32(*(*int8)(unsafe.Pointer(p)))) != 0); p++ { 3135 } 3136 *(*int8)(unsafe.Pointer(PostIncUintptr(&p, 1))) = int8(0) 3137 if X__lookup_ipliteral(tls, bp+528, bp+16, 0) <= 0 { 3138 continue 3139 } 3140 3141 if (*address)(unsafe.Pointer(bp+528)).Ffamily == 2 { 3142 Xmemcpy(tls, bp+528+8+uintptr(12), bp+528+8, uint64(4)) 3143 Xmemcpy(tls, bp+528+8, ts+88, uint64(12)) 3144 (*address)(unsafe.Pointer(bp + 528 /* &iplit */)).Fscopeid = uint32(0) 3145 } 3146 3147 if Xmemcmp(tls, a, bp+528+8, uint64(16)) != 0 || (*address)(unsafe.Pointer(bp+528)).Fscopeid != scopeid { 3148 continue 3149 } 3150 3151 for ; *(*int8)(unsafe.Pointer(p)) != 0 && __isspace(tls, int32(*(*int8)(unsafe.Pointer(p)))) != 0; p++ { 3152 } 3153 for z = p; *(*int8)(unsafe.Pointer(z)) != 0 && !(__isspace(tls, int32(*(*int8)(unsafe.Pointer(z)))) != 0); z++ { 3154 } 3155 *(*int8)(unsafe.Pointer(z)) = int8(0) 3156 if (int64(z)-int64(p))/1 < int64(256) { 3157 Xmemcpy(tls, buf, p, uint64((int64(z)-int64(p))/1+int64(1))) 3158 break 3159 } 3160 } 3161 //TODO __fclose_ca(f); 3162 Xfclose(tls, f) 3163 } 3164 3165 func reverse_services(tls *TLS, buf uintptr, port int32, dgram int32) { /* getnameinfo.c:87:13: */ 3166 Xabort(tls) //TODO- 3167 // unsigned long svport; 3168 // char line[128], *p, *z; 3169 // unsigned char _buf[1032]; 3170 // FILE _f, *f = __fopen_rb_ca("/etc/services", &_f, _buf, sizeof _buf); 3171 // if (!f) return; 3172 // while (fgets(line, sizeof line, f)) { 3173 // if ((p=strchr(line, '#'))) *p++='\n', *p=0; 3174 3175 // for (p=line; *p && !isspace(*p); p++); 3176 // if (!*p) continue; 3177 // *p++ = 0; 3178 // svport = strtoul(p, &z, 10); 3179 3180 // if (svport != port || z==p) continue; 3181 // if (dgram && strncmp(z, "/udp", 4)) continue; 3182 // if (!dgram && strncmp(z, "/tcp", 4)) continue; 3183 // if (p-line > 32) continue; 3184 3185 // memcpy(buf, line, p-line); 3186 // break; 3187 // } 3188 // __fclose_ca(f); 3189 } 3190 3191 var Xh_errno int32 /* h_errno.c:4:5: */ 3192 3193 func X__h_errno_location(tls *TLS) uintptr { /* h_errno.c:6:5: */ 3194 return uintptr(unsafe.Pointer(&Xh_errno)) 3195 } 3196 3197 func X__inet_aton(tls *TLS, s0 uintptr, dest uintptr) int32 { /* inet_aton.c:7:5: */ 3198 bp := tls.Alloc(40) 3199 defer tls.Free(40) 3200 3201 var s uintptr = s0 3202 var d uintptr = dest 3203 *(*[4]uint64)(unsafe.Pointer(bp /* a */)) = [4]uint64{0: uint64(0)} 3204 // var z uintptr at bp+32, 8 3205 3206 var i int32 3207 3208 for i = 0; i < 4; i++ { 3209 *(*uint64)(unsafe.Pointer(bp + uintptr(i)*8)) = Xstrtoul(tls, s, bp+32, 0) 3210 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 { 3211 if 0 != 0 { 3212 return Xisdigit(tls, int32(*(*int8)(unsafe.Pointer(s)))) 3213 } 3214 return Bool32(uint32(*(*int8)(unsafe.Pointer(s)))-uint32('0') < uint32(10)) 3215 }() != 0) { 3216 return 0 3217 } 3218 if !(int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32))))) != 0) { 3219 break 3220 } 3221 s = *(*uintptr)(unsafe.Pointer(bp + 32)) + uintptr(1) 3222 } 3223 if i == 4 { 3224 return 0 3225 } 3226 switch i { 3227 case 0: 3228 *(*uint64)(unsafe.Pointer(bp + 1*8)) = *(*uint64)(unsafe.Pointer(bp)) & uint64(0xffffff) 3229 AssignShrPtrUint64(bp, int(24)) 3230 fallthrough 3231 case 1: 3232 *(*uint64)(unsafe.Pointer(bp + 2*8)) = *(*uint64)(unsafe.Pointer(bp + 1*8)) & uint64(0xffff) 3233 AssignShrPtrUint64(bp+1*8, int(16)) 3234 fallthrough 3235 case 2: 3236 *(*uint64)(unsafe.Pointer(bp + 3*8)) = *(*uint64)(unsafe.Pointer(bp + 2*8)) & uint64(0xff) 3237 AssignShrPtrUint64(bp+2*8, int(8)) 3238 } 3239 for i = 0; i < 4; i++ { 3240 if *(*uint64)(unsafe.Pointer(bp + uintptr(i)*8)) > uint64(255) { 3241 return 0 3242 } 3243 *(*uint8)(unsafe.Pointer(d + uintptr(i))) = uint8(*(*uint64)(unsafe.Pointer(bp + uintptr(i)*8))) 3244 } 3245 return 1 3246 } 3247 3248 func Xinet_ntop(tls *TLS, af int32, a0 uintptr, s uintptr, l socklen_t) uintptr { /* inet_ntop.c:7:12: */ 3249 bp := tls.Alloc(276) 3250 defer tls.Free(276) 3251 3252 var a uintptr = a0 3253 var i int32 3254 var j int32 3255 var max int32 3256 var best int32 3257 // var buf [100]int8 at bp+176, 100 3258 3259 switch af { 3260 case 2: 3261 if socklen_t(Xsnprintf(tls, s, uint64(l), ts+101, 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 { 3262 return s 3263 } 3264 break 3265 case 10: 3266 if Xmemcmp(tls, a, ts+88, uint64(12)) != 0 { 3267 Xsnprintf(tls, bp+176, uint64(unsafe.Sizeof([100]int8{})), 3268 ts+113, 3269 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))), 3270 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))), 3271 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))), 3272 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))))) 3273 } else { 3274 Xsnprintf(tls, bp+176, uint64(unsafe.Sizeof([100]int8{})), 3275 ts+137, 3276 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))), 3277 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))), 3278 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))), 3279 int32(*(*uint8)(unsafe.Pointer(a + 12))), int32(*(*uint8)(unsafe.Pointer(a + 13))), int32(*(*uint8)(unsafe.Pointer(a + 14))), int32(*(*uint8)(unsafe.Pointer(a + 15))))) 3280 } 3281 // Replace longest /(^0|:)[:0]{2,}/ with "::" 3282 i = AssignInt32(&best, 0) 3283 max = 2 3284 for ; *(*int8)(unsafe.Pointer(bp + 176 + uintptr(i))) != 0; i++ { 3285 if i != 0 && int32(*(*int8)(unsafe.Pointer(bp + 176 + uintptr(i)))) != ':' { 3286 continue 3287 } 3288 j = int32(Xstrspn(tls, bp+176+uintptr(i), ts+167)) 3289 if j > max { 3290 best = i 3291 max = j 3292 } 3293 } 3294 if max > 3 { 3295 *(*int8)(unsafe.Pointer(bp + 176 + uintptr(best))) = AssignPtrInt8(bp+176+uintptr(best+1), int8(':')) 3296 Xmemmove(tls, bp+176+uintptr(best)+uintptr(2), bp+176+uintptr(best)+uintptr(max), uint64(i-best-max+1)) 3297 } 3298 if Xstrlen(tls, bp+176) < size_t(l) { 3299 Xstrcpy(tls, s, bp+176) 3300 return s 3301 } 3302 break 3303 default: 3304 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 97 3305 return uintptr(0) 3306 } 3307 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 28 3308 return uintptr(0) 3309 } 3310 3311 func hexval(tls *TLS, c uint32) int32 { /* inet_pton.c:7:12: */ 3312 if c-uint32('0') < uint32(10) { 3313 return int32(c - uint32('0')) 3314 } 3315 c = c | uint32(32) 3316 if c-uint32('a') < uint32(6) { 3317 return int32(c - uint32('a') + uint32(10)) 3318 } 3319 return -1 3320 } 3321 3322 func Xinet_pton(tls *TLS, af int32, s uintptr, a0 uintptr) int32 { /* inet_pton.c:15:5: */ 3323 bp := tls.Alloc(16) 3324 defer tls.Free(16) 3325 3326 // var ip [8]uint16_t at bp, 16 3327 3328 var a uintptr = a0 3329 var i int32 3330 var j int32 3331 var v int32 3332 var d int32 3333 var brk int32 = -1 3334 var need_v4 int32 = 0 3335 3336 if af == 2 { 3337 for i = 0; i < 4; i++ { 3338 for v = AssignInt32(&j, 0); j < 3 && func() int32 { 3339 if 0 != 0 { 3340 return Xisdigit(tls, int32(*(*int8)(unsafe.Pointer(s + uintptr(j))))) 3341 } 3342 return Bool32(uint32(*(*int8)(unsafe.Pointer(s + uintptr(j))))-uint32('0') < uint32(10)) 3343 }() != 0; j++ { 3344 v = 10*v + int32(*(*int8)(unsafe.Pointer(s + uintptr(j)))) - '0' 3345 } 3346 if j == 0 || j > 1 && int32(*(*int8)(unsafe.Pointer(s))) == '0' || v > 255 { 3347 return 0 3348 } 3349 *(*uint8)(unsafe.Pointer(a + uintptr(i))) = uint8(v) 3350 if int32(*(*int8)(unsafe.Pointer(s + uintptr(j)))) == 0 && i == 3 { 3351 return 1 3352 } 3353 if int32(*(*int8)(unsafe.Pointer(s + uintptr(j)))) != '.' { 3354 return 0 3355 } 3356 s += uintptr(j + 1) 3357 } 3358 return 0 3359 } else if af != 10 { 3360 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 97 3361 return -1 3362 } 3363 3364 if int32(*(*int8)(unsafe.Pointer(s))) == ':' && int32(*(*int8)(unsafe.Pointer(PreIncUintptr(&s, 1)))) != ':' { 3365 return 0 3366 } 3367 3368 for i = 0; ; i++ { 3369 if int32(*(*int8)(unsafe.Pointer(s))) == ':' && brk < 0 { 3370 brk = i 3371 *(*uint16_t)(unsafe.Pointer(bp + uintptr(i&7)*2)) = uint16_t(0) 3372 if !(int32(*(*int8)(unsafe.Pointer(PreIncUintptr(&s, 1)))) != 0) { 3373 break 3374 } 3375 if i == 7 { 3376 return 0 3377 } 3378 continue 3379 } 3380 for v = AssignInt32(&j, 0); j < 4 && AssignInt32(&d, hexval(tls, uint32(*(*int8)(unsafe.Pointer(s + uintptr(j)))))) >= 0; j++ { 3381 v = 16*v + d 3382 } 3383 if j == 0 { 3384 return 0 3385 } 3386 *(*uint16_t)(unsafe.Pointer(bp + uintptr(i&7)*2)) = uint16_t(v) 3387 if !(int32(*(*int8)(unsafe.Pointer(s + uintptr(j)))) != 0) && (brk >= 0 || i == 7) { 3388 break 3389 } 3390 if i == 7 { 3391 return 0 3392 } 3393 if int32(*(*int8)(unsafe.Pointer(s + uintptr(j)))) != ':' { 3394 if int32(*(*int8)(unsafe.Pointer(s + uintptr(j)))) != '.' || i < 6 && brk < 0 { 3395 return 0 3396 } 3397 need_v4 = 1 3398 i++ 3399 break 3400 } 3401 s += uintptr(j + 1) 3402 } 3403 if brk >= 0 { 3404 Xmemmove(tls, bp+uintptr(brk)*2+uintptr(7)*2-uintptr(i)*2, bp+uintptr(brk)*2, uint64(2*(i+1-brk))) 3405 for j = 0; j < 7-i; j++ { 3406 *(*uint16_t)(unsafe.Pointer(bp + uintptr(brk+j)*2)) = uint16_t(0) 3407 } 3408 } 3409 for j = 0; j < 8; j++ { 3410 *(*uint8)(unsafe.Pointer(PostIncUintptr(&a, 1))) = uint8(int32(*(*uint16_t)(unsafe.Pointer(bp + uintptr(j)*2))) >> 8) 3411 *(*uint8)(unsafe.Pointer(PostIncUintptr(&a, 1))) = uint8(*(*uint16_t)(unsafe.Pointer(bp + uintptr(j)*2))) 3412 } 3413 if need_v4 != 0 && Xinet_pton(tls, 2, s, a-uintptr(4)) <= 0 { 3414 return 0 3415 } 3416 return 1 3417 } 3418 3419 func X__lookup_ipliteral(tls *TLS, buf uintptr, name uintptr, family int32) int32 { /* lookup_ipliteral.c:12:5: */ 3420 bp := tls.Alloc(96) 3421 defer tls.Free(96) 3422 3423 // var a4 in_addr at bp, 4 3424 3425 // var a6 in6_addr at bp+68, 16 3426 3427 if X__inet_aton(tls, name, bp) > 0 { 3428 if family == 10 { // wrong family 3429 return -2 3430 } 3431 Xmemcpy(tls, buf+8, bp, uint64(unsafe.Sizeof(in_addr{}))) 3432 (*address)(unsafe.Pointer(buf)).Ffamily = 2 3433 (*address)(unsafe.Pointer(buf)).Fscopeid = uint32(0) 3434 return 1 3435 } 3436 // var tmp [64]int8 at bp+4, 64 3437 3438 var p uintptr = Xstrchr(tls, name, '%') 3439 // var z uintptr at bp+88, 8 3440 3441 var scopeid uint64 = uint64(0) 3442 if p != 0 && (int64(p)-int64(name))/1 < int64(64) { 3443 Xmemcpy(tls, bp+4, name, uint64((int64(p)-int64(name))/1)) 3444 *(*int8)(unsafe.Pointer(bp + 4 + uintptr((int64(p)-int64(name))/1))) = int8(0) 3445 name = bp + 4 /* &tmp[0] */ 3446 } 3447 3448 if Xinet_pton(tls, 10, name, bp+68) <= 0 { 3449 return 0 3450 } 3451 if family == 2 { // wrong family 3452 return -2 3453 } 3454 3455 Xmemcpy(tls, buf+8, bp+68, uint64(unsafe.Sizeof(in6_addr{}))) 3456 (*address)(unsafe.Pointer(buf)).Ffamily = 10 3457 if p != 0 { 3458 if func() int32 { 3459 if 0 != 0 { 3460 return Xisdigit(tls, int32(*(*int8)(unsafe.Pointer(PreIncUintptr(&p, 1))))) 3461 } 3462 return Bool32(uint32(*(*int8)(unsafe.Pointer(PreIncUintptr(&p, 1))))-uint32('0') < uint32(10)) 3463 }() != 0 { 3464 scopeid = Xstrtoull(tls, p, bp+88, 10) 3465 } else { 3466 *(*uintptr)(unsafe.Pointer(bp + 88 /* z */)) = p - uintptr(1) 3467 } 3468 if *(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 88)))) != 0 { 3469 Xabort(tls) //TODO- 3470 // if (!IN6_IS_ADDR_LINKLOCAL(&a6) && 3471 // !IN6_IS_ADDR_MC_LINKLOCAL(&a6)) 3472 // return EAI_NONAME; 3473 // scopeid = if_nametoindex(p); 3474 // if (!scopeid) return EAI_NONAME; 3475 } 3476 if scopeid > uint64(0xffffffff) { 3477 return -2 3478 } 3479 } 3480 (*address)(unsafe.Pointer(buf)).Fscopeid = uint32(scopeid) 3481 return 1 3482 } 3483 3484 type mode_t = uint32 /* alltypes.h:152:18 */ 3485 3486 type flock = struct { 3487 Fl_type int16 3488 Fl_whence int16 3489 F__ccgo_pad1 [4]byte 3490 Fl_start off_t 3491 Fl_len off_t 3492 Fl_pid pid_t 3493 F__ccgo_pad2 [4]byte 3494 } /* fcntl.h:24:1 */ 3495 3496 func is_valid_hostname(tls *TLS, host uintptr) int32 { /* lookup_name.c:18:12: */ 3497 var s uintptr 3498 //TODO if (strnlen(host, 255)-1 >= 254 || mbstowcs(0, host, 0) == -1) return 0; 3499 if Xstrnlen(tls, host, uint64(255))-uint64(1) >= uint64(254) { 3500 return 0 3501 } 3502 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++ { 3503 } 3504 return BoolInt32(!(*(*uint8)(unsafe.Pointer(s)) != 0)) 3505 } 3506 3507 var Xzero_struct_address address /* lookup_name.c:27:16: */ 3508 3509 func name_from_null(tls *TLS, buf uintptr, name uintptr, family int32, flags int32) int32 { /* lookup_name.c:29:12: */ 3510 var cnt int32 = 0 3511 if name != 0 { 3512 return 0 3513 } 3514 if flags&0x01 != 0 { 3515 //TODO if (family != AF_INET6) 3516 //TODO buf[cnt++] = (struct address){ .family = AF_INET }; 3517 if family != 10 { 3518 var x = Xzero_struct_address 3519 x.Ffamily = 2 3520 *(*address)(unsafe.Pointer(buf + uintptr(PostIncInt32(&cnt, 1))*28)) = x 3521 } 3522 //TODO if (family != AF_INET) 3523 //TODO buf[cnt++] = (struct address){ .family = AF_INET6 }; 3524 if family != 2 { 3525 var x = Xzero_struct_address 3526 x.Ffamily = 10 3527 *(*address)(unsafe.Pointer(buf + uintptr(PostIncInt32(&cnt, 1))*28)) = x 3528 } 3529 } else { 3530 Xabort(tls) //TODO- 3531 // if (family != AF_INET6) 3532 // buf[cnt++] = (struct address){ .family = AF_INET, .addr = { 127,0,0,1 } }; 3533 // if (family != AF_INET) 3534 // buf[cnt++] = (struct address){ .family = AF_INET6, .addr = { [15] = 1 } }; 3535 } 3536 return cnt 3537 } 3538 3539 func name_from_numeric(tls *TLS, buf uintptr, name uintptr, family int32) int32 { /* lookup_name.c:58:12: */ 3540 return X__lookup_ipliteral(tls, buf, name, family) 3541 } 3542 3543 func name_from_hosts(tls *TLS, buf uintptr, canon uintptr, name uintptr, family int32) int32 { /* lookup_name.c:63:12: */ 3544 bp := tls.Alloc(512) 3545 defer tls.Free(512) 3546 3547 // var line [512]int8 at bp, 512 3548 3549 var l size_t = Xstrlen(tls, name) 3550 var cnt int32 = 0 3551 var badfam int32 = 0 3552 var _buf [1032]uint8 3553 _ = _buf 3554 //TODO FILE _f, *f = __fopen_rb_ca("/etc/hosts", &_f, _buf, sizeof _buf); 3555 var _f FILE 3556 _ = _f 3557 var f uintptr = Xfopen(tls, ts+74, ts+85) 3558 if !(f != 0) { 3559 switch *(*int32)(unsafe.Pointer(X___errno_location(tls))) { 3560 case 2: 3561 fallthrough 3562 case 20: 3563 fallthrough 3564 case 13: 3565 return 0 3566 fallthrough 3567 default: 3568 return -11 3569 } 3570 } 3571 for Xfgets(tls, bp, int32(unsafe.Sizeof([512]int8{})), f) != 0 && cnt < 48 { 3572 var p uintptr 3573 var z uintptr 3574 3575 if AssignUintptr(&p, Xstrchr(tls, bp, '#')) != 0 { 3576 *(*int8)(unsafe.Pointer(PostIncUintptr(&p, 1))) = int8('\n') 3577 *(*int8)(unsafe.Pointer(p)) = int8(0) 3578 } 3579 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++ { 3580 } 3581 if !(p != 0) { 3582 continue 3583 } 3584 3585 // Isolate IP address to parse 3586 for p = bp; /* &line[0] */ *(*int8)(unsafe.Pointer(p)) != 0 && !(__isspace(tls, int32(*(*int8)(unsafe.Pointer(p)))) != 0); p++ { 3587 } 3588 *(*int8)(unsafe.Pointer(PostIncUintptr(&p, 1))) = int8(0) 3589 switch name_from_numeric(tls, buf+uintptr(cnt)*28, bp, family) { 3590 case 1: 3591 cnt++ 3592 break 3593 case 0: 3594 continue 3595 default: 3596 badfam = -2 3597 continue 3598 } 3599 3600 // Extract first name as canonical name 3601 for ; *(*int8)(unsafe.Pointer(p)) != 0 && __isspace(tls, int32(*(*int8)(unsafe.Pointer(p)))) != 0; p++ { 3602 } 3603 for z = p; *(*int8)(unsafe.Pointer(z)) != 0 && !(__isspace(tls, int32(*(*int8)(unsafe.Pointer(z)))) != 0); z++ { 3604 } 3605 *(*int8)(unsafe.Pointer(z)) = int8(0) 3606 if is_valid_hostname(tls, p) != 0 { 3607 Xmemcpy(tls, canon, p, uint64((int64(z)-int64(p))/1+int64(1))) 3608 } 3609 } 3610 //TODO __fclose_ca(f); 3611 Xfclose(tls, f) 3612 if cnt != 0 { 3613 return cnt 3614 } 3615 return badfam 3616 } 3617 3618 type dpc_ctx = struct { 3619 Faddrs uintptr 3620 Fcanon uintptr 3621 Fcnt int32 3622 F__ccgo_pad1 [4]byte 3623 } /* lookup_name.c:112:1 */ 3624 3625 func name_from_dns_search(tls *TLS, buf uintptr, canon uintptr, name uintptr, family int32) int32 { /* lookup_name.c:191:12: */ 3626 return -1 //TODO- 3627 Xabort(tls) 3628 return int32(0) //TODO- 3629 // char search[256]; 3630 // struct resolvconf conf; 3631 // size_t l, dots; 3632 // char *p, *z; 3633 3634 // if (__get_resolv_conf(&conf, search, sizeof search) < 0) return -1; 3635 3636 // /* Count dots, suppress search when >=ndots or name ends in 3637 // * a dot, which is an explicit request for global scope. */ 3638 // for (dots=l=0; name[l]; l++) if (name[l]=='.') dots++; 3639 // if (dots >= conf.ndots || name[l-1]=='.') *search = 0; 3640 3641 // /* Strip final dot for canon, fail if multiple trailing dots. */ 3642 // if (name[l-1]=='.') l--; 3643 // if (!l || name[l-1]=='.') return EAI_NONAME; 3644 3645 // /* This can never happen; the caller already checked length. */ 3646 // if (l >= 256) return EAI_NONAME; 3647 3648 // /* Name with search domain appended is setup in canon[]. This both 3649 // * provides the desired default canonical name (if the requested 3650 // * name is not a CNAME record) and serves as a buffer for passing 3651 // * the full requested name to name_from_dns. */ 3652 // memcpy(canon, name, l); 3653 // canon[l] = '.'; 3654 3655 // for (p=search; *p; p=z) { 3656 // for (; isspace(*p); p++); 3657 // for (z=p; *z && !isspace(*z); z++); 3658 // if (z==p) break; 3659 // if (z-p < 256 - l - 1) { 3660 // memcpy(canon+l+1, p, z-p); 3661 // canon[z-p+1+l] = 0; 3662 // int cnt = name_from_dns(buf, canon, canon, family, &conf); 3663 // if (cnt) return cnt; 3664 // } 3665 // } 3666 3667 // canon[l] = 0; 3668 // return name_from_dns(buf, canon, name, family, &conf); 3669 } 3670 3671 type policy = struct { 3672 Faddr [16]uint8 3673 Flen uint8 3674 Fmask uint8 3675 Fprec uint8 3676 Flabel uint8 3677 } /* lookup_name.c:237:14 */ 3678 3679 var defpolicy = [6]policy{ 3680 {Faddr: *(*[16]uint8)(unsafe.Pointer(ts + 170)), Flen: uint8(15), Fmask: uint8(0xff), Fprec: uint8(50)}, 3681 {Faddr: *(*[16]uint8)(unsafe.Pointer(ts + 187)), Flen: uint8(11), Fmask: uint8(0xff), Fprec: uint8(35), Flabel: uint8(4)}, 3682 {Faddr: *(*[16]uint8)(unsafe.Pointer(ts + 203)), Flen: uint8(1), Fmask: uint8(0xff), Fprec: uint8(30), Flabel: uint8(2)}, 3683 {Faddr: *(*[16]uint8)(unsafe.Pointer(ts + 219)), Flen: uint8(3), Fmask: uint8(0xff), Fprec: uint8(5), Flabel: uint8(5)}, 3684 {Faddr: *(*[16]uint8)(unsafe.Pointer(ts + 235)), Fmask: uint8(0xfe), Fprec: uint8(3), Flabel: uint8(13)}, 3685 // Last rule must match all addresses to stop loop. 3686 {Faddr: *(*[16]uint8)(unsafe.Pointer(ts + 251)), Fprec: uint8(40), Flabel: uint8(1)}, 3687 } /* lookup_name.c:241:3 */ 3688 3689 func policyof(tls *TLS, a uintptr) uintptr { /* lookup_name.c:259:28: */ 3690 var i int32 3691 for i = 0; ; i++ { 3692 if Xmemcmp(tls, a, uintptr(unsafe.Pointer(&defpolicy))+uintptr(i)*20, uint64(defpolicy[i].Flen)) != 0 { 3693 continue 3694 } 3695 if int32(*(*uint8_t)(unsafe.Pointer(a + uintptr(defpolicy[i].Flen))))&int32(defpolicy[i].Fmask) != 3696 int32(*(*uint8)(unsafe.Pointer(uintptr(unsafe.Pointer(&defpolicy)) + uintptr(i)*20 + uintptr(defpolicy[i].Flen)))) { 3697 continue 3698 } 3699 return uintptr(unsafe.Pointer(&defpolicy)) + uintptr(i)*20 3700 } 3701 return uintptr(0) 3702 } 3703 3704 func labelof(tls *TLS, a uintptr) int32 { /* lookup_name.c:272:12: */ 3705 return int32((*policy)(unsafe.Pointer(policyof(tls, a))).Flabel) 3706 } 3707 3708 func scopeof(tls *TLS, a uintptr) int32 { /* lookup_name.c:277:12: */ 3709 if int32(*(*uint8_t)(unsafe.Pointer(a))) == 0xff { 3710 return int32(*(*uint8_t)(unsafe.Pointer(a + 1))) & 15 3711 } 3712 if int32(*(*uint8_t)(unsafe.Pointer(a))) == 0xfe && int32(*(*uint8_t)(unsafe.Pointer(a + 1)))&0xc0 == 0x80 { 3713 return 2 3714 } 3715 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 { 3716 return 2 3717 } 3718 if int32(*(*uint8_t)(unsafe.Pointer(a))) == 0xfe && int32(*(*uint8_t)(unsafe.Pointer(a + 1)))&0xc0 == 0xc0 { 3719 return 5 3720 } 3721 return 14 3722 } 3723 3724 func prefixmatch(tls *TLS, s uintptr, d uintptr) int32 { /* lookup_name.c:286:12: */ 3725 // FIXME: The common prefix length should be limited to no greater 3726 // than the nominal length of the prefix portion of the source 3727 // address. However the definition of the source prefix length is 3728 // not clear and thus this limiting is not yet implemented. 3729 var i uint32 3730 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++ { 3731 } 3732 return int32(i) 3733 } 3734 3735 func addrcmp(tls *TLS, _a uintptr, _b uintptr) int32 { /* lookup_name.c:305:12: */ 3736 var a uintptr = _a 3737 var b uintptr = _b 3738 return (*address)(unsafe.Pointer(b)).Fsortkey - (*address)(unsafe.Pointer(a)).Fsortkey 3739 } 3740 3741 func X__lookup_name(tls *TLS, buf uintptr, canon uintptr, name uintptr, family int32, flags int32) int32 { /* lookup_name.c:311:5: */ 3742 bp := tls.Alloc(92) 3743 defer tls.Free(92) 3744 3745 var cnt int32 = 0 3746 var i int32 3747 var j int32 3748 _ = j 3749 3750 *(*int8)(unsafe.Pointer(canon)) = int8(0) 3751 if name != 0 { 3752 // reject empty name and check len so it fits into temp bufs 3753 var l size_t = Xstrnlen(tls, name, uint64(255)) 3754 if l-uint64(1) >= uint64(254) { 3755 return -2 3756 } 3757 Xmemcpy(tls, canon, name, l+uint64(1)) 3758 } 3759 3760 // Procedurally, a request for v6 addresses with the v4-mapped 3761 // flag set is like a request for unspecified family, followed 3762 // by filtering of the results. 3763 if flags&0x08 != 0 { 3764 if family == 10 { 3765 family = 0 3766 } else { 3767 flags = flags - 0x08 3768 } 3769 } 3770 3771 // Try each backend until there's at least one result. 3772 cnt = name_from_null(tls, buf, name, family, flags) 3773 if !(cnt != 0) { 3774 cnt = name_from_numeric(tls, buf, name, family) 3775 } 3776 if !(cnt != 0) && !(flags&0x04 != 0) { 3777 cnt = name_from_hosts(tls, buf, canon, name, family) 3778 if !(cnt != 0) { 3779 cnt = name_from_dns_search(tls, buf, canon, name, family) 3780 } 3781 } 3782 if cnt <= 0 { 3783 if cnt != 0 { 3784 return cnt 3785 } 3786 return -2 3787 } 3788 3789 // Filter/transform results for v4-mapped lookup, if requested. 3790 if flags&0x08 != 0 { 3791 Xabort(tls) //TODO- 3792 // if (!(flags & AI_ALL)) { 3793 // /* If any v6 results exist, remove v4 results. */ 3794 // for (i=0; i<cnt && buf[i].family != AF_INET6; i++); 3795 // if (i<cnt) { 3796 // for (j=0; i<cnt; i++) { 3797 // if (buf[i].family == AF_INET6) 3798 // buf[j++] = buf[i]; 3799 // } 3800 // cnt = i = j; 3801 // } 3802 // } 3803 // /* Translate any remaining v4 results to v6 */ 3804 // for (i=0; i<cnt; i++) { 3805 // if (buf[i].family != AF_INET) continue; 3806 // memcpy(buf[i].addr+12, buf[i].addr, 4); 3807 // memcpy(buf[i].addr, "\0\0\0\0\0\0\0\0\0\0\xff\xff", 12); 3808 // buf[i].family = AF_INET6; 3809 // } 3810 } 3811 3812 // No further processing is needed if there are fewer than 2 3813 // results or if there are only IPv4 results. 3814 if cnt < 2 || family == 2 { 3815 return cnt 3816 } 3817 for i = 0; i < cnt; i++ { 3818 if (*address)(unsafe.Pointer(buf+uintptr(i)*28)).Ffamily != 2 { 3819 break 3820 } 3821 } 3822 if i == cnt { 3823 return cnt 3824 } 3825 var cs int32 3826 _ = cs 3827 //TODO pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &cs); 3828 3829 // The following implements a subset of RFC 3484/6724 destination 3830 // address selection by generating a single 31-bit sort key for 3831 // each address. Rules 3, 4, and 7 are omitted for having 3832 // excessive runtime and code size cost and dubious benefit. 3833 // So far the label/precedence table cannot be customized. 3834 for i = 0; i < cnt; i++ { 3835 var family int32 = (*address)(unsafe.Pointer(buf + uintptr(i)*28)).Ffamily 3836 var key int32 = 0 3837 *(*sockaddr_in6)(unsafe.Pointer(bp + 28 /* sa6 */)) = sockaddr_in6{} 3838 *(*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} 3839 *(*sockaddr_in)(unsafe.Pointer(bp + 72 /* sa4 */)) = sockaddr_in{} 3840 *(*sockaddr_in)(unsafe.Pointer(bp + 56 /* da4 */)) = sockaddr_in{Fsin_family: sa_family_t(2), Fsin_port: in_port_t(65535)} 3841 var sa1 uintptr 3842 var da uintptr 3843 // var salen socklen_t at bp+88, 4 3844 3845 var dalen socklen_t 3846 if family == 10 { 3847 Xmemcpy(tls, bp+8, buf+uintptr(i)*28+8, uint64(16)) 3848 da = bp /* &da6 */ 3849 dalen = socklen_t(unsafe.Sizeof(sockaddr_in6{})) 3850 sa1 = bp + 28 /* &sa6 */ 3851 *(*socklen_t)(unsafe.Pointer(bp + 88 /* salen */)) = socklen_t(unsafe.Sizeof(sockaddr_in6{})) 3852 } else { 3853 Xmemcpy(tls, bp+28+8, 3854 ts+88, uint64(12)) 3855 Xmemcpy(tls, bp+8+uintptr(12), buf+uintptr(i)*28+8, uint64(4)) 3856 Xmemcpy(tls, bp+8, 3857 ts+88, uint64(12)) 3858 Xmemcpy(tls, bp+8+uintptr(12), buf+uintptr(i)*28+8, uint64(4)) 3859 Xmemcpy(tls, bp+56+4, buf+uintptr(i)*28+8, uint64(4)) 3860 da = bp + 56 /* &da4 */ 3861 dalen = socklen_t(unsafe.Sizeof(sockaddr_in{})) 3862 sa1 = bp + 72 /* &sa4 */ 3863 *(*socklen_t)(unsafe.Pointer(bp + 88 /* salen */)) = socklen_t(unsafe.Sizeof(sockaddr_in{})) 3864 } 3865 var dpolicy uintptr = policyof(tls, bp+8) 3866 var dscope int32 = scopeof(tls, bp+8) 3867 var dlabel int32 = int32((*policy)(unsafe.Pointer(dpolicy)).Flabel) 3868 var dprec int32 = int32((*policy)(unsafe.Pointer(dpolicy)).Fprec) 3869 var prefixlen int32 = 0 3870 var fd int32 = Xsocket(tls, family, 2|02000000, 17) 3871 if fd >= 0 { 3872 if !(Xconnect(tls, fd, da, dalen) != 0) { 3873 key = key | 0x40000000 3874 if !(Xgetsockname(tls, fd, sa1, bp+88) != 0) { 3875 if family == 2 { 3876 Xmemcpy(tls, 3877 bp+28+8+uintptr(12), 3878 bp+72+4, uint64(4)) 3879 } 3880 if dscope == scopeof(tls, bp+28+8) { 3881 key = key | 0x20000000 3882 } 3883 if dlabel == labelof(tls, bp+28+8) { 3884 key = key | 0x10000000 3885 } 3886 prefixlen = prefixmatch(tls, bp+28+8, 3887 bp+8) 3888 } 3889 } 3890 Xclose(tls, fd) 3891 } 3892 key = key | dprec<<20 3893 key = key | (15-dscope)<<16 3894 key = key | prefixlen<<8 3895 key = key | (48-i)<<0 3896 (*address)(unsafe.Pointer(buf + uintptr(i)*28)).Fsortkey = key 3897 } 3898 Xqsort(tls, buf, uint64(cnt), uint64(unsafe.Sizeof(address{})), *(*uintptr)(unsafe.Pointer(&struct { 3899 f func(*TLS, uintptr, uintptr) int32 3900 }{addrcmp}))) 3901 3902 //TODO pthread_setcancelstate(cs, 0); 3903 3904 return cnt 3905 } 3906 3907 func X__lookup_serv(tls *TLS, buf uintptr, name uintptr, proto int32, socktype int32, flags int32) int32 { /* lookup_serv.c:12:5: */ 3908 bp := tls.Alloc(8) 3909 defer tls.Free(8) 3910 3911 var line [128]int8 3912 _ = line 3913 var cnt int32 = 0 3914 var p uintptr 3915 _ = p 3916 *(*uintptr)(unsafe.Pointer(bp /* z */)) = ts + 13 /* "" */ 3917 var port uint64 = uint64(0) 3918 3919 switch socktype { 3920 case 1: 3921 switch proto { 3922 case 0: 3923 proto = 6 3924 fallthrough 3925 case 6: 3926 break 3927 default: 3928 return -8 3929 } 3930 break 3931 case 2: 3932 switch proto { 3933 case 0: 3934 proto = 17 3935 fallthrough 3936 case 17: 3937 break 3938 default: 3939 return -8 3940 } 3941 fallthrough 3942 case 0: 3943 break 3944 default: 3945 if name != 0 { 3946 return -8 3947 } 3948 (*service)(unsafe.Pointer(buf)).Fport = uint16_t(0) 3949 (*service)(unsafe.Pointer(buf)).Fproto = uint8(proto) 3950 (*service)(unsafe.Pointer(buf)).Fsocktype = uint8(socktype) 3951 return 1 3952 } 3953 3954 if name != 0 { 3955 if !(int32(*(*int8)(unsafe.Pointer(name))) != 0) { 3956 return -8 3957 } 3958 port = Xstrtoul(tls, name, bp, 10) 3959 } 3960 if !(int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp))))) != 0) { 3961 if port > uint64(65535) { 3962 return -8 3963 } 3964 if proto != 17 { 3965 (*service)(unsafe.Pointer(buf + uintptr(cnt)*4)).Fport = uint16_t(port) 3966 (*service)(unsafe.Pointer(buf + uintptr(cnt)*4)).Fsocktype = uint8(1) 3967 (*service)(unsafe.Pointer(buf + uintptr(PostIncInt32(&cnt, 1))*4)).Fproto = uint8(6) 3968 } 3969 if proto != 6 { 3970 (*service)(unsafe.Pointer(buf + uintptr(cnt)*4)).Fport = uint16_t(port) 3971 (*service)(unsafe.Pointer(buf + uintptr(cnt)*4)).Fsocktype = uint8(2) 3972 (*service)(unsafe.Pointer(buf + uintptr(PostIncInt32(&cnt, 1))*4)).Fproto = uint8(17) 3973 } 3974 return cnt 3975 } 3976 3977 if flags&0x400 != 0 { 3978 return -2 3979 } 3980 3981 var l size_t = Xstrlen(tls, name) 3982 _ = l 3983 3984 Xabort(tls) //TODO- 3985 // unsigned char _buf[1032]; 3986 // FILE _f, *f = __fopen_rb_ca("/etc/services", &_f, _buf, sizeof _buf); 3987 // if (!f) switch (errno) { 3988 // case ENOENT: 3989 // case ENOTDIR: 3990 // case EACCES: 3991 // return EAI_SERVICE; 3992 // default: 3993 // return EAI_SYSTEM; 3994 // } 3995 3996 Xabort(tls) //TODO- 3997 // while (fgets(line, sizeof line, f) && cnt < MAXSERVS) { 3998 // if ((p=strchr(line, '#'))) *p++='\n', *p=0; 3999 4000 // /* Find service name */ 4001 // for(p=line; (p=strstr(p, name)); p++) { 4002 // if (p>line && !isspace(p[-1])) continue; 4003 // if (p[l] && !isspace(p[l])) continue; 4004 // break; 4005 // } 4006 // if (!p) continue; 4007 4008 // /* Skip past canonical name at beginning of line */ 4009 // for (p=line; *p && !isspace(*p); p++); 4010 4011 // port = strtoul(p, &z, 10); 4012 // if (port > 65535 || z==p) continue; 4013 // if (!strncmp(z, "/udp", 4)) { 4014 // if (proto == IPPROTO_TCP) continue; 4015 // buf[cnt].port = port; 4016 // buf[cnt].socktype = SOCK_DGRAM; 4017 // buf[cnt++].proto = IPPROTO_UDP; 4018 // } 4019 // if (!strncmp(z, "/tcp", 4)) { 4020 // if (proto == IPPROTO_UDP) continue; 4021 // buf[cnt].port = port; 4022 // buf[cnt].socktype = SOCK_STREAM; 4023 // buf[cnt++].proto = IPPROTO_TCP; 4024 // } 4025 // } 4026 // __fclose_ca(f); 4027 // return cnt > 0 ? cnt : EAI_SERVICE; 4028 Xabort(tls) 4029 return int32(0) //TODO- 4030 } 4031 4032 func X__toread(tls *TLS, f uintptr) int32 { /* __toread.c:3:5: */ 4033 *(*int32)(unsafe.Pointer(f + 136)) |= (*FILE)(unsafe.Pointer(f)).Fmode - 1 4034 if (*FILE)(unsafe.Pointer(f)).Fwpos != (*FILE)(unsafe.Pointer(f)).Fwbase { 4035 (*struct { 4036 f func(*TLS, uintptr, uintptr, size_t) size_t 4037 })(unsafe.Pointer(&struct{ uintptr }{(*FILE)(unsafe.Pointer(f)).Fwrite})).f(tls, f, uintptr(0), uint64(0)) 4038 } 4039 (*FILE)(unsafe.Pointer(f)).Fwpos = AssignPtrUintptr(f+56, AssignPtrUintptr(f+32, uintptr(0))) 4040 if (*FILE)(unsafe.Pointer(f)).Fflags&uint32(4) != 0 { 4041 *(*uint32)(unsafe.Pointer(f)) |= uint32(32) 4042 return -1 4043 } 4044 (*FILE)(unsafe.Pointer(f)).Frpos = AssignPtrUintptr(f+16, (*FILE)(unsafe.Pointer(f)).Fbuf+uintptr((*FILE)(unsafe.Pointer(f)).Fbuf_size)) 4045 if (*FILE)(unsafe.Pointer(f)).Fflags&uint32(16) != 0 { 4046 return -1 4047 } 4048 return 0 4049 } 4050 4051 func X__toread_needs_stdio_exit(tls *TLS) { /* __toread.c:16:13: */ 4052 X__builtin_abort(tls) //TODO- 4053 // __stdio_exit_needed(); 4054 } 4055 4056 // This function assumes it will never be called if there is already 4057 // data buffered for reading. 4058 4059 func X__uflow(tls *TLS, f uintptr) int32 { /* __uflow.c:6:5: */ 4060 bp := tls.Alloc(1) 4061 defer tls.Free(1) 4062 4063 // var c uint8 at bp, 1 4064 4065 if !(X__toread(tls, f) != 0) && (*struct { 4066 f func(*TLS, uintptr, uintptr, size_t) size_t 4067 })(unsafe.Pointer(&struct{ uintptr }{(*FILE)(unsafe.Pointer(f)).Fread})).f(tls, f, bp, uint64(1)) == uint64(1) { 4068 return int32(*(*uint8)(unsafe.Pointer(bp))) 4069 } 4070 return -1 4071 } 4072 4073 func Xbsearch(tls *TLS, key uintptr, base uintptr, nel size_t, width size_t, cmp uintptr) uintptr { /* bsearch.c:3:6: */ 4074 var try uintptr 4075 var sign int32 4076 for nel > uint64(0) { 4077 try = base + uintptr(width*(nel/uint64(2))) 4078 sign = (*struct { 4079 f func(*TLS, uintptr, uintptr) int32 4080 })(unsafe.Pointer(&struct{ uintptr }{cmp})).f(tls, key, try) 4081 if sign < 0 { 4082 nel = nel / uint64(2) 4083 } else if sign > 0 { 4084 base = try + uintptr(width) 4085 nel = nel - (nel/uint64(2) + uint64(1)) 4086 } else { 4087 return try 4088 } 4089 } 4090 return uintptr(0) 4091 } 4092 4093 func strtox(tls *TLS, s uintptr, p uintptr, prec int32) float64 { /* strtod.c:6:20: */ 4094 bp := tls.Alloc(232) 4095 defer tls.Free(232) 4096 4097 // var f FILE at bp, 232 4098 4099 (*FILE)(unsafe.Pointer(bp)).Fbuf = AssignPtrUintptr(bp+8, s) 4100 (*FILE)(unsafe.Pointer(bp)).Frend = UintptrFromInt32(-1) 4101 X__shlim(tls, bp, int64(0)) 4102 var y float64 = X__floatscan(tls, bp, prec, 1) 4103 var cnt off_t = (*FILE)(unsafe.Pointer(bp)).Fshcnt + (int64((*FILE)(unsafe.Pointer(bp)).Frpos)-int64((*FILE)(unsafe.Pointer(bp)).Fbuf))/1 4104 if p != 0 { 4105 *(*uintptr)(unsafe.Pointer(p)) = func() uintptr { 4106 if cnt != 0 { 4107 return s + uintptr(cnt) 4108 } 4109 return s 4110 }() 4111 } 4112 return y 4113 } 4114 4115 func Xstrtof(tls *TLS, s uintptr, p uintptr) float32 { /* strtod.c:17:7: */ 4116 return float32(strtox(tls, s, p, 0)) 4117 } 4118 4119 func Xstrtod(tls *TLS, s uintptr, p uintptr) float64 { /* strtod.c:22:8: */ 4120 return strtox(tls, s, p, 1) 4121 } 4122 4123 func Xstrtold(tls *TLS, s uintptr, p uintptr) float64 { /* strtod.c:27:13: */ 4124 return strtox(tls, s, p, 2) 4125 } 4126 4127 func strtox1(tls *TLS, s uintptr, p uintptr, base int32, lim uint64) uint64 { /* strtol.c:8:27: */ 4128 bp := tls.Alloc(232) 4129 defer tls.Free(232) 4130 4131 // var f FILE at bp, 232 4132 4133 (*FILE)(unsafe.Pointer(bp)).Fbuf = AssignPtrUintptr(bp+8, s) 4134 (*FILE)(unsafe.Pointer(bp)).Frend = UintptrFromInt32(-1) 4135 X__shlim(tls, bp, int64(0)) 4136 var y uint64 = X__intscan(tls, bp, uint32(base), 1, lim) 4137 if p != 0 { 4138 var cnt size_t = size_t((*FILE)(unsafe.Pointer(bp)).Fshcnt + (int64((*FILE)(unsafe.Pointer(bp)).Frpos)-int64((*FILE)(unsafe.Pointer(bp)).Fbuf))/1) 4139 *(*uintptr)(unsafe.Pointer(p)) = s + uintptr(cnt) 4140 } 4141 return y 4142 } 4143 4144 func Xstrtoull(tls *TLS, s uintptr, p uintptr, base int32) uint64 { /* strtol.c:21:20: */ 4145 return strtox1(tls, s, p, base, 2*uint64(0x7fffffffffffffff)+uint64(1)) 4146 } 4147 4148 func Xstrtoll(tls *TLS, s uintptr, p uintptr, base int32) int64 { /* strtol.c:26:11: */ 4149 return int64(strtox1(tls, s, p, base, Uint64FromInt64(-0x7fffffffffffffff-int64(1)))) 4150 } 4151 4152 func Xstrtoul(tls *TLS, s uintptr, p uintptr, base int32) uint64 { /* strtol.c:31:15: */ 4153 return uint64(strtox1(tls, s, p, base, 2*uint64(0x7fffffffffffffff)+uint64(1))) 4154 } 4155 4156 func Xstrtol(tls *TLS, s uintptr, p uintptr, base int32) int64 { /* strtol.c:36:6: */ 4157 return int64(strtox1(tls, s, p, base, 0+Uint64FromInt64(Int64(-Int64(0x7fffffffffffffff))-Int64FromInt32(1)))) 4158 } 4159 4160 func Xstrtoimax(tls *TLS, s uintptr, p uintptr, base int32) intmax_t { /* strtol.c:41:10: */ 4161 return intmax_t(Xstrtoll(tls, s, p, base)) 4162 } 4163 4164 func Xstrtoumax(tls *TLS, s uintptr, p uintptr, base int32) uintmax_t { /* strtol.c:46:11: */ 4165 return uintmax_t(Xstrtoull(tls, s, p, base)) 4166 } 4167 4168 func Xstrdup(tls *TLS, s uintptr) uintptr { /* strdup.c:4:6: */ 4169 var l size_t = Xstrlen(tls, s) 4170 var d uintptr = Xmalloc(tls, l+uint64(1)) 4171 if !(d != 0) { 4172 return uintptr(0) 4173 } 4174 return Xmemcpy(tls, d, s, l+uint64(1)) 4175 } 4176 4177 func Xstrnlen(tls *TLS, s uintptr, n size_t) size_t { /* strnlen.c:3:8: */ 4178 var p uintptr = Xmemchr(tls, s, 0, n) 4179 if p != 0 { 4180 return uint64((int64(p) - int64(s)) / 1) 4181 } 4182 return n 4183 } 4184 4185 func Xstrspn(tls *TLS, s uintptr, c uintptr) size_t { /* strspn.c:6:8: */ 4186 bp := tls.Alloc(32) 4187 defer tls.Free(32) 4188 4189 var a uintptr = s 4190 *(*[4]size_t)(unsafe.Pointer(bp /* byteset */)) = [4]size_t{0: uint64(0)} 4191 4192 if !(int32(*(*int8)(unsafe.Pointer(c))) != 0) { 4193 return uint64(0) 4194 } 4195 if !(int32(*(*int8)(unsafe.Pointer(c + 1))) != 0) { 4196 for ; int32(*(*int8)(unsafe.Pointer(s))) == int32(*(*int8)(unsafe.Pointer(c))); s++ { 4197 } 4198 return size_t((int64(s) - int64(a)) / 1) 4199 } 4200 4201 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++ { 4202 } 4203 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++ { 4204 } 4205 return size_t((int64(s) - int64(a)) / 1) 4206 } 4207 4208 func init() { 4209 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&X_ctype_)) + 0)) = uintptr(unsafe.Pointer(&X_C_ctype_)) // ctype_.c:319:23: 4210 } 4211 4212 var ts1 = "infinity\x00nan\x00\x00\x00\x01\x02\x04\a\x03\x06\x05\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" 4213 var ts = (*reflect.StringHeader)(unsafe.Pointer(&ts1)).Data