source: code/trunk/vendor/modernc.org/libc/musl_windows_386.go@ 823

Last change on this file since 823 was 822, checked in by yakumo.izuru, 22 months ago

Prefer immortal.run over runit and rc.d, use vendored modules
for convenience.

Signed-off-by: Izuru Yakumo <yakumo.izuru@…>

File size: 30.2 KB
Line 
1// Code generated by 'ccgo -D__environ=environ -export-externs X -hide __syscall0,__syscall1,__syscall2,__syscall3,__syscall4,__syscall5,__syscall6 -nostdinc -nostdlib -o ../musl_windows_386.go -pkgname libc -static-locals-prefix _s -Iarch/i386 -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/string/strchrnul.c src/string/strdup.c', DO NOT EDIT.
2
3package libc
4
5import (
6 "math"
7 "reflect"
8 "sync/atomic"
9 "unsafe"
10)
11
12var _ = math.Pi
13var _ reflect.Kind
14var _ atomic.Value
15var _ unsafe.Pointer
16
17// musl as a whole is licensed under the following standard MIT license:
18//
19// ----------------------------------------------------------------------
20// Copyright © 2005-2020 Rich Felker, et al.
21//
22// Permission is hereby granted, free of charge, to any person obtaining
23// a copy of this software and associated documentation files (the
24// "Software"), to deal in the Software without restriction, including
25// without limitation the rights to use, copy, modify, merge, publish,
26// distribute, sublicense, and/or sell copies of the Software, and to
27// permit persons to whom the Software is furnished to do so, subject to
28// the following conditions:
29//
30// The above copyright notice and this permission notice shall be
31// included in all copies or substantial portions of the Software.
32//
33// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
34// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
35// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
36// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
37// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
38// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
39// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
40// ----------------------------------------------------------------------
41//
42// Authors/contributors include:
43//
44// A. Wilcox
45// Ada Worcester
46// Alex Dowad
47// Alex Suykov
48// Alexander Monakov
49// Andre McCurdy
50// Andrew Kelley
51// Anthony G. Basile
52// Aric Belsito
53// Arvid Picciani
54// Bartosz Brachaczek
55// Benjamin Peterson
56// Bobby Bingham
57// Boris Brezillon
58// Brent Cook
59// Chris Spiegel
60// Clément Vasseur
61// Daniel Micay
62// Daniel Sabogal
63// Daurnimator
64// David Carlier
65// David Edelsohn
66// Denys Vlasenko
67// Dmitry Ivanov
68// Dmitry V. Levin
69// Drew DeVault
70// Emil Renner Berthing
71// Fangrui Song
72// Felix Fietkau
73// Felix Janda
74// Gianluca Anzolin
75// Hauke Mehrtens
76// He X
77// Hiltjo Posthuma
78// Isaac Dunham
79// Jaydeep Patil
80// Jens Gustedt
81// Jeremy Huntwork
82// Jo-Philipp Wich
83// Joakim Sindholt
84// John Spencer
85// Julien Ramseier
86// Justin Cormack
87// Kaarle Ritvanen
88// Khem Raj
89// Kylie McClain
90// Leah Neukirchen
91// Luca Barbato
92// Luka Perkov
93// M Farkas-Dyck (Strake)
94// Mahesh Bodapati
95// Markus Wichmann
96// Masanori Ogino
97// Michael Clark
98// Michael Forney
99// Mikhail Kremnyov
100// Natanael Copa
101// Nicholas J. Kain
102// orc
103// Pascal Cuoq
104// Patrick Oppenlander
105// Petr Hosek
106// Petr Skocik
107// Pierre Carrier
108// Reini Urban
109// Rich Felker
110// Richard Pennington
111// Ryan Fairfax
112// Samuel Holland
113// Segev Finer
114// Shiz
115// sin
116// Solar Designer
117// Stefan Kristiansson
118// Stefan O'Rear
119// Szabolcs Nagy
120// Timo Teräs
121// Trutz Behn
122// Valentin Ochs
123// Will Dietz
124// William Haddon
125// William Pitcock
126//
127// Portions of this software are derived from third-party works licensed
128// under terms compatible with the above MIT license:
129//
130// The TRE regular expression implementation (src/regex/reg* and
131// src/regex/tre*) is Copyright © 2001-2008 Ville Laurikari and licensed
132// under a 2-clause BSD license (license text in the source files). The
133// included version has been heavily modified by Rich Felker in 2012, in
134// the interests of size, simplicity, and namespace cleanliness.
135//
136// Much of the math library code (src/math/* and src/complex/*) is
137// Copyright © 1993,2004 Sun Microsystems or
138// Copyright © 2003-2011 David Schultz or
139// Copyright © 2003-2009 Steven G. Kargl or
140// Copyright © 2003-2009 Bruce D. Evans or
141// Copyright © 2008 Stephen L. Moshier or
142// Copyright © 2017-2018 Arm Limited
143// and labelled as such in comments in the individual source files. All
144// have been licensed under extremely permissive terms.
145//
146// The ARM memcpy code (src/string/arm/memcpy.S) is Copyright © 2008
147// The Android Open Source Project and is licensed under a two-clause BSD
148// license. It was taken from Bionic libc, used on Android.
149//
150// The AArch64 memcpy and memset code (src/string/aarch64/*) are
151// Copyright © 1999-2019, Arm Limited.
152//
153// The implementation of DES for crypt (src/crypt/crypt_des.c) is
154// Copyright © 1994 David Burren. It is licensed under a BSD license.
155//
156// The implementation of blowfish crypt (src/crypt/crypt_blowfish.c) was
157// originally written by Solar Designer and placed into the public
158// domain. The code also comes with a fallback permissive license for use
159// in jurisdictions that may not recognize the public domain.
160//
161// The smoothsort implementation (src/stdlib/qsort.c) is Copyright © 2011
162// Valentin Ochs and is licensed under an MIT-style license.
163//
164// The x86_64 port was written by Nicholas J. Kain and is licensed under
165// the standard MIT terms.
166//
167// The mips and microblaze ports were originally written by Richard
168// Pennington for use in the ellcc project. The original code was adapted
169// by Rich Felker for build system and code conventions during upstream
170// integration. It is licensed under the standard MIT terms.
171//
172// The mips64 port was contributed by Imagination Technologies and is
173// licensed under the standard MIT terms.
174//
175// The powerpc port was also originally written by Richard Pennington,
176// and later supplemented and integrated by John Spencer. It is licensed
177// under the standard MIT terms.
178//
179// All other files which have no copyright comments are original works
180// produced specifically for use as part of this library, written either
181// by Rich Felker, the main author of the library, or by one or more
182// contibutors listed above. Details on authorship of individual files
183// can be found in the git version control history of the project. The
184// omission of copyright and license comments in each file is in the
185// interest of source tree size.
186//
187// In addition, permission is hereby granted for all public header files
188// (include/* and arch/*/bits/*) and crt files intended to be linked into
189// applications (crt/*, ldso/dlstart.c, and arch/*/crt_arch.h) to omit
190// the copyright notice and permission notice otherwise required by the
191// license, and to use these files without any requirement of
192// attribution. These files include substantial contributions from:
193//
194// Bobby Bingham
195// John Spencer
196// Nicholas J. Kain
197// Rich Felker
198// Richard Pennington
199// Stefan Kristiansson
200// Szabolcs Nagy
201//
202// all of whom have explicitly granted such permission.
203//
204// This file previously contained text expressing a belief that most of
205// the files covered by the above exception were sufficiently trivial not
206// to be subject to copyright, resulting in confusion over whether it
207// negated the permissions granted in the license. In the spirit of
208// permissive licensing, and of not having licensing issues being an
209// obstacle to adoption, that text has been removed.
210const ( /* copyright.c:194:1: */
211 __musl__copyright__ = 0
212)
213
214const ( /* pthread_impl.h:58:1: */
215 DT_EXITING = 0
216 DT_JOINABLE = 1
217 DT_DETACHED = 2
218)
219
220type ptrdiff_t = int32 /* <builtin>:3:26 */
221
222type size_t = uint32 /* <builtin>:9:23 */
223
224type wchar_t = uint16 /* <builtin>:15:24 */
225
226type va_list = uintptr /* <builtin>:50:27 */
227
228type __locale_struct = struct{ cat [6]uintptr } /* alltypes.h:366:9 */
229
230type locale_t = uintptr /* alltypes.h:366:32 */
231
232func Xisalnum(tls *TLS, c int32) int32 { /* isalnum.c:3:5: */
233 return Bool32(func() int32 {
234 if 0 != 0 {
235 return Xisalpha(tls, c)
236 }
237 return Bool32(uint32(c)|uint32(32)-uint32('a') < uint32(26))
238 }() != 0 || func() int32 {
239 if 0 != 0 {
240 return Xisdigit(tls, c)
241 }
242 return Bool32(uint32(c)-uint32('0') < uint32(10))
243 }() != 0)
244}
245
246func X__isalnum_l(tls *TLS, c int32, l locale_t) int32 { /* isalnum.c:8:5: */
247 return Xisalnum(tls, c)
248}
249
250func Xisalpha(tls *TLS, c int32) int32 { /* isalpha.c:4:5: */
251 return Bool32(uint32(c)|uint32(32)-uint32('a') < uint32(26))
252}
253
254func X__isalpha_l(tls *TLS, c int32, l locale_t) int32 { /* isalpha.c:9:5: */
255 return Xisalpha(tls, c)
256}
257
258func Xisdigit(tls *TLS, c int32) int32 { /* isdigit.c:4:5: */
259 return Bool32(uint32(c)-uint32('0') < uint32(10))
260}
261
262func X__isdigit_l(tls *TLS, c int32, l locale_t) int32 { /* isdigit.c:9:5: */
263 return Xisdigit(tls, c)
264}
265
266func Xislower(tls *TLS, c int32) int32 { /* islower.c:4:5: */
267 return Bool32(uint32(c)-uint32('a') < uint32(26))
268}
269
270func X__islower_l(tls *TLS, c int32, l locale_t) int32 { /* islower.c:9:5: */
271 return Xislower(tls, c)
272}
273
274func Xisprint(tls *TLS, c int32) int32 { /* isprint.c:4:5: */
275 return Bool32(uint32(c)-uint32(0x20) < uint32(0x5f))
276}
277
278func X__isprint_l(tls *TLS, c int32, l locale_t) int32 { /* isprint.c:9:5: */
279 return Xisprint(tls, c)
280}
281
282func Xisspace(tls *TLS, c int32) int32 { /* isspace.c:4:5: */
283 return Bool32(c == ' ' || uint32(c)-uint32('\t') < uint32(5))
284}
285
286func X__isspace_l(tls *TLS, c int32, l locale_t) int32 { /* isspace.c:9:5: */
287 return Xisspace(tls, c)
288}
289
290func Xisxdigit(tls *TLS, c int32) int32 { /* isxdigit.c:3:5: */
291 return Bool32(func() int32 {
292 if 0 != 0 {
293 return Xisdigit(tls, c)
294 }
295 return Bool32(uint32(c)-uint32('0') < uint32(10))
296 }() != 0 || uint32(c)|uint32(32)-uint32('a') < uint32(6))
297}
298
299func X__isxdigit_l(tls *TLS, c int32, l locale_t) int32 { /* isxdigit.c:8:5: */
300 return Xisxdigit(tls, c)
301}
302
303type div_t = struct {
304 quot int32
305 rem int32
306} /* stdlib.h:62:35 */
307type ldiv_t = struct {
308 quot int32
309 rem int32
310} /* stdlib.h:63:36 */
311type lldiv_t = struct {
312 quot int64
313 rem int64
314} /* stdlib.h:64:41 */
315
316type ssize_t = int32 /* alltypes.h:88:15 */
317
318type intptr_t = int32 /* alltypes.h:93:15 */
319
320type off_t = int64 /* alltypes.h:185:16 */
321
322type pid_t = int32 /* alltypes.h:258:13 */
323
324type uid_t = uint32 /* alltypes.h:268:18 */
325
326type gid_t = uint32 /* alltypes.h:273:18 */
327
328type useconds_t = uint32 /* alltypes.h:283:18 */
329
330func X__putenv(tls *TLS, s uintptr, l size_t, r uintptr) int32 { /* putenv.c:8:5: */
331 var i size_t
332 var newenv uintptr
333 var tmp uintptr
334 //TODO for (char **e = __environ; *e; e++, i++)
335 var e uintptr
336 i = size_t(0)
337 if !(Environ() != 0) {
338 goto __1
339 }
340 //TODO for (char **e = __environ; *e; e++, i++)
341 e = Environ()
342__2:
343 if !(*(*uintptr)(unsafe.Pointer(e)) != 0) {
344 goto __4
345 }
346 if !!(Xstrncmp(tls, s, *(*uintptr)(unsafe.Pointer(e)), l+size_t(1)) != 0) {
347 goto __5
348 }
349 tmp = *(*uintptr)(unsafe.Pointer(e))
350 *(*uintptr)(unsafe.Pointer(e)) = s
351 X__env_rm_add(tls, tmp, r)
352 return 0
353__5:
354 ;
355 goto __3
356__3:
357 e += 4
358 i++
359 goto __2
360 goto __4
361__4:
362 ;
363__1:
364 ;
365 if !(Environ() == _soldenv) {
366 goto __6
367 }
368 newenv = Xrealloc(tls, _soldenv, uint32(unsafe.Sizeof(uintptr(0)))*(i+size_t(2)))
369 if !!(newenv != 0) {
370 goto __8
371 }
372 goto oom
373__8:
374 ;
375 goto __7
376__6:
377 newenv = Xmalloc(tls, uint32(unsafe.Sizeof(uintptr(0)))*(i+size_t(2)))
378 if !!(newenv != 0) {
379 goto __9
380 }
381 goto oom
382__9:
383 ;
384 if !(i != 0) {
385 goto __10
386 }
387 Xmemcpy(tls, newenv, Environ(), uint32(unsafe.Sizeof(uintptr(0)))*i)
388__10:
389 ;
390 Xfree(tls, _soldenv)
391__7:
392 ;
393 *(*uintptr)(unsafe.Pointer(newenv + uintptr(i)*4)) = s
394 *(*uintptr)(unsafe.Pointer(newenv + uintptr(i+size_t(1))*4)) = uintptr(0)
395 *(*uintptr)(unsafe.Pointer(EnvironP())) = AssignPtrUintptr(uintptr(unsafe.Pointer(&_soldenv)), newenv)
396 if !(r != 0) {
397 goto __11
398 }
399 X__env_rm_add(tls, uintptr(0), r)
400__11:
401 ;
402 return 0
403oom:
404 Xfree(tls, r)
405 return -1
406}
407
408var _soldenv uintptr /* putenv.c:22:14: */
409
410func Xputenv(tls *TLS, s uintptr) int32 { /* putenv.c:43:5: */
411 var l size_t = size_t((int32(X__strchrnul(tls, s, '=')) - int32(s)) / 1)
412 if !(l != 0) || !(int32(*(*int8)(unsafe.Pointer(s + uintptr(l)))) != 0) {
413 return Xunsetenv(tls, s)
414 }
415 return X__putenv(tls, s, l, uintptr(0))
416}
417
418func X__env_rm_add(tls *TLS, old uintptr, new uintptr) { /* setenv.c:5:6: */
419 //TODO for (size_t i=0; i < env_alloced_n; i++)
420 var i size_t = size_t(0)
421 for ; i < _senv_alloced_n; i++ {
422 if *(*uintptr)(unsafe.Pointer(_senv_alloced + uintptr(i)*4)) == old {
423 *(*uintptr)(unsafe.Pointer(_senv_alloced + uintptr(i)*4)) = new
424 Xfree(tls, old)
425 return
426 } else if !(int32(*(*uintptr)(unsafe.Pointer(_senv_alloced + uintptr(i)*4))) != 0) && new != 0 {
427 *(*uintptr)(unsafe.Pointer(_senv_alloced + uintptr(i)*4)) = new
428 new = uintptr(0)
429 }
430 }
431 if !(new != 0) {
432 return
433 }
434 var t uintptr = Xrealloc(tls, _senv_alloced, uint32(unsafe.Sizeof(uintptr(0)))*(_senv_alloced_n+size_t(1)))
435 if !(t != 0) {
436 return
437 }
438 *(*uintptr)(unsafe.Pointer(AssignPtrUintptr(uintptr(unsafe.Pointer(&_senv_alloced)), t) + uintptr(PostIncUint32(&_senv_alloced_n, 1))*4)) = new
439}
440
441var _senv_alloced uintptr /* setenv.c:7:14: */
442var _senv_alloced_n size_t /* setenv.c:8:16: */
443
444func Xsetenv(tls *TLS, var1 uintptr, value uintptr, overwrite int32) int32 { /* setenv.c:26:5: */
445 var s uintptr
446 var l1 size_t
447 var l2 size_t
448
449 if !(var1 != 0) || !(int32(AssignUint32(&l1, size_t((int32(X__strchrnul(tls, var1, '='))-int32(var1))/1))) != 0) || *(*int8)(unsafe.Pointer(var1 + uintptr(l1))) != 0 {
450 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 22
451 return -1
452 }
453 if !(overwrite != 0) && Xgetenv(tls, var1) != 0 {
454 return 0
455 }
456
457 l2 = Xstrlen(tls, value)
458 s = Xmalloc(tls, l1+l2+size_t(2))
459 if !(s != 0) {
460 return -1
461 }
462 Xmemcpy(tls, s, var1, l1)
463 *(*int8)(unsafe.Pointer(s + uintptr(l1))) = int8('=')
464 Xmemcpy(tls, s+uintptr(l1)+uintptr(1), value, l2+size_t(1))
465 return X__putenv(tls, s, l1, s)
466}
467
468func Xunsetenv(tls *TLS, name uintptr) int32 { /* unsetenv.c:9:5: */
469 var l size_t = size_t((int32(X__strchrnul(tls, name, '=')) - int32(name)) / 1)
470 if !(l != 0) || *(*int8)(unsafe.Pointer(name + uintptr(l))) != 0 {
471 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 22
472 return -1
473 }
474 if Environ() != 0 {
475 var e uintptr = Environ()
476 var eo uintptr = e
477 for ; *(*uintptr)(unsafe.Pointer(e)) != 0; e += 4 {
478 //TODO if (!strncmp(name, *e, l) && l[*e] == '=')
479 if !(Xstrncmp(tls, name, *(*uintptr)(unsafe.Pointer(e)), l) != 0) && int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(e)) + uintptr(l)))) == '=' {
480 X__env_rm_add(tls, *(*uintptr)(unsafe.Pointer(e)), uintptr(0))
481 } else if eo != e {
482 *(*uintptr)(unsafe.Pointer(PostIncUintptr(&eo, 4))) = *(*uintptr)(unsafe.Pointer(e))
483 } else {
484 eo += 4
485 }
486 }
487 if eo != e {
488 *(*uintptr)(unsafe.Pointer(eo)) = uintptr(0)
489 }
490 }
491 return 0
492}
493
494type wint_t = uint32 /* alltypes.h:221:18 */
495
496type wctype_t = uint32 /* alltypes.h:226:23 */
497
498type __mbstate_t = struct {
499 __opaque1 uint32
500 __opaque2 uint32
501} /* alltypes.h:360:9 */
502
503type mbstate_t = __mbstate_t /* alltypes.h:360:63 */
504
505type tm = struct {
506 tm_sec int32
507 tm_min int32
508 tm_hour int32
509 tm_mday int32
510 tm_mon int32
511 tm_year int32
512 tm_wday int32
513 tm_yday int32
514 tm_isdst int32
515 tm_gmtoff int32
516 tm_zone uintptr
517} /* wchar.h:138:1 */
518
519type uintptr_t = uint32 /* alltypes.h:78:24 */
520
521type int8_t = int8 /* alltypes.h:119:25 */
522
523type int16_t = int16 /* alltypes.h:124:25 */
524
525type int32_t = int32 /* alltypes.h:129:25 */
526
527type int64_t = int64 /* alltypes.h:134:25 */
528
529type intmax_t = int64 /* alltypes.h:139:25 */
530
531type uint8_t = uint8 /* alltypes.h:144:25 */
532
533type uint16_t = uint16 /* alltypes.h:149:25 */
534
535type uint32_t = uint32 /* alltypes.h:154:25 */
536
537type uint64_t = uint64 /* alltypes.h:159:25 */
538
539type uintmax_t = uint64 /* alltypes.h:169:25 */
540
541type int_fast8_t = int8_t /* stdint.h:22:16 */
542type int_fast64_t = int64_t /* stdint.h:23:17 */
543
544type int_least8_t = int8_t /* stdint.h:25:17 */
545type int_least16_t = int16_t /* stdint.h:26:17 */
546type int_least32_t = int32_t /* stdint.h:27:17 */
547type int_least64_t = int64_t /* stdint.h:28:17 */
548
549type uint_fast8_t = uint8_t /* stdint.h:30:17 */
550type uint_fast64_t = uint64_t /* stdint.h:31:18 */
551
552type uint_least8_t = uint8_t /* stdint.h:33:18 */
553type uint_least16_t = uint16_t /* stdint.h:34:18 */
554type uint_least32_t = uint32_t /* stdint.h:35:18 */
555type uint_least64_t = uint64_t /* stdint.h:36:18 */
556
557type int_fast16_t = int32_t /* stdint.h:1:17 */
558type int_fast32_t = int32_t /* stdint.h:2:17 */
559type uint_fast16_t = uint32_t /* stdint.h:3:18 */
560type uint_fast32_t = uint32_t /* stdint.h:4:18 */
561
562// Upper 6 state bits are a negative integer offset to bound-check next byte
563// equivalent to: ( (b-0x80) | (b+offset) ) & ~0x3f
564
565// Interval [a,b). Either a must be 80 or b must be c0, lower 3 bits clear.
566
567// Arbitrary encoding for representing code units instead of characters.
568
569// Get inline definition of MB_CUR_MAX.
570
571type lconv = struct {
572 decimal_point uintptr
573 thousands_sep uintptr
574 grouping uintptr
575 int_curr_symbol uintptr
576 currency_symbol uintptr
577 mon_decimal_point uintptr
578 mon_thousands_sep uintptr
579 mon_grouping uintptr
580 positive_sign uintptr
581 negative_sign uintptr
582 int_frac_digits int8
583 frac_digits int8
584 p_cs_precedes int8
585 p_sep_by_space int8
586 n_cs_precedes int8
587 n_sep_by_space int8
588 p_sign_posn int8
589 n_sign_posn int8
590 int_p_cs_precedes int8
591 int_p_sep_by_space int8
592 int_n_cs_precedes int8
593 int_n_sep_by_space int8
594 int_p_sign_posn int8
595 int_n_sign_posn int8
596 _ [2]byte
597} /* locale.h:24:1 */
598
599type _G_fpos64_t = struct {
600 _ [0]uint64
601 __opaque [16]int8
602} /* stdio.h:54:9 */
603
604type fpos_t = _G_fpos64_t /* stdio.h:58:3 */
605
606// Support signed or unsigned plain-char
607
608// Implementation choices...
609
610// Arbitrary numbers...
611
612// POSIX/SUS requirements follow. These numbers come directly
613// from SUS and have nothing to do with the host system.
614
615type __locale_map = struct {
616 __map uintptr
617 map_size size_t
618 name [24]int8
619 next uintptr
620} /* alltypes.h:366:9 */
621
622type tls_module = struct {
623 next uintptr
624 image uintptr
625 len size_t
626 size size_t
627 align size_t
628 offset size_t
629} /* libc.h:14:1 */
630
631type __libc = struct {
632 can_do_threads int8
633 threaded int8
634 secure int8
635 need_locks int8
636 threads_minus_1 int32
637 auxv uintptr
638 tls_head uintptr
639 tls_size size_t
640 tls_align size_t
641 tls_cnt size_t
642 page_size size_t
643 global_locale struct{ cat [6]uintptr }
644} /* libc.h:20:1 */
645
646type time_t = int64 /* alltypes.h:108:16 */
647
648type clockid_t = int32 /* alltypes.h:237:13 */
649
650type timespec = struct {
651 tv_sec time_t
652 tv_nsec int32
653 __12 uint32 /* int : 32 */
654} /* alltypes.h:252:1 */
655
656type __pthread = struct {
657 self uintptr
658 dtv uintptr
659 prev uintptr
660 next uintptr
661 sysinfo uintptr_t
662 canary uintptr_t
663 canary2 uintptr_t
664 tid int32
665 errno_val int32
666 detach_state int32
667 cancel int32
668 canceldisable uint8
669 cancelasync uint8
670 tsd_used uint8 /* unsigned char tsd_used: 1, unsigned char dlerror_flag: 1 */
671 _ [1]byte
672 map_base uintptr
673 map_size size_t
674 stack uintptr
675 stack_size size_t
676 guard_size size_t
677 result uintptr
678 cancelbuf uintptr
679 tsd uintptr
680 robust_list struct {
681 head uintptr
682 off int32
683 pending uintptr
684 }
685 timer_id int32
686 locale locale_t
687 killlock [1]int32
688 dlerror_buf uintptr
689 stdio_locks uintptr
690 canary_at_end uintptr_t
691 dtv_copy uintptr
692} /* alltypes.h:296:9 */
693
694type pthread_t = uintptr /* alltypes.h:296:26 */
695
696type pthread_once_t = int32 /* alltypes.h:302:13 */
697
698type pthread_key_t = uint32 /* alltypes.h:307:18 */
699
700type pthread_spinlock_t = int32 /* alltypes.h:312:13 */
701
702type pthread_mutexattr_t = struct{ __attr uint32 } /* alltypes.h:317:37 */
703
704type pthread_condattr_t = struct{ __attr uint32 } /* alltypes.h:322:37 */
705
706type pthread_barrierattr_t = struct{ __attr uint32 } /* alltypes.h:327:37 */
707
708type pthread_rwlockattr_t = struct{ __attr [2]uint32 } /* alltypes.h:332:40 */
709
710type __sigset_t = struct{ __bits [32]uint32 } /* alltypes.h:372:9 */
711
712type sigset_t = __sigset_t /* alltypes.h:372:71 */
713
714type pthread_attr_t = struct{ __u struct{ __i [9]int32 } } /* alltypes.h:395:147 */
715
716type pthread_mutex_t = struct{ __u struct{ __i [6]int32 } } /* alltypes.h:400:157 */
717
718type pthread_cond_t = struct{ __u struct{ __i [12]int32 } } /* alltypes.h:410:112 */
719
720type pthread_rwlock_t = struct{ __u struct{ __i [8]int32 } } /* alltypes.h:420:139 */
721
722type pthread_barrier_t = struct{ __u struct{ __i [5]int32 } } /* alltypes.h:425:137 */
723
724type sched_param = struct {
725 sched_priority int32
726 __reserved1 int32
727 __reserved2 [4]int32
728 __reserved3 int32
729} /* sched.h:19:1 */
730
731type timer_t = uintptr /* alltypes.h:232:14 */
732
733type clock_t = int32 /* alltypes.h:242:14 */
734
735type itimerspec = struct {
736 it_interval struct {
737 tv_sec time_t
738 tv_nsec int32
739 __12 uint32 /* int : 32 */
740 }
741 it_value struct {
742 tv_sec time_t
743 tv_nsec int32
744 __12 uint32 /* int : 32 */
745 }
746} /* time.h:80:1 */
747
748type sigevent = struct {
749 sigev_value struct{ sival_int int32 }
750 sigev_signo int32
751 sigev_notify int32
752 sigev_notify_function uintptr
753 sigev_notify_attributes uintptr
754 __pad [44]int8
755} /* time.h:107:1 */
756
757type __ptcb = struct {
758 __f uintptr
759 __x uintptr
760 __next uintptr
761} /* alltypes.h:296:9 */
762
763type sigaltstack = struct {
764 ss_sp uintptr
765 ss_flags int32
766 ss_size size_t
767} /* signal.h:44:9 */
768
769type stack_t = sigaltstack /* signal.h:44:28 */
770
771type greg_t = int32 /* signal.h:51:13 */
772type gregset_t = [19]int32 /* signal.h:51:21 */
773type _fpstate = struct {
774 cw uint32
775 sw uint32
776 tag uint32
777 ipoff uint32
778 cssel uint32
779 dataoff uint32
780 datasel uint32
781 _st [8]struct {
782 significand [4]uint16
783 exponent uint16
784 }
785 status uint32
786} /* signal.h:52:9 */
787
788type fpregset_t = uintptr /* signal.h:58:3 */
789type sigcontext = struct {
790 gs uint16
791 __gsh uint16
792 fs uint16
793 __fsh uint16
794 es uint16
795 __esh uint16
796 ds uint16
797 __dsh uint16
798 edi uint32
799 esi uint32
800 ebp uint32
801 esp uint32
802 ebx uint32
803 edx uint32
804 ecx uint32
805 eax uint32
806 trapno uint32
807 err uint32
808 eip uint32
809 cs uint16
810 __csh uint16
811 eflags uint32
812 esp_at_signal uint32
813 ss uint16
814 __ssh uint16
815 fpstate uintptr
816 oldmask uint32
817 cr2 uint32
818} /* signal.h:59:1 */
819
820type mcontext_t = struct {
821 gregs gregset_t
822 fpregs fpregset_t
823 oldmask uint32
824 cr2 uint32
825} /* signal.h:73:3 */
826
827type __ucontext = struct {
828 uc_flags uint32
829 uc_link uintptr
830 uc_stack stack_t
831 uc_mcontext mcontext_t
832 uc_sigmask sigset_t
833 __fpregs_mem [28]uint32
834} /* signal.h:86:9 */
835
836type ucontext_t = __ucontext /* signal.h:93:3 */
837
838type sigval = struct{ sival_int int32 } /* time.h:107:1 */
839
840type siginfo_t = struct {
841 si_signo int32
842 si_errno int32
843 si_code int32
844 __si_fields struct {
845 _ [0]uint32
846 __pad [116]int8
847 }
848} /* signal.h:145:3 */
849
850type sigaction = struct {
851 __sa_handler struct{ sa_handler uintptr }
852 sa_mask sigset_t
853 sa_flags int32
854 sa_restorer uintptr
855} /* signal.h:167:1 */
856
857type sig_t = uintptr /* signal.h:251:14 */
858
859type sig_atomic_t = int32 /* signal.h:269:13 */
860
861type mode_t = uint32 /* alltypes.h:175:18 */
862
863type syscall_arg_t = int32 /* syscall.h:22:14 */
864
865func a_cas(tls *TLS, p uintptr, t int32, s int32) int32 { /* atomic_arch.h:2:19: */
866 panic(`arch/i386/atomic_arch.h:4:2: assembler statements not supported`)
867 return t
868}
869
870func a_and(tls *TLS, p uintptr, v int32) { /* atomic_arch.h:29:20: */
871 panic(`arch/i386/atomic_arch.h:31:2: assembler statements not supported`)
872}
873
874func a_or(tls *TLS, p uintptr, v int32) { /* atomic_arch.h:37:20: */
875 panic(`arch/i386/atomic_arch.h:39:2: assembler statements not supported`)
876}
877
878func a_ctz_64(tls *TLS, x uint64_t) int32 { /* atomic_arch.h:87:19: */
879 var r int32
880 panic(`arch/i386/atomic_arch.h:90:2: assembler statements not supported`)
881 return r
882}
883
884func a_ctz_32(tls *TLS, x uint32_t) int32 { /* atomic_arch.h:96:19: */
885 var r int32
886 panic(`arch/i386/atomic_arch.h:99:2: assembler statements not supported`)
887 return r
888}
889
890func a_clz_32(tls *TLS, x uint32_t) int32 { /* atomic_arch.h:104:19: */
891 panic(`arch/i386/atomic_arch.h:106:2: assembler statements not supported`)
892 return int32(x)
893}
894
895func a_or_64(tls *TLS, p uintptr, v uint64_t) { /* atomic.h:220:20: */
896 bp := tls.Alloc(8)
897 defer tls.Free(8)
898
899 *(*struct{ v uint64_t })(unsafe.Pointer(bp)) = func() (r struct{ v uint64_t }) {
900 *(*uint64_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&r)) + 0)) = v
901 return r
902 }()
903 if *(*uint32_t)(unsafe.Pointer(bp)) != 0 {
904 a_or(tls, p, int32(*(*uint32_t)(unsafe.Pointer(bp))))
905 }
906 if *(*uint32_t)(unsafe.Pointer(bp + 1*4)) != 0 {
907 a_or(tls, p+uintptr(1)*4, int32(*(*uint32_t)(unsafe.Pointer(bp + 1*4))))
908 }
909}
910
911type a_cas_p_undefined_but_pointer_not_32bit = [1]int8 /* atomic.h:229:14 */
912
913type __timer = struct {
914 timerid int32
915 thread pthread_t
916} /* pthread_impl.h:64:1 */
917
918func __pthread_self(tls *TLS) uintptr { /* pthread_arch.h:1:30: */
919 var self uintptr
920 panic(`arch/i386/pthread_arch.h:4:2: assembler statements not supported`)
921 return self
922}
923
924func Xwcrtomb(tls *TLS, s uintptr, wc wchar_t, st uintptr) size_t { /* wcrtomb.c:6:8: */
925 if !(s != 0) {
926 return size_t(1)
927 }
928 if uint32(wc) < uint32(0x80) {
929 *(*int8)(unsafe.Pointer(s)) = int8(wc)
930 return size_t(1)
931 } else if func() int32 {
932 if !!(int32(*(*uintptr)(unsafe.Pointer((*__pthread)(unsafe.Pointer(__pthread_self(tls))).locale))) != 0) {
933 return 4
934 }
935 return 1
936 }() == 1 {
937 if !(uint32(wc)-uint32(0xdf80) < uint32(0x80)) {
938 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 84
939 return Uint32FromInt32(-1)
940 }
941 *(*int8)(unsafe.Pointer(s)) = int8(wc)
942 return size_t(1)
943 } else if uint32(wc) < uint32(0x800) {
944 *(*int8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = int8(0xc0 | int32(wc)>>6)
945 *(*int8)(unsafe.Pointer(s)) = int8(0x80 | int32(wc)&0x3f)
946 return size_t(2)
947 } else if uint32(wc) < uint32(0xd800) || uint32(wc)-uint32(0xe000) < uint32(0x2000) {
948 *(*int8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = int8(0xe0 | int32(wc)>>12)
949 *(*int8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = int8(0x80 | int32(wc)>>6&0x3f)
950 *(*int8)(unsafe.Pointer(s)) = int8(0x80 | int32(wc)&0x3f)
951 return size_t(3)
952 } else if uint32(wc)-uint32(0x10000) < uint32(0x100000) {
953 *(*int8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = int8(0xf0 | int32(wc)>>18)
954 *(*int8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = int8(0x80 | int32(wc)>>12&0x3f)
955 *(*int8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = int8(0x80 | int32(wc)>>6&0x3f)
956 *(*int8)(unsafe.Pointer(s)) = int8(0x80 | int32(wc)&0x3f)
957 return size_t(4)
958 }
959 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 84
960 return Uint32FromInt32(-1)
961}
962
963func Xwcsrtombs(tls *TLS, s uintptr, ws uintptr, n size_t, st uintptr) size_t { /* wcsrtombs.c:3:8: */
964 bp := tls.Alloc(4)
965 defer tls.Free(4)
966
967 var ws2 uintptr
968 // var buf [4]int8 at bp, 4
969
970 var N size_t = n
971 var l size_t
972 if !(s != 0) {
973 n = size_t(0)
974 ws2 = *(*uintptr)(unsafe.Pointer(ws))
975 for ; *(*wchar_t)(unsafe.Pointer(ws2)) != 0; ws2 += 2 {
976 if uint32(*(*wchar_t)(unsafe.Pointer(ws2))) >= 0x80 {
977 l = Xwcrtomb(tls, bp, *(*wchar_t)(unsafe.Pointer(ws2)), uintptr(0))
978 if !(l+size_t(1) != 0) {
979 return Uint32FromInt32(-1)
980 }
981 n = n + l
982 } else {
983 n++
984 }
985 }
986 return n
987 }
988 for n >= size_t(4) {
989 if uint32(*(*wchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws)))))-1 >= 0x7f {
990 if !(int32(*(*wchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws))))) != 0) {
991 *(*int8)(unsafe.Pointer(s)) = int8(0)
992 *(*uintptr)(unsafe.Pointer(ws)) = uintptr(0)
993 return N - n
994 }
995 l = Xwcrtomb(tls, s, *(*wchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws)))), uintptr(0))
996 if !(l+size_t(1) != 0) {
997 return Uint32FromInt32(-1)
998 }
999 s += uintptr(l)
1000 n = n - l
1001 } else {
1002 *(*int8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = int8(*(*wchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws)))))
1003 n--
1004 }
1005 *(*uintptr)(unsafe.Pointer(ws)) += 2
1006 }
1007 for n != 0 {
1008 if uint32(*(*wchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws)))))-1 >= 0x7f {
1009 if !(int32(*(*wchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws))))) != 0) {
1010 *(*int8)(unsafe.Pointer(s)) = int8(0)
1011 *(*uintptr)(unsafe.Pointer(ws)) = uintptr(0)
1012 return N - n
1013 }
1014 l = Xwcrtomb(tls, bp, *(*wchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws)))), uintptr(0))
1015 if !(l+size_t(1) != 0) {
1016 return Uint32FromInt32(-1)
1017 }
1018 if l > n {
1019 return N - n
1020 }
1021 Xwcrtomb(tls, s, *(*wchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws)))), uintptr(0))
1022 s += uintptr(l)
1023 n = n - l
1024 } else {
1025 *(*int8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = int8(*(*wchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws)))))
1026 n--
1027 }
1028 *(*uintptr)(unsafe.Pointer(ws)) += 2
1029 }
1030 return N
1031}
1032
1033func Xwcstombs(tls *TLS, s uintptr, ws uintptr, n size_t) size_t { /* wcstombs.c:4:8: */
1034 bp := tls.Alloc(4)
1035 defer tls.Free(4)
1036 *(*uintptr)(unsafe.Pointer(bp)) = ws
1037
1038 //TODO return wcsrtombs(s, &(const wchar_t *){ws}, n, 0);
1039 return Xwcsrtombs(tls, s, bp, n, uintptr(0))
1040}
1041
1042// Support signed or unsigned plain-char
1043
1044// Implementation choices...
1045
1046// Arbitrary numbers...
1047
1048// POSIX/SUS requirements follow. These numbers come directly
1049// from SUS and have nothing to do with the host system.
1050
1051func X__strchrnul(tls *TLS, s uintptr, c int32) uintptr { /* strchrnul.c:10:6: */
1052 c = int32(uint8(c))
1053 if !(c != 0) {
1054 return s + uintptr(Xstrlen(tls, s))
1055 }
1056 var w uintptr
1057 for ; uintptr_t(s)%uintptr_t(unsafe.Sizeof(size_t(0))) != 0; s++ {
1058 if !(int32(*(*int8)(unsafe.Pointer(s))) != 0) || int32(*(*uint8)(unsafe.Pointer(s))) == c {
1059 return s
1060 }
1061 }
1062 var k size_t = Uint32(Uint32FromInt32(-1)) / size_t(255) * size_t(c)
1063 for w = s; !((*(*uint32)(unsafe.Pointer(w))-Uint32(Uint32FromInt32(-1))/size_t(255)) & ^*(*uint32)(unsafe.Pointer(w)) & (Uint32(Uint32FromInt32(-1))/size_t(255)*size_t(255/2+1)) != 0) && !((*(*uint32)(unsafe.Pointer(w))^k-Uint32(Uint32FromInt32(-1))/size_t(255)) & ^(*(*uint32)(unsafe.Pointer(w))^k) & (Uint32(Uint32FromInt32(-1))/size_t(255)*size_t(255/2+1)) != 0); w += 4 {
1064 }
1065 s = w
1066 for ; *(*int8)(unsafe.Pointer(s)) != 0 && int32(*(*uint8)(unsafe.Pointer(s))) != c; s++ {
1067 }
1068 return s
1069}
1070
1071func Xstrdup(tls *TLS, s uintptr) uintptr { /* strdup.c:4:6: */
1072 var l size_t = Xstrlen(tls, s)
1073 var d uintptr = Xmalloc(tls, l+size_t(1))
1074 if !(d != 0) {
1075 return uintptr(0)
1076 }
1077 return Xmemcpy(tls, d, s, l+size_t(1))
1078}
Note: See TracBrowser for help on using the repository browser.