mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-10-31 14:52:30 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			1267 lines
		
	
	
	
		
			34 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			1267 lines
		
	
	
	
		
			34 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // Code generated by 'ccgo -D__environ=environ -export-externs X -hide __syscall0,__syscall1,__syscall2,__syscall3,__syscall4,__syscall5,__syscall6 -nostdinc -nostdlib -o ../musl_windows_arm64.go -pkgname libc -static-locals-prefix _s -Iarch\aarch64 -Iarch/generic -Iobj/src/internal -Isrc/include -Isrc/internal -Iobj/include -Iinclude copyright.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/isxdigit.c src/env/putenv.c src/env/setenv.c src/env/unsetenv.c src/multibyte/wcrtomb.c src/multibyte/wcsrtombs.c src/multibyte/wcstombs.c src/stdlib/bsearch.c src/string/strchrnul.c src/string/strdup.c', DO NOT EDIT.
 | |
| 
 | |
| package libc
 | |
| 
 | |
| import (
 | |
| 	"math"
 | |
| 	"reflect"
 | |
| 	"sync/atomic"
 | |
| 	"unsafe"
 | |
| )
 | |
| 
 | |
| var _ = math.Pi
 | |
| var _ reflect.Kind
 | |
| var _ atomic.Value
 | |
| var _ unsafe.Pointer
 | |
| 
 | |
| // musl as a whole is licensed under the following standard MIT license:
 | |
| //
 | |
| // ----------------------------------------------------------------------
 | |
| // Copyright © 2005-2020 Rich Felker, et al.
 | |
| //
 | |
| // Permission is hereby granted, free of charge, to any person obtaining
 | |
| // a copy of this software and associated documentation files (the
 | |
| // "Software"), to deal in the Software without restriction, including
 | |
| // without limitation the rights to use, copy, modify, merge, publish,
 | |
| // distribute, sublicense, and/or sell copies of the Software, and to
 | |
| // permit persons to whom the Software is furnished to do so, subject to
 | |
| // the following conditions:
 | |
| //
 | |
| // The above copyright notice and this permission notice shall be
 | |
| // included in all copies or substantial portions of the Software.
 | |
| //
 | |
| // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 | |
| // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 | |
| // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
 | |
| // IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
 | |
| // CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
 | |
| // TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
 | |
| // SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 | |
| // ----------------------------------------------------------------------
 | |
| //
 | |
| // Authors/contributors include:
 | |
| //
 | |
| // A. Wilcox
 | |
| // Ada Worcester
 | |
| // Alex Dowad
 | |
| // Alex Suykov
 | |
| // Alexander Monakov
 | |
| // Andre McCurdy
 | |
| // Andrew Kelley
 | |
| // Anthony G. Basile
 | |
| // Aric Belsito
 | |
| // Arvid Picciani
 | |
| // Bartosz Brachaczek
 | |
| // Benjamin Peterson
 | |
| // Bobby Bingham
 | |
| // Boris Brezillon
 | |
| // Brent Cook
 | |
| // Chris Spiegel
 | |
| // Clément Vasseur
 | |
| // Daniel Micay
 | |
| // Daniel Sabogal
 | |
| // Daurnimator
 | |
| // David Carlier
 | |
| // David Edelsohn
 | |
| // Denys Vlasenko
 | |
| // Dmitry Ivanov
 | |
| // Dmitry V. Levin
 | |
| // Drew DeVault
 | |
| // Emil Renner Berthing
 | |
| // Fangrui Song
 | |
| // Felix Fietkau
 | |
| // Felix Janda
 | |
| // Gianluca Anzolin
 | |
| // Hauke Mehrtens
 | |
| // He X
 | |
| // Hiltjo Posthuma
 | |
| // Isaac Dunham
 | |
| // Jaydeep Patil
 | |
| // Jens Gustedt
 | |
| // Jeremy Huntwork
 | |
| // Jo-Philipp Wich
 | |
| // Joakim Sindholt
 | |
| // John Spencer
 | |
| // Julien Ramseier
 | |
| // Justin Cormack
 | |
| // Kaarle Ritvanen
 | |
| // Khem Raj
 | |
| // Kylie McClain
 | |
| // Leah Neukirchen
 | |
| // Luca Barbato
 | |
| // Luka Perkov
 | |
| // M Farkas-Dyck (Strake)
 | |
| // Mahesh Bodapati
 | |
| // Markus Wichmann
 | |
| // Masanori Ogino
 | |
| // Michael Clark
 | |
| // Michael Forney
 | |
| // Mikhail Kremnyov
 | |
| // Natanael Copa
 | |
| // Nicholas J. Kain
 | |
| // orc
 | |
| // Pascal Cuoq
 | |
| // Patrick Oppenlander
 | |
| // Petr Hosek
 | |
| // Petr Skocik
 | |
| // Pierre Carrier
 | |
| // Reini Urban
 | |
| // Rich Felker
 | |
| // Richard Pennington
 | |
| // Ryan Fairfax
 | |
| // Samuel Holland
 | |
| // Segev Finer
 | |
| // Shiz
 | |
| // sin
 | |
| // Solar Designer
 | |
| // Stefan Kristiansson
 | |
| // Stefan O'Rear
 | |
| // Szabolcs Nagy
 | |
| // Timo Teräs
 | |
| // Trutz Behn
 | |
| // Valentin Ochs
 | |
| // Will Dietz
 | |
| // William Haddon
 | |
| // William Pitcock
 | |
| //
 | |
| // Portions of this software are derived from third-party works licensed
 | |
| // under terms compatible with the above MIT license:
 | |
| //
 | |
| // The TRE regular expression implementation (src/regex/reg* and
 | |
| // src/regex/tre*) is Copyright © 2001-2008 Ville Laurikari and licensed
 | |
| // under a 2-clause BSD license (license text in the source files). The
 | |
| // included version has been heavily modified by Rich Felker in 2012, in
 | |
| // the interests of size, simplicity, and namespace cleanliness.
 | |
| //
 | |
| // Much of the math library code (src/math/* and src/complex/*) is
 | |
| // Copyright © 1993,2004 Sun Microsystems or
 | |
| // Copyright © 2003-2011 David Schultz or
 | |
| // Copyright © 2003-2009 Steven G. Kargl or
 | |
| // Copyright © 2003-2009 Bruce D. Evans or
 | |
| // Copyright © 2008 Stephen L. Moshier or
 | |
| // Copyright © 2017-2018 Arm Limited
 | |
| // and labelled as such in comments in the individual source files. All
 | |
| // have been licensed under extremely permissive terms.
 | |
| //
 | |
| // The ARM memcpy code (src/string/arm/memcpy.S) is Copyright © 2008
 | |
| // The Android Open Source Project and is licensed under a two-clause BSD
 | |
| // license. It was taken from Bionic libc, used on Android.
 | |
| //
 | |
| // The AArch64 memcpy and memset code (src/string/aarch64/*) are
 | |
| // Copyright © 1999-2019, Arm Limited.
 | |
| //
 | |
| // The implementation of DES for crypt (src/crypt/crypt_des.c) is
 | |
| // Copyright © 1994 David Burren. It is licensed under a BSD license.
 | |
| //
 | |
| // The implementation of blowfish crypt (src/crypt/crypt_blowfish.c) was
 | |
| // originally written by Solar Designer and placed into the public
 | |
| // domain. The code also comes with a fallback permissive license for use
 | |
| // in jurisdictions that may not recognize the public domain.
 | |
| //
 | |
| // The smoothsort implementation (src/stdlib/qsort.c) is Copyright © 2011
 | |
| // Valentin Ochs and is licensed under an MIT-style license.
 | |
| //
 | |
| // The x86_64 port was written by Nicholas J. Kain and is licensed under
 | |
| // the standard MIT terms.
 | |
| //
 | |
| // The mips and microblaze ports were originally written by Richard
 | |
| // Pennington for use in the ellcc project. The original code was adapted
 | |
| // by Rich Felker for build system and code conventions during upstream
 | |
| // integration. It is licensed under the standard MIT terms.
 | |
| //
 | |
| // The mips64 port was contributed by Imagination Technologies and is
 | |
| // licensed under the standard MIT terms.
 | |
| //
 | |
| // The powerpc port was also originally written by Richard Pennington,
 | |
| // and later supplemented and integrated by John Spencer. It is licensed
 | |
| // under the standard MIT terms.
 | |
| //
 | |
| // All other files which have no copyright comments are original works
 | |
| // produced specifically for use as part of this library, written either
 | |
| // by Rich Felker, the main author of the library, or by one or more
 | |
| // contibutors listed above. Details on authorship of individual files
 | |
| // can be found in the git version control history of the project. The
 | |
| // omission of copyright and license comments in each file is in the
 | |
| // interest of source tree size.
 | |
| //
 | |
| // In addition, permission is hereby granted for all public header files
 | |
| // (include/* and arch/*/bits/*) and crt files intended to be linked into
 | |
| // applications (crt/*, ldso/dlstart.c, and arch/*/crt_arch.h) to omit
 | |
| // the copyright notice and permission notice otherwise required by the
 | |
| // license, and to use these files without any requirement of
 | |
| // attribution. These files include substantial contributions from:
 | |
| //
 | |
| // Bobby Bingham
 | |
| // John Spencer
 | |
| // Nicholas J. Kain
 | |
| // Rich Felker
 | |
| // Richard Pennington
 | |
| // Stefan Kristiansson
 | |
| // Szabolcs Nagy
 | |
| //
 | |
| // all of whom have explicitly granted such permission.
 | |
| //
 | |
| // This file previously contained text expressing a belief that most of
 | |
| // the files covered by the above exception were sufficiently trivial not
 | |
| // to be subject to copyright, resulting in confusion over whether it
 | |
| // negated the permissions granted in the license. In the spirit of
 | |
| // permissive licensing, and of not having licensing issues being an
 | |
| // obstacle to adoption, that text has been removed.
 | |
| const ( /* copyright.c:194:1: */
 | |
| 	__musl__copyright__ = 0
 | |
| )
 | |
| 
 | |
| const ( /* pthread_impl.h:58:1: */
 | |
| 	DT_EXITING  = 0
 | |
| 	DT_JOINABLE = 1
 | |
| 	DT_DETACHED = 2
 | |
| )
 | |
| 
 | |
| type ptrdiff_t = int64 /* <builtin>:3:26 */
 | |
| 
 | |
| type size_t = uint64 /* <builtin>:9:23 */
 | |
| 
 | |
| type wchar_t = uint16 /* <builtin>:15:24 */
 | |
| 
 | |
| type va_list = uintptr /* <builtin>:50:27 */
 | |
| 
 | |
| type __locale_struct = struct{ cat [6]uintptr } /* alltypes.h:351:9 */
 | |
| 
 | |
| type locale_t = uintptr /* alltypes.h:351:32 */
 | |
| 
 | |
| func Xisalnum(tls *TLS, c int32) int32 { /* isalnum.c:3:5: */
 | |
| 	if __ccgo_strace {
 | |
| 		trc("tls=%v c=%v, (%v:)", tls, c, origin(2))
 | |
| 	}
 | |
| 	return Bool32(func() int32 {
 | |
| 		if 0 != 0 {
 | |
| 			return Xisalpha(tls, c)
 | |
| 		}
 | |
| 		return Bool32(uint32(c)|uint32(32)-uint32('a') < uint32(26))
 | |
| 	}() != 0 || func() int32 {
 | |
| 		if 0 != 0 {
 | |
| 			return Xisdigit(tls, c)
 | |
| 		}
 | |
| 		return Bool32(uint32(c)-uint32('0') < uint32(10))
 | |
| 	}() != 0)
 | |
| }
 | |
| 
 | |
| func X__isalnum_l(tls *TLS, c int32, l locale_t) int32 { /* isalnum.c:8:5: */
 | |
| 	if __ccgo_strace {
 | |
| 		trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2))
 | |
| 	}
 | |
| 	return Xisalnum(tls, c)
 | |
| }
 | |
| 
 | |
| func Xisalpha(tls *TLS, c int32) int32 { /* isalpha.c:4:5: */
 | |
| 	if __ccgo_strace {
 | |
| 		trc("tls=%v c=%v, (%v:)", tls, c, origin(2))
 | |
| 	}
 | |
| 	return Bool32(uint32(c)|uint32(32)-uint32('a') < uint32(26))
 | |
| }
 | |
| 
 | |
| func X__isalpha_l(tls *TLS, c int32, l locale_t) int32 { /* isalpha.c:9:5: */
 | |
| 	if __ccgo_strace {
 | |
| 		trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2))
 | |
| 	}
 | |
| 	return Xisalpha(tls, c)
 | |
| }
 | |
| 
 | |
| func Xisdigit(tls *TLS, c int32) int32 { /* isdigit.c:4:5: */
 | |
| 	if __ccgo_strace {
 | |
| 		trc("tls=%v c=%v, (%v:)", tls, c, origin(2))
 | |
| 	}
 | |
| 	return Bool32(uint32(c)-uint32('0') < uint32(10))
 | |
| }
 | |
| 
 | |
| func X__isdigit_l(tls *TLS, c int32, l locale_t) int32 { /* isdigit.c:9:5: */
 | |
| 	if __ccgo_strace {
 | |
| 		trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2))
 | |
| 	}
 | |
| 	return Xisdigit(tls, c)
 | |
| }
 | |
| 
 | |
| func X__islower_l(tls *TLS, c int32, l locale_t) int32 { /* islower.c:9:5: */
 | |
| 	if __ccgo_strace {
 | |
| 		trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2))
 | |
| 	}
 | |
| 	return Xislower(tls, c)
 | |
| }
 | |
| 
 | |
| func Xisprint(tls *TLS, c int32) int32 { /* isprint.c:4:5: */
 | |
| 	if __ccgo_strace {
 | |
| 		trc("tls=%v c=%v, (%v:)", tls, c, origin(2))
 | |
| 	}
 | |
| 	return Bool32(uint32(c)-uint32(0x20) < uint32(0x5f))
 | |
| }
 | |
| 
 | |
| func X__isprint_l(tls *TLS, c int32, l locale_t) int32 { /* isprint.c:9:5: */
 | |
| 	if __ccgo_strace {
 | |
| 		trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2))
 | |
| 	}
 | |
| 	return Xisprint(tls, c)
 | |
| }
 | |
| 
 | |
| func Xisspace(tls *TLS, c int32) int32 { /* isspace.c:4:5: */
 | |
| 	if __ccgo_strace {
 | |
| 		trc("tls=%v c=%v, (%v:)", tls, c, origin(2))
 | |
| 	}
 | |
| 	return Bool32(c == ' ' || uint32(c)-uint32('\t') < uint32(5))
 | |
| }
 | |
| 
 | |
| func X__isspace_l(tls *TLS, c int32, l locale_t) int32 { /* isspace.c:9:5: */
 | |
| 	if __ccgo_strace {
 | |
| 		trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2))
 | |
| 	}
 | |
| 	return Xisspace(tls, c)
 | |
| }
 | |
| 
 | |
| func Xisxdigit(tls *TLS, c int32) int32 { /* isxdigit.c:3:5: */
 | |
| 	if __ccgo_strace {
 | |
| 		trc("tls=%v c=%v, (%v:)", tls, c, origin(2))
 | |
| 	}
 | |
| 	return Bool32(func() int32 {
 | |
| 		if 0 != 0 {
 | |
| 			return Xisdigit(tls, c)
 | |
| 		}
 | |
| 		return Bool32(uint32(c)-uint32('0') < uint32(10))
 | |
| 	}() != 0 || uint32(c)|uint32(32)-uint32('a') < uint32(6))
 | |
| }
 | |
| 
 | |
| func X__isxdigit_l(tls *TLS, c int32, l locale_t) int32 { /* isxdigit.c:8:5: */
 | |
| 	if __ccgo_strace {
 | |
| 		trc("tls=%v c=%v l=%v, (%v:)", tls, c, l, origin(2))
 | |
| 	}
 | |
| 	return Xisxdigit(tls, c)
 | |
| }
 | |
| 
 | |
| type div_t = struct {
 | |
| 	quot int32
 | |
| 	rem  int32
 | |
| } /* stdlib.h:62:35 */
 | |
| type ldiv_t = struct {
 | |
| 	quot int32
 | |
| 	rem  int32
 | |
| } /* stdlib.h:63:36 */
 | |
| type lldiv_t = struct {
 | |
| 	quot int64
 | |
| 	rem  int64
 | |
| } /* stdlib.h:64:41 */
 | |
| 
 | |
| type ssize_t = int32 /* alltypes.h:73:15 */
 | |
| 
 | |
| type intptr_t = int32 /* alltypes.h:78:15 */
 | |
| 
 | |
| type off_t = int32 /* alltypes.h:170:16 */
 | |
| 
 | |
| type pid_t = int32 /* alltypes.h:243:13 */
 | |
| 
 | |
| type uid_t = uint32 /* alltypes.h:253:18 */
 | |
| 
 | |
| type gid_t = uint32 /* alltypes.h:258:18 */
 | |
| 
 | |
| type useconds_t = uint32 /* alltypes.h:268:18 */
 | |
| 
 | |
| func X__putenv(tls *TLS, s uintptr, l size_t, r uintptr) int32 { /* putenv.c:8:5: */
 | |
| 	if __ccgo_strace {
 | |
| 		trc("tls=%v s=%v l=%v r=%v, (%v:)", tls, s, l, r, origin(2))
 | |
| 	}
 | |
| 	var i size_t
 | |
| 	var newenv uintptr
 | |
| 	var tmp uintptr
 | |
| 	//TODO for (char **e = __environ; *e; e++, i++)
 | |
| 	var e uintptr
 | |
| 	i = uint64(0)
 | |
| 	if !(Environ() != 0) {
 | |
| 		goto __1
 | |
| 	}
 | |
| 	//TODO for (char **e = __environ; *e; e++, i++)
 | |
| 	e = Environ()
 | |
| __2:
 | |
| 	if !(*(*uintptr)(unsafe.Pointer(e)) != 0) {
 | |
| 		goto __4
 | |
| 	}
 | |
| 	if !!(Xstrncmp(tls, s, *(*uintptr)(unsafe.Pointer(e)), l+uint64(1)) != 0) {
 | |
| 		goto __5
 | |
| 	}
 | |
| 	tmp = *(*uintptr)(unsafe.Pointer(e))
 | |
| 	*(*uintptr)(unsafe.Pointer(e)) = s
 | |
| 	X__env_rm_add(tls, tmp, r)
 | |
| 	return 0
 | |
| __5:
 | |
| 	;
 | |
| 	goto __3
 | |
| __3:
 | |
| 	e += 8
 | |
| 	i++
 | |
| 	goto __2
 | |
| 	goto __4
 | |
| __4:
 | |
| 	;
 | |
| __1:
 | |
| 	;
 | |
| 	if !(Environ() == _soldenv) {
 | |
| 		goto __6
 | |
| 	}
 | |
| 	newenv = Xrealloc(tls, _soldenv, uint64(unsafe.Sizeof(uintptr(0)))*(i+uint64(2)))
 | |
| 	if !!(newenv != 0) {
 | |
| 		goto __8
 | |
| 	}
 | |
| 	goto oom
 | |
| __8:
 | |
| 	;
 | |
| 	goto __7
 | |
| __6:
 | |
| 	newenv = Xmalloc(tls, uint64(unsafe.Sizeof(uintptr(0)))*(i+uint64(2)))
 | |
| 	if !!(newenv != 0) {
 | |
| 		goto __9
 | |
| 	}
 | |
| 	goto oom
 | |
| __9:
 | |
| 	;
 | |
| 	if !(i != 0) {
 | |
| 		goto __10
 | |
| 	}
 | |
| 	Xmemcpy(tls, newenv, Environ(), uint64(unsafe.Sizeof(uintptr(0)))*i)
 | |
| __10:
 | |
| 	;
 | |
| 	Xfree(tls, _soldenv)
 | |
| __7:
 | |
| 	;
 | |
| 	*(*uintptr)(unsafe.Pointer(newenv + uintptr(i)*8)) = s
 | |
| 	*(*uintptr)(unsafe.Pointer(newenv + uintptr(i+uint64(1))*8)) = uintptr(0)
 | |
| 	*(*uintptr)(unsafe.Pointer(EnvironP())) = AssignPtrUintptr(uintptr(unsafe.Pointer(&_soldenv)), newenv)
 | |
| 	if !(r != 0) {
 | |
| 		goto __11
 | |
| 	}
 | |
| 	X__env_rm_add(tls, uintptr(0), r)
 | |
| __11:
 | |
| 	;
 | |
| 	return 0
 | |
| oom:
 | |
| 	Xfree(tls, r)
 | |
| 	return -1
 | |
| }
 | |
| 
 | |
| var _soldenv uintptr /* putenv.c:22:14: */
 | |
| 
 | |
| func Xputenv(tls *TLS, s uintptr) int32 { /* putenv.c:43:5: */
 | |
| 	if __ccgo_strace {
 | |
| 		trc("tls=%v s=%v, (%v:)", tls, s, origin(2))
 | |
| 	}
 | |
| 	var l size_t = size_t((int64(X__strchrnul(tls, s, '=')) - int64(s)) / 1)
 | |
| 	if !(l != 0) || !(int32(*(*int8)(unsafe.Pointer(s + uintptr(l)))) != 0) {
 | |
| 		return Xunsetenv(tls, s)
 | |
| 	}
 | |
| 	return X__putenv(tls, s, l, uintptr(0))
 | |
| }
 | |
| 
 | |
| func X__env_rm_add(tls *TLS, old uintptr, new uintptr) { /* setenv.c:5:6: */
 | |
| 	if __ccgo_strace {
 | |
| 		trc("tls=%v old=%v new=%v, (%v:)", tls, old, new, origin(2))
 | |
| 	}
 | |
| 	//TODO for (size_t i=0; i < env_alloced_n; i++)
 | |
| 	var i size_t = uint64(0)
 | |
| 	for ; i < _senv_alloced_n; i++ {
 | |
| 		if *(*uintptr)(unsafe.Pointer(_senv_alloced + uintptr(i)*8)) == old {
 | |
| 			*(*uintptr)(unsafe.Pointer(_senv_alloced + uintptr(i)*8)) = new
 | |
| 			Xfree(tls, old)
 | |
| 			return
 | |
| 		} else if !(int32(*(*uintptr)(unsafe.Pointer(_senv_alloced + uintptr(i)*8))) != 0) && new != 0 {
 | |
| 			*(*uintptr)(unsafe.Pointer(_senv_alloced + uintptr(i)*8)) = new
 | |
| 			new = uintptr(0)
 | |
| 		}
 | |
| 	}
 | |
| 	if !(new != 0) {
 | |
| 		return
 | |
| 	}
 | |
| 	var t uintptr = Xrealloc(tls, _senv_alloced, uint64(unsafe.Sizeof(uintptr(0)))*(_senv_alloced_n+uint64(1)))
 | |
| 	if !(t != 0) {
 | |
| 		return
 | |
| 	}
 | |
| 	*(*uintptr)(unsafe.Pointer(AssignPtrUintptr(uintptr(unsafe.Pointer(&_senv_alloced)), t) + uintptr(PostIncUint64(&_senv_alloced_n, 1))*8)) = new
 | |
| }
 | |
| 
 | |
| var _senv_alloced uintptr  /* setenv.c:7:14: */
 | |
| var _senv_alloced_n size_t /* setenv.c:8:16: */
 | |
| 
 | |
| func Xsetenv(tls *TLS, var1 uintptr, value uintptr, overwrite int32) int32 { /* setenv.c:26:5: */
 | |
| 	if __ccgo_strace {
 | |
| 		trc("tls=%v var1=%v value=%v overwrite=%v, (%v:)", tls, var1, value, overwrite, origin(2))
 | |
| 	}
 | |
| 	var s uintptr
 | |
| 	var l1 size_t
 | |
| 	var l2 size_t
 | |
| 
 | |
| 	if !(var1 != 0) || !(int32(AssignUint64(&l1, size_t((int64(X__strchrnul(tls, var1, '='))-int64(var1))/1))) != 0) || *(*int8)(unsafe.Pointer(var1 + uintptr(l1))) != 0 {
 | |
| 		*(*int32)(unsafe.Pointer(X___errno_location(tls))) = 22
 | |
| 		return -1
 | |
| 	}
 | |
| 	if !(overwrite != 0) && Xgetenv(tls, var1) != 0 {
 | |
| 		return 0
 | |
| 	}
 | |
| 
 | |
| 	l2 = Xstrlen(tls, value)
 | |
| 	s = Xmalloc(tls, l1+l2+uint64(2))
 | |
| 	if !(s != 0) {
 | |
| 		return -1
 | |
| 	}
 | |
| 	Xmemcpy(tls, s, var1, l1)
 | |
| 	*(*int8)(unsafe.Pointer(s + uintptr(l1))) = int8('=')
 | |
| 	Xmemcpy(tls, s+uintptr(l1)+uintptr(1), value, l2+uint64(1))
 | |
| 	return X__putenv(tls, s, l1, s)
 | |
| }
 | |
| 
 | |
| func Xunsetenv(tls *TLS, name uintptr) int32 { /* unsetenv.c:9:5: */
 | |
| 	if __ccgo_strace {
 | |
| 		trc("tls=%v name=%v, (%v:)", tls, name, origin(2))
 | |
| 	}
 | |
| 	var l size_t = size_t((int64(X__strchrnul(tls, name, '=')) - int64(name)) / 1)
 | |
| 	if !(l != 0) || *(*int8)(unsafe.Pointer(name + uintptr(l))) != 0 {
 | |
| 		*(*int32)(unsafe.Pointer(X___errno_location(tls))) = 22
 | |
| 		return -1
 | |
| 	}
 | |
| 	if Environ() != 0 {
 | |
| 		var e uintptr = Environ()
 | |
| 		var eo uintptr = e
 | |
| 		for ; *(*uintptr)(unsafe.Pointer(e)) != 0; e += 8 {
 | |
| 			//TODO if (!strncmp(name, *e, l) && l[*e] == '=')
 | |
| 			if !(Xstrncmp(tls, name, *(*uintptr)(unsafe.Pointer(e)), l) != 0) && int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(e)) + uintptr(l)))) == '=' {
 | |
| 				X__env_rm_add(tls, *(*uintptr)(unsafe.Pointer(e)), uintptr(0))
 | |
| 			} else if eo != e {
 | |
| 				*(*uintptr)(unsafe.Pointer(PostIncUintptr(&eo, 8))) = *(*uintptr)(unsafe.Pointer(e))
 | |
| 			} else {
 | |
| 				eo += 8
 | |
| 			}
 | |
| 		}
 | |
| 		if eo != e {
 | |
| 			*(*uintptr)(unsafe.Pointer(eo)) = uintptr(0)
 | |
| 		}
 | |
| 	}
 | |
| 	return 0
 | |
| }
 | |
| 
 | |
| type wint_t = uint32 /* alltypes.h:21:18 */
 | |
| 
 | |
| type wctype_t = uint32 /* alltypes.h:211:23 */
 | |
| 
 | |
| type __mbstate_t = struct {
 | |
| 	__opaque1 uint32
 | |
| 	__opaque2 uint32
 | |
| } /* alltypes.h:345:9 */
 | |
| 
 | |
| type mbstate_t = __mbstate_t /* alltypes.h:345:63 */
 | |
| 
 | |
| type tm = struct {
 | |
| 	tm_sec    int32
 | |
| 	tm_min    int32
 | |
| 	tm_hour   int32
 | |
| 	tm_mday   int32
 | |
| 	tm_mon    int32
 | |
| 	tm_year   int32
 | |
| 	tm_wday   int32
 | |
| 	tm_yday   int32
 | |
| 	tm_isdst  int32
 | |
| 	tm_gmtoff int32
 | |
| 	tm_zone   uintptr
 | |
| } /* wchar.h:138:1 */
 | |
| 
 | |
| type uintptr_t = uint32 /* alltypes.h:63:24 */
 | |
| 
 | |
| type int8_t = int8 /* alltypes.h:104:25 */
 | |
| 
 | |
| type int16_t = int16 /* alltypes.h:109:25 */
 | |
| 
 | |
| type int32_t = int32 /* alltypes.h:114:25 */
 | |
| 
 | |
| type int64_t = int32 /* alltypes.h:119:25 */
 | |
| 
 | |
| type intmax_t = int32 /* alltypes.h:124:25 */
 | |
| 
 | |
| type uint8_t = uint8 /* alltypes.h:129:25 */
 | |
| 
 | |
| type uint16_t = uint16 /* alltypes.h:134:25 */
 | |
| 
 | |
| type uint32_t = uint32 /* alltypes.h:139:25 */
 | |
| 
 | |
| type uint64_t = uint32 /* alltypes.h:144:25 */
 | |
| 
 | |
| type uintmax_t = uint32 /* alltypes.h:154:25 */
 | |
| 
 | |
| type int_fast8_t = int8_t   /* stdint.h:22:16 */
 | |
| type int_fast64_t = int64_t /* stdint.h:23:17 */
 | |
| 
 | |
| type int_least8_t = int8_t   /* stdint.h:25:17 */
 | |
| type int_least16_t = int16_t /* stdint.h:26:17 */
 | |
| type int_least32_t = int32_t /* stdint.h:27:17 */
 | |
| type int_least64_t = int64_t /* stdint.h:28:17 */
 | |
| 
 | |
| type uint_fast8_t = uint8_t   /* stdint.h:30:17 */
 | |
| type uint_fast64_t = uint64_t /* stdint.h:31:18 */
 | |
| 
 | |
| type uint_least8_t = uint8_t   /* stdint.h:33:18 */
 | |
| type uint_least16_t = uint16_t /* stdint.h:34:18 */
 | |
| type uint_least32_t = uint32_t /* stdint.h:35:18 */
 | |
| type uint_least64_t = uint64_t /* stdint.h:36:18 */
 | |
| 
 | |
| type int_fast16_t = int32_t   /* stdint.h:1:17 */
 | |
| type int_fast32_t = int32_t   /* stdint.h:2:17 */
 | |
| type uint_fast16_t = uint32_t /* stdint.h:3:18 */
 | |
| type uint_fast32_t = uint32_t /* stdint.h:4:18 */
 | |
| 
 | |
| // Upper 6 state bits are a negative integer offset to bound-check next byte
 | |
| //    equivalent to: ( (b-0x80) | (b+offset) ) & ~0x3f
 | |
| 
 | |
| // Interval [a,b). Either a must be 80 or b must be c0, lower 3 bits clear.
 | |
| 
 | |
| // Arbitrary encoding for representing code units instead of characters.
 | |
| 
 | |
| // Get inline definition of MB_CUR_MAX.
 | |
| 
 | |
| type lconv = struct {
 | |
| 	decimal_point      uintptr
 | |
| 	thousands_sep      uintptr
 | |
| 	grouping           uintptr
 | |
| 	int_curr_symbol    uintptr
 | |
| 	currency_symbol    uintptr
 | |
| 	mon_decimal_point  uintptr
 | |
| 	mon_thousands_sep  uintptr
 | |
| 	mon_grouping       uintptr
 | |
| 	positive_sign      uintptr
 | |
| 	negative_sign      uintptr
 | |
| 	int_frac_digits    int8
 | |
| 	frac_digits        int8
 | |
| 	p_cs_precedes      int8
 | |
| 	p_sep_by_space     int8
 | |
| 	n_cs_precedes      int8
 | |
| 	n_sep_by_space     int8
 | |
| 	p_sign_posn        int8
 | |
| 	n_sign_posn        int8
 | |
| 	int_p_cs_precedes  int8
 | |
| 	int_p_sep_by_space int8
 | |
| 	int_n_cs_precedes  int8
 | |
| 	int_n_sep_by_space int8
 | |
| 	int_p_sign_posn    int8
 | |
| 	int_n_sign_posn    int8
 | |
| 	_                  [2]byte
 | |
| } /* locale.h:24:1 */
 | |
| 
 | |
| type _G_fpos64_t = struct {
 | |
| 	_        [0]uint64
 | |
| 	__opaque [16]int8
 | |
| } /* stdio.h:54:9 */
 | |
| 
 | |
| type fpos_t = _G_fpos64_t /* stdio.h:58:3 */
 | |
| 
 | |
| // Support signed or unsigned plain-char
 | |
| 
 | |
| // Implementation choices...
 | |
| 
 | |
| // Arbitrary numbers...
 | |
| 
 | |
| // POSIX/SUS requirements follow. These numbers come directly
 | |
| // from SUS and have nothing to do with the host system.
 | |
| 
 | |
| type __locale_map = struct {
 | |
| 	__map    uintptr
 | |
| 	map_size size_t
 | |
| 	name     [24]int8
 | |
| 	next     uintptr
 | |
| } /* alltypes.h:351:9 */
 | |
| 
 | |
| type tls_module = struct {
 | |
| 	next   uintptr
 | |
| 	image  uintptr
 | |
| 	len    size_t
 | |
| 	size   size_t
 | |
| 	align  size_t
 | |
| 	offset size_t
 | |
| } /* libc.h:14:1 */
 | |
| 
 | |
| type __libc = struct {
 | |
| 	can_do_threads  int8
 | |
| 	threaded        int8
 | |
| 	secure          int8
 | |
| 	need_locks      int8
 | |
| 	threads_minus_1 int32
 | |
| 	auxv            uintptr
 | |
| 	tls_head        uintptr
 | |
| 	tls_size        size_t
 | |
| 	tls_align       size_t
 | |
| 	tls_cnt         size_t
 | |
| 	page_size       size_t
 | |
| 	global_locale   struct{ cat [6]uintptr }
 | |
| } /* libc.h:20:1 */
 | |
| 
 | |
| type time_t = int32 /* alltypes.h:93:16 */
 | |
| 
 | |
| type clockid_t = int32 /* alltypes.h:222:13 */
 | |
| 
 | |
| type timespec = struct {
 | |
| 	tv_sec  time_t
 | |
| 	tv_nsec int32
 | |
| } /* alltypes.h:237:1 */
 | |
| 
 | |
| type __pthread = struct {
 | |
| 	self          uintptr
 | |
| 	dtv           uintptr
 | |
| 	prev          uintptr
 | |
| 	next          uintptr
 | |
| 	sysinfo       uintptr_t
 | |
| 	canary        uintptr_t
 | |
| 	canary2       uintptr_t
 | |
| 	tid           int32
 | |
| 	errno_val     int32
 | |
| 	detach_state  int32
 | |
| 	cancel        int32
 | |
| 	canceldisable uint8
 | |
| 	cancelasync   uint8
 | |
| 	tsd_used      uint8 /* unsigned char tsd_used: 1, unsigned char dlerror_flag: 1 */
 | |
| 	_             [1]byte
 | |
| 	map_base      uintptr
 | |
| 	map_size      size_t
 | |
| 	stack         uintptr
 | |
| 	stack_size    size_t
 | |
| 	guard_size    size_t
 | |
| 	result        uintptr
 | |
| 	cancelbuf     uintptr
 | |
| 	tsd           uintptr
 | |
| 	robust_list   struct {
 | |
| 		head    uintptr
 | |
| 		off     int32
 | |
| 		_       [4]byte
 | |
| 		pending uintptr
 | |
| 	}
 | |
| 	timer_id      int32
 | |
| 	_             [4]byte
 | |
| 	locale        locale_t
 | |
| 	killlock      [1]int32
 | |
| 	_             [4]byte
 | |
| 	dlerror_buf   uintptr
 | |
| 	stdio_locks   uintptr
 | |
| 	canary_at_end uintptr_t
 | |
| 	_             [4]byte
 | |
| 	dtv_copy      uintptr
 | |
| } /* alltypes.h:281:9 */
 | |
| 
 | |
| type pthread_t = uintptr /* alltypes.h:281:26 */
 | |
| 
 | |
| type pthread_once_t = int32 /* alltypes.h:287:13 */
 | |
| 
 | |
| type pthread_key_t = uint32 /* alltypes.h:292:18 */
 | |
| 
 | |
| type pthread_spinlock_t = int32 /* alltypes.h:297:13 */
 | |
| 
 | |
| type pthread_mutexattr_t = struct{ __attr uint32 } /* alltypes.h:302:37 */
 | |
| 
 | |
| type pthread_condattr_t = struct{ __attr uint32 } /* alltypes.h:307:37 */
 | |
| 
 | |
| type pthread_barrierattr_t = struct{ __attr uint32 } /* alltypes.h:312:37 */
 | |
| 
 | |
| type pthread_rwlockattr_t = struct{ __attr [2]uint32 } /* alltypes.h:317:40 */
 | |
| 
 | |
| type __sigset_t = struct{ __bits [32]uint32 } /* alltypes.h:357:9 */
 | |
| 
 | |
| type sigset_t = __sigset_t /* alltypes.h:357:71 */
 | |
| 
 | |
| type pthread_attr_t = struct{ __u struct{ __i [9]int32 } } /* alltypes.h:380:147 */
 | |
| 
 | |
| type pthread_mutex_t = struct {
 | |
| 	__u struct {
 | |
| 		_   [0]uint64
 | |
| 		__i [6]int32
 | |
| 		_   [24]byte
 | |
| 	}
 | |
| } /* alltypes.h:385:157 */
 | |
| 
 | |
| type pthread_cond_t = struct {
 | |
| 	__u struct {
 | |
| 		_   [0]uint64
 | |
| 		__i [12]int32
 | |
| 	}
 | |
| } /* alltypes.h:395:112 */
 | |
| 
 | |
| type pthread_rwlock_t = struct {
 | |
| 	__u struct {
 | |
| 		_   [0]uint64
 | |
| 		__i [8]int32
 | |
| 		_   [32]byte
 | |
| 	}
 | |
| } /* alltypes.h:405:139 */
 | |
| 
 | |
| type pthread_barrier_t = struct {
 | |
| 	__u struct {
 | |
| 		_   [0]uint64
 | |
| 		__i [5]int32
 | |
| 		_   [20]byte
 | |
| 	}
 | |
| } /* alltypes.h:410:137 */
 | |
| 
 | |
| type sched_param = struct {
 | |
| 	sched_priority int32
 | |
| 	__reserved1    int32
 | |
| 	__reserved2    [2]struct {
 | |
| 		__reserved1 time_t
 | |
| 		__reserved2 int32
 | |
| 	}
 | |
| 	__reserved3 int32
 | |
| } /* sched.h:19:1 */
 | |
| 
 | |
| type timer_t = uintptr /* alltypes.h:217:14 */
 | |
| 
 | |
| type clock_t = int32 /* alltypes.h:227:14 */
 | |
| 
 | |
| type itimerspec = struct {
 | |
| 	it_interval struct {
 | |
| 		tv_sec  time_t
 | |
| 		tv_nsec int32
 | |
| 	}
 | |
| 	it_value struct {
 | |
| 		tv_sec  time_t
 | |
| 		tv_nsec int32
 | |
| 	}
 | |
| } /* time.h:80:1 */
 | |
| 
 | |
| type sigevent = struct {
 | |
| 	sigev_value struct {
 | |
| 		_         [0]uint64
 | |
| 		sival_int int32
 | |
| 		_         [4]byte
 | |
| 	}
 | |
| 	sigev_signo             int32
 | |
| 	sigev_notify            int32
 | |
| 	sigev_notify_function   uintptr
 | |
| 	sigev_notify_attributes uintptr
 | |
| 	__pad                   [44]int8
 | |
| 	_                       [4]byte
 | |
| } /* time.h:107:1 */
 | |
| 
 | |
| type __ptcb = struct {
 | |
| 	__f    uintptr
 | |
| 	__x    uintptr
 | |
| 	__next uintptr
 | |
| } /* alltypes.h:281:9 */
 | |
| 
 | |
| type sigaltstack = struct {
 | |
| 	ss_sp    uintptr
 | |
| 	ss_flags int32
 | |
| 	_        [4]byte
 | |
| 	ss_size  size_t
 | |
| } /* signal.h:44:9 */
 | |
| 
 | |
| type stack_t = sigaltstack /* signal.h:44:28 */
 | |
| 
 | |
| type greg_t = uint32        /* signal.h:10:23 */
 | |
| type gregset_t = [34]uint32 /* signal.h:11:23 */
 | |
| 
 | |
| type fpregset_t = struct {
 | |
| 	vregs [32]float64
 | |
| 	fpsr  uint32
 | |
| 	fpcr  uint32
 | |
| } /* signal.h:17:3 */
 | |
| type sigcontext = struct {
 | |
| 	fault_address uint32
 | |
| 	regs          [31]uint32
 | |
| 	sp            uint32
 | |
| 	pc            uint32
 | |
| 	pstate        uint32
 | |
| 	_             [4]byte
 | |
| 	__reserved    [256]float64
 | |
| } /* signal.h:18:9 */
 | |
| 
 | |
| type mcontext_t = sigcontext /* signal.h:23:3 */
 | |
| 
 | |
| type _aarch64_ctx = struct {
 | |
| 	magic uint32
 | |
| 	size  uint32
 | |
| } /* signal.h:29:1 */
 | |
| 
 | |
| type fpsimd_context = struct {
 | |
| 	head struct {
 | |
| 		magic uint32
 | |
| 		size  uint32
 | |
| 	}
 | |
| 	fpsr  uint32
 | |
| 	fpcr  uint32
 | |
| 	vregs [32]float64
 | |
| } /* signal.h:33:1 */
 | |
| 
 | |
| type esr_context = struct {
 | |
| 	head struct {
 | |
| 		magic uint32
 | |
| 		size  uint32
 | |
| 	}
 | |
| 	esr uint32
 | |
| } /* signal.h:39:1 */
 | |
| 
 | |
| type extra_context = struct {
 | |
| 	head struct {
 | |
| 		magic uint32
 | |
| 		size  uint32
 | |
| 	}
 | |
| 	datap      uint32
 | |
| 	size       uint32
 | |
| 	__reserved [3]uint32
 | |
| } /* signal.h:43:1 */
 | |
| 
 | |
| type sve_context = struct {
 | |
| 	head struct {
 | |
| 		magic uint32
 | |
| 		size  uint32
 | |
| 	}
 | |
| 	vl         uint16
 | |
| 	__reserved [3]uint16
 | |
| } /* signal.h:49:1 */
 | |
| 
 | |
| type __ucontext = struct {
 | |
| 	uc_flags    uint32
 | |
| 	_           [4]byte
 | |
| 	uc_link     uintptr
 | |
| 	uc_stack    stack_t
 | |
| 	uc_sigmask  sigset_t
 | |
| 	uc_mcontext mcontext_t
 | |
| } /* signal.h:99:9 */
 | |
| 
 | |
| type ucontext_t = __ucontext /* signal.h:105:3 */
 | |
| 
 | |
| type sigval = struct {
 | |
| 	_         [0]uint64
 | |
| 	sival_int int32
 | |
| 	_         [4]byte
 | |
| } /* time.h:107:1 */
 | |
| 
 | |
| type siginfo_t = struct {
 | |
| 	si_signo    int32
 | |
| 	si_errno    int32
 | |
| 	si_code     int32
 | |
| 	_           [4]byte
 | |
| 	__si_fields struct {
 | |
| 		_     [0]uint64
 | |
| 		__pad [116]int8
 | |
| 		_     [4]byte
 | |
| 	}
 | |
| } /* signal.h:145:3 */
 | |
| 
 | |
| type sigaction = struct {
 | |
| 	__sa_handler struct{ sa_handler uintptr }
 | |
| 	sa_mask      sigset_t
 | |
| 	sa_flags     int32
 | |
| 	_            [4]byte
 | |
| 	sa_restorer  uintptr
 | |
| } /* signal.h:167:1 */
 | |
| 
 | |
| type sig_t = uintptr /* signal.h:251:14 */
 | |
| 
 | |
| type sig_atomic_t = int32 /* signal.h:269:13 */
 | |
| 
 | |
| type mode_t = uint32 /* alltypes.h:160:18 */
 | |
| 
 | |
| type syscall_arg_t = int32 /* syscall.h:22:14 */
 | |
| 
 | |
| func a_ll(tls *TLS, p uintptr) int32 { /* atomic_arch.h:2:19: */
 | |
| 	var v int32
 | |
| 	panic(`arch\aarch64\atomic_arch.h:5:2: assembler statements not supported`)
 | |
| 	return v
 | |
| }
 | |
| 
 | |
| func a_sc(tls *TLS, p uintptr, v int32) int32 { /* atomic_arch.h:10:19: */
 | |
| 	var r int32
 | |
| 	panic(`arch\aarch64\atomic_arch.h:13:2: assembler statements not supported`)
 | |
| 	return BoolInt32(!(r != 0))
 | |
| }
 | |
| 
 | |
| func a_barrier(tls *TLS) { /* atomic_arch.h:18:20: */
 | |
| 	panic(`arch\aarch64\atomic_arch.h:20:2: assembler statements not supported`)
 | |
| }
 | |
| 
 | |
| func a_ll_p(tls *TLS, p uintptr) uintptr { /* atomic_arch.h:38:20: */
 | |
| 	var v uintptr
 | |
| 	panic(`arch\aarch64\atomic_arch.h:41:2: assembler statements not supported`)
 | |
| 	return v
 | |
| }
 | |
| 
 | |
| func a_sc_p(tls *TLS, p uintptr, v uintptr) int32 { /* atomic_arch.h:46:19: */
 | |
| 	var r int32
 | |
| 	panic(`arch\aarch64\atomic_arch.h:49:2: assembler statements not supported`)
 | |
| 	return BoolInt32(!(r != 0))
 | |
| }
 | |
| 
 | |
| func a_ctz_64(tls *TLS, x uint64_t) int32 { /* atomic_arch.h:68:19: */
 | |
| 	panic(`arch\aarch64\atomic_arch.h:70:2: assembler statements not supported`)
 | |
| 	return int32(x)
 | |
| }
 | |
| 
 | |
| func a_fetch_add(tls *TLS, p uintptr, v int32) int32 { /* atomic.h:46:19: */
 | |
| 	var old int32
 | |
| 
 | |
| 	for __ccgo := true; __ccgo; __ccgo = !(a_sc(tls, p, int32(uint32(old)+uint32(v))) != 0) {
 | |
| 		old = a_ll(tls, p)
 | |
| 	}
 | |
| 
 | |
| 	return old
 | |
| }
 | |
| 
 | |
| func a_fetch_and(tls *TLS, p uintptr, v int32) int32 { /* atomic.h:59:19: */
 | |
| 	var old int32
 | |
| 
 | |
| 	for __ccgo := true; __ccgo; __ccgo = !(a_sc(tls, p, old&v) != 0) {
 | |
| 		old = a_ll(tls, p)
 | |
| 	}
 | |
| 
 | |
| 	return old
 | |
| }
 | |
| 
 | |
| func a_fetch_or(tls *TLS, p uintptr, v int32) int32 { /* atomic.h:72:19: */
 | |
| 	var old int32
 | |
| 
 | |
| 	for __ccgo := true; __ccgo; __ccgo = !(a_sc(tls, p, old|v) != 0) {
 | |
| 		old = a_ll(tls, p)
 | |
| 	}
 | |
| 
 | |
| 	return old
 | |
| }
 | |
| 
 | |
| func a_and(tls *TLS, p uintptr, v int32) { /* atomic.h:151:20: */
 | |
| 	a_fetch_and(tls, p, v)
 | |
| }
 | |
| 
 | |
| func a_or(tls *TLS, p uintptr, v int32) { /* atomic.h:159:20: */
 | |
| 	a_fetch_or(tls, p, v)
 | |
| }
 | |
| 
 | |
| func a_or_64(tls *TLS, p uintptr, v uint64_t) { /* atomic.h:220:20: */
 | |
| 	bp := tls.Alloc(8)
 | |
| 	defer tls.Free(8)
 | |
| 
 | |
| 	*(*struct {
 | |
| 		v uint64_t
 | |
| 		_ [4]byte
 | |
| 	})(unsafe.Pointer(bp)) = func() (r struct {
 | |
| 		v uint64_t
 | |
| 		_ [4]byte
 | |
| 	}) {
 | |
| 		*(*uint64_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&r)) + 0)) = v
 | |
| 		return r
 | |
| 	}()
 | |
| 	if *(*uint32_t)(unsafe.Pointer(bp)) != 0 {
 | |
| 		a_or(tls, p, int32(*(*uint32_t)(unsafe.Pointer(bp))))
 | |
| 	}
 | |
| 	if *(*uint32_t)(unsafe.Pointer(bp + 1*4)) != 0 {
 | |
| 		a_or(tls, p+uintptr(1)*4, int32(*(*uint32_t)(unsafe.Pointer(bp + 1*4))))
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func a_ctz_32(tls *TLS, x uint32_t) int32 { /* atomic.h:256:19: */
 | |
| 	return int32(_sdebruijn32[x&-x*uint32_t(0x076be629)>>27])
 | |
| }
 | |
| 
 | |
| var _sdebruijn32 = [32]int8{
 | |
| 	int8(0), int8(1), int8(23), int8(2), int8(29), int8(24), int8(19), int8(3), int8(30), int8(27), int8(25), int8(11), int8(20), int8(8), int8(4), int8(13),
 | |
| 	int8(31), int8(22), int8(28), int8(18), int8(26), int8(10), int8(7), int8(12), int8(21), int8(17), int8(9), int8(6), int8(16), int8(5), int8(15), int8(14),
 | |
| } /* atomic.h:261:20 */
 | |
| 
 | |
| type __timer = struct {
 | |
| 	timerid int32
 | |
| 	_       [4]byte
 | |
| 	thread  pthread_t
 | |
| } /* pthread_impl.h:64:1 */
 | |
| 
 | |
| func __pthread_self(tls *TLS) uintptr { /* pthread_arch.h:1:30: */
 | |
| 	var self uintptr
 | |
| 	panic(`arch\aarch64\pthread_arch.h:4:2: assembler statements not supported`)
 | |
| 	return self - uintptr(uint64(unsafe.Sizeof(__pthread{})))
 | |
| }
 | |
| 
 | |
| func Xwcrtomb(tls *TLS, s uintptr, wc wchar_t, st uintptr) size_t { /* wcrtomb.c:6:8: */
 | |
| 	if __ccgo_strace {
 | |
| 		trc("tls=%v s=%v wc=%v st=%v, (%v:)", tls, s, wc, st, origin(2))
 | |
| 	}
 | |
| 	if !(s != 0) {
 | |
| 		return uint64(1)
 | |
| 	}
 | |
| 	if uint32(wc) < uint32(0x80) {
 | |
| 		*(*int8)(unsafe.Pointer(s)) = int8(wc)
 | |
| 		return uint64(1)
 | |
| 	} else if func() int32 {
 | |
| 		if !!(int32(*(*uintptr)(unsafe.Pointer((*__pthread)(unsafe.Pointer(__pthread_self(tls))).locale))) != 0) {
 | |
| 			return 4
 | |
| 		}
 | |
| 		return 1
 | |
| 	}() == 1 {
 | |
| 		if !(uint32(wc)-uint32(0xdf80) < uint32(0x80)) {
 | |
| 			*(*int32)(unsafe.Pointer(X___errno_location(tls))) = 84
 | |
| 			return Uint64FromInt32(-1)
 | |
| 		}
 | |
| 		*(*int8)(unsafe.Pointer(s)) = int8(wc)
 | |
| 		return uint64(1)
 | |
| 	} else if uint32(wc) < uint32(0x800) {
 | |
| 		*(*int8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = int8(0xc0 | int32(wc)>>6)
 | |
| 		*(*int8)(unsafe.Pointer(s)) = int8(0x80 | int32(wc)&0x3f)
 | |
| 		return uint64(2)
 | |
| 	} else if uint32(wc) < uint32(0xd800) || uint32(wc)-uint32(0xe000) < uint32(0x2000) {
 | |
| 		*(*int8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = int8(0xe0 | int32(wc)>>12)
 | |
| 		*(*int8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = int8(0x80 | int32(wc)>>6&0x3f)
 | |
| 		*(*int8)(unsafe.Pointer(s)) = int8(0x80 | int32(wc)&0x3f)
 | |
| 		return uint64(3)
 | |
| 	} else if uint32(wc)-uint32(0x10000) < uint32(0x100000) {
 | |
| 		*(*int8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = int8(0xf0 | int32(wc)>>18)
 | |
| 		*(*int8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = int8(0x80 | int32(wc)>>12&0x3f)
 | |
| 		*(*int8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = int8(0x80 | int32(wc)>>6&0x3f)
 | |
| 		*(*int8)(unsafe.Pointer(s)) = int8(0x80 | int32(wc)&0x3f)
 | |
| 		return uint64(4)
 | |
| 	}
 | |
| 	*(*int32)(unsafe.Pointer(X___errno_location(tls))) = 84
 | |
| 	return Uint64FromInt32(-1)
 | |
| }
 | |
| 
 | |
| func Xwcsrtombs(tls *TLS, s uintptr, ws uintptr, n size_t, st uintptr) size_t { /* wcsrtombs.c:3:8: */
 | |
| 	if __ccgo_strace {
 | |
| 		trc("tls=%v s=%v ws=%v n=%v st=%v, (%v:)", tls, s, ws, n, st, origin(2))
 | |
| 	}
 | |
| 	bp := tls.Alloc(4)
 | |
| 	defer tls.Free(4)
 | |
| 
 | |
| 	var ws2 uintptr
 | |
| 	// var buf [4]int8 at bp, 4
 | |
| 
 | |
| 	var N size_t = n
 | |
| 	var l size_t
 | |
| 	if !(s != 0) {
 | |
| 		n = uint64(0)
 | |
| 		ws2 = *(*uintptr)(unsafe.Pointer(ws))
 | |
| 		for ; *(*wchar_t)(unsafe.Pointer(ws2)) != 0; ws2 += 2 {
 | |
| 			if uint32(*(*wchar_t)(unsafe.Pointer(ws2))) >= 0x80 {
 | |
| 				l = Xwcrtomb(tls, bp, *(*wchar_t)(unsafe.Pointer(ws2)), uintptr(0))
 | |
| 				if !(l+uint64(1) != 0) {
 | |
| 					return Uint64FromInt32(-1)
 | |
| 				}
 | |
| 				n = n + l
 | |
| 			} else {
 | |
| 				n++
 | |
| 			}
 | |
| 		}
 | |
| 		return n
 | |
| 	}
 | |
| 	for n >= uint64(4) {
 | |
| 		if uint32(*(*wchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws)))))-1 >= 0x7f {
 | |
| 			if !(int32(*(*wchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws))))) != 0) {
 | |
| 				*(*int8)(unsafe.Pointer(s)) = int8(0)
 | |
| 				*(*uintptr)(unsafe.Pointer(ws)) = uintptr(0)
 | |
| 				return N - n
 | |
| 			}
 | |
| 			l = Xwcrtomb(tls, s, *(*wchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws)))), uintptr(0))
 | |
| 			if !(l+uint64(1) != 0) {
 | |
| 				return Uint64FromInt32(-1)
 | |
| 			}
 | |
| 			s += uintptr(l)
 | |
| 			n = n - l
 | |
| 		} else {
 | |
| 			*(*int8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = int8(*(*wchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws)))))
 | |
| 			n--
 | |
| 		}
 | |
| 		*(*uintptr)(unsafe.Pointer(ws)) += 2
 | |
| 	}
 | |
| 	for n != 0 {
 | |
| 		if uint32(*(*wchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws)))))-1 >= 0x7f {
 | |
| 			if !(int32(*(*wchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws))))) != 0) {
 | |
| 				*(*int8)(unsafe.Pointer(s)) = int8(0)
 | |
| 				*(*uintptr)(unsafe.Pointer(ws)) = uintptr(0)
 | |
| 				return N - n
 | |
| 			}
 | |
| 			l = Xwcrtomb(tls, bp, *(*wchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws)))), uintptr(0))
 | |
| 			if !(l+uint64(1) != 0) {
 | |
| 				return Uint64FromInt32(-1)
 | |
| 			}
 | |
| 			if l > n {
 | |
| 				return N - n
 | |
| 			}
 | |
| 			Xwcrtomb(tls, s, *(*wchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws)))), uintptr(0))
 | |
| 			s += uintptr(l)
 | |
| 			n = n - l
 | |
| 		} else {
 | |
| 			*(*int8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = int8(*(*wchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws)))))
 | |
| 			n--
 | |
| 		}
 | |
| 		*(*uintptr)(unsafe.Pointer(ws)) += 2
 | |
| 	}
 | |
| 	return N
 | |
| }
 | |
| 
 | |
| func Xwcstombs(tls *TLS, s uintptr, ws uintptr, n size_t) size_t { /* wcstombs.c:4:8: */
 | |
| 	if __ccgo_strace {
 | |
| 		trc("tls=%v s=%v ws=%v n=%v, (%v:)", tls, s, ws, n, origin(2))
 | |
| 	}
 | |
| 	bp := tls.Alloc(8)
 | |
| 	defer tls.Free(8)
 | |
| 	*(*uintptr)(unsafe.Pointer(bp)) = ws
 | |
| 
 | |
| 	//TODO return wcsrtombs(s, &(const wchar_t *){ws}, n, 0);
 | |
| 	return Xwcsrtombs(tls, s, bp, n, uintptr(0))
 | |
| }
 | |
| 
 | |
| func Xbsearch(tls *TLS, key uintptr, base uintptr, nel size_t, width size_t, cmp uintptr) uintptr { /* bsearch.c:3:6: */
 | |
| 	if __ccgo_strace {
 | |
| 		trc("tls=%v key=%v base=%v nel=%v width=%v cmp=%v, (%v:)", tls, key, base, nel, width, cmp, origin(2))
 | |
| 	}
 | |
| 	var try uintptr
 | |
| 	var sign int32
 | |
| 	for nel > uint64(0) {
 | |
| 		try = base + uintptr(width*(nel/uint64(2)))
 | |
| 		sign = (*struct {
 | |
| 			f func(*TLS, uintptr, uintptr) int32
 | |
| 		})(unsafe.Pointer(&struct{ uintptr }{cmp})).f(tls, key, try)
 | |
| 		if sign < 0 {
 | |
| 			nel = nel / uint64(2)
 | |
| 		} else if sign > 0 {
 | |
| 			base = try + uintptr(width)
 | |
| 			nel = nel - (nel/uint64(2) + uint64(1))
 | |
| 		} else {
 | |
| 			return try
 | |
| 		}
 | |
| 	}
 | |
| 	return uintptr(0)
 | |
| }
 | |
| 
 | |
| // Support signed or unsigned plain-char
 | |
| 
 | |
| // Implementation choices...
 | |
| 
 | |
| // Arbitrary numbers...
 | |
| 
 | |
| // POSIX/SUS requirements follow. These numbers come directly
 | |
| // from SUS and have nothing to do with the host system.
 | |
| 
 | |
| func X__strchrnul(tls *TLS, s uintptr, c int32) uintptr { /* strchrnul.c:10:6: */
 | |
| 	if __ccgo_strace {
 | |
| 		trc("tls=%v s=%v c=%v, (%v:)", tls, s, c, origin(2))
 | |
| 	}
 | |
| 	c = int32(uint8(c))
 | |
| 	if !(c != 0) {
 | |
| 		return s + uintptr(Xstrlen(tls, s))
 | |
| 	}
 | |
| 	var w uintptr
 | |
| 	for ; uint64(s)%uint64(unsafe.Sizeof(size_t(0))) != 0; s++ {
 | |
| 		if !(int32(*(*int8)(unsafe.Pointer(s))) != 0) || int32(*(*uint8)(unsafe.Pointer(s))) == c {
 | |
| 			return s
 | |
| 		}
 | |
| 	}
 | |
| 	var k size_t = Uint64(Uint64FromInt32(-1)) / uint64(255) * size_t(c)
 | |
| 	for w = s; !((*(*uint64)(unsafe.Pointer(w))-Uint64(Uint64FromInt32(-1))/uint64(255)) & ^*(*uint64)(unsafe.Pointer(w)) & (Uint64(Uint64FromInt32(-1))/uint64(255)*uint64(255/2+1)) != 0) && !((*(*uint64)(unsafe.Pointer(w))^k-Uint64(Uint64FromInt32(-1))/uint64(255)) & ^(*(*uint64)(unsafe.Pointer(w))^k) & (Uint64(Uint64FromInt32(-1))/uint64(255)*uint64(255/2+1)) != 0); w += 8 {
 | |
| 	}
 | |
| 	s = w
 | |
| 	for ; *(*int8)(unsafe.Pointer(s)) != 0 && int32(*(*uint8)(unsafe.Pointer(s))) != c; s++ {
 | |
| 	}
 | |
| 	return s
 | |
| }
 | |
| 
 | |
| func Xstrdup(tls *TLS, s uintptr) uintptr { /* strdup.c:4:6: */
 | |
| 	if __ccgo_strace {
 | |
| 		trc("tls=%v s=%v, (%v:)", tls, s, origin(2))
 | |
| 	}
 | |
| 	var l size_t = Xstrlen(tls, s)
 | |
| 	var d uintptr = Xmalloc(tls, l+uint64(1))
 | |
| 	if !(d != 0) {
 | |
| 		return uintptr(0)
 | |
| 	}
 | |
| 	return Xmemcpy(tls, d, s, l+uint64(1))
 | |
| }
 |