gtsocial-umbx

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

musl_openbsd_386.go (122871B)


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