Add bin and edit workflow
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 9s

This commit is contained in:
2026-09-16 13:11:16 -06:00
parent c8ac4fcae5
commit 4cee170d66
17576 changed files with 895740 additions and 2 deletions
@@ -0,0 +1,507 @@
1.17.4 / 2026-03-26
-------------------
Fixed:
* Fix union by-value ABI mismatch with float and double types on ARM64 and X86_64.
See #1177 and #1178 for details.
* Exclude libffi files, which are unnecessary. #1176
1.17.3 / 2025-12-29
-------------------
Fixed:
* Opt-in for MFA requirement explicitly. #1159
* Fix type signature for FFI::AutoPointer#initialize, FFI::StructByReference#native_type and FFI::Struct#auto_ptr . #1158
* Fix function signature of function_call in FFI trampoline. #1154
It failed on `aarch64-mingw-ucrt`.
* Add workaround for segmentation faults on `aarch64-mingw-ucrt`. #1154
* Call super in `Library#freeze` . #1154
* Deny duplication of AutoPointer per #dup and #clone . #1173
They led to double free before.
Added:
* Add binary gems for Ruby-4.0, now providing binary gems for Ruby-3.0 to 4.0.
* Add msys2_mingw_dependencies for Windows Mingw for automatic installation of libffi. #1143
* Mark callback dispatcher thread as fork safe for Puma. #1156
* Add missing FFI::Platform module and LastError signatures. #1169
Removed:
* Drop fat binary gems for Ruby < 3.0
* Remove `FFI::TypesGenerator` from distributed gems. #1164
* Remove libffi build dir after install, safing some install space. #1157
1.17.2 / 2025-04-15
-------------------
Fixed:
* #1144, #1145 Update libffi to 3.4.8 to fix installation issues on latest Macos on ARM64
* Various adjustments to run the specs cleanly on Ruby-3.5 master branch.
1.17.1 / 2024-12-30
-------------------
Fixed:
* #1117 Restart async callback dispatcher thread after fork.
* #1133 Add ruby-3.4 native gem.
* #1134 Fix FFI::DataConverter non-generic usage in RBS files.
1.17.0 / 2024-06-02
-------------------
Fixed:
* Add FFI::AbstractMemory#read_array_of_string . It was defined but not exposed to Ruby nor tested. #1070
1.17.0.rc2 / 2024-04-22
-------------------
Fixed:
* Add missing write barriers to StructLayout#initialize causing a segfault with GC.stress. #1079
1.17.0.rc1 / 2024-04-08
-------------------
Fixed:
* Fix type definitions on `aarch64-linux`. #1067, #1066
* Use RB_TEST for `Pointer.autorelease=` . #1065
So that `false` and `nil` are treated as falsey and anything else as truthy.
* Replace Fixnum by Integer. #1064
Fixnum is no longer present in the ruby language.
* Update `FFI::NativeType` doc. #1061
* Store FFI::Type::Mapped of FFI::StrPtrConverter in global instead of custom type map
* Various documentation fixes. #1042
* Update `FFI::Pointer#==` to return `false` if a pointer is compared to a non-pointer object, which is the expected behavior. #1083
* Avoid warning about undefined wariable `@ffi_functions` #1085
* Fix a very unlikely GC bug when using a callback block. # 1089
Added:
* Provide binary gems for many platforms. #990
* Add Windows fat binary gem for Ruby-3.3
* Add RBS type definitions for many user facing parts of the FFI API. #1042
* Improve fallback search path logic. #1088
Respect LD_LIBRARY_PATH and DYLD_LIBRARY_PATH on Macos.
* Update libffi to current git master branch.
Removed:
* Remove `enum CHAR_ARRAY` which is no longer used. #1063
1.16.3 / 2023-10-04
-------------------
Fixed:
* Fix gcc error when building on CentOS 7. #1052
* Avoid trying to store new DataConverter type in frozen TypeDefs hash. #1057
1.16.2 / 2023-09-25
-------------------
Fixed:
* Handle null pointer crash after fork. #1051
1.16.1 / 2023-09-24
-------------------
Fixed:
* Fix compiling the builtin libffi. #1049
1.16.0 / 2023-09-23
-------------------
Fixed:
* Fix an issue with signed bitmasks when using flags on the most significant bit. #949
* Fix FFI::Pointer#initialize using NUM2LL instead of NUM2ULL.
* Fix FFI::Type#inspect to properly display the constant name. #1002
* Use libffi closure allocations on hppa-Linux. #1017
Previously they would segfault.
* Fix class name of Symbol#inspect.
* Fix MSVC support of libtest. #1028
* Fix attach_function of functions ending in ? or ! #971
Added:
* Convert all C-based classes to TypedData and use write barriers. #994, #995, #996, #997, #998, #999, #1000, #1001, #1003, #1004, #1005, #1006, #1007, #1008, #1009, #1010, #1011, #1012
This results in less pressure on the garbage collector, since the objects can be promoted to the old generation, which means they only get marked on major GC.
* Implement `ObjectSpace.memsize_of()` of all C-based classes.
* Make FFI Ractor compatible. #1023
Modules extended per `extend FFI::Library` need to be frozen in order to be used by non-main Ractors.
This can be done by calling `freeze` below of all C interface definitions.
* In a Ractor it's possible to:
* load DLLs and call its functions, access its global variables
* use builtin typedefs
* use and modify ractor local typedefs
* define callbacks
* receive async callbacks from non-ruby threads
* use frozen FFI::Library based modules with all attributes (enums, structs, typedefs, functions, callbacks)
* invoke frozen functions and callbacks defined in the main Ractor
* use FFI::Struct definitions from the main Ractor
* In a Ractor it's impossible to:
* create new FFI::Library based modules
* create new FFI::Struct definitions
* use custom global typedefs
* use non-frozen FFI::Library based modules
* Allow type retrieval of attached functions+variables. #1023
* Make FFI classes `GC.compact` friendly. #1021
* Update libffi and disable custom trampoline when using libffi closure allocation. #1020
This is because libffi changed the way how closures are allocated to static trampolines.
* Add types.conf for loongarch64-linux. #943
* Add types.conf for sw_64-linux (Shen Wei 64-bit, based on Alpha). #1018
* Add support for aarch64-windows. #1035
* Windows: Update LoadLibrary error message to include error code. #1026
* Allow private release method for FFI::ManagedStruct and FFI::AutoPointer. #1029
* Add support for passing ABI version to FFI.map_library_name. #963
This adds the new class FFI::LibraryPath .
* Add support for ruby-3.2 to windows binary gem. #1047
* Enable debug symbols for `rake compile` builds to ease debugging. #1048
Removed:
* Remove allocator of AbstractMemory. #1013
This disables AbstractMemory.new, which has no practical use.
* Remove unused FFI::SizeTypes. #1022
1.15.5 / 2022-01-10
-------------------
Fixed:
* Fix long double argument or return values on 32bit i686. #849
* FFI::ConstGenerator: avoid usage of the same binary file simultaneously. #929
Added:
* Add Windows fat binary gem for Ruby-3.1
Removed:
* Remove Windows fat binary gem for Ruby < 2.4
1.15.4 / 2021-09-01
-------------------
Fixed:
* Fix build for uClibc. #913
* Correct module lookup when including `ffi-module` gem. #912
Changed:
* Use ruby code of the ffi gem in JRuby-9.2.20+. #915
1.15.3 / 2021-06-16
-------------------
Fixed:
* Fix temporary packaging issue with libffi. #904
1.15.2 / 2021-06-16
-------------------
Added:
* Add support for Windows MINGW-UCRT build. #903
* Add `/opt/homebrew/lib/` to fallback search paths to improve homebrew support. #880 #882
Changed:
* Regenerate `types.conf` for FreeBSD12 aarch64. #902
1.15.1 / 2021-05-22
-------------------
Fixed:
* Append -pthread to linker options. #893
* Use arm or aarch64 to identify Apple ARM CPU arch. #899
* Allow overriding `gcc` with the `CC` env var in `const_generator.rb` and `struct_generator.rb`. #897
1.15.0 / 2021-03-05
-------------------
Fixed:
* Fix MSVC build
* Fix async callbacks in conjunction with fork(). #884
Added:
* Allow to pass callbacks in varargs. #885
* Name the threads for FFI callback dispatcher and async thread calls for easier debugging. #883
The name can be retrieved by Thread.name and is shown by Thread.list.inspect etc.
Even gdb shows the thread name on supported operating systems.
* Add types.conf for powerpc64le-linux
* Add types.conf for riscv64-linux
* More release automation of ffi gems
Changed:
* Switch from rubygems-tasks to bundler/gem_helper
Removed:
* Remove unused VariadicInvoker#init
1.14.2 / 2020-12-21
-------------------
Fixed:
* Fix builtin libffi on newer Ubuntu caused by an outdated Makefile.in . #863
1.14.1 / 2020-12-19
-------------------
Changed:
* Revert changes to FFI::Pointer#write_string made in ffi-1.14.0.
It breaks compatibilty in a way that can cause hard to find errors. #857
1.14.0 / 2020-12-18
-------------------
Added:
* Add types.conf for x86_64-msys, x86_64-haiku, aarch64-openbsd and aarch64-darwin (alias arm64-darwin)
* Add method AbstractMemory#size_limit? . #829
* Add new extconf option --enable-libffi-alloc which is enabled per default on Apple M1 (arm64-darwin).
Changed:
* Do NULL pointer check only when array length > 0 . #305
* Raise an error on an unknown order argument. #830
* Change FFI::Pointer#write_string to terminate with a NUL byte like other string methods. #805
* Update bundled libffi to latest master.
Removed:
* Remove win32/stdint.h and stdbool.h because of copyright issue. #693
Fixed:
* Fix possible UTF-8 load error in loader script interpretation. #792
* Fix segfault on non-array argument to #write_array_of_*
* Fix memory leak in MethodHandle . #815
* Fix possible segfault in combination with fiddle or other libffi using gems . #835
* Fix possibility to use ffi ruby gem with JRuby-9.3 . #763
* Fix a GC issue, when a callback Proc is used on more than 2 callback signatures. #820
1.13.1 / 2020-06-09
-------------------
Changed:
* Revert use of `ucrtbase.dll` as default C library on Windows-MINGW.
`ucrtbase.dll` is still used on MSWIN target. #790
* Test for `ffi_prep_closure_loc()` to make sure we can use this function.
This fixes incorrect use of system libffi on MacOS Mojave (10.14). #787
* Update types.conf on x86_64-dragonflybsd
1.13.0 / 2020-06-01
-------------------
Added:
* Add TruffleRuby support. Almost all specs are running on TruffleRuby and succeed. #768
* Add ruby source files to the java gem. This allows to ship the Ruby library code per platform java gem and add it as a default gem to JRuby. #763
* Add FFI::Platform::LONG_DOUBLE_SIZE
* Add bounds checks for writing to an inline char[] . #756
* Add long double as callback return value. #771
* Update type definitions and add types from stdint.h and stddef.h on i386-windows, x86_64-windows, x86_64-darwin, x86_64-linux, arm-linux, powerpc-linux. #749
* Add new type definitions for powerpc-openbsd and sparcv9-openbsd. #775, #778
Changed:
* Raise required ruby version to >= 2.3.
* Lots of cleanups and improvements in library, specs and benchmarks.
* Fix a lot of compiler warnings at the C-extension
* Fix several install issues on MacOS:
* Look for libffi in SDK paths, since recent versions of macOS removed it from `/usr/include` . #757
* Fix error `ld: library not found for -lgcc_s.10.4`
* Don't built for i386 architecture as it is deprecated
* Several fixes for MSVC build on Windows. #779
* Use `ucrtbase.dll` as default C library on Windows instead of old `msvcrt.dll`. #779
* Update builtin libffi to fix a Powerpc issue with parameters of type long
* Allow unmodified sourcing of (the ruby code of) this gem in JRuby and TruffleRuby as a default gem. #747
* Improve check to detect if a module has a #find_type method suitable for FFI. This fixes compatibility with stdlib `mkmf` . #776
Removed:
* Reject callback with `:string` return type at definition, because it didn't work so far and is not save to use. #751, #782
1.12.2 / 2020-02-01
-------------------
* Fix possible segfault at FFI::Struct#[] and []= after GC.compact . #742
1.12.1 / 2020-01-14
-------------------
Added:
* Add binary gem support for ruby-2.7 on Windows
1.12.0 / 2020-01-14
-------------------
Added:
* FFI::VERSION is defined as part of `require 'ffi'` now.
It is no longer necessary to `require 'ffi/version'` .
Changed:
* Update libffi to latest master.
Deprecated:
* Overwriting struct layouts is now warned and will be disallowed in ffi-2.0. #734, #735
1.11.3 / 2019-11-25
-------------------
Removed:
* Remove support for tainted objects which cause deprecation warnings in ruby-2.7. #730
1.11.2 / 2019-11-11
-------------------
Added:
* Add DragonFlyBSD as a platform. #724
Changed:
* Sort all types.conf files, so that files and changes are easier to compare.
* Regenerated type conf for freebsd12 and x86_64-linux targets. #722
* Remove MACOSX_DEPLOYMENT_TARGET that was targeting very old version 10.4. #647
* Fix library name mangling for non glibc Linux/UNIX. #727
* Fix compiler warnings raised by ruby-2.7
* Update libffi to latest master.
1.11.1 / 2019-05-20
-------------------
Changed:
* Raise required ruby version to >=2.0. #699, #700
* Fix a possible linker error on ruby < 2.3 on Linux.
1.11.0 / 2019-05-17
-------------------
This version was yanked on 2019-05-20 to fix an install issue on ruby-1.9.3. #700
Added:
* Add ability to disable or force use of system libffi. #669
Use like `gem inst ffi -- --enable-system-libffi` .
* Add ability to call FFI callbacks from outside of FFI call frame. #584
* Add proper documentation to FFI::Generator and ::Task
* Add gemspec metadata. #696, #698
Changed:
* Fix stdcall on Win32. #649, #669
* Fix load paths for FFI::Generator::Task
* Fix FFI::Pointer#read_string(0) to return a binary String. #692
* Fix benchmark suite so that it runs on ruby-2.x
* Move FFI::Platform::CPU from C to Ruby. #663
* Move FFI::StructByReference to Ruby. #681
* Move FFI::DataConverter to Ruby (#661)
* Various cleanups and improvements of specs and benchmarks
Removed:
* Remove ruby-1.8 and 1.9 compatibility code. #683
* Remove unused spec files. #684
1.10.0 / 2019-01-06
-------------------
Added:
* Add /opt/local/lib/ to ffi's fallback library search path. #638
* Add binary gem support for ruby-2.6 on Windows
* Add FreeBSD on AArch64 and ARM support. #644
* Add FFI::LastError.winapi_error on Windows native or Cygwin. #633
Changed:
* Update to rake-compiler-dock-0.7.0
* Use 64-bit inodes on FreeBSD >= 12. #644
* Switch time_t and suseconds_t types to long on FreeBSD. #627
* Make register_t long_long on 64-bit FreeBSD. #644
* Fix Pointer#write_array_of_type #637
Removed:
* Drop binary gem support for ruby-2.0 and 2.1 on Windows
1.9.25 / 2018-06-03
-------------------
Changed:
* Revert closures via libffi.
This re-adds ClosurePool and fixes compat with SELinux enabled systems. #621
1.9.24 / 2018-06-02
-------------------
Security Note:
This update addresses vulnerability CVE-2018-1000201: DLL loading issue which can be hijacked on Windows OS, when a Symbol is used as DLL name instead of a String. Found by Matthew Bush.
Added:
* Added a CHANGELOG file
* Add mips64(eb) support, and mips r6 support. (#601)
Changed:
* Update libffi to latest changes on master.
* Don't search in hardcoded /usr paths on Windows.
* Don't treat Symbol args different to Strings in ffi_lib.
* Make sure size_t is defined in Thread.c. Fixes #609
1.9.23 / 2018-02-25
-------------------
Changed:
* Fix unnecessary rebuild of configure in darwin multi arch. Fixes #605
1.9.22 / 2018-02-22
-------------------
Changed:
* Update libffi to latest changes on master.
* Update detection of system libffi to match new requirements. Fixes #617
* Prefer bundled libffi over system libffi on Mac OS.
* Do closures via libffi. This removes ClosurePool and fixes compat with PaX. #540
* Use a more deterministic gem packaging.
* Fix unnecessary update of autoconf files at gem install.
1.9.21 / 2018-02-06
-------------------
Added:
* Ruby-2.5 support by Windows binary gems. Fixes #598
* Add missing win64 types.
* Added support for Bitmask. (#573)
* Add support for MSYS2 (#572) and Sparc64 Linux. (#574)
Changed:
* Fix read_string to not throw an error on length 0.
* Don't use absolute paths for sh and env. Fixes usage on Adroid #528
* Use Ruby implementation for `which` for better compat with Windows. Fixes #315
* Fix compatibility with PPC64LE platform. (#577)
* Normalize sparc64 to sparcv9. (#575)
Removed:
* Drop Ruby 1.8.7 support (#480)
1.9.18 / 2017-03-03
-------------------
Added:
* Add compatibility with Ruby-2.4.
Changed:
* Add missing shlwapi.h include to fix Windows build.
* Avoid undefined behaviour of LoadLibrary() on Windows. #553
1.9.17 / 2017-01-13
-------------------
@@ -0,0 +1,49 @@
Copyright (c) 2008-2013, Ruby FFI project contributors
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
* Neither the name of the Ruby FFI project nor the
names of its contributors may be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
libffi, used by this project, is licensed under the MIT license:
libffi - Copyright (c) 1996-2011 Anthony Green, Red Hat, Inc and others.
See source files for details.
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.
@@ -0,0 +1,26 @@
source 'https://rubygems.org'
gemspec
group :development do
gem 'benchmark' # necessary on ruby-3.5+
gem 'bigdecimal' # necessary on ruby-3.3+
gem 'bundler', '>= 1.16', '< 5.dev'
gem 'fiddle' # necessary on ruby-4.0+
gem 'rake', '~> 13.0'
gem 'rake-compiler', '~> 1.1'
gem 'rake-compiler-dock', '~> 1.11.0'
gem 'rspec', '~> 3.0'
end
group :doc do
gem 'kramdown'
gem 'yard', '~> 0.9'
end
group :type_check do
if RUBY_VERSION >= "3.0" && %w[ ruby truffleruby ].include?(RUBY_ENGINE)
gem 'rbs', '~> 3.0'
gem 'steep', '~> 1.6'
end
end
@@ -0,0 +1,24 @@
Copyright (c) 2008-2016, Ruby FFI project contributors
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
* Neither the name of the Ruby FFI project nor the
names of its contributors may be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -0,0 +1,22 @@
Copyright (c) 2008-2012 Ruby-FFI contributors
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.
@@ -0,0 +1,138 @@
# Ruby-FFI https://github.com/ffi/ffi/wiki
## Description
Ruby-FFI is a gem for programmatically loading dynamically-linked native
libraries, binding functions within them, and calling those functions
from Ruby code. Moreover, a Ruby-FFI extension works without changes
on CRuby (MRI), JRuby, Rubinius and TruffleRuby. [Discover why you should write your next extension
using Ruby-FFI](https://github.com/ffi/ffi/wiki/why-use-ffi).
## Features
* Intuitive DSL
* Supports all C native types
* C structs (also nested), enums and global variables
* Callbacks from C to Ruby
* Automatic garbage collection of native memory
* Usable in Ractor: [How-to-use-FFI-in-Ruby-Ractors](https://github.com/ffi/ffi/wiki/Ractors)
## Synopsis
```ruby
require 'ffi'
module MyLib
extend FFI::Library
ffi_lib 'c'
attach_function :puts, [ :string ], :int
end
MyLib.puts 'Hello, World using libc!'
```
For less minimalistic and more examples you may look at:
* The [documentation](https://www.rubydoc.info/gems/ffi)
* the `samples/` folder
* the examples on the [wiki](https://github.com/ffi/ffi/wiki)
* the projects using FFI listed on the wiki: https://github.com/ffi/ffi/wiki/projects-using-ffi
## Requirements
When installing the gem on CRuby (MRI), you will need:
* A C compiler (e.g., Xcode on macOS, `gcc` or `clang` on everything else)
Optionally (speeds up installation):
* The `libffi` library and development headers - this is commonly in the `libffi-dev` or `libffi-devel` packages
The ffi gem comes with a builtin libffi version, which is used, when the system libffi library is not available or too old.
Use of the system libffi can be enforced by:
```
gem install ffi -- --enable-system-libffi # to install the gem manually
bundle config build.ffi --enable-system-libffi # for bundle install
```
or prevented by `--disable-system-libffi`.
On Linux systems running with [PaX](https://en.wikipedia.org/wiki/PaX) (Gentoo, Alpine, etc.), FFI may trigger `mprotect` errors. You may need to disable [mprotect](https://en.wikibooks.org/wiki/Grsecurity/Appendix/Grsecurity_and_PaX_Configuration_Options#Restrict_mprotect.28.29) for ruby (`paxctl -m [/path/to/ruby]`) for the time being until a solution is found.
On FreeBSD systems pkgconf must be installed for the gem to be able to compile using clang. Install either via packages `pkg install pkgconf` or from ports via `devel/pkgconf`.
On JRuby and TruffleRuby, there are no requirements to install the FFI gem, and `require 'ffi'` works even without installing the gem (i.e., the gem is preinstalled on these implementations).
## Installation
From rubygems:
[sudo] gem install ffi
From a Gemfile using git or GitHub
gem 'ffi', github: 'ffi/ffi', submodules: true
or from the git repository on github:
git clone git://github.com/ffi/ffi.git
cd ffi
git submodule update --init --recursive
bundle install
rake install
### Install options:
* `--enable-system-libffi` : Force usage of system libffi
* `--disable-system-libffi` : Force usage of builtin libffi
* `--enable-libffi-alloc` : Force closure allocation by libffi
* `--disable-libffi-alloc` : Force closure allocation by builtin method
## License
The ffi library is covered by the BSD license, also see the LICENSE file.
The specs are covered by the same license as [ruby/spec](https://github.com/ruby/spec), the MIT license.
## Credits
The following people have submitted code, bug reports, or otherwise contributed to the success of this project:
* Alban Peignier <alban.peignier@free.fr>
* Aman Gupta <aman@tmm1.net>
* Andrea Fazzi <andrea.fazzi@alcacoop.it>
* Andreas Niederl <rico32@gmx.net>
* Andrew Cholakian <andrew@andrewvc.com>
* Antonio Terceiro <terceiro@softwarelivre.org>
* Benoit Daloze <eregontp@gmail.com>
* Brian Candler <B.Candler@pobox.com>
* Brian D. Burns <burns180@gmail.com>
* Bryan Kearney <bkearney@redhat.com>
* Charlie Savage <cfis@zerista.com>
* Chikanaga Tomoyuki <nagachika00@gmail.com>
* Hongli Lai <hongli@phusion.nl>
* Ian MacLeod <ian@nevir.net>
* Jake Douglas <jake@shiftedlabs.com>
* Jean-Dominique Morani <jdmorani@mac.com>
* Jeremy Hinegardner <jeremy@hinegardner.org>
* Jesús García Sáez <blaxter@gmail.com>
* Joe Khoobyar <joe@ankhcraft.com>
* Jurij Smakov <jurij@wooyd.org>
* KISHIMOTO, Makoto <ksmakoto@dd.iij4u.or.jp>
* Kim Burgestrand <kim@burgestrand.se>
* Lars Kanis <lars@greiz-reinsdorf.de>
* Luc Heinrich <luc@honk-honk.com>
* Luis Lavena <luislavena@gmail.com>
* Matijs van Zuijlen <matijs@matijs.net>
* Matthew King <automatthew@gmail.com>
* Mike Dalessio <mike.dalessio@gmail.com>
* NARUSE, Yui <naruse@airemix.jp>
* Park Heesob <phasis@gmail.com>
* Shin Yee <shinyee@speedgocomputing.com>
* Stephen Bannasch <stephen.bannasch@gmail.com>
* Suraj N. Kurapati <sunaku@gmail.com>
* Sylvain Daubert <sylvain.daubert@laposte.net>
* Victor Costan
* beoran@gmail.com
* ctide <christide@christide.com>
* emboss <Martin.Bosslet@googlemail.com>
* hobophobe <unusualtears@gmail.com>
* meh <meh@paranoici.org>
* postmodern <postmodern.mod3@gmail.com>
* wycats@gmail.com <wycats@gmail.com>
* Wayne Meissner <wmeissner@gmail.com>
@@ -0,0 +1,209 @@
require 'rbconfig'
require 'date'
require 'fileutils'
require 'yaml'
require 'rspec/core/rake_task'
require 'rubygems/package_task'
require 'rake/extensiontask'
require_relative "lib/ffi/version"
require_relative "rakelib/ffi_gem_helper"
BUILD_DIR = "build"
BUILD_EXT_DIR = File.join(BUILD_DIR, "#{RbConfig::CONFIG['arch']}", 'ffi_c', RUBY_VERSION)
gem_spec = Bundler.load_gemspec('ffi.gemspec')
RSpec::Core::RakeTask.new(:spec) do |config|
config.rspec_opts = YAML.load_file 'spec/spec.opts'
end
desc "Build all packages"
task :package => %w[ gem:java gem:native ]
CLOBBER.include 'lib/ffi/types.conf'
CLOBBER.include 'pkg'
CLOBBER.include 'log'
CLEAN.include 'build'
CLEAN.include 'conftest.dSYM'
CLEAN.include 'spec/ffi/fixtures/libtest.{dylib,so,dll}'
CLEAN.include 'spec/ffi/fixtures/*.o'
CLEAN.include 'spec/ffi/embed-test/ext/*.{o,def}'
CLEAN.include 'spec/ffi/embed-test/ext/Makefile'
CLEAN.include "pkg/ffi-*-*/"
CLEAN.include 'lib/{2,3}.*'
# clean all shipped files, that are not in git
CLEAN.include(
gem_spec.files -
`git --git-dir ext/ffi_c/libffi/.git ls-files -z`.split("\x0").map { |f| File.join("ext/ffi_c/libffi", f) } -
`git ls-files -z`.split("\x0")
)
task :distclean => :clobber
desc "Test the extension"
task :test => [ :spec ]
namespace :bench do
ITER = ENV['ITER'] ? ENV['ITER'].to_i : 100000
bench_files = Dir["bench/bench_*.rb"].sort.reject { |f| f == "bench/bench_helper.rb" }
bench_files.each do |bench|
task File.basename(bench, ".rb")[6..-1] => :compile do
sh %{#{Gem.ruby} #{bench} #{ITER}}
end
end
task :all => :compile do
bench_files.each do |bench|
sh %{#{Gem.ruby} #{bench}}
end
end
end
task 'spec:run' => :compile
task 'spec:specdoc' => :compile
task :default => :spec
namespace 'java' do
java_gem_spec = gem_spec.dup.tap do |s|
s.files.reject! { |f| File.fnmatch?("ext/*", f) }
s.extensions = []
s.platform = 'java'
end
Gem::PackageTask.new(java_gem_spec) do |pkg|
pkg.need_zip = true
pkg.need_tar = true
pkg.package_dir = 'pkg'
end
end
task 'gem:java' => 'java:gem'
FfiGemHelper.install_tasks
# Register binary gems to be pushed to rubygems.org
Bundler::GemHelper.instance.cross_platforms = %w[
x86-mingw32
x64-mingw-ucrt
x64-mingw32
x86-linux-gnu
x86-linux-musl
x86_64-linux-gnu
x86_64-linux-musl
arm-linux-gnu
arm-linux-musl
aarch64-linux-gnu
aarch64-linux-musl
aarch64-mingw-ucrt
x86_64-darwin
arm64-darwin
]
if RUBY_ENGINE == 'ruby' || RUBY_ENGINE == 'rbx'
require 'rake/extensiontask'
Rake::ExtensionTask.new('ffi_c', gem_spec) do |ext|
ext.name = 'ffi_c' # indicate the name of the extension.
# ext.lib_dir = BUILD_DIR # put binaries into this folder.
ext.tmp_dir = BUILD_DIR # temporary folder used during compilation.
ext.cross_compile = true # enable cross compilation (requires cross compile toolchain)
ext.cross_platform = Bundler::GemHelper.instance.cross_platforms
ext.cross_compiling do |spec|
spec.files.reject! { |path| File.fnmatch?('ext/*', path) }
# Binary gems don't need libffi header+lib files
spec.metadata.delete("msys2_mingw_dependencies")
end
# Enable debug info for 'rake compile' but not for 'gem install'
ext.config_options << "--enable-debug"
end
else
task :compile do
STDERR.puts "Nothing to compile on #{RUBY_ENGINE}"
end
end
namespace "gem" do
task 'prepare' do
require 'rake_compiler_dock'
sh "bundle package"
end
Bundler::GemHelper.instance.cross_platforms.each do |plat|
desc "Build all native binary gems in parallel"
multitask 'native' => plat
desc "Build the native gem for #{plat}"
task plat => ['prepare', 'build'] do
RakeCompilerDock.sh <<-EOT, platform: plat
sudo apt-get update && sudo apt-get install -y libltdl-dev &&
bundle install --local &&
rake native:#{plat} pkg/#{gem_spec.full_name}-#{plat}.gem MAKE='nice make -j`nproc`' RUBY_CC_VERSION=#{RakeCompilerDock.ruby_cc_version("~>4.0", "~>3.0")}
EOT
end
end
end
directory "ext/ffi_c/libffi"
file "ext/ffi_c/libffi/autogen.sh" => "ext/ffi_c/libffi" do
warn "Downloading libffi ..."
sh "git submodule update --init --recursive"
end
task :libffi => "ext/ffi_c/libffi/autogen.sh"
LIBFFI_GIT_FILES = `git --git-dir ext/ffi_c/libffi/.git ls-files -z`.split("\x0")
# Generate files which are in the gemspec but not in libffi's git repo by running autogen.sh
gem_spec.files.select do |f|
f =~ /ext\/ffi_c\/libffi\/(.*)/ && !LIBFFI_GIT_FILES.include?($1)
end.each do |f|
file f => "ext/ffi_c/libffi/autogen.sh" do
chdir "ext/ffi_c/libffi" do
sh "sh ./autogen.sh"
end
touch f
if gem_spec.files != Gem::Specification.load('./ffi.gemspec').files
warn "gemspec files have changed -> Please restart rake!"
exit 1
end
end
end
# Make sure we have all gemspec files before packaging
task :build => gem_spec.files
task :gem => :build
require_relative "lib/ffi/platform"
types_conf = File.expand_path(File.join(FFI::Platform::CONF_DIR, 'types.conf'))
logfile = File.join(File.dirname(__FILE__), 'types_log')
task types_conf do |task|
require 'fileutils'
require_relative "rakelib/types_generator"
options = {}
FileUtils.mkdir_p(File.dirname(task.name), mode: 0755 )
File.open(task.name, File::CREAT|File::TRUNC|File::RDWR, 0644) do |f|
f.puts FFI::TypesGenerator.generate(options)
end
File.open(logfile, 'w') do |log|
log.puts(types_conf)
end
end
desc "Create or update type information for platform #{FFI::Platform::NAME}"
task :types_conf => types_conf
begin
require 'yard'
namespace :doc do
YARD::Rake::YardocTask.new do |yard|
end
end
rescue LoadError
warn "[warn] YARD unavailable"
end
@@ -0,0 +1,8 @@
target :lib do
signature "sig"
check "lib"
# ignore whole of lib, to just validate RBS in sig
ignore "lib"
end
@@ -0,0 +1,43 @@
require File.expand_path("../lib/#{File.basename(__FILE__, '.gemspec')}/version", __FILE__)
Gem::Specification.new do |s|
s.name = 'ffi'
s.version = FFI::VERSION
s.author = 'Wayne Meissner'
s.email = 'wmeissner@gmail.com'
s.homepage = 'https://github.com/ffi/ffi/wiki'
s.summary = 'Ruby FFI'
s.description = 'Ruby FFI library'
if s.respond_to?(:metadata)
s.metadata['bug_tracker_uri'] = 'https://github.com/ffi/ffi/issues'
s.metadata['changelog_uri'] = 'https://github.com/ffi/ffi/blob/master/CHANGELOG.md'
s.metadata['documentation_uri'] = 'https://github.com/ffi/ffi/wiki'
s.metadata['wiki_uri'] = 'https://github.com/ffi/ffi/wiki'
s.metadata['source_code_uri'] = 'https://github.com/ffi/ffi/'
s.metadata['mailing_list_uri'] = 'http://groups.google.com/group/ruby-ffi'
s.metadata['rubygems_mfa_required'] = 'true'
end
s.files = `git ls-files -z`.split("\x0").reject do |f|
f =~ /^(\.|bench|gen|libtest|nbproject|spec|rakelib)/
end
# Add libffi git files
lfs = `git --git-dir ext/ffi_c/libffi/.git ls-files -z`.split("\x0").reject do |f|
f =~ /^(\.|testsuite)/
end
# Add autoconf generated files of libffi
lfs += %w[ compile configure config.guess config.sub install-sh ltmain.sh missing fficonfig.h.in ]
# Add automake generated files of libffi
lfs += `git --git-dir ext/ffi_c/libffi/.git ls-files -z *.am */*.am`.gsub(".am\0", ".in\0").split("\x0")
s.files += lfs.map do |f|
File.join("ext/ffi_c/libffi", f)
end
s.extensions << 'ext/ffi_c/extconf.rb'
s.rdoc_options = %w[--exclude=ext/ffi_c/.*\.o$ --exclude=ffi_c\.(bundle|so)$]
s.license = 'BSD-3-Clause'
s.require_paths << 'ext/ffi_c'
s.required_ruby_version = '>= 2.5'
s.metadata['msys2_mingw_dependencies'] = 'libffi'
end
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,27 @@
if RUBY_ENGINE == 'ruby'
begin
require RUBY_VERSION.split('.')[0, 2].join('.') + '/ffi_c'
rescue Exception
require 'ffi_c'
end
require 'ffi/ffi'
elsif RUBY_ENGINE == 'jruby' && (RUBY_ENGINE_VERSION.split('.').map(&:to_i) <=> [9, 2, 20]) >= 0
JRuby::Util.load_ext("org.jruby.ext.ffi.FFIService")
require 'ffi/ffi'
elsif RUBY_ENGINE == 'truffleruby' && (RUBY_ENGINE_VERSION.split('.').map(&:to_i) <=> [20, 1, 0]) >= 0
require 'truffleruby/ffi_backend'
require 'ffi/ffi'
else
# Remove the ffi gem dir from the load path, then reload the internal ffi implementation
$LOAD_PATH.delete(File.dirname(__FILE__))
$LOAD_PATH.delete(File.join(File.dirname(__FILE__), 'ffi'))
unless $LOADED_FEATURES.nil?
$LOADED_FEATURES.delete(__FILE__)
$LOADED_FEATURES.delete('ffi.rb')
end
require 'ffi.rb'
end
@@ -0,0 +1,44 @@
#
# Copyright (C) 2020 Lars Kanis
#
# This file is part of ruby-ffi.
#
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice, this
# list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# * Neither the name of the Ruby FFI project nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.#
module FFI
class AbstractMemory
LONG_MAX = FFI::Pointer.new(1).size
private_constant :LONG_MAX
# Return +true+ if +self+ has a size limit.
#
# @return [Boolean]
def size_limit?
size != LONG_MAX
end
end
end
@@ -0,0 +1,186 @@
#
# Copyright (C) 2008-2010 Wayne Meissner
# Copyright (C) 2008 Mike Dalessio
#
# This file is part of ruby-ffi.
#
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice, this
# list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# * Neither the name of the Ruby FFI project nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
module FFI
class AutoPointer < Pointer
extend DataConverter
# @overload initialize(pointer, method)
# @param pointer [Pointer]
# @param method [Method]
# @return [self]
# The passed Method will be invoked at GC time.
# @overload initialize(pointer, proc)
# @param pointer [Pointer]
# @return [self]
# The passed Proc will be invoked at GC time (SEE WARNING BELOW!)
# @note WARNING: passing a proc _may_ cause your pointer to never be
# GC'd, unless you're careful to avoid trapping a reference to the
# pointer in the proc. See the test specs for examples.
# @overload initialize(pointer)
# @param pointer [Pointer]
# @return [self]
# The pointer's release() class method will be invoked at GC time.
#
# @note The safest, and therefore preferred, calling
# idiom is to pass a Method as the second parameter. Example usage:
#
# class PointerHelper
# def self.release(pointer)
# ...
# end
# end
#
# p = AutoPointer.new(other_pointer, PointerHelper.method(:release))
#
# The above code will cause PointerHelper#release to be invoked at GC time.
#
# @note
# The last calling idiom (only one parameter) is generally only
# going to be useful if you subclass {AutoPointer}, and override
# #release, which by default does nothing.
def initialize(ptr, proc=nil)
raise TypeError, "Invalid pointer" if ptr.nil? || !ptr.kind_of?(Pointer) ||
ptr.kind_of?(MemoryPointer) || ptr.kind_of?(AutoPointer)
super(ptr.type_size, ptr)
@releaser = if proc
if not proc.respond_to?(:call)
raise RuntimeError.new("proc must be callable")
end
Releaser.new(ptr, proc)
else
if not self.class.respond_to?(:release, true)
raise RuntimeError.new("no release method defined")
end
Releaser.new(ptr, self.class.method(:release))
end
ObjectSpace.define_finalizer(self, @releaser)
self
end
def dup
raise RuntimeError, "cannot duplicate FFI::AutoPointer"
end
alias clone dup
# @return [nil]
# Free the pointer.
def free
@releaser.free
end
# @param [Boolean] autorelease
# @return [Boolean] +autorelease+
# Set +autorelease+ property. See {Pointer Autorelease section at Pointer}.
def autorelease=(autorelease)
raise FrozenError.new("can't modify frozen #{self.class}") if frozen?
@releaser.autorelease=(autorelease)
end
# @return [Boolean] +autorelease+
# Get +autorelease+ property. See {Pointer Autorelease section at Pointer}.
def autorelease?
@releaser.autorelease
end
# @abstract Base class for {AutoPointer}'s releasers.
#
# All subclasses of Releaser should define a +#release(ptr)+ method.
# A releaser is an object in charge of release an {AutoPointer}.
class Releaser
attr_accessor :autorelease
# @param [Pointer] ptr
# @param [#call] proc
# @return [nil]
# A new instance of Releaser.
def initialize(ptr, proc)
@ptr = ptr
@proc = proc
@autorelease = true
end
# @return [nil]
# Free pointer.
def free
if @ptr
release(@ptr)
@autorelease = false
@ptr = nil
@proc = nil
end
end
# @param args
# Release pointer if +autorelease+ is set.
def call(*args)
release(@ptr) if @autorelease && @ptr
end
# Release +ptr+ by using Proc or Method defined at +ptr+
# {AutoPointer#initialize initialization}.
#
# @param [Pointer] ptr
# @return [nil]
def release(ptr)
@proc.call(ptr)
end
end
# Return native type of AutoPointer.
#
# Override {DataConverter#native_type}.
# @return [Type::POINTER]
# @raise {RuntimeError} if class does not implement a +#release+ method
def self.native_type
if not self.respond_to?(:release, true)
raise RuntimeError.new("no release method defined for #{self.inspect}")
end
Type::POINTER
end
# Create a new AutoPointer.
#
# Override {DataConverter#from_native}.
# @overload self.from_native(ptr, ctx)
# @param [Pointer] ptr
# @param ctx not used. Please set +nil+.
# @return [AutoPointer]
def self.from_native(val, ctx)
self.new(val)
end
end
end
@@ -0,0 +1,4 @@
#
# All the code from this file is now implemented in C. This file remains
# to satisfy any leftover require 'ffi/buffer' in user code
#
@@ -0,0 +1,4 @@
#
# All the code from this file is now implemented in C. This file remains
# to satisfy any leftover require 'ffi/callback' in user code
#
@@ -0,0 +1,54 @@
#
# Copyright (C) 2023-2023 Lars Kanis
#
# This file is part of ruby-ffi.
#
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice, this
# list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# * Neither the name of the Ruby FFI project nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
module FFI
if defined?(Ractor.make_shareable)
# This is for FFI internal use only.
def self.make_shareable(obj)
Ractor.make_shareable(obj)
end
else
def self.make_shareable(obj)
obj.freeze
end
end
if defined?(Ractor.shareable_proc)
# This is for FFI internal use only.
def self.shareable_proc(**kwargs, &block)
Ractor.shareable_proc(**kwargs, &block)
end
else
def self.shareable_proc(**_kwargs, &block)
block
end
end
end
@@ -0,0 +1,67 @@
#
# Copyright (C) 2008-2010 Wayne Meissner
#
# This file is part of ruby-ffi.
#
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice, this
# list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# * Neither the name of the Ruby FFI project nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.#
module FFI
# This module is used to extend somes classes and give then a common API.
#
# Most of methods defined here must be overridden.
module DataConverter
# Get native type.
#
# @overload native_type(type)
# @param [String, Symbol, Type] type
# @return [Type]
# Get native type from +type+.
#
# @overload native_type
# @raise {NotImplementedError} This method must be overridden.
def native_type(type = nil)
if type
@native_type = FFI.find_type(type)
else
native_type = @native_type
unless native_type
raise NotImplementedError, 'native_type method not overridden and no native_type set'
end
native_type
end
end
# Convert to a native type.
def to_native(value, ctx)
value
end
# Convert from a native type.
def from_native(value, ctx)
value
end
end
end
@@ -0,0 +1,118 @@
#
# Copyright (C) 2008-2010 Wayne Meissner
#
# This file is part of ruby-ffi.
#
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice, this
# list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# * Neither the name of the Ruby FFI project nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.#
module FFI
class DynamicLibrary
SEARCH_PATH = []
# The following search paths are tried, if the library could not be loaded in the first attempt.
# They are only executed on Macos in the following order:
if FFI::Platform.mac?
# 1. Try library paths possibly defined in LD_LIBRARY_PATH DYLD_LIBRARY_PATH first.
# This is because dlopen doesn't respect LD_LIBRARY_PATH and DYLD_LIBRARY_PATH is deleted by SIP-protected binaries.
# See here for details: https://github.com/ffi/ffi/issues/923#issuecomment-1872565313
%w[LD_LIBRARY_PATH DYLD_LIBRARY_PATH].each do |custom_path|
SEARCH_PATH.concat ENV.fetch(custom_path,"").split(File::PATH_SEPARATOR)
end
# 2. Then on macos/arm64 try /opt/homebrew/lib, since this is a typical standard directory.
# FFI is often used together with homebrew, so that we hardcode the path for arm64 here.
if FFI::Platform::ARCH == 'aarch64'
SEARCH_PATH << '/opt/homebrew/lib'
end
# 3. Then try typical system directories starting with the /local/ directory first.
#
# /usr/local/lib is used by homebrow on x86_64.
# /opt/local/lib is used by MacPorts and Fink.
# /usr/lib is there, because it was always there.
SEARCH_PATH.concat %w[/opt/local/lib /usr/local/lib /usr/lib]
end
# On Linux the library lookup paths are usually defined through /etc/ld.so.conf, which can be changed at will with root permissions.
# Also LD_LIBRARY_PATH is respected by the dynamic loader, so that there's usually no need and no advantage to do a fallback handling.
#
# Windows has it's own library lookup logic, very different to what we do here.
# See: https://github.com/oneclick/rubyinstaller2/wiki/For-gem-developers#user-content-dll-loading
FFI.make_shareable(SEARCH_PATH)
SEARCH_PATH_MESSAGE = "Searched in <system library path>#{ SEARCH_PATH.map{|a| ', ' + a}.join }".freeze
def self.load_library(name, flags)
if name == FFI::CURRENT_PROCESS
FFI::DynamicLibrary.open(nil, RTLD_LAZY | RTLD_LOCAL)
else
flags ||= RTLD_LAZY | RTLD_LOCAL
libnames = (name.is_a?(::Array) ? name : [name])
libnames = libnames.map(&:to_s).map { |n| [n, FFI.map_library_name(n)].uniq }.flatten.compact
errors = []
libnames.each do |libname|
lib = try_load(libname, flags, errors)
return lib if lib
unless libname.start_with?("/")
SEARCH_PATH.each do |prefix|
path = "#{prefix}/#{libname}"
if File.exist?(path)
lib = try_load(path, flags, errors)
return lib if lib
end
end
end
end
raise LoadError, [*errors, SEARCH_PATH_MESSAGE].join(".\n")
end
end
private_class_method :load_library
def self.try_load(libname, flags, errors)
begin
lib = FFI::DynamicLibrary.open(libname, flags)
return lib if lib
# LoadError for C ext & JRuby, RuntimeError for TruffleRuby
rescue LoadError, RuntimeError => ex
if ex.message =~ /(([^ \t()])+\.so([^ \t:()])*):([ \t])*(invalid ELF header|file too short|invalid file format)/
if File.binread($1) =~ /(?:GROUP|INPUT) *\( *([^ \)]+)/
return try_load($1, flags, errors)
end
end
errors << ex
nil
end
end
private_class_method :try_load
end
end
@@ -0,0 +1,302 @@
#
# Copyright (C) 2009, 2010 Wayne Meissner
# Copyright (C) 2009 Luc Heinrich
#
# This file is part of ruby-ffi.
#
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice, this
# list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# * Neither the name of the Ruby FFI project nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
module FFI
# An instance of this class permits to manage {Enum}s. In fact, Enums is a collection of {Enum}s.
class Enums
def initialize
@all_enums = Array.new
@tagged_enums = Hash.new
@symbol_map = Hash.new
end
# @param [Enum] enum
# Add an {Enum} to the collection.
def <<(enum)
@all_enums << enum
@tagged_enums[enum.tag] = enum unless enum.tag.nil?
@symbol_map.merge!(enum.symbol_map)
end
# @param query enum tag or part of an enum name
# @return [Enum]
# Find a {Enum} in collection.
def find(query)
if @tagged_enums.has_key?(query)
@tagged_enums[query]
else
@all_enums.detect { |enum| enum.symbols.include?(query) }
end
end
# @param symbol a symbol to find in merge symbol maps of all enums.
# @return a symbol
def __map_symbol(symbol)
@symbol_map[symbol]
end
end
# Represents a C enum.
#
# For a C enum:
# enum fruits {
# apple,
# banana,
# orange,
# pineapple
# };
# are defined this vocabulary:
# * a _symbol_ is a word from the enumeration (ie. _apple_, by example);
# * a _value_ is the value of a symbol in the enumeration (by example, apple has value _0_ and banana _1_).
class Enum
include DataConverter
attr_reader :tag
attr_reader :native_type
# @overload initialize(info, tag=nil)
# @param [nil, Enumerable] info
# @param [nil, Symbol] tag enum tag
# @overload initialize(native_type, info, tag=nil)
# @param [FFI::Type] native_type Native type for new Enum
# @param [nil, Enumerable] info symbols and values for new Enum
# @param [nil, Symbol] tag name of new Enum
def initialize(*args)
@native_type = args.first.kind_of?(FFI::Type) ? args.shift : Type::INT
info, @tag = *args
@kv_map = Hash.new
unless info.nil?
last_cst = nil
value = 0
info.each do |i|
case i
when Symbol
raise ArgumentError, "duplicate enum key" if @kv_map.has_key?(i)
@kv_map[i] = value
last_cst = i
value += 1
when Integer
@kv_map[last_cst] = i
value = i+1
end
end
end
@vk_map = @kv_map.invert
end
# @return [Array] enum symbol names
def symbols
@kv_map.keys
end
# Get a symbol or a value from the enum.
# @overload [](query)
# Get enum value from symbol.
# @param [Symbol] query
# @return [Integer]
# @overload [](query)
# Get enum symbol from value.
# @param [Integer] query
# @return [Symbol]
def [](query)
case query
when Symbol
@kv_map[query]
when Integer
@vk_map[query]
end
end
alias find []
# Get the symbol map.
# @return [Hash]
def symbol_map
@kv_map
end
alias to_h symbol_map
alias to_hash symbol_map
# @param [Symbol, Integer, #to_int] val
# @param ctx unused
# @return [Integer] value of a enum symbol
def to_native(val, ctx)
@kv_map[val] || if val.is_a?(Integer)
val
elsif val.respond_to?(:to_int)
val.to_int
else
raise ArgumentError, "invalid enum value, #{val.inspect}"
end
end
# @param val
# @return symbol name if it exists for +val+.
def from_native(val, ctx)
@vk_map[val] || val
end
end
# Represents a C enum whose values are power of 2
#
# @example
# enum {
# red = (1<<0),
# green = (1<<1),
# blue = (1<<2)
# }
#
# Contrary to classical enums, bitmask values are usually combined
# when used.
class Bitmask < Enum
# @overload initialize(info, tag=nil)
# @param [nil, Enumerable] info symbols and bit rank for new Bitmask
# @param [nil, Symbol] tag name of new Bitmask
# @overload initialize(native_type, info, tag=nil)
# @param [FFI::Type] native_type Native type for new Bitmask
# @param [nil, Enumerable] info symbols and bit rank for new Bitmask
# @param [nil, Symbol] tag name of new Bitmask
def initialize(*args)
@native_type = args.first.kind_of?(FFI::Type) ? args.shift : Type::INT
@signed = [Type::INT8, Type::INT16, Type::INT32, Type::INT64].include?(@native_type)
info, @tag = *args
@kv_map = Hash.new
unless info.nil?
last_cst = nil
value = 0
info.each do |i|
case i
when Symbol
raise ArgumentError, "duplicate bitmask key" if @kv_map.has_key?(i)
@kv_map[i] = 1 << value
last_cst = i
value += 1
when Integer
raise ArgumentError, "bitmask index should be positive" if i<0
@kv_map[last_cst] = 1 << i
value = i+1
end
end
end
@vk_map = @kv_map.invert
end
# Get a symbol list or a value from the bitmask
# @overload [](*query)
# Get bitmask value from symbol list
# @param [Symbol] query
# @return [Integer]
# @overload [](query)
# Get bitmask value from symbol array
# @param [Array<Symbol>] query
# @return [Integer]
# @overload [](*query)
# Get a list of bitmask symbols corresponding to
# the or reduction of a list of integer
# @param [Integer] query
# @return [Array<Symbol>]
# @overload [](query)
# Get a list of bitmask symbols corresponding to
# the or reduction of a list of integer
# @param [Array<Integer>] query
# @return [Array<Symbol>]
def [](*query)
flat_query = query.flatten
raise ArgumentError, "query should be homogeneous, #{query.inspect}" unless flat_query.all? { |o| o.is_a?(Symbol) } || flat_query.all? { |o| o.is_a?(Integer) || o.respond_to?(:to_int) }
case flat_query[0]
when Symbol
flat_query.inject(0) do |val, o|
v = @kv_map[o]
if v then val | v else val end
end
when Integer, ->(o) { o.respond_to?(:to_int) }
val = flat_query.inject(0) { |mask, o| mask |= o.to_int }
@kv_map.select { |_, v| v & val != 0 }.keys
end
end
# Get the native value of a bitmask
# @overload to_native(query, ctx)
# @param [Symbol, Integer, #to_int] query
# @param ctx unused
# @return [Integer] value of a bitmask
# @overload to_native(query, ctx)
# @param [Array<Symbol, Integer, #to_int>] query
# @param ctx unused
# @return [Integer] value of a bitmask
def to_native(query, ctx)
return 0 if query.nil?
flat_query = [query].flatten
res = flat_query.inject(0) do |val, o|
case o
when Symbol
v = @kv_map[o]
raise ArgumentError, "invalid bitmask value, #{o.inspect}" unless v
val | v
when Integer
val | o
when ->(obj) { obj.respond_to?(:to_int) }
val | o.to_int
else
raise ArgumentError, "invalid bitmask value, #{o.inspect}"
end
end
# Take two's complement of positive values bigger than the max value
# for the type when native type is signed.
if @signed && res >= (1 << (@native_type.size * 8 - 1))
res = -(-res & ((1 << (@native_type.size * 8)) - 1))
end
res
end
# @param [Integer] val
# @param ctx unused
# @return [Array<Symbol, Integer>] list of symbol names corresponding to val, plus an optional remainder if some bits don't match any constant
def from_native(val, ctx)
flags = @kv_map.select { |_, v| v & val != 0 }
list = flags.keys
# force an unsigned value of the correct size
val &= (1 << (@native_type.size * 8)) - 1 if @signed
# If there are unmatch flags,
# return them in an integer,
# else information can be lost.
# Similar to Enum behavior.
remainder = val ^ flags.values.reduce(0, :|)
list.push remainder unless remainder == 0
return list
end
end
end
@@ -0,0 +1,43 @@
#
# Copyright (C) 2008-2010 Wayne Meissner
#
# This file is part of ruby-ffi.
#
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice, this
# list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# * Neither the name of the Ruby FFI project nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.#
module FFI
# @return (see FFI::LastError.error)
# @see FFI::LastError.error
def self.errno
FFI::LastError.error
end
# @param error (see FFI::LastError.error=)
# @return (see FFI::LastError.error=)
# @see FFI::LastError.error=
def self.errno=(error)
FFI::LastError.error = error
end
end
@@ -0,0 +1,109 @@
#
# Copyright (C) 2008-2010 JRuby project
#
# This file is part of ruby-ffi.
#
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice, this
# list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# * Neither the name of the Ruby FFI project nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
require 'ffi/compat'
require 'ffi/platform'
require 'ffi/data_converter'
require 'ffi/types'
require 'ffi/library_path'
require 'ffi/library'
require 'ffi/errno'
require 'ffi/abstract_memory'
require 'ffi/pointer'
require 'ffi/memorypointer'
require 'ffi/struct'
require 'ffi/union'
require 'ffi/managedstruct'
require 'ffi/callback'
require 'ffi/io'
require 'ffi/autopointer'
require 'ffi/variadic'
require 'ffi/enum'
require 'ffi/version'
require 'ffi/function'
module FFI
module ModernForkTracking
def _fork
pid = super
if pid == 0
FFI._async_cb_dispatcher_atfork_child
end
pid
end
end
module LegacyForkTracking
module KernelExt
def fork
if block_given?
super do
FFI._async_cb_dispatcher_atfork_child
yield
end
else
pid = super
FFI._async_cb_dispatcher_atfork_child if pid.nil?
pid
end
end
end
module KernelExtPrivate
include KernelExt
private :fork
end
module IOExt
def popen(*args)
return super unless args[0] == '-'
super(*args) do |pipe|
FFI._async_cb_dispatcher_atfork_child if pipe.nil?
yield pipe
end
end
ruby2_keywords :popen if respond_to?(:ruby2_keywords)
end
end
if Process.respond_to?(:_fork)
# The nice Ruby 3.1+ way of doing things
::Process.singleton_class.prepend(ModernForkTracking)
elsif Process.respond_to?(:fork)
# Barf. Old CRuby.
# Most of the inspiration for how to do this was stolen from ActiveSupport.
::Object.prepend(LegacyForkTracking::KernelExtPrivate)
::Object.singleton_class.prepend(LegacyForkTracking::KernelExt)
::Kernel.prepend(LegacyForkTracking::KernelExtPrivate)
::Kernel.singleton_class.prepend(LegacyForkTracking::KernelExt)
::IO.singleton_class.prepend(LegacyForkTracking::IOExt)
end
end
@@ -0,0 +1,94 @@
#
# Copyright (C) 2008-2010 JRuby project
#
# This file is part of ruby-ffi.
#
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice, this
# list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# * Neither the name of the Ruby FFI project nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
module FFI
class Function
# Only MRI allows function type queries
if private_method_defined?(:type)
# Retrieve the return type of the function
#
# This method returns FFI type returned by the function.
#
# @return [FFI::Type]
def return_type
type.return_type
end
# Retrieve Array of parameter types
#
# This method returns an Array of FFI types accepted as function parameters.
#
# @return [Array<FFI::Type>]
def param_types
type.param_types
end
end
if RUBY_PLATFORM == 'aarch64-mingw-ucrt'
# Use a workaround for https://github.com/libffi/libffi/issues/905
def attach(mod, name)
this = self
body = proc do |*args, &block|
this.call(*args, &block)
end
mod.define_method(name, body)
mod.define_singleton_method(name, body)
# Store function Proc's for re-definition as Ractor-shareable in Library#freeze
funcs = mod.instance_variable_get("@ffi_function_procs")
unless funcs
funcs = {}
mod.instance_variable_set("@ffi_function_procs", funcs)
end
funcs[name] = self
self
end
end
# Stash the Function in a module variable so it can be inspected by attached_functions.
# On CRuby it also ensures that it does not get garbage collected.
module RegisterAttach
def attach(mod, name)
funcs = mod.instance_variable_defined?("@ffi_functions") && mod.instance_variable_get("@ffi_functions")
unless funcs
funcs = {}
mod.instance_variable_set("@ffi_functions", funcs)
end
funcs[name.to_sym] = self
# Jump to the native attach method of CRuby, JRuby or Tuffleruby
super
end
end
private_constant :RegisterAttach
prepend RegisterAttach
end
end
@@ -0,0 +1,62 @@
#
# Copyright (C) 2008, 2009 Wayne Meissner
#
# This file is part of ruby-ffi.
#
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice, this
# list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# * Neither the name of the Ruby FFI project nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.#
module FFI
# This module implements a couple of class methods to play with IO.
module IO
# @param [Integer] fd file decriptor
# @param [String] mode mode string
# @return [::IO]
# Synonym for IO::for_fd.
def self.for_fd(fd, mode = "r")
::IO.for_fd(fd, mode)
end
# @param [#read] io io to read from
# @param [AbstractMemory] buf destination for data read from +io+
# @param [nil, Integer] len maximul number of bytes to read from +io+. If +nil+,
# read until end of file.
# @return [Integer] length really read, in bytes
#
# A version of IO#read that reads data from an IO and put then into a native buffer.
#
# This will be optimized at some future time to eliminate the double copy.
#
def self.native_read(io, buf, len)
tmp = io.read(len)
return -1 unless tmp
buf.put_bytes(0, tmp)
tmp.length
end
end
end
@@ -0,0 +1,592 @@
#
# Copyright (C) 2008-2010 Wayne Meissner
#
# This file is part of ruby-ffi.
#
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice, this
# list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# * Neither the name of the Ruby FFI project nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.#
require 'ffi/dynamic_library'
module FFI
CURRENT_PROCESS = USE_THIS_PROCESS_AS_LIBRARY = FFI.make_shareable(Object.new)
# @param [String, FFI::LibraryPath] lib library name or LibraryPath object
# @return [String] library name formatted for current platform
# Transform a generic library name to a platform library name
# @example
# # Linux
# FFI.map_library_name 'c' # -> "libc.so.6"
# FFI.map_library_name 'jpeg' # -> "libjpeg.so"
# # Windows
# FFI.map_library_name 'c' # -> "msvcrt.dll"
# FFI.map_library_name 'jpeg' # -> "jpeg.dll"
def self.map_library_name(lib)
# Mangle the library name to reflect the native library naming conventions
LibraryPath.wrap(lib).to_s
end
# Exception raised when a function is not found in libraries
class NotFoundError < LoadError
def initialize(function, *libraries)
super("Function '#{function}' not found in [#{libraries[0].nil? ? 'current process' : libraries.join(", ")}]")
end
end
# This module is the base to use native functions.
#
# A basic usage may be:
# require 'ffi'
#
# module Hello
# extend FFI::Library
# ffi_lib FFI::Library::LIBC
# attach_function 'puts', [ :string ], :int
# end
#
# Hello.puts("Hello, World")
#
#
module Library
CURRENT_PROCESS = FFI::CURRENT_PROCESS
LIBC = FFI::Platform::LIBC
# @param mod extended object
# @return [nil]
# @raise {RuntimeError} if +mod+ is not a Module
# Test if extended object is a Module. If not, raise RuntimeError.
def self.extended(mod)
raise RuntimeError.new("must only be extended by module") unless mod.kind_of?(::Module)
end
# @param [Array] names names of libraries to load
# @return [Array<DynamicLibrary>]
# @raise {LoadError} if a library cannot be opened
# Load native libraries.
def ffi_lib(*names)
raise LoadError.new("library names list must not be empty") if names.empty?
lib_flags = defined?(@ffi_lib_flags) && @ffi_lib_flags
@ffi_libs = names.map do |name|
FFI::DynamicLibrary.send(:load_library, name, lib_flags)
end
end
# Set the calling convention for {#attach_function} and {#callback}
#
# @see http://en.wikipedia.org/wiki/Stdcall#stdcall
# @note +:stdcall+ is typically used for attaching Windows API functions
#
# @param [Symbol] convention one of +:default+, +:stdcall+
# @return [Symbol] the new calling convention
def ffi_convention(convention = nil)
@ffi_convention ||= :default
@ffi_convention = convention if convention
@ffi_convention
end
# @see #ffi_lib
# @return [Array<FFI::DynamicLibrary>] array of currently loaded FFI libraries
# @raise [LoadError] if no libraries have been loaded (using {#ffi_lib})
# Get FFI libraries loaded using {#ffi_lib}.
def ffi_libraries
raise LoadError.new("no library specified") if !defined?(@ffi_libs) || @ffi_libs.empty?
@ffi_libs
end
# Flags used in {#ffi_lib}.
#
# This map allows you to supply symbols to {#ffi_lib_flags} instead of
# the actual constants.
FlagsMap = {
:global => DynamicLibrary::RTLD_GLOBAL,
:local => DynamicLibrary::RTLD_LOCAL,
:lazy => DynamicLibrary::RTLD_LAZY,
:now => DynamicLibrary::RTLD_NOW
}
# Sets library flags for {#ffi_lib}.
#
# @example
# ffi_lib_flags(:lazy, :local) # => 5
#
# @param [Symbol, …] flags (see {FlagsMap})
# @return [Integer] the new value
def ffi_lib_flags(*flags)
@ffi_lib_flags = flags.inject(0) { |result, f| result | FlagsMap[f] }
end
##
# @overload attach_function(func, args, returns, options = {})
# @example attach function without an explicit name
# module Foo
# extend FFI::Library
# ffi_lib FFI::Library::LIBC
# attach_function :malloc, [:size_t], :pointer
# end
# # now callable via Foo.malloc
# @overload attach_function(name, func, args, returns, options = {})
# @example attach function with an explicit name
# module Bar
# extend FFI::Library
# ffi_lib FFI::Library::LIBC
# attach_function :c_malloc, :malloc, [:size_t], :pointer
# end
# # now callable via Bar.c_malloc
#
# Attach C function +func+ to this module.
#
#
# @param [#to_s] name name of ruby method to attach as
# @param [#to_s] func name of C function to attach
# @param [Array<Symbol>] args an array of types
# @param [Symbol] returns type of return value
# @option options [Boolean] :blocking (@blocking) set to true if the C function is a blocking call
# @option options [Symbol] :convention (:default) calling convention (see {#ffi_convention})
# @option options [FFI::Enums] :enums
# @option options [Hash] :type_map
#
# @return [FFI::VariadicInvoker]
#
# @raise [FFI::NotFoundError] if +func+ cannot be found in the attached libraries (see {#ffi_lib})
def attach_function(name, func, args, returns = nil, options = nil)
mname, a2, a3, a4, a5 = name, func, args, returns, options
cname, arg_types, ret_type, opts = (a4 && (a2.is_a?(String) || a2.is_a?(Symbol))) ? [ a2, a3, a4, a5 ] : [ mname.to_s, a2, a3, a4 ]
# Convert :foo to the native type
arg_types = arg_types.map { |e| find_type(e) }
options = {
:convention => ffi_convention,
:type_map => defined?(@ffi_typedefs) ? @ffi_typedefs : nil,
:blocking => defined?(@blocking) && @blocking,
:enums => defined?(@ffi_enums) ? @ffi_enums : nil,
}
@blocking = false
options.merge!(opts) if opts && opts.is_a?(Hash)
# Try to locate the function in any of the libraries
invokers = []
ffi_libraries.each do |lib|
if invokers.empty?
begin
function = nil
function_names(cname, arg_types).find do |fname|
function = lib.find_function(fname)
end
raise LoadError unless function
invokers << if arg_types[-1] == FFI::NativeType::VARARGS
VariadicInvoker.new(function, arg_types, find_type(ret_type), options)
else
Function.new(find_type(ret_type), arg_types, function, options)
end
rescue LoadError
end
end
end
invoker = invokers.compact.shift
raise FFI::NotFoundError.new(cname.to_s, ffi_libraries.map { |lib| lib.name }) unless invoker
invoker.attach(self, mname.to_s)
invoker
end
# @param [#to_s] name function name
# @param [Array] arg_types function's argument types
# @return [Array<String>]
# This function returns a list of possible names to lookup.
# @note Function names on windows may be decorated if they are using stdcall. See
# * http://en.wikipedia.org/wiki/Name_mangling#C_name_decoration_in_Microsoft_Windows
# * http://msdn.microsoft.com/en-us/library/zxk0tw93%28v=VS.100%29.aspx
# * http://en.wikibooks.org/wiki/X86_Disassembly/Calling_Conventions#STDCALL
# Note that decorated names can be overridden via def files. Also note that the
# windows api, although using, doesn't have decorated names.
def function_names(name, arg_types)
result = [name.to_s]
if ffi_convention == :stdcall
# Get the size of each parameter
size = arg_types.inject(0) do |mem, arg|
size = arg.size
# The size must be a multiple of 4
size += (4 - size) % 4
mem + size
end
result << "_#{name.to_s}@#{size}" # win32
result << "#{name.to_s}@#{size}" # win64
end
result
end
# @overload attach_variable(mname, cname, type)
# @param [#to_s] mname name of ruby method to attach as
# @param [#to_s] cname name of C variable to attach
# @param [DataConverter, Struct, Symbol, Type] type C variable's type
# @example
# module Bar
# extend FFI::Library
# ffi_lib 'my_lib'
# attach_variable :c_myvar, :myvar, :long
# end
# # now callable via Bar.c_myvar
# @overload attach_variable(cname, type)
# @param [#to_s] mname name of ruby method to attach as
# @param [DataConverter, Struct, Symbol, Type] type C variable's type
# @example
# module Bar
# extend FFI::Library
# ffi_lib 'my_lib'
# attach_variable :myvar, :long
# end
# # now callable via Bar.myvar
# @return [DynamicLibrary::Symbol]
# @raise {FFI::NotFoundError} if +cname+ cannot be found in libraries
#
# Attach C variable +cname+ to this module.
def attach_variable(mname, a1, a2 = nil)
cname, type = a2 ? [ a1, a2 ] : [ mname.to_s, a1 ]
mname = mname.to_sym
address = nil
ffi_libraries.each do |lib|
begin
address = lib.find_variable(cname.to_s)
break unless address.nil?
rescue LoadError
end
end
raise FFI::NotFoundError.new(cname, ffi_libraries) if address.nil? || address.null?
if type.is_a?(Class) && type < FFI::Struct
# If it is a global struct, just attach directly to the pointer
s = s = type.new(address) # Assigning twice to suppress unused variable warning
self.module_eval(<<-code, __FILE__, __LINE__)
@ffi_gsvars = {} unless defined?(@ffi_gsvars)
@ffi_gsvars[#{mname.inspect}] = s
def self.#{mname}
@ffi_gsvars[#{mname.inspect}]
end
code
else
sc = Class.new(FFI::Struct)
sc.layout :gvar, find_type(type)
s = sc.new(address)
#
# Attach to this module as mname/mname=
#
self.module_eval(<<-code, __FILE__, __LINE__)
@ffi_gvars = {} unless defined?(@ffi_gvars)
@ffi_gvars[#{mname.inspect}] = s
def self.#{mname}
@ffi_gvars[#{mname.inspect}][:gvar]
end
def self.#{mname}=(value)
@ffi_gvars[#{mname.inspect}][:gvar] = value
end
code
end
address
end
# @overload callback(name, params, ret)
# @param name callback name to add to type map
# @param [Array] params array of parameters' types
# @param [DataConverter, Struct, Symbol, Type] ret callback return type
# @overload callback(params, ret)
# @param [Array] params array of parameters' types
# @param [DataConverter, Struct, Symbol, Type] ret callback return type
# @return [FFI::CallbackInfo]
def callback(*args)
raise ArgumentError, "wrong number of arguments" if args.length < 2 || args.length > 3
name, params, ret = if args.length == 3
args
else
[ nil, args[0], args[1] ]
end
native_params = params.map { |e| find_type(e) }
raise ArgumentError, "callbacks cannot have variadic parameters" if native_params.include?(FFI::Type::VARARGS)
options = Hash.new
options[:convention] = ffi_convention
options[:enums] = @ffi_enums if defined?(@ffi_enums)
ret_type = find_type(ret)
if ret_type == Type::STRING
raise TypeError, ":string is not allowed as return type of callbacks"
end
cb = FFI::CallbackInfo.new(ret_type, native_params, options)
# Add to the symbol -> type map (unless there was no name)
unless name.nil?
typedef cb, name
end
cb
end
# Register or get an already registered type definition.
#
# To register a new type definition, +old+ should be a {FFI::Type}. +add+
# is in this case the type definition.
#
# If +old+ is a {DataConverter}, a {Type::Mapped} is returned.
#
# If +old+ is +:enum+
# * and +add+ is an +Array+, a call to {#enum} is made with +add+ as single parameter;
# * in others cases, +info+ is used to create a named enum.
#
# If +old+ is a key for type map, #typedef get +old+ type definition.
#
# @param [DataConverter, Symbol, Type] old
# @param [Symbol] add
# @param [Symbol] info
# @return [FFI::Enum, FFI::Type]
def typedef(old, add, info=nil)
@ffi_typedefs = Hash.new unless defined?(@ffi_typedefs)
@ffi_typedefs[add] = if old.kind_of?(FFI::Type)
old
elsif @ffi_typedefs.has_key?(old)
@ffi_typedefs[old]
elsif old.is_a?(DataConverter)
FFI::Type::Mapped.new(old)
elsif old == :enum
if add.kind_of?(Array)
self.enum(add)
else
self.enum(info, add)
end
else
FFI.find_type(old)
end
end
# @param [DataConverter, Type, Struct, Symbol] t type to find
# @return [Type]
# Find a type definition.
def find_type(t)
if t.kind_of?(Type)
t
elsif defined?(@ffi_typedefs) && @ffi_typedefs.has_key?(t)
@ffi_typedefs[t]
elsif t.is_a?(Class) && t < Struct
Type::POINTER
elsif t.is_a?(DataConverter)
# Add a typedef so next time the converter is used, it hits the cache
typedef Type::Mapped.new(t), t
end || FFI.find_type(t)
end
private
# Generic enum builder
# @param [Class] klass can be one of FFI::Enum or FFI::Bitmask
# @param args (see #enum or #bitmask)
def generic_enum(klass, *args)
native_type = args.first.kind_of?(FFI::Type) ? args.shift : nil
name, values = if args[0].kind_of?(Symbol) && args[1].kind_of?(Array)
[ args[0], args[1] ]
elsif args[0].kind_of?(Array)
[ nil, args[0] ]
else
[ nil, args ]
end
@ffi_enums = FFI::Enums.new unless defined?(@ffi_enums)
@ffi_enums << (e = native_type ? klass.new(native_type, values, name) : klass.new(values, name))
# If called with a name, add a typedef alias
typedef(e, name) if name
e
end
public
# @overload enum(name, values)
# Create a named enum.
# @example
# enum :foo, [:zero, :one, :two] # named enum
# @param [Symbol] name name for new enum
# @param [Array] values values for enum
# @overload enum(*args)
# Create an unnamed enum.
# @example
# enum :zero, :one, :two # unnamed enum
# @param args values for enum
# @overload enum(values)
# Create an unnamed enum.
# @example
# enum [:zero, :one, :two] # unnamed enum, equivalent to above example
# @param [Array] values values for enum
# @overload enum(native_type, name, values)
# Create a named enum and specify the native type.
# @example
# enum FFI::Type::UINT64, :foo, [:zero, :one, :two] # named enum
# @param [FFI::Type] native_type native type for new enum
# @param [Symbol] name name for new enum
# @param [Array] values values for enum
# @overload enum(native_type, *args)
# Create an unnamed enum and specify the native type.
# @example
# enum FFI::Type::UINT64, :zero, :one, :two # unnamed enum
# @param [FFI::Type] native_type native type for new enum
# @param args values for enum
# @overload enum(native_type, values)
# Create an unnamed enum and specify the native type.
# @example
# enum Type::UINT64, [:zero, :one, :two] # unnamed enum, equivalent to above example
# @param [FFI::Type] native_type native type for new enum
# @param [Array] values values for enum
# @return [FFI::Enum]
# Create a new {FFI::Enum}.
def enum(*args)
generic_enum(FFI::Enum, *args)
end
# @overload bitmask(name, values)
# Create a named bitmask
# @example
# bitmask :foo, [:red, :green, :blue] # bits 0,1,2 are used
# bitmask :foo, [:red, :green, 5, :blue] # bits 0,5,6 are used
# @param [Symbol] name for new bitmask
# @param [Array<Symbol, Integer>] values for new bitmask
# @overload bitmask(*args)
# Create an unamed bitmask
# @example
# bm = bitmask :red, :green, :blue # bits 0,1,2 are used
# bm = bitmask :red, :green, 5, blue # bits 0,5,6 are used
# @param [Symbol, Integer] args values for new bitmask
# @overload bitmask(values)
# Create an unamed bitmask
# @example
# bm = bitmask [:red, :green, :blue] # bits 0,1,2 are used
# bm = bitmask [:red, :green, 5, blue] # bits 0,5,6 are used
# @param [Array<Symbol, Integer>] values for new bitmask
# @overload bitmask(native_type, name, values)
# Create a named enum and specify the native type.
# @example
# bitmask FFI::Type::UINT64, :foo, [:red, :green, :blue]
# @param [FFI::Type] native_type native type for new bitmask
# @param [Symbol] name for new bitmask
# @param [Array<Symbol, Integer>] values for new bitmask
# @overload bitmask(native_type, *args)
# @example
# bitmask FFI::Type::UINT64, :red, :green, :blue
# @param [FFI::Type] native_type native type for new bitmask
# @param [Symbol, Integer] args values for new bitmask
# @overload bitmask(native_type, values)
# Create a named enum and specify the native type.
# @example
# bitmask FFI::Type::UINT64, [:red, :green, :blue]
# @param [FFI::Type] native_type native type for new bitmask
# @param [Array<Symbol, Integer>] values for new bitmask
# @return [FFI::Bitmask]
# Create a new FFI::Bitmask
def bitmask(*args)
generic_enum(FFI::Bitmask, *args)
end
# @param name
# @return [FFI::Enum]
# Find an enum by name.
def enum_type(name)
@ffi_enums.find(name) if defined?(@ffi_enums)
end
# @param symbol
# @return [FFI::Enum]
# Find an enum by a symbol it contains.
def enum_value(symbol)
@ffi_enums.__map_symbol(symbol)
end
# Retrieve all attached functions and their function signature
#
# This method returns a Hash of method names of attached functions connected by #attach_function and the corresponding function type.
# The function type responds to #return_type and #param_types which return the FFI types of the function signature.
#
# @return [Hash< Symbol => [FFI::Function, FFI::VariadicInvoker] >]
def attached_functions
@ffi_functions || {}
end
# Retrieve all attached variables and their type
#
# This method returns a Hash of variable names and the corresponding type or variables connected by #attach_variable .
#
# @return [Hash< Symbol => ffi_type >]
def attached_variables
(
(defined?(@ffi_gsvars) ? @ffi_gsvars : {}).map do |name, gvar|
[name, gvar.class]
end +
(defined?(@ffi_gvars) ? @ffi_gvars : {}).map do |name, gvar|
[name, gvar.layout[:gvar].type]
end
).to_h
end
# Freeze all definitions of the module
#
# This freezes the module's definitions, so that it can be used in a Ractor.
# No further functions or variables can be attached and no further enums or typedefs can be created in this module afterwards.
def freeze
# @ffi_function_procs is only used on aarch64-mingw-ucrt
instance_variable_get("@ffi_function_procs")&.each do |name, func|
# Redefine attached functions as Ractor-shareable.
# The function Proc can't be shareable from the beginning, since it references enums and typedefs.
this = FFI.make_shareable(func)
body = FFI.shareable_proc(self: nil) do |*args, &block|
this.call(*args, &block)
end
undef_method(name)
singleton_class.undef_method(name)
define_method(name, body)
define_singleton_method(name, body)
end
instance_variables.each do |name|
var = instance_variable_get(name)
FFI.make_shareable(var)
end
super
nil
end
end
end
@@ -0,0 +1,109 @@
#
# Copyright (C) 2023 Lars Kanis
#
# This file is part of ruby-ffi.
#
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice, this
# list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# * Neither the name of the Ruby FFI project nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.#
module FFI
# Transform a generic library name and ABI number to a platform library name
#
# Example:
# module LibVips
# extend FFI::Library
# ffi_lib LibraryPath.new("vips", abi_number: 42)
# end
#
# This translates to the following library file names:
# libvips-42.dll on Windows
# libvips.so.42 on Linux
# libvips.42.dylib on Macos
#
# See https://packaging.ubuntu.com/html/libraries.html for more information about library naming.
class LibraryPath
attr_reader :name
attr_reader :abi_number
attr_reader :root
# Build a new library path
#
# * <tt>name</tt> : The name of the library without file prefix or suffix.
# * <tt>abi_number</tt> : The ABI number of the library.
# * <tt>root</tt> : An optional base path prepended to the library name.
def initialize(name, abi_number: nil, root: nil)
@name = name
@abi_number = abi_number
@root = root
end
def self.wrap(value)
# We allow instances of LibraryPath to pass through transparently:
return value if value.is_a?(self)
# We special case a library named 'c' to be the standard C library:
return Library::LIBC if value == 'c'
# If provided a relative file name we convert it into a library path:
if value && File.basename(value) == value
return self.new(value)
end
# Otherwise, we assume it's a full path to a library:
return value
end
def full_name
# If the abi_number is given, we format it specifically according to platform rules:
if abi_number
if Platform.windows?
"#{Platform::LIBPREFIX}#{name}-#{abi_number}.#{Platform::LIBSUFFIX}"
elsif Platform.mac?
"#{Platform::LIBPREFIX}#{name}.#{abi_number}.#{Platform::LIBSUFFIX}"
else # Linux? BSD? etc.
"#{Platform::LIBPREFIX}#{name}.#{Platform::LIBSUFFIX}.#{abi_number}"
end
else
# Otherwise we just add prefix and suffix:
lib = name
# Add library prefix if missing
lib = Platform::LIBPREFIX + lib unless lib =~ /^#{Platform::LIBPREFIX}/
# Add library extension if missing
r = Platform.windows? || Platform.mac? ? "\\.#{Platform::LIBSUFFIX}$" : "\\.so($|\\.[1234567890]+)"
lib += ".#{Platform::LIBSUFFIX}" unless lib =~ /#{r}/
lib
end
end
def to_s
if root
# If the root path is given, we generate the full path:
File.join(root, full_name)
else
full_name
end
end
end
end
@@ -0,0 +1,84 @@
# Copyright (C) 2008 Mike Dalessio
#
# This file is part of ruby-ffi.
#
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice, this
# list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# * Neither the name of the Ruby FFI project nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
module FFI
#
# FFI::ManagedStruct allows custom garbage-collection of your FFI::Structs.
#
# The typical use case would be when interacting with a library
# that has a nontrivial memory management design, such as a linked
# list or a binary tree.
#
# When the {Struct} instance is garbage collected, FFI::ManagedStruct will
# invoke the class's release() method during object finalization.
#
# @example Example usage:
# module MyLibrary
# ffi_lib "libmylibrary"
# attach_function :new_dlist, [], :pointer
# attach_function :destroy_dlist, [:pointer], :void
# end
#
# class DoublyLinkedList < FFI::ManagedStruct
# @@@
# struct do |s|
# s.name 'struct dlist'
# s.include 'dlist.h'
# s.field :head, :pointer
# s.field :tail, :pointer
# end
# @@@
#
# def self.release ptr
# MyLibrary.destroy_dlist(ptr)
# end
# end
#
# begin
# ptr = DoublyLinkedList.new(MyLibrary.new_dlist)
# # do something with the list
# end
# # struct is out of scope, and will be GC'd using DoublyLinkedList#release
#
#
class ManagedStruct < FFI::Struct
# @overload initialize(pointer)
# @param [Pointer] pointer
# Create a new ManagedStruct which will invoke the class method #release on
# @overload initialize
# A new instance of FFI::ManagedStruct.
def initialize(pointer=nil)
raise NoMethodError, "release() not implemented for class #{self}" unless self.class.respond_to?(:release, true)
raise ArgumentError, "Must supply a pointer to memory for the Struct" unless pointer
super AutoPointer.new(pointer, self.class.method(:release))
end
end
end
@@ -0,0 +1 @@
# This class is now implemented in C
@@ -0,0 +1,187 @@
#
# Copyright (C) 2008, 2009 Wayne Meissner
#
# This file is part of ruby-ffi.
#
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice, this
# list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# * Neither the name of the Ruby FFI project nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.#
require 'rbconfig'
require_relative 'compat'
module FFI
class PlatformError < LoadError; end
# This module defines different constants and class methods to play with
# various platforms.
module Platform
OS = FFI.make_shareable(case RbConfig::CONFIG['host_os'].downcase
when /linux/
"linux"
when /darwin/
"darwin"
when /freebsd/
"freebsd"
when /netbsd/
"netbsd"
when /openbsd/
"openbsd"
when /dragonfly/
"dragonflybsd"
when /sunos|solaris/
"solaris"
when /mingw|mswin/
"windows"
else
RbConfig::CONFIG['host_os'].downcase
end)
OSVERSION = RbConfig::CONFIG['host_os'].gsub(/[^\d]/, '').to_i
CPU = FFI.make_shareable(RbConfig::CONFIG['host_cpu'])
ARCH = FFI.make_shareable(case CPU.downcase
when /amd64|x86_64|x64/
"x86_64"
when /i\d86|x86|i86pc/
"i386"
when /ppc64|powerpc64/
"powerpc64"
when /ppc|powerpc/
"powerpc"
when /sparcv9|sparc64/
"sparcv9"
when /arm64|aarch64/ # MacOS calls it "arm64", other operating systems "aarch64"
"aarch64"
when /^arm/
if OS == "darwin" # Ruby before 3.0 reports "arm" instead of "arm64" as host_cpu on darwin
"aarch64"
else
"arm"
end
else
RbConfig::CONFIG['host_cpu']
end)
private
# @param [String) os
# @return [Boolean]
# Test if current OS is +os+.
def self.is_os(os)
OS == os
end
IS_GNU = defined?(GNU_LIBC)
IS_LINUX = is_os("linux")
IS_MAC = is_os("darwin")
IS_FREEBSD = is_os("freebsd")
IS_NETBSD = is_os("netbsd")
IS_OPENBSD = is_os("openbsd")
IS_DRAGONFLYBSD = is_os("dragonfly")
IS_SOLARIS = is_os("solaris")
IS_WINDOWS = is_os("windows")
IS_BSD = IS_MAC || IS_FREEBSD || IS_NETBSD || IS_OPENBSD || IS_DRAGONFLYBSD
# Add the version for known ABI breaks
name_version = "12" if IS_FREEBSD && OSVERSION >= 12 # 64-bit inodes
NAME = FFI.make_shareable("#{ARCH}-#{OS}#{name_version}")
CONF_DIR = FFI.make_shareable(File.join(File.dirname(__FILE__), 'platform', NAME))
public
LIBPREFIX = FFI.make_shareable(case OS
when /windows|msys/
''
when /cygwin/
'cyg'
else
'lib'
end)
LIBSUFFIX = FFI.make_shareable(case OS
when /darwin/
'dylib'
when /linux|bsd|solaris/
'so'
when /windows|cygwin|msys/
'dll'
else
# Punt and just assume a sane unix (i.e. anything but AIX)
'so'
end)
LIBC = FFI.make_shareable(if IS_WINDOWS
crtname = RbConfig::CONFIG["RUBY_SO_NAME"][/msvc\w+/] || 'ucrtbase'
"#{crtname}.dll"
elsif IS_GNU
GNU_LIBC
elsif OS == 'cygwin'
"cygwin1.dll"
elsif OS == 'msys'
# Not sure how msys 1.0 behaves, tested on MSYS2.
"msys-2.0.dll"
else
"#{LIBPREFIX}c.#{LIBSUFFIX}"
end)
LITTLE_ENDIAN = 1234 unless defined?(LITTLE_ENDIAN)
BIG_ENDIAN = 4321 unless defined?(BIG_ENDIAN)
unless defined?(BYTE_ORDER)
BYTE_ORDER = [0x12345678].pack("I") == [0x12345678].pack("N") ? BIG_ENDIAN : LITTLE_ENDIAN
end
# Test if current OS is a *BSD (include MAC)
# @return [Boolean]
def self.bsd?
IS_BSD
end
# Test if current OS is Windows
# @return [Boolean]
def self.windows?
IS_WINDOWS
end
# Test if current OS is Mac OS
# @return [Boolean]
def self.mac?
IS_MAC
end
# Test if current OS is Solaris (Sun OS)
# @return [Boolean]
def self.solaris?
IS_SOLARIS
end
# Test if current OS is a unix OS
# @return [Boolean]
def self.unix?
!IS_WINDOWS
end
end
end
@@ -0,0 +1,130 @@
rbx.platform.typedef.__darwin_blkcnt_t = long_long
rbx.platform.typedef.__darwin_blksize_t = int
rbx.platform.typedef.__darwin_clock_t = ulong
rbx.platform.typedef.__darwin_ct_rune_t = int
rbx.platform.typedef.__darwin_dev_t = int
rbx.platform.typedef.__darwin_fsblkcnt_t = uint
rbx.platform.typedef.__darwin_fsfilcnt_t = uint
rbx.platform.typedef.__darwin_gid_t = uint
rbx.platform.typedef.__darwin_id_t = uint
rbx.platform.typedef.__darwin_ino64_t = ulong_long
rbx.platform.typedef.__darwin_ino_t = ulong_long
rbx.platform.typedef.__darwin_intptr_t = long
rbx.platform.typedef.__darwin_mach_port_name_t = uint
rbx.platform.typedef.__darwin_mach_port_t = uint
rbx.platform.typedef.__darwin_mode_t = ushort
rbx.platform.typedef.__darwin_natural_t = uint
rbx.platform.typedef.__darwin_off_t = long_long
rbx.platform.typedef.__darwin_pid_t = int
rbx.platform.typedef.__darwin_pthread_key_t = ulong
rbx.platform.typedef.__darwin_ptrdiff_t = long
rbx.platform.typedef.__darwin_rune_t = int
rbx.platform.typedef.__darwin_sigset_t = uint
rbx.platform.typedef.__darwin_size_t = ulong
rbx.platform.typedef.__darwin_socklen_t = uint
rbx.platform.typedef.__darwin_ssize_t = long
rbx.platform.typedef.__darwin_suseconds_t = int
rbx.platform.typedef.__darwin_time_t = long
rbx.platform.typedef.__darwin_uid_t = uint
rbx.platform.typedef.__darwin_useconds_t = uint
rbx.platform.typedef.__darwin_uuid_string_t[37] = char
rbx.platform.typedef.__darwin_uuid_t[16] = uchar
rbx.platform.typedef.__darwin_wchar_t = int
rbx.platform.typedef.__darwin_wint_t = int
rbx.platform.typedef.__int16_t = short
rbx.platform.typedef.__int32_t = int
rbx.platform.typedef.__int64_t = long_long
rbx.platform.typedef.__int8_t = char
rbx.platform.typedef.__uint16_t = ushort
rbx.platform.typedef.__uint32_t = uint
rbx.platform.typedef.__uint64_t = ulong_long
rbx.platform.typedef.__uint8_t = uchar
rbx.platform.typedef.blkcnt_t = long_long
rbx.platform.typedef.blksize_t = int
rbx.platform.typedef.caddr_t = string
rbx.platform.typedef.clock_t = ulong
rbx.platform.typedef.daddr_t = int
rbx.platform.typedef.dev_t = int
rbx.platform.typedef.errno_t = int
rbx.platform.typedef.fd_mask = int
rbx.platform.typedef.fixpt_t = uint
rbx.platform.typedef.fsblkcnt_t = uint
rbx.platform.typedef.fsfilcnt_t = uint
rbx.platform.typedef.gid_t = uint
rbx.platform.typedef.id_t = uint
rbx.platform.typedef.in_addr_t = uint
rbx.platform.typedef.in_port_t = ushort
rbx.platform.typedef.ino64_t = ulong_long
rbx.platform.typedef.ino_t = ulong_long
rbx.platform.typedef.int16_t = short
rbx.platform.typedef.int32_t = int
rbx.platform.typedef.int64_t = long_long
rbx.platform.typedef.int8_t = char
rbx.platform.typedef.int_fast16_t = short
rbx.platform.typedef.int_fast32_t = int
rbx.platform.typedef.int_fast64_t = long_long
rbx.platform.typedef.int_fast8_t = char
rbx.platform.typedef.int_least16_t = short
rbx.platform.typedef.int_least32_t = int
rbx.platform.typedef.int_least64_t = long_long
rbx.platform.typedef.int_least8_t = char
rbx.platform.typedef.intmax_t = long
rbx.platform.typedef.intptr_t = long
rbx.platform.typedef.key_t = int
rbx.platform.typedef.mode_t = ushort
rbx.platform.typedef.nlink_t = ushort
rbx.platform.typedef.off_t = long_long
rbx.platform.typedef.pid_t = int
rbx.platform.typedef.pthread_key_t = ulong
rbx.platform.typedef.ptrdiff_t = long
rbx.platform.typedef.qaddr_t = pointer
rbx.platform.typedef.quad_t = long_long
rbx.platform.typedef.register_t = long_long
rbx.platform.typedef.rlim_t = ulong_long
rbx.platform.typedef.rsize_t = ulong
rbx.platform.typedef.sa_family_t = uchar
rbx.platform.typedef.sae_associd_t = uint
rbx.platform.typedef.sae_connid_t = uint
rbx.platform.typedef.segsz_t = int
rbx.platform.typedef.size_t = ulong
rbx.platform.typedef.socklen_t = uint
rbx.platform.typedef.ssize_t = long
rbx.platform.typedef.suseconds_t = int
rbx.platform.typedef.swblk_t = int
rbx.platform.typedef.syscall_arg_t = ulong_long
rbx.platform.typedef.time_t = long
rbx.platform.typedef.u_char = uchar
rbx.platform.typedef.u_int = uint
rbx.platform.typedef.u_int16_t = ushort
rbx.platform.typedef.u_int32_t = uint
rbx.platform.typedef.u_int64_t = ulong_long
rbx.platform.typedef.u_int8_t = uchar
rbx.platform.typedef.u_long = ulong
rbx.platform.typedef.u_quad_t = ulong_long
rbx.platform.typedef.u_short = ushort
rbx.platform.typedef.uid_t = uint
rbx.platform.typedef.uint = uint
rbx.platform.typedef.uint16_t = ushort
rbx.platform.typedef.uint32_t = uint
rbx.platform.typedef.uint64_t = ulong_long
rbx.platform.typedef.uint8_t = uchar
rbx.platform.typedef.uint_fast16_t = ushort
rbx.platform.typedef.uint_fast32_t = uint
rbx.platform.typedef.uint_fast64_t = ulong_long
rbx.platform.typedef.uint_fast8_t = uchar
rbx.platform.typedef.uint_least16_t = ushort
rbx.platform.typedef.uint_least32_t = uint
rbx.platform.typedef.uint_least64_t = ulong_long
rbx.platform.typedef.uint_least8_t = uchar
rbx.platform.typedef.uintmax_t = ulong
rbx.platform.typedef.uintptr_t = ulong
rbx.platform.typedef.useconds_t = uint
rbx.platform.typedef.user_addr_t = ulong_long
rbx.platform.typedef.user_long_t = long_long
rbx.platform.typedef.user_off_t = long_long
rbx.platform.typedef.user_size_t = ulong_long
rbx.platform.typedef.user_ssize_t = long_long
rbx.platform.typedef.user_time_t = long_long
rbx.platform.typedef.user_ulong_t = ulong_long
rbx.platform.typedef.ushort = ushort
rbx.platform.typedef.wchar_t = int
@@ -0,0 +1,128 @@
rbx.platform.typedef.__clock_t = int
rbx.platform.typedef.__clockid_t = int
rbx.platform.typedef.__cpuid_t = ulong
rbx.platform.typedef.__dev_t = int
rbx.platform.typedef.__fd_mask = int
rbx.platform.typedef.__fixpt_t = uint
rbx.platform.typedef.__gid_t = uint
rbx.platform.typedef.__id_t = uint
rbx.platform.typedef.__in_addr_t = uint
rbx.platform.typedef.__in_port_t = ushort
rbx.platform.typedef.__ino_t = uint
rbx.platform.typedef.__int16_t = short
rbx.platform.typedef.__int32_t = int
rbx.platform.typedef.__int64_t = long_long
rbx.platform.typedef.__int8_t = char
rbx.platform.typedef.__int_fast16_t = int
rbx.platform.typedef.__int_fast32_t = int
rbx.platform.typedef.__int_fast64_t = long_long
rbx.platform.typedef.__int_fast8_t = int
rbx.platform.typedef.__int_least16_t = short
rbx.platform.typedef.__int_least32_t = int
rbx.platform.typedef.__int_least64_t = long_long
rbx.platform.typedef.__int_least8_t = char
rbx.platform.typedef.__intmax_t = long_long
rbx.platform.typedef.__intptr_t = long
rbx.platform.typedef.__key_t = long
rbx.platform.typedef.__mode_t = uint
rbx.platform.typedef.__nlink_t = uint
rbx.platform.typedef.__off_t = long_long
rbx.platform.typedef.__paddr_t = ulong
rbx.platform.typedef.__pid_t = int
rbx.platform.typedef.__psize_t = ulong
rbx.platform.typedef.__ptrdiff_t = long
rbx.platform.typedef.__register_t = long_long
rbx.platform.typedef.__rlim_t = ulong_long
rbx.platform.typedef.__rune_t = int
rbx.platform.typedef.__sa_family_t = uchar
rbx.platform.typedef.__segsz_t = int
rbx.platform.typedef.__size_t = ulong
rbx.platform.typedef.__socklen_t = uint
rbx.platform.typedef.__ssize_t = long
rbx.platform.typedef.__suseconds_t = long
rbx.platform.typedef.__swblk_t = int
rbx.platform.typedef.__time_t = long
rbx.platform.typedef.__timer_t = int
rbx.platform.typedef.__uid_t = uint
rbx.platform.typedef.__uint16_t = ushort
rbx.platform.typedef.__uint32_t = uint
rbx.platform.typedef.__uint64_t = ulong_long
rbx.platform.typedef.__uint8_t = uchar
rbx.platform.typedef.__uint_fast16_t = uint
rbx.platform.typedef.__uint_fast32_t = uint
rbx.platform.typedef.__uint_fast64_t = ulong_long
rbx.platform.typedef.__uint_fast8_t = uint
rbx.platform.typedef.__uint_least16_t = ushort
rbx.platform.typedef.__uint_least32_t = uint
rbx.platform.typedef.__uint_least64_t = ulong_long
rbx.platform.typedef.__uint_least8_t = uchar
rbx.platform.typedef.__uintmax_t = ulong_long
rbx.platform.typedef.__uintptr_t = ulong
rbx.platform.typedef.__useconds_t = uint
rbx.platform.typedef.__vaddr_t = ulong
rbx.platform.typedef.__vsize_t = ulong
rbx.platform.typedef.__wchar_t = int
rbx.platform.typedef.__wctrans_t = pointer
rbx.platform.typedef.__wctype_t = pointer
rbx.platform.typedef.__wint_t = int
rbx.platform.typedef.caddr_t = string
rbx.platform.typedef.clock_t = int
rbx.platform.typedef.clockid_t = int
rbx.platform.typedef.cpuid_t = ulong
rbx.platform.typedef.daddr32_t = int
rbx.platform.typedef.daddr64_t = long_long
rbx.platform.typedef.daddr_t = int
rbx.platform.typedef.dev_t = int
rbx.platform.typedef.fixpt_t = uint
rbx.platform.typedef.gid_t = uint
rbx.platform.typedef.id_t = uint
rbx.platform.typedef.in_addr_t = uint
rbx.platform.typedef.in_port_t = ushort
rbx.platform.typedef.ino_t = uint
rbx.platform.typedef.int16_t = short
rbx.platform.typedef.int32_t = int
rbx.platform.typedef.int64_t = long_long
rbx.platform.typedef.int8_t = char
rbx.platform.typedef.intptr_t = long
rbx.platform.typedef.key_t = long
rbx.platform.typedef.mode_t = uint
rbx.platform.typedef.nlink_t = uint
rbx.platform.typedef.off_t = long_long
rbx.platform.typedef.paddr_t = ulong
rbx.platform.typedef.pid_t = int
rbx.platform.typedef.psize_t = ulong
rbx.platform.typedef.qaddr_t = pointer
rbx.platform.typedef.quad_t = long_long
rbx.platform.typedef.register_t = long_long
rbx.platform.typedef.rlim_t = ulong_long
rbx.platform.typedef.sa_family_t = uchar
rbx.platform.typedef.segsz_t = int
rbx.platform.typedef.size_t = ulong
rbx.platform.typedef.socklen_t = uint
rbx.platform.typedef.ssize_t = long
rbx.platform.typedef.suseconds_t = int
rbx.platform.typedef.swblk_t = int
rbx.platform.typedef.time_t = int
rbx.platform.typedef.timer_t = int
rbx.platform.typedef.u_char = uchar
rbx.platform.typedef.u_int = uint
rbx.platform.typedef.u_int16_t = ushort
rbx.platform.typedef.u_int32_t = uint
rbx.platform.typedef.u_int64_t = ulong_long
rbx.platform.typedef.u_int8_t = uchar
rbx.platform.typedef.u_long = ulong
rbx.platform.typedef.u_quad_t = ulong_long
rbx.platform.typedef.u_short = ushort
rbx.platform.typedef.uid_t = uint
rbx.platform.typedef.uint = uint
rbx.platform.typedef.uint16_t = ushort
rbx.platform.typedef.uint32_t = uint
rbx.platform.typedef.uint64_t = ulong_long
rbx.platform.typedef.uint8_t = uchar
rbx.platform.typedef.uintptr_t = ulong
rbx.platform.typedef.ulong = ulong
rbx.platform.typedef.unchar = uchar
rbx.platform.typedef.useconds_t = uint
rbx.platform.typedef.ushort = ushort
rbx.platform.typedef.vaddr_t = ulong
rbx.platform.typedef.vsize_t = ulong
@@ -0,0 +1,181 @@
rbx.platform.typedef.*) = pointer
rbx.platform.typedef.___wchar_t = uint
rbx.platform.typedef.__accmode_t = int
rbx.platform.typedef.__blkcnt_t = long
rbx.platform.typedef.__blksize_t = int
rbx.platform.typedef.__char16_t = ushort
rbx.platform.typedef.__char32_t = uint
rbx.platform.typedef.__clock_t = int
rbx.platform.typedef.__clockid_t = int
rbx.platform.typedef.__cpulevel_t = int
rbx.platform.typedef.__cpusetid_t = int
rbx.platform.typedef.__cpuwhich_t = int
rbx.platform.typedef.__critical_t = long
rbx.platform.typedef.__ct_rune_t = int
rbx.platform.typedef.__daddr_t = long
rbx.platform.typedef.__dev_t = ulong
rbx.platform.typedef.__fd_mask = ulong
rbx.platform.typedef.__fflags_t = uint
rbx.platform.typedef.__fixpt_t = uint
rbx.platform.typedef.__fsblkcnt_t = ulong
rbx.platform.typedef.__fsfilcnt_t = ulong
rbx.platform.typedef.__gid_t = uint
rbx.platform.typedef.__id_t = long
rbx.platform.typedef.__ino_t = ulong
rbx.platform.typedef.__int16_t = short
rbx.platform.typedef.__int32_t = int
rbx.platform.typedef.__int64_t = long
rbx.platform.typedef.__int8_t = char
rbx.platform.typedef.__int_fast16_t = int
rbx.platform.typedef.__int_fast32_t = int
rbx.platform.typedef.__int_fast64_t = long
rbx.platform.typedef.__int_fast8_t = int
rbx.platform.typedef.__int_least16_t = short
rbx.platform.typedef.__int_least32_t = int
rbx.platform.typedef.__int_least64_t = long
rbx.platform.typedef.__int_least8_t = char
rbx.platform.typedef.__intfptr_t = long
rbx.platform.typedef.__intmax_t = long
rbx.platform.typedef.__intptr_t = long
rbx.platform.typedef.__key_t = long
rbx.platform.typedef.__lwpid_t = int
rbx.platform.typedef.__mode_t = ushort
rbx.platform.typedef.__nl_item = int
rbx.platform.typedef.__nlink_t = ulong
rbx.platform.typedef.__off64_t = long
rbx.platform.typedef.__off_t = long
rbx.platform.typedef.__pid_t = int
rbx.platform.typedef.__ptrdiff_t = long
rbx.platform.typedef.__register_t = long
rbx.platform.typedef.__rlim_t = long
rbx.platform.typedef.__rman_res_t = ulong
rbx.platform.typedef.__rune_t = int
rbx.platform.typedef.__sa_family_t = uchar
rbx.platform.typedef.__segsz_t = long
rbx.platform.typedef.__size_t = ulong
rbx.platform.typedef.__socklen_t = uint
rbx.platform.typedef.__ssize_t = long
rbx.platform.typedef.__suseconds_t = long
rbx.platform.typedef.__time_t = long
rbx.platform.typedef.__u_register_t = ulong
rbx.platform.typedef.__uid_t = uint
rbx.platform.typedef.__uint16_t = ushort
rbx.platform.typedef.__uint32_t = uint
rbx.platform.typedef.__uint64_t = ulong
rbx.platform.typedef.__uint8_t = uchar
rbx.platform.typedef.__uint_fast16_t = uint
rbx.platform.typedef.__uint_fast32_t = uint
rbx.platform.typedef.__uint_fast64_t = ulong
rbx.platform.typedef.__uint_fast8_t = uint
rbx.platform.typedef.__uint_least16_t = ushort
rbx.platform.typedef.__uint_least32_t = uint
rbx.platform.typedef.__uint_least64_t = ulong
rbx.platform.typedef.__uint_least8_t = uchar
rbx.platform.typedef.__uintfptr_t = ulong
rbx.platform.typedef.__uintmax_t = ulong
rbx.platform.typedef.__uintptr_t = ulong
rbx.platform.typedef.__useconds_t = uint
rbx.platform.typedef.__vm_offset_t = ulong
rbx.platform.typedef.__vm_paddr_t = ulong
rbx.platform.typedef.__vm_size_t = ulong
rbx.platform.typedef.__wint_t = int
rbx.platform.typedef.accmode_t = int
rbx.platform.typedef.blkcnt_t = long
rbx.platform.typedef.blksize_t = int
rbx.platform.typedef.c_caddr_t = pointer
rbx.platform.typedef.caddr_t = string
rbx.platform.typedef.cap_ioctl_t = ulong
rbx.platform.typedef.clock_t = int
rbx.platform.typedef.clockid_t = int
rbx.platform.typedef.cpulevel_t = int
rbx.platform.typedef.cpusetid_t = int
rbx.platform.typedef.cpuwhich_t = int
rbx.platform.typedef.critical_t = long
rbx.platform.typedef.daddr_t = long
rbx.platform.typedef.dev_t = ulong
rbx.platform.typedef.fd_mask = ulong
rbx.platform.typedef.fflags_t = uint
rbx.platform.typedef.fixpt_t = uint
rbx.platform.typedef.fsblkcnt_t = ulong
rbx.platform.typedef.fsfilcnt_t = ulong
rbx.platform.typedef.gid_t = uint
rbx.platform.typedef.id_t = long
rbx.platform.typedef.in_addr_t = uint
rbx.platform.typedef.in_port_t = ushort
rbx.platform.typedef.ino_t = ulong
rbx.platform.typedef.int16_t = short
rbx.platform.typedef.int32_t = int
rbx.platform.typedef.int64_t = long
rbx.platform.typedef.int8_t = char
rbx.platform.typedef.int_fast16_t = int
rbx.platform.typedef.int_fast32_t = int
rbx.platform.typedef.int_fast64_t = long
rbx.platform.typedef.int_fast8_t = int
rbx.platform.typedef.int_least16_t = short
rbx.platform.typedef.int_least32_t = int
rbx.platform.typedef.int_least64_t = long
rbx.platform.typedef.int_least8_t = char
rbx.platform.typedef.intmax_t = long
rbx.platform.typedef.intptr_t = long
rbx.platform.typedef.key_t = long
rbx.platform.typedef.kpaddr_t = ulong
rbx.platform.typedef.ksize_t = ulong
rbx.platform.typedef.kssize_t = long
rbx.platform.typedef.kvaddr_t = ulong
rbx.platform.typedef.lwpid_t = int
rbx.platform.typedef.mode_t = ushort
rbx.platform.typedef.nlink_t = ulong
rbx.platform.typedef.off64_t = long
rbx.platform.typedef.off_t = long
rbx.platform.typedef.pid_t = int
rbx.platform.typedef.pthread_key_t = int
rbx.platform.typedef.ptrdiff_t = long
rbx.platform.typedef.qaddr_t = pointer
rbx.platform.typedef.quad_t = long
rbx.platform.typedef.register_t = long
rbx.platform.typedef.rlim_t = long
rbx.platform.typedef.rman_res_t = ulong
rbx.platform.typedef.rsize_t = ulong
rbx.platform.typedef.rune_t = int
rbx.platform.typedef.sa_family_t = uchar
rbx.platform.typedef.sbintime_t = long
rbx.platform.typedef.segsz_t = long
rbx.platform.typedef.size_t = ulong
rbx.platform.typedef.socklen_t = uint
rbx.platform.typedef.ssize_t = long
rbx.platform.typedef.suseconds_t = long
rbx.platform.typedef.time_t = long
rbx.platform.typedef.u_char = uchar
rbx.platform.typedef.u_int = uint
rbx.platform.typedef.u_int16_t = ushort
rbx.platform.typedef.u_int32_t = uint
rbx.platform.typedef.u_int64_t = ulong
rbx.platform.typedef.u_int8_t = uchar
rbx.platform.typedef.u_long = ulong
rbx.platform.typedef.u_quad_t = ulong
rbx.platform.typedef.u_register_t = ulong
rbx.platform.typedef.u_short = ushort
rbx.platform.typedef.uid_t = uint
rbx.platform.typedef.uint = uint
rbx.platform.typedef.uint16_t = ushort
rbx.platform.typedef.uint32_t = uint
rbx.platform.typedef.uint64_t = ulong
rbx.platform.typedef.uint8_t = uchar
rbx.platform.typedef.uint_fast16_t = uint
rbx.platform.typedef.uint_fast32_t = uint
rbx.platform.typedef.uint_fast64_t = ulong
rbx.platform.typedef.uint_fast8_t = uint
rbx.platform.typedef.uint_least16_t = ushort
rbx.platform.typedef.uint_least32_t = uint
rbx.platform.typedef.uint_least64_t = ulong
rbx.platform.typedef.uint_least8_t = uchar
rbx.platform.typedef.uintmax_t = ulong
rbx.platform.typedef.uintptr_t = ulong
rbx.platform.typedef.useconds_t = uint
rbx.platform.typedef.ushort = ushort
rbx.platform.typedef.vm_offset_t = ulong
rbx.platform.typedef.vm_ooffset_t = ulong
rbx.platform.typedef.vm_paddr_t = ulong
rbx.platform.typedef.vm_pindex_t = ulong
rbx.platform.typedef.vm_size_t = ulong
rbx.platform.typedef.wchar_t = uint
@@ -0,0 +1,175 @@
rbx.platform.typedef.*__caddr_t = char
rbx.platform.typedef.__blkcnt64_t = long
rbx.platform.typedef.__blkcnt_t = long
rbx.platform.typedef.__blksize_t = int
rbx.platform.typedef.__clock_t = long
rbx.platform.typedef.__clockid_t = int
rbx.platform.typedef.__daddr_t = int
rbx.platform.typedef.__dev_t = ulong
rbx.platform.typedef.__fd_mask = long
rbx.platform.typedef.__fsblkcnt64_t = ulong
rbx.platform.typedef.__fsblkcnt_t = ulong
rbx.platform.typedef.__fsfilcnt64_t = ulong
rbx.platform.typedef.__fsfilcnt_t = ulong
rbx.platform.typedef.__fsword_t = long
rbx.platform.typedef.__gid_t = uint
rbx.platform.typedef.__id_t = uint
rbx.platform.typedef.__ino64_t = ulong
rbx.platform.typedef.__ino_t = ulong
rbx.platform.typedef.__int16_t = short
rbx.platform.typedef.__int32_t = int
rbx.platform.typedef.__int64_t = long
rbx.platform.typedef.__int8_t = char
rbx.platform.typedef.__int_least16_t = short
rbx.platform.typedef.__int_least32_t = int
rbx.platform.typedef.__int_least64_t = long
rbx.platform.typedef.__int_least8_t = char
rbx.platform.typedef.__intmax_t = long
rbx.platform.typedef.__intptr_t = long
rbx.platform.typedef.__kernel_caddr_t = string
rbx.platform.typedef.__kernel_clock_t = long
rbx.platform.typedef.__kernel_clockid_t = int
rbx.platform.typedef.__kernel_daddr_t = int
rbx.platform.typedef.__kernel_gid16_t = ushort
rbx.platform.typedef.__kernel_gid32_t = uint
rbx.platform.typedef.__kernel_gid_t = uint
rbx.platform.typedef.__kernel_ino_t = ulong
rbx.platform.typedef.__kernel_ipc_pid_t = int
rbx.platform.typedef.__kernel_key_t = int
rbx.platform.typedef.__kernel_loff_t = long_long
rbx.platform.typedef.__kernel_long_t = long
rbx.platform.typedef.__kernel_mode_t = uint
rbx.platform.typedef.__kernel_mqd_t = int
rbx.platform.typedef.__kernel_off_t = long
rbx.platform.typedef.__kernel_old_dev_t = uint
rbx.platform.typedef.__kernel_old_gid_t = ushort
rbx.platform.typedef.__kernel_old_time_t = long
rbx.platform.typedef.__kernel_old_uid_t = ushort
rbx.platform.typedef.__kernel_pid_t = int
rbx.platform.typedef.__kernel_ptrdiff_t = long
rbx.platform.typedef.__kernel_size_t = ulong
rbx.platform.typedef.__kernel_ssize_t = long
rbx.platform.typedef.__kernel_suseconds_t = long
rbx.platform.typedef.__kernel_time64_t = long_long
rbx.platform.typedef.__kernel_time_t = long
rbx.platform.typedef.__kernel_timer_t = int
rbx.platform.typedef.__kernel_uid16_t = ushort
rbx.platform.typedef.__kernel_uid32_t = uint
rbx.platform.typedef.__kernel_uid_t = uint
rbx.platform.typedef.__kernel_ulong_t = ulong
rbx.platform.typedef.__key_t = int
rbx.platform.typedef.__loff_t = long
rbx.platform.typedef.__mode_t = uint
rbx.platform.typedef.__nlink_t = uint
rbx.platform.typedef.__off64_t = long
rbx.platform.typedef.__off_t = long
rbx.platform.typedef.__pid_t = int
rbx.platform.typedef.__priority_which_t = int
rbx.platform.typedef.__quad_t = long
rbx.platform.typedef.__rlim64_t = ulong
rbx.platform.typedef.__rlim_t = ulong
rbx.platform.typedef.__rlimit_resource_t = int
rbx.platform.typedef.__rusage_who_t = int
rbx.platform.typedef.__sig_atomic_t = int
rbx.platform.typedef.__socklen_t = uint
rbx.platform.typedef.__ssize_t = long
rbx.platform.typedef.__suseconds64_t = long
rbx.platform.typedef.__suseconds_t = long
rbx.platform.typedef.__syscall_slong_t = long
rbx.platform.typedef.__syscall_ulong_t = ulong
rbx.platform.typedef.__thrd_t = ulong
rbx.platform.typedef.__time_t = long
rbx.platform.typedef.__timer_t = pointer
rbx.platform.typedef.__tss_t = uint
rbx.platform.typedef.__u_char = uchar
rbx.platform.typedef.__u_int = uint
rbx.platform.typedef.__u_long = ulong
rbx.platform.typedef.__u_quad_t = ulong
rbx.platform.typedef.__u_short = ushort
rbx.platform.typedef.__uid_t = uint
rbx.platform.typedef.__uint16_t = ushort
rbx.platform.typedef.__uint32_t = uint
rbx.platform.typedef.__uint64_t = ulong
rbx.platform.typedef.__uint8_t = uchar
rbx.platform.typedef.__uint_least16_t = ushort
rbx.platform.typedef.__uint_least32_t = uint
rbx.platform.typedef.__uint_least64_t = ulong
rbx.platform.typedef.__uint_least8_t = uchar
rbx.platform.typedef.__uintmax_t = ulong
rbx.platform.typedef.__useconds_t = uint
rbx.platform.typedef.blkcnt_t = long
rbx.platform.typedef.blksize_t = int
rbx.platform.typedef.clock_t = long
rbx.platform.typedef.clockid_t = int
rbx.platform.typedef.daddr_t = int
rbx.platform.typedef.dev_t = ulong
rbx.platform.typedef.fd_mask = long
rbx.platform.typedef.fsblkcnt_t = ulong
rbx.platform.typedef.fsfilcnt_t = ulong
rbx.platform.typedef.gid_t = uint
rbx.platform.typedef.id_t = uint
rbx.platform.typedef.in_addr_t = uint
rbx.platform.typedef.in_port_t = ushort
rbx.platform.typedef.ino_t = ulong
rbx.platform.typedef.int16_t = short
rbx.platform.typedef.int32_t = int
rbx.platform.typedef.int64_t = long
rbx.platform.typedef.int8_t = char
rbx.platform.typedef.int_fast16_t = long
rbx.platform.typedef.int_fast32_t = long
rbx.platform.typedef.int_fast64_t = long
rbx.platform.typedef.int_fast8_t = char
rbx.platform.typedef.int_least16_t = short
rbx.platform.typedef.int_least32_t = int
rbx.platform.typedef.int_least64_t = long
rbx.platform.typedef.int_least8_t = char
rbx.platform.typedef.intmax_t = long
rbx.platform.typedef.intptr_t = long
rbx.platform.typedef.key_t = int
rbx.platform.typedef.loff_t = long
rbx.platform.typedef.mode_t = uint
rbx.platform.typedef.nlink_t = uint
rbx.platform.typedef.off_t = long
rbx.platform.typedef.pid_t = int
rbx.platform.typedef.pthread_key_t = uint
rbx.platform.typedef.pthread_once_t = int
rbx.platform.typedef.pthread_t = ulong
rbx.platform.typedef.ptrdiff_t = long
rbx.platform.typedef.quad_t = long
rbx.platform.typedef.register_t = long
rbx.platform.typedef.rlim_t = ulong
rbx.platform.typedef.sa_family_t = ushort
rbx.platform.typedef.size_t = ulong
rbx.platform.typedef.socklen_t = uint
rbx.platform.typedef.ssize_t = long
rbx.platform.typedef.suseconds_t = long
rbx.platform.typedef.time_t = long
rbx.platform.typedef.timer_t = pointer
rbx.platform.typedef.u_char = uchar
rbx.platform.typedef.u_int = uint
rbx.platform.typedef.u_int16_t = ushort
rbx.platform.typedef.u_int32_t = uint
rbx.platform.typedef.u_int64_t = ulong
rbx.platform.typedef.u_int8_t = uchar
rbx.platform.typedef.u_long = ulong
rbx.platform.typedef.u_quad_t = ulong
rbx.platform.typedef.u_short = ushort
rbx.platform.typedef.uid_t = uint
rbx.platform.typedef.uint = uint
rbx.platform.typedef.uint16_t = ushort
rbx.platform.typedef.uint32_t = uint
rbx.platform.typedef.uint64_t = ulong
rbx.platform.typedef.uint8_t = uchar
rbx.platform.typedef.uint_fast16_t = ulong
rbx.platform.typedef.uint_fast32_t = ulong
rbx.platform.typedef.uint_fast64_t = ulong
rbx.platform.typedef.uint_fast8_t = uchar
rbx.platform.typedef.uint_least16_t = ushort
rbx.platform.typedef.uint_least32_t = uint
rbx.platform.typedef.uint_least64_t = ulong
rbx.platform.typedef.uint_least8_t = uchar
rbx.platform.typedef.uintmax_t = ulong
rbx.platform.typedef.uintptr_t = ulong
rbx.platform.typedef.ulong = ulong
rbx.platform.typedef.ushort = ushort
rbx.platform.typedef.wchar_t = uint
@@ -0,0 +1,134 @@
rbx.platform.typedef.__blkcnt_t = long_long
rbx.platform.typedef.__blksize_t = int
rbx.platform.typedef.__clock_t = long_long
rbx.platform.typedef.__clockid_t = int
rbx.platform.typedef.__cpuid_t = ulong
rbx.platform.typedef.__dev_t = int
rbx.platform.typedef.__fd_mask = uint
rbx.platform.typedef.__fixpt_t = uint
rbx.platform.typedef.__fsblkcnt_t = ulong_long
rbx.platform.typedef.__fsfilcnt_t = ulong_long
rbx.platform.typedef.__gid_t = uint
rbx.platform.typedef.__id_t = uint
rbx.platform.typedef.__in_addr_t = uint
rbx.platform.typedef.__in_port_t = ushort
rbx.platform.typedef.__ino_t = ulong_long
rbx.platform.typedef.__int16_t = short
rbx.platform.typedef.__int32_t = int
rbx.platform.typedef.__int64_t = long_long
rbx.platform.typedef.__int8_t = char
rbx.platform.typedef.__int_fast16_t = int
rbx.platform.typedef.__int_fast32_t = int
rbx.platform.typedef.__int_fast64_t = long_long
rbx.platform.typedef.__int_fast8_t = int
rbx.platform.typedef.__int_least16_t = short
rbx.platform.typedef.__int_least32_t = int
rbx.platform.typedef.__int_least64_t = long_long
rbx.platform.typedef.__int_least8_t = char
rbx.platform.typedef.__intmax_t = long_long
rbx.platform.typedef.__intptr_t = long
rbx.platform.typedef.__key_t = long
rbx.platform.typedef.__mode_t = uint
rbx.platform.typedef.__nlink_t = uint
rbx.platform.typedef.__off_t = long_long
rbx.platform.typedef.__paddr_t = ulong
rbx.platform.typedef.__pid_t = int
rbx.platform.typedef.__psize_t = ulong
rbx.platform.typedef.__ptrdiff_t = long
rbx.platform.typedef.__register_t = long
rbx.platform.typedef.__rlim_t = ulong_long
rbx.platform.typedef.__rune_t = int
rbx.platform.typedef.__sa_family_t = uchar
rbx.platform.typedef.__segsz_t = int
rbx.platform.typedef.__size_t = ulong
rbx.platform.typedef.__socklen_t = uint
rbx.platform.typedef.__ssize_t = long
rbx.platform.typedef.__suseconds_t = long
rbx.platform.typedef.__swblk_t = int
rbx.platform.typedef.__time_t = long_long
rbx.platform.typedef.__timer_t = int
rbx.platform.typedef.__uid_t = uint
rbx.platform.typedef.__uint16_t = ushort
rbx.platform.typedef.__uint32_t = uint
rbx.platform.typedef.__uint64_t = ulong_long
rbx.platform.typedef.__uint8_t = uchar
rbx.platform.typedef.__uint_fast16_t = uint
rbx.platform.typedef.__uint_fast32_t = uint
rbx.platform.typedef.__uint_fast64_t = ulong_long
rbx.platform.typedef.__uint_fast8_t = uint
rbx.platform.typedef.__uint_least16_t = ushort
rbx.platform.typedef.__uint_least32_t = uint
rbx.platform.typedef.__uint_least64_t = ulong_long
rbx.platform.typedef.__uint_least8_t = uchar
rbx.platform.typedef.__uintmax_t = ulong_long
rbx.platform.typedef.__uintptr_t = ulong
rbx.platform.typedef.__useconds_t = uint
rbx.platform.typedef.__vaddr_t = ulong
rbx.platform.typedef.__vsize_t = ulong
rbx.platform.typedef.__wchar_t = int
rbx.platform.typedef.__wctrans_t = pointer
rbx.platform.typedef.__wctype_t = pointer
rbx.platform.typedef.__wint_t = int
rbx.platform.typedef.blkcnt_t = long_long
rbx.platform.typedef.blksize_t = int
rbx.platform.typedef.caddr_t = string
rbx.platform.typedef.clock_t = long_long
rbx.platform.typedef.clockid_t = int
rbx.platform.typedef.cpuid_t = ulong
rbx.platform.typedef.daddr32_t = int
rbx.platform.typedef.daddr_t = long_long
rbx.platform.typedef.dev_t = int
rbx.platform.typedef.fixpt_t = uint
rbx.platform.typedef.fsblkcnt_t = ulong_long
rbx.platform.typedef.fsfilcnt_t = ulong_long
rbx.platform.typedef.gid_t = uint
rbx.platform.typedef.id_t = uint
rbx.platform.typedef.in_addr_t = uint
rbx.platform.typedef.in_port_t = ushort
rbx.platform.typedef.ino_t = ulong_long
rbx.platform.typedef.int16_t = short
rbx.platform.typedef.int32_t = int
rbx.platform.typedef.int64_t = long_long
rbx.platform.typedef.int8_t = char
rbx.platform.typedef.key_t = long
rbx.platform.typedef.mode_t = uint
rbx.platform.typedef.nlink_t = uint
rbx.platform.typedef.off_t = long_long
rbx.platform.typedef.paddr_t = ulong
rbx.platform.typedef.pid_t = int
rbx.platform.typedef.psize_t = ulong
rbx.platform.typedef.qaddr_t = pointer
rbx.platform.typedef.quad_t = long_long
rbx.platform.typedef.register_t = long
rbx.platform.typedef.rlim_t = ulong_long
rbx.platform.typedef.sa_family_t = uchar
rbx.platform.typedef.segsz_t = int
rbx.platform.typedef.sigset_t = uint
rbx.platform.typedef.size_t = ulong
rbx.platform.typedef.socklen_t = uint
rbx.platform.typedef.ssize_t = long
rbx.platform.typedef.suseconds_t = long
rbx.platform.typedef.swblk_t = int
rbx.platform.typedef.time_t = long_long
rbx.platform.typedef.timer_t = int
rbx.platform.typedef.u_char = uchar
rbx.platform.typedef.u_int = uint
rbx.platform.typedef.u_int16_t = ushort
rbx.platform.typedef.u_int32_t = uint
rbx.platform.typedef.u_int64_t = ulong_long
rbx.platform.typedef.u_int8_t = uchar
rbx.platform.typedef.u_long = ulong
rbx.platform.typedef.u_quad_t = ulong_long
rbx.platform.typedef.u_short = ushort
rbx.platform.typedef.uid_t = uint
rbx.platform.typedef.uint = uint
rbx.platform.typedef.uint16_t = ushort
rbx.platform.typedef.uint32_t = uint
rbx.platform.typedef.uint64_t = ulong_long
rbx.platform.typedef.uint8_t = uchar
rbx.platform.typedef.ulong = ulong
rbx.platform.typedef.unchar = uchar
rbx.platform.typedef.useconds_t = uint
rbx.platform.typedef.ushort = ushort
rbx.platform.typedef.vaddr_t = ulong
rbx.platform.typedef.vsize_t = ulong
@@ -0,0 +1,52 @@
rbx.platform.typedef.__time32_t = long
rbx.platform.typedef.__time64_t = long_long
rbx.platform.typedef._dev_t = uint
rbx.platform.typedef._ino_t = ushort
rbx.platform.typedef._mode_t = ushort
rbx.platform.typedef._off64_t = long_long
rbx.platform.typedef._off_t = long
rbx.platform.typedef._pid_t = long_long
rbx.platform.typedef._sigset_t = ulong_long
rbx.platform.typedef.dev_t = uint
rbx.platform.typedef.errno_t = int
rbx.platform.typedef.ino_t = ushort
rbx.platform.typedef.int16_t = short
rbx.platform.typedef.int32_t = int
rbx.platform.typedef.int64_t = long_long
rbx.platform.typedef.int8_t = char
rbx.platform.typedef.int_fast16_t = short
rbx.platform.typedef.int_fast32_t = int
rbx.platform.typedef.int_fast64_t = long_long
rbx.platform.typedef.int_fast8_t = char
rbx.platform.typedef.int_least16_t = short
rbx.platform.typedef.int_least32_t = int
rbx.platform.typedef.int_least64_t = long_long
rbx.platform.typedef.int_least8_t = char
rbx.platform.typedef.intmax_t = long_long
rbx.platform.typedef.intptr_t = long_long
rbx.platform.typedef.mode_t = ushort
rbx.platform.typedef.off32_t = long
rbx.platform.typedef.off64_t = long_long
rbx.platform.typedef.off_t = long_long
rbx.platform.typedef.pid_t = long_long
rbx.platform.typedef.ptrdiff_t = long_long
rbx.platform.typedef.rsize_t = ulong_long
rbx.platform.typedef.size_t = ulong_long
rbx.platform.typedef.ssize_t = long_long
rbx.platform.typedef.time_t = long_long
rbx.platform.typedef.uint16_t = ushort
rbx.platform.typedef.uint64_t = ulong_long
rbx.platform.typedef.uint8_t = uchar
rbx.platform.typedef.uint_fast16_t = ushort
rbx.platform.typedef.uint_fast32_t = uint
rbx.platform.typedef.uint_fast64_t = ulong_long
rbx.platform.typedef.uint_fast8_t = uchar
rbx.platform.typedef.uint_least16_t = ushort
rbx.platform.typedef.uint_least64_t = ulong_long
rbx.platform.typedef.uint_least8_t = uchar
rbx.platform.typedef.uintmax_t = ulong_long
rbx.platform.typedef.uintptr_t = ulong_long
rbx.platform.typedef.useconds_t = uint
rbx.platform.typedef.wchar_t = ushort
rbx.platform.typedef.wctype_t = ushort
rbx.platform.typedef.wint_t = ushort
@@ -0,0 +1,152 @@
rbx.platform.typedef.*) = pointer
rbx.platform.typedef.__accmode_t = int
rbx.platform.typedef.__blkcnt_t = long_long
rbx.platform.typedef.__blksize_t = uint
rbx.platform.typedef.__clock_t = ulong
rbx.platform.typedef.__clockid_t = int
rbx.platform.typedef.__cpulevel_t = int
rbx.platform.typedef.__cpumask_t = uint
rbx.platform.typedef.__cpusetid_t = int
rbx.platform.typedef.__cpuwhich_t = int
rbx.platform.typedef.__critical_t = int
rbx.platform.typedef.__ct_rune_t = int
rbx.platform.typedef.__dev_t = uint
rbx.platform.typedef.__fd_mask = ulong
rbx.platform.typedef.__fflags_t = uint
rbx.platform.typedef.__fixpt_t = uint
rbx.platform.typedef.__fsblkcnt_t = ulong_long
rbx.platform.typedef.__fsfilcnt_t = ulong_long
rbx.platform.typedef.__gid_t = uint
rbx.platform.typedef.__id_t = long_long
rbx.platform.typedef.__ino_t = uint
rbx.platform.typedef.__int16_t = short
rbx.platform.typedef.__int32_t = int
rbx.platform.typedef.__int64_t = long_long
rbx.platform.typedef.__int8_t = char
rbx.platform.typedef.__int_fast16_t = int
rbx.platform.typedef.__int_fast32_t = int
rbx.platform.typedef.__int_fast64_t = long_long
rbx.platform.typedef.__int_fast8_t = int
rbx.platform.typedef.__int_least16_t = short
rbx.platform.typedef.__int_least32_t = int
rbx.platform.typedef.__int_least64_t = long_long
rbx.platform.typedef.__int_least8_t = char
rbx.platform.typedef.__intfptr_t = int
rbx.platform.typedef.__intmax_t = long_long
rbx.platform.typedef.__intptr_t = int
rbx.platform.typedef.__key_t = long
rbx.platform.typedef.__lwpid_t = int
rbx.platform.typedef.__mode_t = ushort
rbx.platform.typedef.__nl_item = int
rbx.platform.typedef.__nlink_t = ushort
rbx.platform.typedef.__off_t = long_long
rbx.platform.typedef.__pid_t = int
rbx.platform.typedef.__ptrdiff_t = int
rbx.platform.typedef.__register_t = int
rbx.platform.typedef.__rlim_t = long_long
rbx.platform.typedef.__rune_t = int
rbx.platform.typedef.__sa_family_t = uchar
rbx.platform.typedef.__segsz_t = int
rbx.platform.typedef.__size_t = uint
rbx.platform.typedef.__socklen_t = uint
rbx.platform.typedef.__ssize_t = int
rbx.platform.typedef.__suseconds_t = long
rbx.platform.typedef.__time_t = int
rbx.platform.typedef.__u_register_t = uint
rbx.platform.typedef.__uid_t = uint
rbx.platform.typedef.__uint16_t = ushort
rbx.platform.typedef.__uint32_t = uint
rbx.platform.typedef.__uint64_t = ulong_long
rbx.platform.typedef.__uint8_t = uchar
rbx.platform.typedef.__uint_fast16_t = uint
rbx.platform.typedef.__uint_fast32_t = uint
rbx.platform.typedef.__uint_fast64_t = ulong_long
rbx.platform.typedef.__uint_fast8_t = uint
rbx.platform.typedef.__uint_least16_t = ushort
rbx.platform.typedef.__uint_least32_t = uint
rbx.platform.typedef.__uint_least64_t = ulong_long
rbx.platform.typedef.__uint_least8_t = uchar
rbx.platform.typedef.__uintfptr_t = uint
rbx.platform.typedef.__uintmax_t = ulong_long
rbx.platform.typedef.__uintptr_t = uint
rbx.platform.typedef.__useconds_t = uint
rbx.platform.typedef.__vm_offset_t = uint
rbx.platform.typedef.__vm_ooffset_t = long_long
rbx.platform.typedef.__vm_paddr_t = uint
rbx.platform.typedef.__vm_pindex_t = ulong_long
rbx.platform.typedef.__vm_size_t = uint
rbx.platform.typedef.__wchar_t = int
rbx.platform.typedef.__wint_t = int
rbx.platform.typedef.__wint_t = int
rbx.platform.typedef.accmode_t = int
rbx.platform.typedef.blkcnt_t = long_long
rbx.platform.typedef.blksize_t = uint
rbx.platform.typedef.c_caddr_t = pointer
rbx.platform.typedef.caddr_t = string
rbx.platform.typedef.clock_t = ulong
rbx.platform.typedef.clockid_t = int
rbx.platform.typedef.cpulevel_t = int
rbx.platform.typedef.cpumask_t = uint
rbx.platform.typedef.cpusetid_t = int
rbx.platform.typedef.cpuwhich_t = int
rbx.platform.typedef.critical_t = int
rbx.platform.typedef.daddr_t = long_long
rbx.platform.typedef.dev_t = uint
rbx.platform.typedef.fd_mask = ulong
rbx.platform.typedef.fflags_t = uint
rbx.platform.typedef.fixpt_t = uint
rbx.platform.typedef.fsblkcnt_t = ulong_long
rbx.platform.typedef.fsfilcnt_t = ulong_long
rbx.platform.typedef.gid_t = uint
rbx.platform.typedef.id_t = long_long
rbx.platform.typedef.in_addr_t = uint
rbx.platform.typedef.in_port_t = ushort
rbx.platform.typedef.ino_t = uint
rbx.platform.typedef.int16_t = short
rbx.platform.typedef.int32_t = int
rbx.platform.typedef.int64_t = long_long
rbx.platform.typedef.int8_t = char
rbx.platform.typedef.intptr_t = int
rbx.platform.typedef.key_t = long
rbx.platform.typedef.lwpid_t = int
rbx.platform.typedef.mode_t = ushort
rbx.platform.typedef.nlink_t = ushort
rbx.platform.typedef.off_t = long_long
rbx.platform.typedef.pid_t = int
rbx.platform.typedef.pthread_key_t = int
rbx.platform.typedef.qaddr_t = pointer
rbx.platform.typedef.quad_t = long_long
rbx.platform.typedef.register_t = int
rbx.platform.typedef.rlim_t = long_long
rbx.platform.typedef.sa_family_t = uchar
rbx.platform.typedef.segsz_t = int
rbx.platform.typedef.size_t = uint
rbx.platform.typedef.socklen_t = uint
rbx.platform.typedef.ssize_t = int
rbx.platform.typedef.suseconds_t = long
rbx.platform.typedef.time_t = int
rbx.platform.typedef.u_char = uchar
rbx.platform.typedef.u_int = uint
rbx.platform.typedef.u_int16_t = ushort
rbx.platform.typedef.u_int32_t = uint
rbx.platform.typedef.u_int64_t = ulong_long
rbx.platform.typedef.u_int8_t = uchar
rbx.platform.typedef.u_long = ulong
rbx.platform.typedef.u_quad_t = ulong_long
rbx.platform.typedef.u_register_t = uint
rbx.platform.typedef.u_short = ushort
rbx.platform.typedef.uid_t = uint
rbx.platform.typedef.uint = uint
rbx.platform.typedef.uint16_t = ushort
rbx.platform.typedef.uint32_t = uint
rbx.platform.typedef.uint64_t = ulong_long
rbx.platform.typedef.uint8_t = uchar
rbx.platform.typedef.uintptr_t = uint
rbx.platform.typedef.useconds_t = uint
rbx.platform.typedef.ushort = ushort
rbx.platform.typedef.vm_offset_t = uint
rbx.platform.typedef.vm_ooffset_t = long_long
rbx.platform.typedef.vm_paddr_t = uint
rbx.platform.typedef.vm_pindex_t = ulong_long
rbx.platform.typedef.vm_size_t = uint
@@ -0,0 +1,152 @@
rbx.platform.typedef.*) = pointer
rbx.platform.typedef.__accmode_t = int
rbx.platform.typedef.__blkcnt_t = long_long
rbx.platform.typedef.__blksize_t = uint
rbx.platform.typedef.__clock_t = ulong
rbx.platform.typedef.__clockid_t = int
rbx.platform.typedef.__cpulevel_t = int
rbx.platform.typedef.__cpumask_t = uint
rbx.platform.typedef.__cpusetid_t = int
rbx.platform.typedef.__cpuwhich_t = int
rbx.platform.typedef.__critical_t = int
rbx.platform.typedef.__ct_rune_t = int
rbx.platform.typedef.__dev_t = ulong_long
rbx.platform.typedef.__fd_mask = ulong
rbx.platform.typedef.__fflags_t = uint
rbx.platform.typedef.__fixpt_t = uint
rbx.platform.typedef.__fsblkcnt_t = ulong_long
rbx.platform.typedef.__fsfilcnt_t = ulong_long
rbx.platform.typedef.__gid_t = uint
rbx.platform.typedef.__id_t = long_long
rbx.platform.typedef.__ino_t = ulong_long
rbx.platform.typedef.__int16_t = short
rbx.platform.typedef.__int32_t = int
rbx.platform.typedef.__int64_t = long_long
rbx.platform.typedef.__int8_t = char
rbx.platform.typedef.__int_fast16_t = int
rbx.platform.typedef.__int_fast32_t = int
rbx.platform.typedef.__int_fast64_t = long_long
rbx.platform.typedef.__int_fast8_t = int
rbx.platform.typedef.__int_least16_t = short
rbx.platform.typedef.__int_least32_t = int
rbx.platform.typedef.__int_least64_t = long_long
rbx.platform.typedef.__int_least8_t = char
rbx.platform.typedef.__intfptr_t = int
rbx.platform.typedef.__intmax_t = long_long
rbx.platform.typedef.__intptr_t = int
rbx.platform.typedef.__key_t = long
rbx.platform.typedef.__lwpid_t = int
rbx.platform.typedef.__mode_t = ushort
rbx.platform.typedef.__nl_item = int
rbx.platform.typedef.__nlink_t = ulong_long
rbx.platform.typedef.__off_t = long_long
rbx.platform.typedef.__pid_t = int
rbx.platform.typedef.__ptrdiff_t = int
rbx.platform.typedef.__register_t = int
rbx.platform.typedef.__rlim_t = long_long
rbx.platform.typedef.__rune_t = int
rbx.platform.typedef.__sa_family_t = uchar
rbx.platform.typedef.__segsz_t = int
rbx.platform.typedef.__size_t = uint
rbx.platform.typedef.__socklen_t = uint
rbx.platform.typedef.__ssize_t = int
rbx.platform.typedef.__suseconds_t = long
rbx.platform.typedef.__time_t = int
rbx.platform.typedef.__u_register_t = uint
rbx.platform.typedef.__uid_t = uint
rbx.platform.typedef.__uint16_t = ushort
rbx.platform.typedef.__uint32_t = uint
rbx.platform.typedef.__uint64_t = ulong_long
rbx.platform.typedef.__uint8_t = uchar
rbx.platform.typedef.__uint_fast16_t = uint
rbx.platform.typedef.__uint_fast32_t = uint
rbx.platform.typedef.__uint_fast64_t = ulong_long
rbx.platform.typedef.__uint_fast8_t = uint
rbx.platform.typedef.__uint_least16_t = ushort
rbx.platform.typedef.__uint_least32_t = uint
rbx.platform.typedef.__uint_least64_t = ulong_long
rbx.platform.typedef.__uint_least8_t = uchar
rbx.platform.typedef.__uintfptr_t = uint
rbx.platform.typedef.__uintmax_t = ulong_long
rbx.platform.typedef.__uintptr_t = uint
rbx.platform.typedef.__useconds_t = uint
rbx.platform.typedef.__vm_offset_t = uint
rbx.platform.typedef.__vm_ooffset_t = long_long
rbx.platform.typedef.__vm_paddr_t = uint
rbx.platform.typedef.__vm_pindex_t = ulong_long
rbx.platform.typedef.__vm_size_t = uint
rbx.platform.typedef.__wchar_t = int
rbx.platform.typedef.__wint_t = int
rbx.platform.typedef.__wint_t = int
rbx.platform.typedef.accmode_t = int
rbx.platform.typedef.blkcnt_t = long_long
rbx.platform.typedef.blksize_t = uint
rbx.platform.typedef.c_caddr_t = pointer
rbx.platform.typedef.caddr_t = string
rbx.platform.typedef.clock_t = ulong
rbx.platform.typedef.clockid_t = int
rbx.platform.typedef.cpulevel_t = int
rbx.platform.typedef.cpumask_t = uint
rbx.platform.typedef.cpusetid_t = int
rbx.platform.typedef.cpuwhich_t = int
rbx.platform.typedef.critical_t = int
rbx.platform.typedef.daddr_t = long_long
rbx.platform.typedef.dev_t = ulong_long
rbx.platform.typedef.fd_mask = ulong
rbx.platform.typedef.fflags_t = uint
rbx.platform.typedef.fixpt_t = uint
rbx.platform.typedef.fsblkcnt_t = ulong_long
rbx.platform.typedef.fsfilcnt_t = ulong_long
rbx.platform.typedef.gid_t = uint
rbx.platform.typedef.id_t = long_long
rbx.platform.typedef.in_addr_t = uint
rbx.platform.typedef.in_port_t = ushort
rbx.platform.typedef.ino_t = ulong_long
rbx.platform.typedef.int16_t = short
rbx.platform.typedef.int32_t = int
rbx.platform.typedef.int64_t = long_long
rbx.platform.typedef.int8_t = char
rbx.platform.typedef.intptr_t = int
rbx.platform.typedef.key_t = long
rbx.platform.typedef.lwpid_t = int
rbx.platform.typedef.mode_t = ushort
rbx.platform.typedef.nlink_t = ulong_long
rbx.platform.typedef.off_t = long_long
rbx.platform.typedef.pid_t = int
rbx.platform.typedef.pthread_key_t = int
rbx.platform.typedef.qaddr_t = pointer
rbx.platform.typedef.quad_t = long_long
rbx.platform.typedef.register_t = int
rbx.platform.typedef.rlim_t = long_long
rbx.platform.typedef.sa_family_t = uchar
rbx.platform.typedef.segsz_t = int
rbx.platform.typedef.size_t = uint
rbx.platform.typedef.socklen_t = uint
rbx.platform.typedef.ssize_t = int
rbx.platform.typedef.suseconds_t = long
rbx.platform.typedef.time_t = int
rbx.platform.typedef.u_char = uchar
rbx.platform.typedef.u_int = uint
rbx.platform.typedef.u_int16_t = ushort
rbx.platform.typedef.u_int32_t = uint
rbx.platform.typedef.u_int64_t = ulong_long
rbx.platform.typedef.u_int8_t = uchar
rbx.platform.typedef.u_long = ulong
rbx.platform.typedef.u_quad_t = ulong_long
rbx.platform.typedef.u_register_t = uint
rbx.platform.typedef.u_short = ushort
rbx.platform.typedef.uid_t = uint
rbx.platform.typedef.uint = uint
rbx.platform.typedef.uint16_t = ushort
rbx.platform.typedef.uint32_t = uint
rbx.platform.typedef.uint64_t = ulong_long
rbx.platform.typedef.uint8_t = uchar
rbx.platform.typedef.uintptr_t = uint
rbx.platform.typedef.useconds_t = uint
rbx.platform.typedef.ushort = ushort
rbx.platform.typedef.vm_offset_t = uint
rbx.platform.typedef.vm_ooffset_t = long_long
rbx.platform.typedef.vm_paddr_t = uint
rbx.platform.typedef.vm_pindex_t = ulong_long
rbx.platform.typedef.vm_size_t = uint
@@ -0,0 +1,132 @@
rbx.platform.typedef.*__caddr_t = char
rbx.platform.typedef.__blkcnt64_t = long_long
rbx.platform.typedef.__blkcnt_t = long
rbx.platform.typedef.__blksize_t = long
rbx.platform.typedef.__clock_t = long
rbx.platform.typedef.__clockid_t = int
rbx.platform.typedef.__daddr_t = int
rbx.platform.typedef.__dev_t = ulong_long
rbx.platform.typedef.__fd_mask = long
rbx.platform.typedef.__fsblkcnt64_t = ulong_long
rbx.platform.typedef.__fsblkcnt_t = ulong
rbx.platform.typedef.__fsfilcnt64_t = ulong_long
rbx.platform.typedef.__fsfilcnt_t = ulong
rbx.platform.typedef.__fsword_t = int
rbx.platform.typedef.__gid_t = uint
rbx.platform.typedef.__id_t = uint
rbx.platform.typedef.__ino64_t = ulong_long
rbx.platform.typedef.__ino_t = ulong
rbx.platform.typedef.__int16_t = short
rbx.platform.typedef.__int32_t = int
rbx.platform.typedef.__int64_t = long_long
rbx.platform.typedef.__int8_t = char
rbx.platform.typedef.__intmax_t = long_long
rbx.platform.typedef.__intptr_t = int
rbx.platform.typedef.__key_t = int
rbx.platform.typedef.__loff_t = long_long
rbx.platform.typedef.__mode_t = uint
rbx.platform.typedef.__nlink_t = uint
rbx.platform.typedef.__off64_t = long_long
rbx.platform.typedef.__off_t = long
rbx.platform.typedef.__pid_t = int
rbx.platform.typedef.__priority_which_t = int
rbx.platform.typedef.__quad_t = long_long
rbx.platform.typedef.__rlim64_t = ulong_long
rbx.platform.typedef.__rlim_t = ulong
rbx.platform.typedef.__rlimit_resource_t = int
rbx.platform.typedef.__rusage_who_t = int
rbx.platform.typedef.__sig_atomic_t = int
rbx.platform.typedef.__socklen_t = uint
rbx.platform.typedef.__ssize_t = int
rbx.platform.typedef.__suseconds_t = long
rbx.platform.typedef.__syscall_slong_t = long
rbx.platform.typedef.__syscall_ulong_t = ulong
rbx.platform.typedef.__time_t = long
rbx.platform.typedef.__timer_t = pointer
rbx.platform.typedef.__u_char = uchar
rbx.platform.typedef.__u_int = uint
rbx.platform.typedef.__u_long = ulong
rbx.platform.typedef.__u_quad_t = ulong_long
rbx.platform.typedef.__u_short = ushort
rbx.platform.typedef.__uid_t = uint
rbx.platform.typedef.__uint16_t = ushort
rbx.platform.typedef.__uint32_t = uint
rbx.platform.typedef.__uint64_t = ulong_long
rbx.platform.typedef.__uint8_t = uchar
rbx.platform.typedef.__uintmax_t = ulong_long
rbx.platform.typedef.__useconds_t = uint
rbx.platform.typedef.blkcnt_t = long_long
rbx.platform.typedef.blksize_t = long
rbx.platform.typedef.clock_t = long
rbx.platform.typedef.clockid_t = int
rbx.platform.typedef.daddr_t = int
rbx.platform.typedef.dev_t = ulong_long
rbx.platform.typedef.fd_mask = long
rbx.platform.typedef.fsblkcnt_t = ulong_long
rbx.platform.typedef.fsfilcnt_t = ulong_long
rbx.platform.typedef.gid_t = uint
rbx.platform.typedef.id_t = uint
rbx.platform.typedef.in_addr_t = uint
rbx.platform.typedef.in_port_t = ushort
rbx.platform.typedef.ino_t = ulong_long
rbx.platform.typedef.int16_t = short
rbx.platform.typedef.int32_t = int
rbx.platform.typedef.int64_t = long_long
rbx.platform.typedef.int8_t = char
rbx.platform.typedef.int_fast16_t = int
rbx.platform.typedef.int_fast32_t = int
rbx.platform.typedef.int_fast64_t = long_long
rbx.platform.typedef.int_fast8_t = char
rbx.platform.typedef.int_least32_t = int
rbx.platform.typedef.int_least64_t = long_long
rbx.platform.typedef.int_least8_t = char
rbx.platform.typedef.intmax_t = long_long
rbx.platform.typedef.intptr_t = int
rbx.platform.typedef.key_t = int
rbx.platform.typedef.loff_t = long_long
rbx.platform.typedef.mode_t = uint
rbx.platform.typedef.nlink_t = uint
rbx.platform.typedef.off_t = long_long
rbx.platform.typedef.pid_t = int
rbx.platform.typedef.pthread_key_t = uint
rbx.platform.typedef.pthread_once_t = int
rbx.platform.typedef.pthread_t = ulong
rbx.platform.typedef.ptrdiff_t = int
rbx.platform.typedef.quad_t = long_long
rbx.platform.typedef.register_t = long
rbx.platform.typedef.rlim_t = ulong_long
rbx.platform.typedef.sa_family_t = ushort
rbx.platform.typedef.size_t = uint
rbx.platform.typedef.socklen_t = uint
rbx.platform.typedef.ssize_t = int
rbx.platform.typedef.suseconds_t = long
rbx.platform.typedef.time_t = long
rbx.platform.typedef.timer_t = pointer
rbx.platform.typedef.u_char = uchar
rbx.platform.typedef.u_int = uint
rbx.platform.typedef.u_int16_t = ushort
rbx.platform.typedef.u_int32_t = uint
rbx.platform.typedef.u_int64_t = ulong_long
rbx.platform.typedef.u_int8_t = uchar
rbx.platform.typedef.u_long = ulong
rbx.platform.typedef.u_quad_t = ulong_long
rbx.platform.typedef.u_short = ushort
rbx.platform.typedef.uid_t = uint
rbx.platform.typedef.uint = uint
rbx.platform.typedef.uint16_t = ushort
rbx.platform.typedef.uint32_t = uint
rbx.platform.typedef.uint64_t = ulong_long
rbx.platform.typedef.uint8_t = uchar
rbx.platform.typedef.uint_fast16_t = uint
rbx.platform.typedef.uint_fast32_t = uint
rbx.platform.typedef.uint_fast64_t = ulong_long
rbx.platform.typedef.uint_fast8_t = uchar
rbx.platform.typedef.uint_least16_t = ushort
rbx.platform.typedef.uint_least32_t = uint
rbx.platform.typedef.uint_least64_t = ulong_long
rbx.platform.typedef.uint_least8_t = uchar
rbx.platform.typedef.uintmax_t = ulong_long
rbx.platform.typedef.uintptr_t = uint
rbx.platform.typedef.ulong = ulong
rbx.platform.typedef.ushort = ushort
rbx.platform.typedef.wchar_t = uint
@@ -0,0 +1,178 @@
rbx.platform.typedef.*__caddr_t = char
rbx.platform.typedef.__blkcnt64_t = long_long
rbx.platform.typedef.__blkcnt_t = long
rbx.platform.typedef.__blksize_t = long
rbx.platform.typedef.__clock_t = long
rbx.platform.typedef.__clockid_t = int
rbx.platform.typedef.__daddr_t = int
rbx.platform.typedef.__dev_t = ulong_long
rbx.platform.typedef.__fd_mask = long
rbx.platform.typedef.__fsblkcnt64_t = ulong_long
rbx.platform.typedef.__fsblkcnt_t = ulong
rbx.platform.typedef.__fsfilcnt64_t = ulong_long
rbx.platform.typedef.__fsfilcnt_t = ulong
rbx.platform.typedef.__fsword_t = int
rbx.platform.typedef.__gid_t = uint
rbx.platform.typedef.__id_t = uint
rbx.platform.typedef.__ino64_t = ulong_long
rbx.platform.typedef.__ino_t = ulong
rbx.platform.typedef.__int16_t = short
rbx.platform.typedef.__int32_t = int
rbx.platform.typedef.__int64_t = long_long
rbx.platform.typedef.__int8_t = char
rbx.platform.typedef.__int_least16_t = short
rbx.platform.typedef.__int_least32_t = int
rbx.platform.typedef.__int_least64_t = long_long
rbx.platform.typedef.__int_least8_t = char
rbx.platform.typedef.__intmax_t = long_long
rbx.platform.typedef.__intptr_t = int
rbx.platform.typedef.__kernel_caddr_t = string
rbx.platform.typedef.__kernel_clock_t = long
rbx.platform.typedef.__kernel_clockid_t = int
rbx.platform.typedef.__kernel_daddr_t = int
rbx.platform.typedef.__kernel_gid16_t = ushort
rbx.platform.typedef.__kernel_gid32_t = uint
rbx.platform.typedef.__kernel_gid_t = uint
rbx.platform.typedef.__kernel_ino64_t = ulong_long
rbx.platform.typedef.__kernel_ino_t = ulong
rbx.platform.typedef.__kernel_ipc_pid_t = ushort
rbx.platform.typedef.__kernel_key_t = int
rbx.platform.typedef.__kernel_loff_t = long_long
rbx.platform.typedef.__kernel_long_t = long
rbx.platform.typedef.__kernel_mode_t = ushort
rbx.platform.typedef.__kernel_mqd_t = int
rbx.platform.typedef.__kernel_off64_t = long_long
rbx.platform.typedef.__kernel_off_t = long
rbx.platform.typedef.__kernel_old_dev_t = uint
rbx.platform.typedef.__kernel_old_gid_t = uint
rbx.platform.typedef.__kernel_old_time_t = long
rbx.platform.typedef.__kernel_old_uid_t = uint
rbx.platform.typedef.__kernel_pid_t = int
rbx.platform.typedef.__kernel_ptrdiff_t = int
rbx.platform.typedef.__kernel_size_t = uint
rbx.platform.typedef.__kernel_ssize_t = int
rbx.platform.typedef.__kernel_suseconds_t = long
rbx.platform.typedef.__kernel_time64_t = long_long
rbx.platform.typedef.__kernel_time_t = long
rbx.platform.typedef.__kernel_timer_t = int
rbx.platform.typedef.__kernel_uid16_t = ushort
rbx.platform.typedef.__kernel_uid32_t = uint
rbx.platform.typedef.__kernel_uid_t = uint
rbx.platform.typedef.__kernel_ulong_t = ulong
rbx.platform.typedef.__key_t = int
rbx.platform.typedef.__loff_t = long_long
rbx.platform.typedef.__mode_t = uint
rbx.platform.typedef.__nlink_t = uint
rbx.platform.typedef.__off64_t = long_long
rbx.platform.typedef.__off_t = long
rbx.platform.typedef.__pid_t = int
rbx.platform.typedef.__priority_which_t = int
rbx.platform.typedef.__quad_t = long_long
rbx.platform.typedef.__rlim64_t = ulong_long
rbx.platform.typedef.__rlim_t = ulong
rbx.platform.typedef.__rlimit_resource_t = int
rbx.platform.typedef.__rusage_who_t = int
rbx.platform.typedef.__sig_atomic_t = int
rbx.platform.typedef.__socklen_t = uint
rbx.platform.typedef.__ssize_t = int
rbx.platform.typedef.__suseconds64_t = long_long
rbx.platform.typedef.__suseconds_t = long
rbx.platform.typedef.__syscall_slong_t = long
rbx.platform.typedef.__syscall_ulong_t = ulong
rbx.platform.typedef.__thrd_t = ulong
rbx.platform.typedef.__time64_t = long_long
rbx.platform.typedef.__time_t = long
rbx.platform.typedef.__timer_t = pointer
rbx.platform.typedef.__tss_t = uint
rbx.platform.typedef.__u_char = uchar
rbx.platform.typedef.__u_int = uint
rbx.platform.typedef.__u_long = ulong
rbx.platform.typedef.__u_quad_t = ulong_long
rbx.platform.typedef.__u_short = ushort
rbx.platform.typedef.__uid_t = uint
rbx.platform.typedef.__uint16_t = ushort
rbx.platform.typedef.__uint32_t = uint
rbx.platform.typedef.__uint64_t = ulong_long
rbx.platform.typedef.__uint8_t = uchar
rbx.platform.typedef.__uint_least16_t = ushort
rbx.platform.typedef.__uint_least32_t = uint
rbx.platform.typedef.__uint_least64_t = ulong_long
rbx.platform.typedef.__uint_least8_t = uchar
rbx.platform.typedef.__uintmax_t = ulong_long
rbx.platform.typedef.__useconds_t = uint
rbx.platform.typedef.blkcnt_t = long_long
rbx.platform.typedef.blksize_t = long
rbx.platform.typedef.clock_t = long
rbx.platform.typedef.clockid_t = int
rbx.platform.typedef.daddr_t = int
rbx.platform.typedef.dev_t = ulong_long
rbx.platform.typedef.fd_mask = long
rbx.platform.typedef.fsblkcnt_t = ulong_long
rbx.platform.typedef.fsfilcnt_t = ulong_long
rbx.platform.typedef.gid_t = uint
rbx.platform.typedef.id_t = uint
rbx.platform.typedef.in_addr_t = uint
rbx.platform.typedef.in_port_t = ushort
rbx.platform.typedef.ino_t = ulong_long
rbx.platform.typedef.int16_t = short
rbx.platform.typedef.int32_t = int
rbx.platform.typedef.int64_t = long_long
rbx.platform.typedef.int8_t = char
rbx.platform.typedef.int_fast16_t = int
rbx.platform.typedef.int_fast32_t = int
rbx.platform.typedef.int_fast64_t = long_long
rbx.platform.typedef.int_fast8_t = char
rbx.platform.typedef.int_least16_t = short
rbx.platform.typedef.int_least32_t = int
rbx.platform.typedef.int_least64_t = long_long
rbx.platform.typedef.int_least8_t = char
rbx.platform.typedef.intmax_t = long_long
rbx.platform.typedef.intptr_t = int
rbx.platform.typedef.key_t = int
rbx.platform.typedef.loff_t = long_long
rbx.platform.typedef.mode_t = uint
rbx.platform.typedef.nlink_t = uint
rbx.platform.typedef.off_t = long_long
rbx.platform.typedef.pid_t = int
rbx.platform.typedef.pthread_key_t = uint
rbx.platform.typedef.pthread_once_t = int
rbx.platform.typedef.pthread_t = ulong
rbx.platform.typedef.ptrdiff_t = int
rbx.platform.typedef.quad_t = long_long
rbx.platform.typedef.register_t = long
rbx.platform.typedef.rlim_t = ulong_long
rbx.platform.typedef.sa_family_t = ushort
rbx.platform.typedef.size_t = uint
rbx.platform.typedef.socklen_t = uint
rbx.platform.typedef.ssize_t = int
rbx.platform.typedef.suseconds_t = long
rbx.platform.typedef.time_t = long
rbx.platform.typedef.timer_t = pointer
rbx.platform.typedef.u_char = uchar
rbx.platform.typedef.u_int = uint
rbx.platform.typedef.u_int16_t = ushort
rbx.platform.typedef.u_int32_t = uint
rbx.platform.typedef.u_int64_t = ulong_long
rbx.platform.typedef.u_int8_t = uchar
rbx.platform.typedef.u_long = ulong
rbx.platform.typedef.u_quad_t = ulong_long
rbx.platform.typedef.u_short = ushort
rbx.platform.typedef.uid_t = uint
rbx.platform.typedef.uint = uint
rbx.platform.typedef.uint16_t = ushort
rbx.platform.typedef.uint32_t = uint
rbx.platform.typedef.uint64_t = ulong_long
rbx.platform.typedef.uint8_t = uchar
rbx.platform.typedef.uint_fast16_t = uint
rbx.platform.typedef.uint_fast32_t = uint
rbx.platform.typedef.uint_fast64_t = ulong_long
rbx.platform.typedef.uint_fast8_t = uchar
rbx.platform.typedef.uint_least16_t = ushort
rbx.platform.typedef.uint_least32_t = uint
rbx.platform.typedef.uint_least64_t = ulong_long
rbx.platform.typedef.uint_least8_t = uchar
rbx.platform.typedef.uintmax_t = ulong_long
rbx.platform.typedef.uintptr_t = uint
rbx.platform.typedef.ulong = ulong
rbx.platform.typedef.ushort = ushort
rbx.platform.typedef.wchar_t = long
@@ -0,0 +1,178 @@
rbx.platform.typedef.*__caddr_t = char
rbx.platform.typedef.__blkcnt64_t = long_long
rbx.platform.typedef.__blkcnt_t = long
rbx.platform.typedef.__blksize_t = long
rbx.platform.typedef.__clock_t = long
rbx.platform.typedef.__clockid_t = int
rbx.platform.typedef.__daddr_t = int
rbx.platform.typedef.__dev_t = ulong_long
rbx.platform.typedef.__fd_mask = long
rbx.platform.typedef.__fsblkcnt64_t = ulong_long
rbx.platform.typedef.__fsblkcnt_t = ulong
rbx.platform.typedef.__fsfilcnt64_t = ulong_long
rbx.platform.typedef.__fsfilcnt_t = ulong
rbx.platform.typedef.__fsword_t = int
rbx.platform.typedef.__gid_t = uint
rbx.platform.typedef.__id_t = uint
rbx.platform.typedef.__ino64_t = ulong_long
rbx.platform.typedef.__ino_t = ulong
rbx.platform.typedef.__int16_t = short
rbx.platform.typedef.__int32_t = int
rbx.platform.typedef.__int64_t = long_long
rbx.platform.typedef.__int8_t = char
rbx.platform.typedef.__int_least16_t = short
rbx.platform.typedef.__int_least32_t = int
rbx.platform.typedef.__int_least64_t = long_long
rbx.platform.typedef.__int_least8_t = char
rbx.platform.typedef.__intmax_t = long_long
rbx.platform.typedef.__intptr_t = int
rbx.platform.typedef.__kernel_caddr_t = string
rbx.platform.typedef.__kernel_clock_t = long
rbx.platform.typedef.__kernel_clockid_t = int
rbx.platform.typedef.__kernel_daddr_t = int
rbx.platform.typedef.__kernel_gid16_t = ushort
rbx.platform.typedef.__kernel_gid32_t = uint
rbx.platform.typedef.__kernel_gid_t = uint
rbx.platform.typedef.__kernel_ino64_t = ulong_long
rbx.platform.typedef.__kernel_ino_t = ulong
rbx.platform.typedef.__kernel_ipc_pid_t = ushort
rbx.platform.typedef.__kernel_key_t = int
rbx.platform.typedef.__kernel_loff_t = long_long
rbx.platform.typedef.__kernel_long_t = long
rbx.platform.typedef.__kernel_mode_t = ushort
rbx.platform.typedef.__kernel_mqd_t = int
rbx.platform.typedef.__kernel_off64_t = long_long
rbx.platform.typedef.__kernel_off_t = long
rbx.platform.typedef.__kernel_old_dev_t = uint
rbx.platform.typedef.__kernel_old_gid_t = uint
rbx.platform.typedef.__kernel_old_time_t = long
rbx.platform.typedef.__kernel_old_uid_t = uint
rbx.platform.typedef.__kernel_pid_t = int
rbx.platform.typedef.__kernel_ptrdiff_t = int
rbx.platform.typedef.__kernel_size_t = uint
rbx.platform.typedef.__kernel_ssize_t = int
rbx.platform.typedef.__kernel_suseconds_t = long
rbx.platform.typedef.__kernel_time64_t = long_long
rbx.platform.typedef.__kernel_time_t = long
rbx.platform.typedef.__kernel_timer_t = int
rbx.platform.typedef.__kernel_uid16_t = ushort
rbx.platform.typedef.__kernel_uid32_t = uint
rbx.platform.typedef.__kernel_uid_t = uint
rbx.platform.typedef.__kernel_ulong_t = ulong
rbx.platform.typedef.__key_t = int
rbx.platform.typedef.__loff_t = long_long
rbx.platform.typedef.__mode_t = uint
rbx.platform.typedef.__nlink_t = uint
rbx.platform.typedef.__off64_t = long_long
rbx.platform.typedef.__off_t = long
rbx.platform.typedef.__pid_t = int
rbx.platform.typedef.__priority_which_t = int
rbx.platform.typedef.__quad_t = long_long
rbx.platform.typedef.__rlim64_t = ulong_long
rbx.platform.typedef.__rlim_t = ulong
rbx.platform.typedef.__rlimit_resource_t = int
rbx.platform.typedef.__rusage_who_t = int
rbx.platform.typedef.__sig_atomic_t = int
rbx.platform.typedef.__socklen_t = uint
rbx.platform.typedef.__ssize_t = int
rbx.platform.typedef.__suseconds64_t = long_long
rbx.platform.typedef.__suseconds_t = long
rbx.platform.typedef.__syscall_slong_t = long
rbx.platform.typedef.__syscall_ulong_t = ulong
rbx.platform.typedef.__thrd_t = ulong
rbx.platform.typedef.__time64_t = long_long
rbx.platform.typedef.__time_t = long
rbx.platform.typedef.__timer_t = pointer
rbx.platform.typedef.__tss_t = uint
rbx.platform.typedef.__u_char = uchar
rbx.platform.typedef.__u_int = uint
rbx.platform.typedef.__u_long = ulong
rbx.platform.typedef.__u_quad_t = ulong_long
rbx.platform.typedef.__u_short = ushort
rbx.platform.typedef.__uid_t = uint
rbx.platform.typedef.__uint16_t = ushort
rbx.platform.typedef.__uint32_t = uint
rbx.platform.typedef.__uint64_t = ulong_long
rbx.platform.typedef.__uint8_t = uchar
rbx.platform.typedef.__uint_least16_t = ushort
rbx.platform.typedef.__uint_least32_t = uint
rbx.platform.typedef.__uint_least64_t = ulong_long
rbx.platform.typedef.__uint_least8_t = uchar
rbx.platform.typedef.__uintmax_t = ulong_long
rbx.platform.typedef.__useconds_t = uint
rbx.platform.typedef.blkcnt_t = long_long
rbx.platform.typedef.blksize_t = long
rbx.platform.typedef.clock_t = long
rbx.platform.typedef.clockid_t = int
rbx.platform.typedef.daddr_t = int
rbx.platform.typedef.dev_t = ulong_long
rbx.platform.typedef.fd_mask = long
rbx.platform.typedef.fsblkcnt_t = ulong_long
rbx.platform.typedef.fsfilcnt_t = ulong_long
rbx.platform.typedef.gid_t = uint
rbx.platform.typedef.id_t = uint
rbx.platform.typedef.in_addr_t = uint
rbx.platform.typedef.in_port_t = ushort
rbx.platform.typedef.ino_t = ulong_long
rbx.platform.typedef.int16_t = short
rbx.platform.typedef.int32_t = int
rbx.platform.typedef.int64_t = long_long
rbx.platform.typedef.int8_t = char
rbx.platform.typedef.int_fast16_t = int
rbx.platform.typedef.int_fast32_t = int
rbx.platform.typedef.int_fast64_t = long_long
rbx.platform.typedef.int_fast8_t = char
rbx.platform.typedef.int_least16_t = short
rbx.platform.typedef.int_least32_t = int
rbx.platform.typedef.int_least64_t = long_long
rbx.platform.typedef.int_least8_t = char
rbx.platform.typedef.intmax_t = long_long
rbx.platform.typedef.intptr_t = int
rbx.platform.typedef.key_t = int
rbx.platform.typedef.loff_t = long_long
rbx.platform.typedef.mode_t = uint
rbx.platform.typedef.nlink_t = uint
rbx.platform.typedef.off_t = long_long
rbx.platform.typedef.pid_t = int
rbx.platform.typedef.pthread_key_t = uint
rbx.platform.typedef.pthread_once_t = int
rbx.platform.typedef.pthread_t = ulong
rbx.platform.typedef.ptrdiff_t = int
rbx.platform.typedef.quad_t = long_long
rbx.platform.typedef.register_t = long
rbx.platform.typedef.rlim_t = ulong_long
rbx.platform.typedef.sa_family_t = ushort
rbx.platform.typedef.size_t = uint
rbx.platform.typedef.socklen_t = uint
rbx.platform.typedef.ssize_t = int
rbx.platform.typedef.suseconds_t = long
rbx.platform.typedef.time_t = long
rbx.platform.typedef.timer_t = pointer
rbx.platform.typedef.u_char = uchar
rbx.platform.typedef.u_int = uint
rbx.platform.typedef.u_int16_t = ushort
rbx.platform.typedef.u_int32_t = uint
rbx.platform.typedef.u_int64_t = ulong_long
rbx.platform.typedef.u_int8_t = uchar
rbx.platform.typedef.u_long = ulong
rbx.platform.typedef.u_quad_t = ulong_long
rbx.platform.typedef.u_short = ushort
rbx.platform.typedef.uid_t = uint
rbx.platform.typedef.uint = uint
rbx.platform.typedef.uint16_t = ushort
rbx.platform.typedef.uint32_t = uint
rbx.platform.typedef.uint64_t = ulong_long
rbx.platform.typedef.uint8_t = uchar
rbx.platform.typedef.uint_fast16_t = uint
rbx.platform.typedef.uint_fast32_t = uint
rbx.platform.typedef.uint_fast64_t = ulong_long
rbx.platform.typedef.uint_fast8_t = uchar
rbx.platform.typedef.uint_least16_t = ushort
rbx.platform.typedef.uint_least32_t = uint
rbx.platform.typedef.uint_least64_t = ulong_long
rbx.platform.typedef.uint_least8_t = uchar
rbx.platform.typedef.uintmax_t = ulong_long
rbx.platform.typedef.uintptr_t = uint
rbx.platform.typedef.ulong = ulong
rbx.platform.typedef.ushort = ushort
rbx.platform.typedef.wchar_t = long
@@ -0,0 +1,3 @@
rbx.platform.typedef.ptrdiff_t = int
rbx.platform.typedef.size_t = uint
rbx.platform.typedef.ssize_t = int
@@ -0,0 +1,100 @@
rbx.platform.typedef.__darwin_blkcnt_t = long_long
rbx.platform.typedef.__darwin_blksize_t = int
rbx.platform.typedef.__darwin_clock_t = ulong
rbx.platform.typedef.__darwin_ct_rune_t = int
rbx.platform.typedef.__darwin_dev_t = int
rbx.platform.typedef.__darwin_fsblkcnt_t = uint
rbx.platform.typedef.__darwin_fsfilcnt_t = uint
rbx.platform.typedef.__darwin_gid_t = uint
rbx.platform.typedef.__darwin_id_t = uint
rbx.platform.typedef.__darwin_ino64_t = ulong_long
rbx.platform.typedef.__darwin_ino_t = ulong_long
rbx.platform.typedef.__darwin_intptr_t = long
rbx.platform.typedef.__darwin_mach_port_name_t = uint
rbx.platform.typedef.__darwin_mach_port_t = uint
rbx.platform.typedef.__darwin_mode_t = ushort
rbx.platform.typedef.__darwin_natural_t = uint
rbx.platform.typedef.__darwin_off_t = long_long
rbx.platform.typedef.__darwin_pid_t = int
rbx.platform.typedef.__darwin_pthread_key_t = ulong
rbx.platform.typedef.__darwin_ptrdiff_t = int
rbx.platform.typedef.__darwin_rune_t = int
rbx.platform.typedef.__darwin_sigset_t = uint
rbx.platform.typedef.__darwin_size_t = ulong
rbx.platform.typedef.__darwin_socklen_t = uint
rbx.platform.typedef.__darwin_ssize_t = long
rbx.platform.typedef.__darwin_suseconds_t = int
rbx.platform.typedef.__darwin_time_t = long
rbx.platform.typedef.__darwin_uid_t = uint
rbx.platform.typedef.__darwin_useconds_t = uint
rbx.platform.typedef.__darwin_uuid_t[16] = uchar
rbx.platform.typedef.__darwin_wchar_t = int
rbx.platform.typedef.__darwin_wint_t = int
rbx.platform.typedef.__int16_t = short
rbx.platform.typedef.__int32_t = int
rbx.platform.typedef.__int64_t = long_long
rbx.platform.typedef.__int8_t = char
rbx.platform.typedef.__uint16_t = ushort
rbx.platform.typedef.__uint32_t = uint
rbx.platform.typedef.__uint64_t = ulong_long
rbx.platform.typedef.__uint8_t = uchar
rbx.platform.typedef.blkcnt_t = long_long
rbx.platform.typedef.blksize_t = int
rbx.platform.typedef.caddr_t = string
rbx.platform.typedef.clock_t = ulong
rbx.platform.typedef.daddr_t = int
rbx.platform.typedef.dev_t = int
rbx.platform.typedef.fd_mask = int
rbx.platform.typedef.fixpt_t = uint
rbx.platform.typedef.fsblkcnt_t = uint
rbx.platform.typedef.fsfilcnt_t = uint
rbx.platform.typedef.gid_t = uint
rbx.platform.typedef.id_t = uint
rbx.platform.typedef.in_addr_t = uint
rbx.platform.typedef.in_port_t = ushort
rbx.platform.typedef.ino64_t = ulong_long
rbx.platform.typedef.ino_t = ulong_long
rbx.platform.typedef.int16_t = short
rbx.platform.typedef.int32_t = int
rbx.platform.typedef.int64_t = long_long
rbx.platform.typedef.int8_t = char
rbx.platform.typedef.intptr_t = long
rbx.platform.typedef.key_t = int
rbx.platform.typedef.mode_t = ushort
rbx.platform.typedef.nlink_t = ushort
rbx.platform.typedef.off_t = long_long
rbx.platform.typedef.pid_t = int
rbx.platform.typedef.pthread_key_t = ulong
rbx.platform.typedef.qaddr_t = pointer
rbx.platform.typedef.quad_t = long_long
rbx.platform.typedef.register_t = int
rbx.platform.typedef.rlim_t = ulong_long
rbx.platform.typedef.sa_family_t = uchar
rbx.platform.typedef.segsz_t = int
rbx.platform.typedef.size_t = ulong
rbx.platform.typedef.socklen_t = uint
rbx.platform.typedef.ssize_t = long
rbx.platform.typedef.suseconds_t = int
rbx.platform.typedef.swblk_t = int
rbx.platform.typedef.syscall_arg_t = ulong_long
rbx.platform.typedef.time_t = long
rbx.platform.typedef.u_char = uchar
rbx.platform.typedef.u_int = uint
rbx.platform.typedef.u_int16_t = ushort
rbx.platform.typedef.u_int32_t = uint
rbx.platform.typedef.u_int64_t = ulong_long
rbx.platform.typedef.u_int8_t = uchar
rbx.platform.typedef.u_long = ulong
rbx.platform.typedef.u_quad_t = ulong_long
rbx.platform.typedef.u_short = ushort
rbx.platform.typedef.uid_t = uint
rbx.platform.typedef.uint = uint
rbx.platform.typedef.uintptr_t = ulong
rbx.platform.typedef.useconds_t = uint
rbx.platform.typedef.user_addr_t = ulong_long
rbx.platform.typedef.user_long_t = long_long
rbx.platform.typedef.user_size_t = ulong_long
rbx.platform.typedef.user_ssize_t = long_long
rbx.platform.typedef.user_time_t = long_long
rbx.platform.typedef.user_ulong_t = ulong_long
rbx.platform.typedef.ushort = ushort
@@ -0,0 +1,152 @@
rbx.platform.typedef.*) = pointer
rbx.platform.typedef.__accmode_t = int
rbx.platform.typedef.__blkcnt_t = long_long
rbx.platform.typedef.__blksize_t = uint
rbx.platform.typedef.__clock_t = ulong
rbx.platform.typedef.__clockid_t = int
rbx.platform.typedef.__cpulevel_t = int
rbx.platform.typedef.__cpumask_t = uint
rbx.platform.typedef.__cpusetid_t = int
rbx.platform.typedef.__cpuwhich_t = int
rbx.platform.typedef.__critical_t = int
rbx.platform.typedef.__ct_rune_t = int
rbx.platform.typedef.__dev_t = uint
rbx.platform.typedef.__fd_mask = ulong
rbx.platform.typedef.__fflags_t = uint
rbx.platform.typedef.__fixpt_t = uint
rbx.platform.typedef.__fsblkcnt_t = ulong_long
rbx.platform.typedef.__fsfilcnt_t = ulong_long
rbx.platform.typedef.__gid_t = uint
rbx.platform.typedef.__id_t = long_long
rbx.platform.typedef.__ino_t = uint
rbx.platform.typedef.__int16_t = short
rbx.platform.typedef.__int32_t = int
rbx.platform.typedef.__int64_t = long_long
rbx.platform.typedef.__int8_t = char
rbx.platform.typedef.__int_fast16_t = int
rbx.platform.typedef.__int_fast32_t = int
rbx.platform.typedef.__int_fast64_t = long_long
rbx.platform.typedef.__int_fast8_t = int
rbx.platform.typedef.__int_least16_t = short
rbx.platform.typedef.__int_least32_t = int
rbx.platform.typedef.__int_least64_t = long_long
rbx.platform.typedef.__int_least8_t = char
rbx.platform.typedef.__intfptr_t = int
rbx.platform.typedef.__intmax_t = long_long
rbx.platform.typedef.__intptr_t = int
rbx.platform.typedef.__key_t = long
rbx.platform.typedef.__lwpid_t = int
rbx.platform.typedef.__mode_t = ushort
rbx.platform.typedef.__nl_item = int
rbx.platform.typedef.__nlink_t = ushort
rbx.platform.typedef.__off_t = long_long
rbx.platform.typedef.__pid_t = int
rbx.platform.typedef.__ptrdiff_t = int
rbx.platform.typedef.__register_t = int
rbx.platform.typedef.__rlim_t = long_long
rbx.platform.typedef.__rune_t = int
rbx.platform.typedef.__sa_family_t = uchar
rbx.platform.typedef.__segsz_t = int
rbx.platform.typedef.__size_t = uint
rbx.platform.typedef.__socklen_t = uint
rbx.platform.typedef.__ssize_t = int
rbx.platform.typedef.__suseconds_t = long
rbx.platform.typedef.__time_t = long
rbx.platform.typedef.__u_register_t = uint
rbx.platform.typedef.__uid_t = uint
rbx.platform.typedef.__uint16_t = ushort
rbx.platform.typedef.__uint32_t = uint
rbx.platform.typedef.__uint64_t = ulong_long
rbx.platform.typedef.__uint8_t = uchar
rbx.platform.typedef.__uint_fast16_t = uint
rbx.platform.typedef.__uint_fast32_t = uint
rbx.platform.typedef.__uint_fast64_t = ulong_long
rbx.platform.typedef.__uint_fast8_t = uint
rbx.platform.typedef.__uint_least16_t = ushort
rbx.platform.typedef.__uint_least32_t = uint
rbx.platform.typedef.__uint_least64_t = ulong_long
rbx.platform.typedef.__uint_least8_t = uchar
rbx.platform.typedef.__uintfptr_t = uint
rbx.platform.typedef.__uintmax_t = ulong_long
rbx.platform.typedef.__uintptr_t = uint
rbx.platform.typedef.__useconds_t = uint
rbx.platform.typedef.__vm_offset_t = uint
rbx.platform.typedef.__vm_ooffset_t = long_long
rbx.platform.typedef.__vm_paddr_t = uint
rbx.platform.typedef.__vm_pindex_t = ulong_long
rbx.platform.typedef.__vm_size_t = uint
rbx.platform.typedef.__wchar_t = int
rbx.platform.typedef.__wint_t = int
rbx.platform.typedef.__wint_t = int
rbx.platform.typedef.accmode_t = int
rbx.platform.typedef.blkcnt_t = long_long
rbx.platform.typedef.blksize_t = uint
rbx.platform.typedef.c_caddr_t = pointer
rbx.platform.typedef.caddr_t = string
rbx.platform.typedef.clock_t = ulong
rbx.platform.typedef.clockid_t = int
rbx.platform.typedef.cpulevel_t = int
rbx.platform.typedef.cpumask_t = uint
rbx.platform.typedef.cpusetid_t = int
rbx.platform.typedef.cpuwhich_t = int
rbx.platform.typedef.critical_t = int
rbx.platform.typedef.daddr_t = long_long
rbx.platform.typedef.dev_t = uint
rbx.platform.typedef.fd_mask = ulong
rbx.platform.typedef.fflags_t = uint
rbx.platform.typedef.fixpt_t = uint
rbx.platform.typedef.fsblkcnt_t = ulong_long
rbx.platform.typedef.fsfilcnt_t = ulong_long
rbx.platform.typedef.gid_t = uint
rbx.platform.typedef.id_t = long_long
rbx.platform.typedef.in_addr_t = uint
rbx.platform.typedef.in_port_t = ushort
rbx.platform.typedef.ino_t = uint
rbx.platform.typedef.int16_t = short
rbx.platform.typedef.int32_t = int
rbx.platform.typedef.int64_t = long_long
rbx.platform.typedef.int8_t = char
rbx.platform.typedef.intptr_t = int
rbx.platform.typedef.key_t = long
rbx.platform.typedef.lwpid_t = int
rbx.platform.typedef.mode_t = ushort
rbx.platform.typedef.nlink_t = ushort
rbx.platform.typedef.off_t = long_long
rbx.platform.typedef.pid_t = int
rbx.platform.typedef.pthread_key_t = int
rbx.platform.typedef.qaddr_t = pointer
rbx.platform.typedef.quad_t = long_long
rbx.platform.typedef.register_t = int
rbx.platform.typedef.rlim_t = long_long
rbx.platform.typedef.sa_family_t = uchar
rbx.platform.typedef.segsz_t = int
rbx.platform.typedef.size_t = uint
rbx.platform.typedef.socklen_t = uint
rbx.platform.typedef.ssize_t = int
rbx.platform.typedef.suseconds_t = long
rbx.platform.typedef.time_t = long
rbx.platform.typedef.u_char = uchar
rbx.platform.typedef.u_int = uint
rbx.platform.typedef.u_int16_t = ushort
rbx.platform.typedef.u_int32_t = uint
rbx.platform.typedef.u_int64_t = ulong_long
rbx.platform.typedef.u_int8_t = uchar
rbx.platform.typedef.u_long = ulong
rbx.platform.typedef.u_quad_t = ulong_long
rbx.platform.typedef.u_register_t = uint
rbx.platform.typedef.u_short = ushort
rbx.platform.typedef.uid_t = uint
rbx.platform.typedef.uint = uint
rbx.platform.typedef.uint16_t = ushort
rbx.platform.typedef.uint32_t = uint
rbx.platform.typedef.uint64_t = ulong_long
rbx.platform.typedef.uint8_t = uchar
rbx.platform.typedef.uintptr_t = uint
rbx.platform.typedef.useconds_t = uint
rbx.platform.typedef.ushort = ushort
rbx.platform.typedef.vm_offset_t = uint
rbx.platform.typedef.vm_ooffset_t = long_long
rbx.platform.typedef.vm_paddr_t = uint
rbx.platform.typedef.vm_pindex_t = ulong_long
rbx.platform.typedef.vm_size_t = uint
@@ -0,0 +1,152 @@
rbx.platform.typedef.*) = pointer
rbx.platform.typedef.__accmode_t = int
rbx.platform.typedef.__blkcnt_t = long_long
rbx.platform.typedef.__blksize_t = uint
rbx.platform.typedef.__clock_t = ulong
rbx.platform.typedef.__clockid_t = int
rbx.platform.typedef.__cpulevel_t = int
rbx.platform.typedef.__cpumask_t = uint
rbx.platform.typedef.__cpusetid_t = int
rbx.platform.typedef.__cpuwhich_t = int
rbx.platform.typedef.__critical_t = int
rbx.platform.typedef.__ct_rune_t = int
rbx.platform.typedef.__dev_t = ulong_long
rbx.platform.typedef.__fd_mask = ulong
rbx.platform.typedef.__fflags_t = uint
rbx.platform.typedef.__fixpt_t = uint
rbx.platform.typedef.__fsblkcnt_t = ulong_long
rbx.platform.typedef.__fsfilcnt_t = ulong_long
rbx.platform.typedef.__gid_t = uint
rbx.platform.typedef.__id_t = long_long
rbx.platform.typedef.__ino_t = ulong_long
rbx.platform.typedef.__int16_t = short
rbx.platform.typedef.__int32_t = int
rbx.platform.typedef.__int64_t = long_long
rbx.platform.typedef.__int8_t = char
rbx.platform.typedef.__int_fast16_t = int
rbx.platform.typedef.__int_fast32_t = int
rbx.platform.typedef.__int_fast64_t = long_long
rbx.platform.typedef.__int_fast8_t = int
rbx.platform.typedef.__int_least16_t = short
rbx.platform.typedef.__int_least32_t = int
rbx.platform.typedef.__int_least64_t = long_long
rbx.platform.typedef.__int_least8_t = char
rbx.platform.typedef.__intfptr_t = int
rbx.platform.typedef.__intmax_t = long_long
rbx.platform.typedef.__intptr_t = int
rbx.platform.typedef.__key_t = long
rbx.platform.typedef.__lwpid_t = int
rbx.platform.typedef.__mode_t = ushort
rbx.platform.typedef.__nl_item = int
rbx.platform.typedef.__nlink_t = ulong_long
rbx.platform.typedef.__off_t = long_long
rbx.platform.typedef.__pid_t = int
rbx.platform.typedef.__ptrdiff_t = int
rbx.platform.typedef.__register_t = int
rbx.platform.typedef.__rlim_t = long_long
rbx.platform.typedef.__rune_t = int
rbx.platform.typedef.__sa_family_t = uchar
rbx.platform.typedef.__segsz_t = int
rbx.platform.typedef.__size_t = uint
rbx.platform.typedef.__socklen_t = uint
rbx.platform.typedef.__ssize_t = int
rbx.platform.typedef.__suseconds_t = long
rbx.platform.typedef.__time_t = int
rbx.platform.typedef.__u_register_t = uint
rbx.platform.typedef.__uid_t = uint
rbx.platform.typedef.__uint16_t = ushort
rbx.platform.typedef.__uint32_t = uint
rbx.platform.typedef.__uint64_t = ulong_long
rbx.platform.typedef.__uint8_t = uchar
rbx.platform.typedef.__uint_fast16_t = uint
rbx.platform.typedef.__uint_fast32_t = uint
rbx.platform.typedef.__uint_fast64_t = ulong_long
rbx.platform.typedef.__uint_fast8_t = uint
rbx.platform.typedef.__uint_least16_t = ushort
rbx.platform.typedef.__uint_least32_t = uint
rbx.platform.typedef.__uint_least64_t = ulong_long
rbx.platform.typedef.__uint_least8_t = uchar
rbx.platform.typedef.__uintfptr_t = uint
rbx.platform.typedef.__uintmax_t = ulong_long
rbx.platform.typedef.__uintptr_t = uint
rbx.platform.typedef.__useconds_t = uint
rbx.platform.typedef.__vm_offset_t = uint
rbx.platform.typedef.__vm_ooffset_t = long_long
rbx.platform.typedef.__vm_paddr_t = uint
rbx.platform.typedef.__vm_pindex_t = ulong_long
rbx.platform.typedef.__vm_size_t = uint
rbx.platform.typedef.__wchar_t = int
rbx.platform.typedef.__wint_t = int
rbx.platform.typedef.__wint_t = int
rbx.platform.typedef.accmode_t = int
rbx.platform.typedef.blkcnt_t = long_long
rbx.platform.typedef.blksize_t = uint
rbx.platform.typedef.c_caddr_t = pointer
rbx.platform.typedef.caddr_t = string
rbx.platform.typedef.clock_t = ulong
rbx.platform.typedef.clockid_t = int
rbx.platform.typedef.cpulevel_t = int
rbx.platform.typedef.cpumask_t = uint
rbx.platform.typedef.cpusetid_t = int
rbx.platform.typedef.cpuwhich_t = int
rbx.platform.typedef.critical_t = int
rbx.platform.typedef.daddr_t = long_long
rbx.platform.typedef.dev_t = ulong_long
rbx.platform.typedef.fd_mask = ulong
rbx.platform.typedef.fflags_t = uint
rbx.platform.typedef.fixpt_t = uint
rbx.platform.typedef.fsblkcnt_t = ulong_long
rbx.platform.typedef.fsfilcnt_t = ulong_long
rbx.platform.typedef.gid_t = uint
rbx.platform.typedef.id_t = long_long
rbx.platform.typedef.in_addr_t = uint
rbx.platform.typedef.in_port_t = ushort
rbx.platform.typedef.ino_t = ulong_long
rbx.platform.typedef.int16_t = short
rbx.platform.typedef.int32_t = int
rbx.platform.typedef.int64_t = long_long
rbx.platform.typedef.int8_t = char
rbx.platform.typedef.intptr_t = int
rbx.platform.typedef.key_t = long
rbx.platform.typedef.lwpid_t = int
rbx.platform.typedef.mode_t = ushort
rbx.platform.typedef.nlink_t = ulong_long
rbx.platform.typedef.off_t = long_long
rbx.platform.typedef.pid_t = int
rbx.platform.typedef.pthread_key_t = int
rbx.platform.typedef.qaddr_t = pointer
rbx.platform.typedef.quad_t = long_long
rbx.platform.typedef.register_t = int
rbx.platform.typedef.rlim_t = long_long
rbx.platform.typedef.sa_family_t = uchar
rbx.platform.typedef.segsz_t = int
rbx.platform.typedef.size_t = uint
rbx.platform.typedef.socklen_t = uint
rbx.platform.typedef.ssize_t = int
rbx.platform.typedef.suseconds_t = long
rbx.platform.typedef.time_t = int
rbx.platform.typedef.u_char = uchar
rbx.platform.typedef.u_int = uint
rbx.platform.typedef.u_int16_t = ushort
rbx.platform.typedef.u_int32_t = uint
rbx.platform.typedef.u_int64_t = ulong_long
rbx.platform.typedef.u_int8_t = uchar
rbx.platform.typedef.u_long = ulong
rbx.platform.typedef.u_quad_t = ulong_long
rbx.platform.typedef.u_register_t = uint
rbx.platform.typedef.u_short = ushort
rbx.platform.typedef.uid_t = uint
rbx.platform.typedef.uint = uint
rbx.platform.typedef.uint16_t = ushort
rbx.platform.typedef.uint32_t = uint
rbx.platform.typedef.uint64_t = ulong_long
rbx.platform.typedef.uint8_t = uchar
rbx.platform.typedef.uintptr_t = uint
rbx.platform.typedef.useconds_t = uint
rbx.platform.typedef.ushort = ushort
rbx.platform.typedef.vm_offset_t = uint
rbx.platform.typedef.vm_ooffset_t = long_long
rbx.platform.typedef.vm_paddr_t = uint
rbx.platform.typedef.vm_pindex_t = ulong_long
rbx.platform.typedef.vm_size_t = uint
@@ -0,0 +1,107 @@
rbx.platform.typedef.*__caddr_t = char
rbx.platform.typedef.*__qaddr_t = long_long
rbx.platform.typedef.__blkcnt64_t = long_long
rbx.platform.typedef.__blkcnt_t = long
rbx.platform.typedef.__blksize_t = long
rbx.platform.typedef.__clock_t = long
rbx.platform.typedef.__clockid_t = int
rbx.platform.typedef.__daddr_t = int
rbx.platform.typedef.__dev_t = uint
rbx.platform.typedef.__fd_mask = long
rbx.platform.typedef.__fsblkcnt64_t = ulong_long
rbx.platform.typedef.__fsblkcnt_t = ulong
rbx.platform.typedef.__fsfilcnt64_t = ulong_long
rbx.platform.typedef.__fsfilcnt_t = ulong
rbx.platform.typedef.__fsid_t = ulong_long
rbx.platform.typedef.__gid_t = uint
rbx.platform.typedef.__id_t = uint
rbx.platform.typedef.__ino64_t = ulong_long
rbx.platform.typedef.__ino_t = ulong
rbx.platform.typedef.__int16_t = short
rbx.platform.typedef.__int32_t = int
rbx.platform.typedef.__int64_t = long_long
rbx.platform.typedef.__int8_t = char
rbx.platform.typedef.__intptr_t = int
rbx.platform.typedef.__key_t = int
rbx.platform.typedef.__loff_t = long_long
rbx.platform.typedef.__mode_t = uint
rbx.platform.typedef.__nlink_t = uint
rbx.platform.typedef.__off64_t = long_long
rbx.platform.typedef.__off_t = long
rbx.platform.typedef.__pid_t = int
rbx.platform.typedef.__priority_which_t = int
rbx.platform.typedef.__pthread_key = int
rbx.platform.typedef.__pthread_t = int
rbx.platform.typedef.__quad_t = long_long
rbx.platform.typedef.__rlim64_t = ulong_long
rbx.platform.typedef.__rlim_t = ulong
rbx.platform.typedef.__rlimit_resource_t = int
rbx.platform.typedef.__rusage_who_t = int
rbx.platform.typedef.__sig_atomic_t = int
rbx.platform.typedef.__sigset_t = ulong
rbx.platform.typedef.__socklen_t = uint
rbx.platform.typedef.__ssize_t = int
rbx.platform.typedef.__suseconds_t = long
rbx.platform.typedef.__swblk_t = long
rbx.platform.typedef.__time_t = long
rbx.platform.typedef.__timer_t = int
rbx.platform.typedef.__u_char = uchar
rbx.platform.typedef.__u_int = uint
rbx.platform.typedef.__u_long = ulong
rbx.platform.typedef.__u_quad_t = ulong_long
rbx.platform.typedef.__u_short = ushort
rbx.platform.typedef.__uid_t = uint
rbx.platform.typedef.__uint16_t = ushort
rbx.platform.typedef.__uint32_t = uint
rbx.platform.typedef.__uint64_t = ulong_long
rbx.platform.typedef.__uint8_t = uchar
rbx.platform.typedef.__useconds_t = uint
rbx.platform.typedef.blkcnt_t = long_long
rbx.platform.typedef.blksize_t = long
rbx.platform.typedef.clock_t = long
rbx.platform.typedef.clockid_t = int
rbx.platform.typedef.daddr_t = int
rbx.platform.typedef.dev_t = uint
rbx.platform.typedef.fd_mask = long
rbx.platform.typedef.fsblkcnt_t = ulong_long
rbx.platform.typedef.fsfilcnt_t = ulong_long
rbx.platform.typedef.fsid_t = ulong_long
rbx.platform.typedef.gid_t = uint
rbx.platform.typedef.id_t = uint
rbx.platform.typedef.ino_t = ulong_long
rbx.platform.typedef.int16_t = short
rbx.platform.typedef.int32_t = int
rbx.platform.typedef.int64_t = long_long
rbx.platform.typedef.int8_t = char
rbx.platform.typedef.key_t = int
rbx.platform.typedef.loff_t = long_long
rbx.platform.typedef.mode_t = uint
rbx.platform.typedef.nlink_t = uint
rbx.platform.typedef.off_t = long_long
rbx.platform.typedef.pid_t = int
rbx.platform.typedef.pthread_key_t = int
rbx.platform.typedef.pthread_t = int
rbx.platform.typedef.quad_t = long_long
rbx.platform.typedef.register_t = long
rbx.platform.typedef.rlim_t = ulong_long
rbx.platform.typedef.sa_family_t = uchar
rbx.platform.typedef.sigset_t = ulong
rbx.platform.typedef.size_t = uint
rbx.platform.typedef.socklen_t = uint
rbx.platform.typedef.ssize_t = int
rbx.platform.typedef.suseconds_t = long
rbx.platform.typedef.time_t = long
rbx.platform.typedef.timer_t = int
rbx.platform.typedef.u_char = uchar
rbx.platform.typedef.u_int = uint
rbx.platform.typedef.u_int16_t = ushort
rbx.platform.typedef.u_int32_t = uint
rbx.platform.typedef.u_int64_t = ulong_long
rbx.platform.typedef.u_int8_t = uchar
rbx.platform.typedef.u_long = ulong
rbx.platform.typedef.u_quad_t = ulong_long
rbx.platform.typedef.u_short = ushort
rbx.platform.typedef.uid_t = uint
rbx.platform.typedef.uint = uint
rbx.platform.typedef.ulong = ulong
rbx.platform.typedef.ushort = ushort
@@ -0,0 +1,103 @@
rbx.platform.typedef.*__caddr_t = char
rbx.platform.typedef.*__qaddr_t = long_long
rbx.platform.typedef.__blkcnt64_t = long_long
rbx.platform.typedef.__blkcnt_t = long
rbx.platform.typedef.__blksize_t = long
rbx.platform.typedef.__clock_t = long
rbx.platform.typedef.__clockid_t = int
rbx.platform.typedef.__daddr_t = int
rbx.platform.typedef.__dev_t = ulong_long
rbx.platform.typedef.__fd_mask = long
rbx.platform.typedef.__fsblkcnt64_t = ulong_long
rbx.platform.typedef.__fsblkcnt_t = ulong
rbx.platform.typedef.__fsfilcnt64_t = ulong_long
rbx.platform.typedef.__fsfilcnt_t = ulong
rbx.platform.typedef.__gid_t = uint
rbx.platform.typedef.__id_t = uint
rbx.platform.typedef.__ino64_t = ulong_long
rbx.platform.typedef.__ino_t = ulong
rbx.platform.typedef.__int16_t = short
rbx.platform.typedef.__int32_t = int
rbx.platform.typedef.__int64_t = long_long
rbx.platform.typedef.__int8_t = char
rbx.platform.typedef.__intptr_t = int
rbx.platform.typedef.__key_t = int
rbx.platform.typedef.__loff_t = long_long
rbx.platform.typedef.__mode_t = uint
rbx.platform.typedef.__nlink_t = uint
rbx.platform.typedef.__off64_t = long_long
rbx.platform.typedef.__off_t = long
rbx.platform.typedef.__pid_t = int
rbx.platform.typedef.__priority_which_t = int
rbx.platform.typedef.__quad_t = long_long
rbx.platform.typedef.__rlim64_t = ulong_long
rbx.platform.typedef.__rlim_t = ulong
rbx.platform.typedef.__rlimit_resource_t = int
rbx.platform.typedef.__rusage_who_t = int
rbx.platform.typedef.__sig_atomic_t = int
rbx.platform.typedef.__socklen_t = uint
rbx.platform.typedef.__ssize_t = int
rbx.platform.typedef.__suseconds_t = long
rbx.platform.typedef.__swblk_t = long
rbx.platform.typedef.__time_t = long
rbx.platform.typedef.__timer_t = pointer
rbx.platform.typedef.__u_char = uchar
rbx.platform.typedef.__u_int = uint
rbx.platform.typedef.__u_long = ulong
rbx.platform.typedef.__u_quad_t = ulong_long
rbx.platform.typedef.__u_short = ushort
rbx.platform.typedef.__uid_t = uint
rbx.platform.typedef.__uint16_t = ushort
rbx.platform.typedef.__uint32_t = uint
rbx.platform.typedef.__uint64_t = ulong_long
rbx.platform.typedef.__uint8_t = uchar
rbx.platform.typedef.__useconds_t = uint
rbx.platform.typedef.blkcnt_t = long_long
rbx.platform.typedef.blksize_t = long
rbx.platform.typedef.clockid_t = int
rbx.platform.typedef.daddr_t = int
rbx.platform.typedef.dev_t = ulong_long
rbx.platform.typedef.fd_mask = long
rbx.platform.typedef.fsblkcnt_t = ulong_long
rbx.platform.typedef.fsfilcnt_t = ulong_long
rbx.platform.typedef.gid_t = uint
rbx.platform.typedef.id_t = uint
rbx.platform.typedef.in_addr_t = uint
rbx.platform.typedef.in_port_t = ushort
rbx.platform.typedef.ino_t = ulong_long
rbx.platform.typedef.int16_t = short
rbx.platform.typedef.int32_t = int
rbx.platform.typedef.int64_t = long_long
rbx.platform.typedef.int8_t = char
rbx.platform.typedef.key_t = int
rbx.platform.typedef.loff_t = long_long
rbx.platform.typedef.mode_t = uint
rbx.platform.typedef.nlink_t = uint
rbx.platform.typedef.off_t = long_long
rbx.platform.typedef.pid_t = int
rbx.platform.typedef.pthread_key_t = uint
rbx.platform.typedef.pthread_once_t = int
rbx.platform.typedef.pthread_t = ulong
rbx.platform.typedef.quad_t = long_long
rbx.platform.typedef.register_t = long
rbx.platform.typedef.rlim_t = ulong_long
rbx.platform.typedef.sa_family_t = ushort
rbx.platform.typedef.size_t = uint
rbx.platform.typedef.socklen_t = uint
rbx.platform.typedef.ssize_t = int
rbx.platform.typedef.suseconds_t = long
rbx.platform.typedef.time_t = long
rbx.platform.typedef.timer_t = pointer
rbx.platform.typedef.u_char = uchar
rbx.platform.typedef.u_int = uint
rbx.platform.typedef.u_int16_t = ushort
rbx.platform.typedef.u_int32_t = uint
rbx.platform.typedef.u_int64_t = ulong_long
rbx.platform.typedef.u_int8_t = uchar
rbx.platform.typedef.u_long = ulong
rbx.platform.typedef.u_quad_t = ulong_long
rbx.platform.typedef.u_short = ushort
rbx.platform.typedef.uid_t = uint
rbx.platform.typedef.uint = uint
rbx.platform.typedef.ulong = ulong
rbx.platform.typedef.ushort = ushort
@@ -0,0 +1,126 @@
rbx.platform.typedef.__clock_t = int
rbx.platform.typedef.__clockid_t = int
rbx.platform.typedef.__cpuid_t = ulong
rbx.platform.typedef.__dev_t = int
rbx.platform.typedef.__fd_mask = int
rbx.platform.typedef.__fixpt_t = uint
rbx.platform.typedef.__gid_t = uint
rbx.platform.typedef.__id_t = uint
rbx.platform.typedef.__in_addr_t = uint
rbx.platform.typedef.__in_port_t = ushort
rbx.platform.typedef.__ino_t = uint
rbx.platform.typedef.__int16_t = short
rbx.platform.typedef.__int32_t = int
rbx.platform.typedef.__int64_t = long_long
rbx.platform.typedef.__int8_t = char
rbx.platform.typedef.__int_fast16_t = int
rbx.platform.typedef.__int_fast32_t = int
rbx.platform.typedef.__int_fast64_t = long_long
rbx.platform.typedef.__int_fast8_t = int
rbx.platform.typedef.__int_least16_t = short
rbx.platform.typedef.__int_least32_t = int
rbx.platform.typedef.__int_least64_t = long_long
rbx.platform.typedef.__int_least8_t = char
rbx.platform.typedef.__intmax_t = long_long
rbx.platform.typedef.__intptr_t = long
rbx.platform.typedef.__key_t = long
rbx.platform.typedef.__mode_t = uint
rbx.platform.typedef.__nlink_t = uint
rbx.platform.typedef.__off_t = long_long
rbx.platform.typedef.__paddr_t = ulong
rbx.platform.typedef.__pid_t = int
rbx.platform.typedef.__psize_t = ulong
rbx.platform.typedef.__ptrdiff_t = long
rbx.platform.typedef.__register_t = int
rbx.platform.typedef.__rlim_t = ulong_long
rbx.platform.typedef.__rune_t = int
rbx.platform.typedef.__sa_family_t = uchar
rbx.platform.typedef.__segsz_t = int
rbx.platform.typedef.__size_t = ulong
rbx.platform.typedef.__socklen_t = uint
rbx.platform.typedef.__ssize_t = long
rbx.platform.typedef.__suseconds_t = int
rbx.platform.typedef.__swblk_t = int
rbx.platform.typedef.__time_t = int
rbx.platform.typedef.__timer_t = int
rbx.platform.typedef.__uid_t = uint
rbx.platform.typedef.__uint16_t = ushort
rbx.platform.typedef.__uint32_t = uint
rbx.platform.typedef.__uint64_t = ulong_long
rbx.platform.typedef.__uint8_t = uchar
rbx.platform.typedef.__uint_fast16_t = uint
rbx.platform.typedef.__uint_fast32_t = uint
rbx.platform.typedef.__uint_fast64_t = ulong_long
rbx.platform.typedef.__uint_fast8_t = uint
rbx.platform.typedef.__uint_least16_t = ushort
rbx.platform.typedef.__uint_least32_t = uint
rbx.platform.typedef.__uint_least64_t = ulong_long
rbx.platform.typedef.__uint_least8_t = uchar
rbx.platform.typedef.__uintmax_t = ulong_long
rbx.platform.typedef.__uintptr_t = ulong
rbx.platform.typedef.__useconds_t = uint
rbx.platform.typedef.__vaddr_t = ulong
rbx.platform.typedef.__vsize_t = ulong
rbx.platform.typedef.__wchar_t = int
rbx.platform.typedef.__wctrans_t = pointer
rbx.platform.typedef.__wctype_t = pointer
rbx.platform.typedef.__wint_t = int
rbx.platform.typedef.caddr_t = string
rbx.platform.typedef.clock_t = int
rbx.platform.typedef.clockid_t = int
rbx.platform.typedef.cpuid_t = ulong
rbx.platform.typedef.daddr32_t = int
rbx.platform.typedef.daddr64_t = long_long
rbx.platform.typedef.daddr_t = int
rbx.platform.typedef.dev_t = int
rbx.platform.typedef.fixpt_t = uint
rbx.platform.typedef.gid_t = uint
rbx.platform.typedef.id_t = uint
rbx.platform.typedef.in_addr_t = uint
rbx.platform.typedef.in_port_t = ushort
rbx.platform.typedef.ino_t = uint
rbx.platform.typedef.int16_t = short
rbx.platform.typedef.int32_t = int
rbx.platform.typedef.int64_t = long_long
rbx.platform.typedef.int8_t = char
rbx.platform.typedef.key_t = long
rbx.platform.typedef.mode_t = uint
rbx.platform.typedef.nlink_t = uint
rbx.platform.typedef.off_t = long_long
rbx.platform.typedef.paddr_t = ulong
rbx.platform.typedef.pid_t = int
rbx.platform.typedef.psize_t = ulong
rbx.platform.typedef.qaddr_t = pointer
rbx.platform.typedef.quad_t = long_long
rbx.platform.typedef.register_t = int
rbx.platform.typedef.rlim_t = ulong_long
rbx.platform.typedef.sa_family_t = uchar
rbx.platform.typedef.segsz_t = int
rbx.platform.typedef.size_t = ulong
rbx.platform.typedef.socklen_t = uint
rbx.platform.typedef.ssize_t = long
rbx.platform.typedef.suseconds_t = int
rbx.platform.typedef.swblk_t = int
rbx.platform.typedef.time_t = int
rbx.platform.typedef.timer_t = int
rbx.platform.typedef.u_char = uchar
rbx.platform.typedef.u_int = uint
rbx.platform.typedef.u_int16_t = ushort
rbx.platform.typedef.u_int32_t = uint
rbx.platform.typedef.u_int64_t = ulong_long
rbx.platform.typedef.u_int8_t = uchar
rbx.platform.typedef.u_long = ulong
rbx.platform.typedef.u_quad_t = ulong_long
rbx.platform.typedef.u_short = ushort
rbx.platform.typedef.uid_t = uint
rbx.platform.typedef.uint = uint
rbx.platform.typedef.uint16_t = ushort
rbx.platform.typedef.uint32_t = uint
rbx.platform.typedef.uint64_t = ulong_long
rbx.platform.typedef.uint8_t = uchar
rbx.platform.typedef.ulong = ulong
rbx.platform.typedef.unchar = uchar
rbx.platform.typedef.useconds_t = uint
rbx.platform.typedef.ushort = ushort
rbx.platform.typedef.vaddr_t = ulong
rbx.platform.typedef.vsize_t = ulong
@@ -0,0 +1,128 @@
rbx.platform.typedef.__clock_t = int
rbx.platform.typedef.__clockid_t = int
rbx.platform.typedef.__cpuid_t = ulong
rbx.platform.typedef.__dev_t = int
rbx.platform.typedef.__fd_mask = int
rbx.platform.typedef.__fixpt_t = uint
rbx.platform.typedef.__gid_t = uint
rbx.platform.typedef.__id_t = uint
rbx.platform.typedef.__in_addr_t = uint
rbx.platform.typedef.__in_port_t = ushort
rbx.platform.typedef.__ino_t = uint
rbx.platform.typedef.__int16_t = short
rbx.platform.typedef.__int32_t = int
rbx.platform.typedef.__int64_t = long_long
rbx.platform.typedef.__int8_t = char
rbx.platform.typedef.__int_fast16_t = int
rbx.platform.typedef.__int_fast32_t = int
rbx.platform.typedef.__int_fast64_t = long_long
rbx.platform.typedef.__int_fast8_t = int
rbx.platform.typedef.__int_least16_t = short
rbx.platform.typedef.__int_least32_t = int
rbx.platform.typedef.__int_least64_t = long_long
rbx.platform.typedef.__int_least8_t = char
rbx.platform.typedef.__intmax_t = long_long
rbx.platform.typedef.__intptr_t = long
rbx.platform.typedef.__key_t = long
rbx.platform.typedef.__mode_t = uint
rbx.platform.typedef.__nlink_t = uint
rbx.platform.typedef.__off_t = long_long
rbx.platform.typedef.__paddr_t = ulong
rbx.platform.typedef.__pid_t = int
rbx.platform.typedef.__psize_t = ulong
rbx.platform.typedef.__ptrdiff_t = long
rbx.platform.typedef.__register_t = int
rbx.platform.typedef.__rlim_t = ulong_long
rbx.platform.typedef.__rune_t = int
rbx.platform.typedef.__sa_family_t = uchar
rbx.platform.typedef.__segsz_t = int
rbx.platform.typedef.__size_t = ulong
rbx.platform.typedef.__socklen_t = uint
rbx.platform.typedef.__ssize_t = long
rbx.platform.typedef.__suseconds_t = int
rbx.platform.typedef.__swblk_t = int
rbx.platform.typedef.__time_t = int
rbx.platform.typedef.__timer_t = int
rbx.platform.typedef.__uid_t = uint
rbx.platform.typedef.__uint16_t = ushort
rbx.platform.typedef.__uint32_t = uint
rbx.platform.typedef.__uint64_t = ulong_long
rbx.platform.typedef.__uint8_t = uchar
rbx.platform.typedef.__uint_fast16_t = uint
rbx.platform.typedef.__uint_fast32_t = uint
rbx.platform.typedef.__uint_fast64_t = ulong_long
rbx.platform.typedef.__uint_fast8_t = uint
rbx.platform.typedef.__uint_least16_t = ushort
rbx.platform.typedef.__uint_least32_t = uint
rbx.platform.typedef.__uint_least64_t = ulong_long
rbx.platform.typedef.__uint_least8_t = uchar
rbx.platform.typedef.__uintmax_t = ulong_long
rbx.platform.typedef.__uintptr_t = ulong
rbx.platform.typedef.__useconds_t = uint
rbx.platform.typedef.__vaddr_t = ulong
rbx.platform.typedef.__vsize_t = ulong
rbx.platform.typedef.__wchar_t = int
rbx.platform.typedef.__wctrans_t = pointer
rbx.platform.typedef.__wctype_t = pointer
rbx.platform.typedef.__wint_t = int
rbx.platform.typedef.caddr_t = string
rbx.platform.typedef.clock_t = int
rbx.platform.typedef.clockid_t = int
rbx.platform.typedef.cpuid_t = ulong
rbx.platform.typedef.daddr32_t = int
rbx.platform.typedef.daddr64_t = long_long
rbx.platform.typedef.daddr_t = int
rbx.platform.typedef.dev_t = int
rbx.platform.typedef.fixpt_t = uint
rbx.platform.typedef.gid_t = uint
rbx.platform.typedef.id_t = uint
rbx.platform.typedef.in_addr_t = uint
rbx.platform.typedef.in_port_t = ushort
rbx.platform.typedef.ino_t = uint
rbx.platform.typedef.int16_t = short
rbx.platform.typedef.int32_t = int
rbx.platform.typedef.int64_t = long_long
rbx.platform.typedef.int8_t = char
rbx.platform.typedef.intptr_t = long
rbx.platform.typedef.key_t = long
rbx.platform.typedef.mode_t = uint
rbx.platform.typedef.nlink_t = uint
rbx.platform.typedef.off_t = long_long
rbx.platform.typedef.paddr_t = ulong
rbx.platform.typedef.pid_t = int
rbx.platform.typedef.psize_t = ulong
rbx.platform.typedef.qaddr_t = pointer
rbx.platform.typedef.quad_t = long_long
rbx.platform.typedef.register_t = int
rbx.platform.typedef.rlim_t = ulong_long
rbx.platform.typedef.sa_family_t = uchar
rbx.platform.typedef.segsz_t = int
rbx.platform.typedef.size_t = ulong
rbx.platform.typedef.socklen_t = uint
rbx.platform.typedef.ssize_t = long
rbx.platform.typedef.suseconds_t = int
rbx.platform.typedef.swblk_t = int
rbx.platform.typedef.time_t = int
rbx.platform.typedef.timer_t = int
rbx.platform.typedef.u_char = uchar
rbx.platform.typedef.u_int = uint
rbx.platform.typedef.u_int16_t = ushort
rbx.platform.typedef.u_int32_t = uint
rbx.platform.typedef.u_int64_t = ulong_long
rbx.platform.typedef.u_int8_t = uchar
rbx.platform.typedef.u_long = ulong
rbx.platform.typedef.u_quad_t = ulong_long
rbx.platform.typedef.u_short = ushort
rbx.platform.typedef.uid_t = uint
rbx.platform.typedef.uint = uint
rbx.platform.typedef.uint16_t = ushort
rbx.platform.typedef.uint32_t = uint
rbx.platform.typedef.uint64_t = ulong_long
rbx.platform.typedef.uint8_t = uchar
rbx.platform.typedef.uintptr_t = ulong
rbx.platform.typedef.ulong = ulong
rbx.platform.typedef.unchar = uchar
rbx.platform.typedef.useconds_t = uint
rbx.platform.typedef.ushort = ushort
rbx.platform.typedef.vaddr_t = ulong
rbx.platform.typedef.vsize_t = ulong
@@ -0,0 +1,122 @@
rbx.platform.typedef.*caddr_t = char
rbx.platform.typedef.blkcnt64_t = long_long
rbx.platform.typedef.blkcnt_t = long_long
rbx.platform.typedef.blksize_t = long
rbx.platform.typedef.clock_t = long
rbx.platform.typedef.clockid_t = int
rbx.platform.typedef.cnt_t = short
rbx.platform.typedef.cpu_flag_t = ushort
rbx.platform.typedef.ctid_t = long
rbx.platform.typedef.daddr_t = long
rbx.platform.typedef.datalink_id_t = uint
rbx.platform.typedef.dev_t = ulong
rbx.platform.typedef.diskaddr_t = ulong_long
rbx.platform.typedef.disp_lock_t = uchar
rbx.platform.typedef.fd_mask = long
rbx.platform.typedef.fds_mask = long
rbx.platform.typedef.fsblkcnt64_t = ulong_long
rbx.platform.typedef.fsblkcnt_t = ulong_long
rbx.platform.typedef.fsfilcnt64_t = ulong_long
rbx.platform.typedef.fsfilcnt_t = ulong_long
rbx.platform.typedef.gid_t = uint
rbx.platform.typedef.hrtime_t = long_long
rbx.platform.typedef.id_t = long
rbx.platform.typedef.in_addr_t = uint
rbx.platform.typedef.in_port_t = ushort
rbx.platform.typedef.index_t = short
rbx.platform.typedef.ino64_t = ulong_long
rbx.platform.typedef.ino_t = ulong_long
rbx.platform.typedef.int16_t = short
rbx.platform.typedef.int32_t = int
rbx.platform.typedef.int64_t = long_long
rbx.platform.typedef.int8_t = char
rbx.platform.typedef.int_fast16_t = int
rbx.platform.typedef.int_fast32_t = int
rbx.platform.typedef.int_fast64_t = long_long
rbx.platform.typedef.int_fast8_t = char
rbx.platform.typedef.int_least16_t = short
rbx.platform.typedef.int_least32_t = int
rbx.platform.typedef.int_least64_t = long_long
rbx.platform.typedef.int_least8_t = char
rbx.platform.typedef.intmax_t = long_long
rbx.platform.typedef.intptr_t = int
rbx.platform.typedef.ipaddr_t = uint
rbx.platform.typedef.k_fltset_t = uint
rbx.platform.typedef.key_t = int
rbx.platform.typedef.len_t = ulong_long
rbx.platform.typedef.lgrp_id_t = long
rbx.platform.typedef.lock_t = uchar
rbx.platform.typedef.longlong_t = long_long
rbx.platform.typedef.major_t = ulong
rbx.platform.typedef.minor_t = ulong
rbx.platform.typedef.mode_t = ulong
rbx.platform.typedef.model_t = uint
rbx.platform.typedef.nfds_t = ulong
rbx.platform.typedef.nlink_t = ulong
rbx.platform.typedef.o_dev_t = short
rbx.platform.typedef.o_gid_t = ushort
rbx.platform.typedef.o_ino_t = ushort
rbx.platform.typedef.o_mode_t = ushort
rbx.platform.typedef.o_nlink_t = short
rbx.platform.typedef.o_pid_t = short
rbx.platform.typedef.o_uid_t = ushort
rbx.platform.typedef.off64_t = long_long
rbx.platform.typedef.off_t = long_long
rbx.platform.typedef.offset_t = long_long
rbx.platform.typedef.pad64_t = long_long
rbx.platform.typedef.pfn_t = ulong
rbx.platform.typedef.pgcnt_t = ulong
rbx.platform.typedef.pid_t = long
rbx.platform.typedef.poolid_t = long
rbx.platform.typedef.pri_t = short
rbx.platform.typedef.projid_t = long
rbx.platform.typedef.pthread_key_t = uint
rbx.platform.typedef.pthread_t = uint
rbx.platform.typedef.ptrdiff_t = int
rbx.platform.typedef.rlim64_t = ulong_long
rbx.platform.typedef.rlim_t = ulong_long
rbx.platform.typedef.sa_family_t = ushort
rbx.platform.typedef.size_t = uint
rbx.platform.typedef.socklen_t = uint
rbx.platform.typedef.spgcnt_t = long
rbx.platform.typedef.ssize_t = int
rbx.platform.typedef.suseconds_t = long
rbx.platform.typedef.sysid_t = short
rbx.platform.typedef.t_scalar_t = long
rbx.platform.typedef.t_uscalar_t = ulong
rbx.platform.typedef.taskid_t = long
rbx.platform.typedef.time_t = long
rbx.platform.typedef.timer_t = int
rbx.platform.typedef.u_char = uchar
rbx.platform.typedef.u_int = uint
rbx.platform.typedef.u_long = ulong
rbx.platform.typedef.u_longlong_t = ulong_long
rbx.platform.typedef.u_offset_t = ulong_long
rbx.platform.typedef.u_short = ushort
rbx.platform.typedef.uchar_t = uchar
rbx.platform.typedef.uid_t = uint
rbx.platform.typedef.uint = uint
rbx.platform.typedef.uint16_t = ushort
rbx.platform.typedef.uint32_t = uint
rbx.platform.typedef.uint64_t = ulong_long
rbx.platform.typedef.uint8_t = uchar
rbx.platform.typedef.uint_fast16_t = uint
rbx.platform.typedef.uint_fast32_t = uint
rbx.platform.typedef.uint_fast64_t = ulong_long
rbx.platform.typedef.uint_fast8_t = uchar
rbx.platform.typedef.uint_least16_t = ushort
rbx.platform.typedef.uint_least32_t = uint
rbx.platform.typedef.uint_least64_t = ulong_long
rbx.platform.typedef.uint_least8_t = uchar
rbx.platform.typedef.uint_t = uint
rbx.platform.typedef.uintmax_t = ulong_long
rbx.platform.typedef.uintptr_t = uint
rbx.platform.typedef.ulong = ulong
rbx.platform.typedef.ulong_t = ulong
rbx.platform.typedef.unchar = uchar
rbx.platform.typedef.upad64_t = ulong_long
rbx.platform.typedef.use_t = uchar
rbx.platform.typedef.useconds_t = uint
rbx.platform.typedef.ushort = ushort
rbx.platform.typedef.ushort_t = ushort
rbx.platform.typedef.zoneid_t = long
@@ -0,0 +1,52 @@
rbx.platform.typedef.__time32_t = long
rbx.platform.typedef.__time64_t = long_long
rbx.platform.typedef._dev_t = uint
rbx.platform.typedef._ino_t = ushort
rbx.platform.typedef._mode_t = ushort
rbx.platform.typedef._off64_t = long_long
rbx.platform.typedef._off_t = long
rbx.platform.typedef._pid_t = int
rbx.platform.typedef._sigset_t = ulong
rbx.platform.typedef.dev_t = uint
rbx.platform.typedef.errno_t = int
rbx.platform.typedef.ino_t = ushort
rbx.platform.typedef.int16_t = short
rbx.platform.typedef.int32_t = int
rbx.platform.typedef.int64_t = long_long
rbx.platform.typedef.int8_t = char
rbx.platform.typedef.int_fast16_t = short
rbx.platform.typedef.int_fast32_t = int
rbx.platform.typedef.int_fast64_t = long_long
rbx.platform.typedef.int_fast8_t = char
rbx.platform.typedef.int_least16_t = short
rbx.platform.typedef.int_least32_t = int
rbx.platform.typedef.int_least64_t = long_long
rbx.platform.typedef.int_least8_t = char
rbx.platform.typedef.intmax_t = long_long
rbx.platform.typedef.intptr_t = int
rbx.platform.typedef.mode_t = ushort
rbx.platform.typedef.off32_t = long
rbx.platform.typedef.off64_t = long_long
rbx.platform.typedef.off_t = long_long
rbx.platform.typedef.pid_t = int
rbx.platform.typedef.ptrdiff_t = int
rbx.platform.typedef.rsize_t = uint
rbx.platform.typedef.size_t = uint
rbx.platform.typedef.ssize_t = int
rbx.platform.typedef.time_t = long
rbx.platform.typedef.uint16_t = ushort
rbx.platform.typedef.uint64_t = ulong_long
rbx.platform.typedef.uint8_t = uchar
rbx.platform.typedef.uint_fast16_t = ushort
rbx.platform.typedef.uint_fast32_t = uint
rbx.platform.typedef.uint_fast64_t = ulong_long
rbx.platform.typedef.uint_fast8_t = uchar
rbx.platform.typedef.uint_least16_t = ushort
rbx.platform.typedef.uint_least64_t = ulong_long
rbx.platform.typedef.uint_least8_t = uchar
rbx.platform.typedef.uintmax_t = ulong_long
rbx.platform.typedef.uintptr_t = uint
rbx.platform.typedef.useconds_t = uint
rbx.platform.typedef.wchar_t = ushort
rbx.platform.typedef.wctype_t = ushort
rbx.platform.typedef.wint_t = ushort
@@ -0,0 +1,104 @@
rbx.platform.typedef.*__caddr_t = char
rbx.platform.typedef.*__qaddr_t = long
rbx.platform.typedef.__blkcnt64_t = long
rbx.platform.typedef.__blkcnt_t = long
rbx.platform.typedef.__blksize_t = long
rbx.platform.typedef.__clock_t = long
rbx.platform.typedef.__clockid_t = int
rbx.platform.typedef.__daddr_t = int
rbx.platform.typedef.__dev_t = ulong
rbx.platform.typedef.__fd_mask = long
rbx.platform.typedef.__fsblkcnt64_t = ulong
rbx.platform.typedef.__fsblkcnt_t = ulong
rbx.platform.typedef.__fsfilcnt64_t = ulong
rbx.platform.typedef.__fsfilcnt_t = ulong
rbx.platform.typedef.__gid_t = uint
rbx.platform.typedef.__id_t = uint
rbx.platform.typedef.__in_addr_t = uint
rbx.platform.typedef.__in_port_t = ushort
rbx.platform.typedef.__ino64_t = ulong
rbx.platform.typedef.__ino_t = ulong
rbx.platform.typedef.__int16_t = short
rbx.platform.typedef.__int32_t = int
rbx.platform.typedef.__int64_t = long
rbx.platform.typedef.__int8_t = char
rbx.platform.typedef.__intptr_t = long
rbx.platform.typedef.__key_t = int
rbx.platform.typedef.__loff_t = long
rbx.platform.typedef.__mode_t = uint
rbx.platform.typedef.__nlink_t = ulong
rbx.platform.typedef.__off64_t = long
rbx.platform.typedef.__off_t = long
rbx.platform.typedef.__pid_t = int
rbx.platform.typedef.__priority_which_t = int
rbx.platform.typedef.__quad_t = long
rbx.platform.typedef.__rlim64_t = ulong
rbx.platform.typedef.__rlim_t = ulong
rbx.platform.typedef.__rlimit_resource_t = int
rbx.platform.typedef.__rusage_who_t = int
rbx.platform.typedef.__sig_atomic_t = int
rbx.platform.typedef.__socklen_t = uint
rbx.platform.typedef.__ssize_t = long
rbx.platform.typedef.__suseconds_t = long
rbx.platform.typedef.__swblk_t = long
rbx.platform.typedef.__time_t = long
rbx.platform.typedef.__timer_t = pointer
rbx.platform.typedef.__u_char = uchar
rbx.platform.typedef.__u_int = uint
rbx.platform.typedef.__u_long = ulong
rbx.platform.typedef.__u_quad_t = ulong
rbx.platform.typedef.__u_short = ushort
rbx.platform.typedef.__uid_t = uint
rbx.platform.typedef.__uint16_t = ushort
rbx.platform.typedef.__uint32_t = uint
rbx.platform.typedef.__uint64_t = ulong
rbx.platform.typedef.__uint8_t = uchar
rbx.platform.typedef.__useconds_t = uint
rbx.platform.typedef.blkcnt_t = long
rbx.platform.typedef.blksize_t = long
rbx.platform.typedef.clock_t = long
rbx.platform.typedef.clockid_t = int
rbx.platform.typedef.daddr_t = int
rbx.platform.typedef.dev_t = ulong
rbx.platform.typedef.fd_mask = long
rbx.platform.typedef.fsblkcnt_t = ulong
rbx.platform.typedef.fsfilcnt_t = ulong
rbx.platform.typedef.gid_t = uint
rbx.platform.typedef.id_t = uint
rbx.platform.typedef.ino_t = ulong
rbx.platform.typedef.int16_t = short
rbx.platform.typedef.int32_t = int
rbx.platform.typedef.int64_t = long_long
rbx.platform.typedef.int8_t = char
rbx.platform.typedef.key_t = int
rbx.platform.typedef.loff_t = long
rbx.platform.typedef.mode_t = uint
rbx.platform.typedef.nlink_t = ulong
rbx.platform.typedef.off_t = long
rbx.platform.typedef.pid_t = int
rbx.platform.typedef.pthread_key_t = uint
rbx.platform.typedef.pthread_once_t = int
rbx.platform.typedef.pthread_t = ulong
rbx.platform.typedef.quad_t = long
rbx.platform.typedef.register_t = long
rbx.platform.typedef.rlim_t = ulong
rbx.platform.typedef.sa_family_t = ushort
rbx.platform.typedef.size_t = ulong
rbx.platform.typedef.socklen_t = uint
rbx.platform.typedef.ssize_t = long
rbx.platform.typedef.suseconds_t = long
rbx.platform.typedef.time_t = long
rbx.platform.typedef.timer_t = pointer
rbx.platform.typedef.u_char = uchar
rbx.platform.typedef.u_int = uint
rbx.platform.typedef.u_int16_t = ushort
rbx.platform.typedef.u_int32_t = uint
rbx.platform.typedef.u_int64_t = ulong_long
rbx.platform.typedef.u_int8_t = uchar
rbx.platform.typedef.u_long = ulong
rbx.platform.typedef.u_quad_t = ulong
rbx.platform.typedef.u_short = ushort
rbx.platform.typedef.uid_t = uint
rbx.platform.typedef.uint = uint
rbx.platform.typedef.ulong = ulong
rbx.platform.typedef.ushort = ushort
@@ -0,0 +1,141 @@
rbx.platform.typedef.*__caddr_t = char
rbx.platform.typedef.__blkcnt64_t = long
rbx.platform.typedef.__blkcnt_t = long
rbx.platform.typedef.__blksize_t = int
rbx.platform.typedef.__clock_t = long
rbx.platform.typedef.__clockid_t = int
rbx.platform.typedef.__daddr_t = int
rbx.platform.typedef.__dev_t = ulong
rbx.platform.typedef.__fd_mask = long
rbx.platform.typedef.__fsblkcnt64_t = ulong
rbx.platform.typedef.__fsblkcnt_t = ulong
rbx.platform.typedef.__fsfilcnt64_t = ulong
rbx.platform.typedef.__fsfilcnt_t = ulong
rbx.platform.typedef.__fsword_t = long
rbx.platform.typedef.__gid_t = uint
rbx.platform.typedef.__id_t = uint
rbx.platform.typedef.__ino64_t = ulong
rbx.platform.typedef.__ino_t = ulong
rbx.platform.typedef.__int16_t = short
rbx.platform.typedef.__int32_t = int
rbx.platform.typedef.__int64_t = long
rbx.platform.typedef.__int8_t = char
rbx.platform.typedef.__int_least16_t = short
rbx.platform.typedef.__int_least32_t = int
rbx.platform.typedef.__int_least64_t = long
rbx.platform.typedef.__int_least8_t = char
rbx.platform.typedef.__intmax_t = long
rbx.platform.typedef.__intptr_t = long
rbx.platform.typedef.__key_t = int
rbx.platform.typedef.__loff_t = long
rbx.platform.typedef.__mode_t = uint
rbx.platform.typedef.__nlink_t = uint
rbx.platform.typedef.__off64_t = long
rbx.platform.typedef.__off_t = long
rbx.platform.typedef.__pid_t = int
rbx.platform.typedef.__priority_which_t = int
rbx.platform.typedef.__quad_t = long
rbx.platform.typedef.__rlim64_t = ulong
rbx.platform.typedef.__rlim_t = ulong
rbx.platform.typedef.__rlimit_resource_t = int
rbx.platform.typedef.__rusage_who_t = int
rbx.platform.typedef.__sig_atomic_t = int
rbx.platform.typedef.__socklen_t = uint
rbx.platform.typedef.__ssize_t = long
rbx.platform.typedef.__suseconds_t = long
rbx.platform.typedef.__syscall_slong_t = long
rbx.platform.typedef.__syscall_ulong_t = ulong
rbx.platform.typedef.__time_t = long
rbx.platform.typedef.__timer_t = pointer
rbx.platform.typedef.__u_char = uchar
rbx.platform.typedef.__u_int = uint
rbx.platform.typedef.__u_long = ulong
rbx.platform.typedef.__u_quad_t = ulong
rbx.platform.typedef.__u_short = ushort
rbx.platform.typedef.__uid_t = uint
rbx.platform.typedef.__uint16_t = ushort
rbx.platform.typedef.__uint32_t = uint
rbx.platform.typedef.__uint64_t = ulong
rbx.platform.typedef.__uint8_t = uchar
rbx.platform.typedef.__uint_least16_t = ushort
rbx.platform.typedef.__uint_least32_t = uint
rbx.platform.typedef.__uint_least64_t = ulong
rbx.platform.typedef.__uint_least8_t = uchar
rbx.platform.typedef.__uintmax_t = ulong
rbx.platform.typedef.__useconds_t = uint
rbx.platform.typedef.blkcnt_t = long
rbx.platform.typedef.blksize_t = int
rbx.platform.typedef.clock_t = long
rbx.platform.typedef.clockid_t = int
rbx.platform.typedef.daddr_t = int
rbx.platform.typedef.dev_t = ulong
rbx.platform.typedef.fd_mask = long
rbx.platform.typedef.fsblkcnt_t = ulong
rbx.platform.typedef.fsfilcnt_t = ulong
rbx.platform.typedef.gid_t = uint
rbx.platform.typedef.id_t = uint
rbx.platform.typedef.in_addr_t = uint
rbx.platform.typedef.in_port_t = ushort
rbx.platform.typedef.ino_t = ulong
rbx.platform.typedef.int16_t = short
rbx.platform.typedef.int32_t = int
rbx.platform.typedef.int64_t = long
rbx.platform.typedef.int8_t = char
rbx.platform.typedef.int_fast16_t = long
rbx.platform.typedef.int_fast32_t = long
rbx.platform.typedef.int_fast64_t = long
rbx.platform.typedef.int_fast8_t = char
rbx.platform.typedef.int_least16_t = short
rbx.platform.typedef.int_least32_t = int
rbx.platform.typedef.int_least64_t = long
rbx.platform.typedef.int_least8_t = char
rbx.platform.typedef.intmax_t = long
rbx.platform.typedef.intptr_t = long
rbx.platform.typedef.key_t = int
rbx.platform.typedef.loff_t = long
rbx.platform.typedef.mode_t = uint
rbx.platform.typedef.nlink_t = uint
rbx.platform.typedef.off_t = long
rbx.platform.typedef.pid_t = int
rbx.platform.typedef.pthread_key_t = uint
rbx.platform.typedef.pthread_once_t = int
rbx.platform.typedef.pthread_t = ulong
rbx.platform.typedef.ptrdiff_t = long
rbx.platform.typedef.quad_t = long
rbx.platform.typedef.register_t = long
rbx.platform.typedef.rlim_t = ulong
rbx.platform.typedef.sa_family_t = ushort
rbx.platform.typedef.size_t = ulong
rbx.platform.typedef.socklen_t = uint
rbx.platform.typedef.ssize_t = long
rbx.platform.typedef.suseconds_t = long
rbx.platform.typedef.time_t = long
rbx.platform.typedef.timer_t = pointer
rbx.platform.typedef.u_char = uchar
rbx.platform.typedef.u_int = uint
rbx.platform.typedef.u_int16_t = ushort
rbx.platform.typedef.u_int32_t = uint
rbx.platform.typedef.u_int64_t = ulong_long
rbx.platform.typedef.u_int8_t = uchar
rbx.platform.typedef.u_long = ulong
rbx.platform.typedef.u_quad_t = ulong
rbx.platform.typedef.u_short = ushort
rbx.platform.typedef.uid_t = uint
rbx.platform.typedef.uint = uint
rbx.platform.typedef.uint16_t = ushort
rbx.platform.typedef.uint32_t = uint
rbx.platform.typedef.uint64_t = ulong
rbx.platform.typedef.uint8_t = uchar
rbx.platform.typedef.uint_fast16_t = ulong
rbx.platform.typedef.uint_fast32_t = ulong
rbx.platform.typedef.uint_fast64_t = ulong
rbx.platform.typedef.uint_fast8_t = uchar
rbx.platform.typedef.uint_least16_t = ushort
rbx.platform.typedef.uint_least32_t = uint
rbx.platform.typedef.uint_least64_t = ulong
rbx.platform.typedef.uint_least8_t = uchar
rbx.platform.typedef.uintmax_t = ulong
rbx.platform.typedef.uintptr_t = ulong
rbx.platform.typedef.ulong = ulong
rbx.platform.typedef.ushort = ushort
rbx.platform.typedef.wchar_t = int
@@ -0,0 +1,102 @@
rbx.platform.typedef.*__caddr_t = char
rbx.platform.typedef.*__qaddr_t = long_long
rbx.platform.typedef.__blkcnt64_t = long_long
rbx.platform.typedef.__blkcnt_t = long
rbx.platform.typedef.__blksize_t = long
rbx.platform.typedef.__clock_t = long
rbx.platform.typedef.__clockid_t = int
rbx.platform.typedef.__daddr_t = int
rbx.platform.typedef.__dev_t = ulong_long
rbx.platform.typedef.__fd_mask = long
rbx.platform.typedef.__fsblkcnt64_t = ulong_long
rbx.platform.typedef.__fsblkcnt_t = ulong
rbx.platform.typedef.__fsfilcnt64_t = ulong_long
rbx.platform.typedef.__fsfilcnt_t = ulong
rbx.platform.typedef.__gid_t = uint
rbx.platform.typedef.__id_t = uint
rbx.platform.typedef.__ino64_t = ulong_long
rbx.platform.typedef.__ino_t = ulong
rbx.platform.typedef.__int16_t = short
rbx.platform.typedef.__int32_t = int
rbx.platform.typedef.__int64_t = long_long
rbx.platform.typedef.__int8_t = char
rbx.platform.typedef.__intptr_t = int
rbx.platform.typedef.__key_t = int
rbx.platform.typedef.__loff_t = long_long
rbx.platform.typedef.__mode_t = uint
rbx.platform.typedef.__nlink_t = uint
rbx.platform.typedef.__off64_t = long_long
rbx.platform.typedef.__off_t = long
rbx.platform.typedef.__pid_t = int
rbx.platform.typedef.__priority_which_t = int
rbx.platform.typedef.__quad_t = long_long
rbx.platform.typedef.__rlim64_t = ulong_long
rbx.platform.typedef.__rlim_t = ulong
rbx.platform.typedef.__rlimit_resource_t = int
rbx.platform.typedef.__rusage_who_t = int
rbx.platform.typedef.__sig_atomic_t = int
rbx.platform.typedef.__socklen_t = uint
rbx.platform.typedef.__ssize_t = int
rbx.platform.typedef.__suseconds_t = long
rbx.platform.typedef.__swblk_t = long
rbx.platform.typedef.__time_t = long
rbx.platform.typedef.__timer_t = pointer
rbx.platform.typedef.__u_char = uchar
rbx.platform.typedef.__u_int = uint
rbx.platform.typedef.__u_long = ulong
rbx.platform.typedef.__u_quad_t = ulong_long
rbx.platform.typedef.__u_short = ushort
rbx.platform.typedef.__uid_t = uint
rbx.platform.typedef.__uint16_t = ushort
rbx.platform.typedef.__uint32_t = uint
rbx.platform.typedef.__uint64_t = ulong_long
rbx.platform.typedef.__uint8_t = uchar
rbx.platform.typedef.__useconds_t = uint
rbx.platform.typedef.blkcnt_t = long_long
rbx.platform.typedef.blksize_t = long
rbx.platform.typedef.clock_t = long
rbx.platform.typedef.clockid_t = int
rbx.platform.typedef.daddr_t = int
rbx.platform.typedef.dev_t = ulong_long
rbx.platform.typedef.fd_mask = long
rbx.platform.typedef.fsblkcnt_t = ulong_long
rbx.platform.typedef.fsfilcnt_t = ulong_long
rbx.platform.typedef.gid_t = uint
rbx.platform.typedef.id_t = uint
rbx.platform.typedef.ino_t = ulong_long
rbx.platform.typedef.int16_t = short
rbx.platform.typedef.int32_t = int
rbx.platform.typedef.int64_t = long_long
rbx.platform.typedef.int8_t = char
rbx.platform.typedef.key_t = int
rbx.platform.typedef.loff_t = long_long
rbx.platform.typedef.mode_t = uint
rbx.platform.typedef.nlink_t = uint
rbx.platform.typedef.off_t = long_long
rbx.platform.typedef.pid_t = int
rbx.platform.typedef.pthread_key_t = uint
rbx.platform.typedef.pthread_once_t = int
rbx.platform.typedef.pthread_t = ulong
rbx.platform.typedef.quad_t = long_long
rbx.platform.typedef.register_t = long
rbx.platform.typedef.rlim_t = ulong_long
rbx.platform.typedef.sa_family_t = ushort
rbx.platform.typedef.size_t = uint
rbx.platform.typedef.socklen_t = uint
rbx.platform.typedef.ssize_t = int
rbx.platform.typedef.suseconds_t = long
rbx.platform.typedef.time_t = long
rbx.platform.typedef.timer_t = pointer
rbx.platform.typedef.u_char = uchar
rbx.platform.typedef.u_int = uint
rbx.platform.typedef.u_int16_t = ushort
rbx.platform.typedef.u_int32_t = uint
rbx.platform.typedef.u_int64_t = ulong_long
rbx.platform.typedef.u_int8_t = uchar
rbx.platform.typedef.u_long = ulong
rbx.platform.typedef.u_quad_t = ulong_long
rbx.platform.typedef.u_short = ushort
rbx.platform.typedef.uid_t = uint
rbx.platform.typedef.uint = uint
rbx.platform.typedef.ulong = ulong
rbx.platform.typedef.ushort = ushort
@@ -0,0 +1,104 @@
rbx.platform.typedef.*__caddr_t = char
rbx.platform.typedef.*__qaddr_t = long
rbx.platform.typedef.__blkcnt64_t = long
rbx.platform.typedef.__blkcnt_t = long
rbx.platform.typedef.__blksize_t = long
rbx.platform.typedef.__clock_t = long
rbx.platform.typedef.__clockid_t = int
rbx.platform.typedef.__daddr_t = int
rbx.platform.typedef.__dev_t = ulong
rbx.platform.typedef.__fd_mask = long
rbx.platform.typedef.__fsblkcnt64_t = ulong
rbx.platform.typedef.__fsblkcnt_t = ulong
rbx.platform.typedef.__fsfilcnt64_t = ulong
rbx.platform.typedef.__fsfilcnt_t = ulong
rbx.platform.typedef.__fsword_t = long
rbx.platform.typedef.__gid_t = uint
rbx.platform.typedef.__id_t = uint
rbx.platform.typedef.__ino64_t = ulong
rbx.platform.typedef.__ino_t = ulong
rbx.platform.typedef.__int16_t = short
rbx.platform.typedef.__int32_t = int
rbx.platform.typedef.__int64_t = long
rbx.platform.typedef.__int8_t = char
rbx.platform.typedef.__intptr_t = long
rbx.platform.typedef.__key_t = int
rbx.platform.typedef.__loff_t = long
rbx.platform.typedef.__mode_t = uint
rbx.platform.typedef.__nlink_t = ulong
rbx.platform.typedef.__off64_t = long
rbx.platform.typedef.__off_t = long
rbx.platform.typedef.__pid_t = int
rbx.platform.typedef.__priority_which_t = int
rbx.platform.typedef.__quad_t = long
rbx.platform.typedef.__rlim64_t = ulong
rbx.platform.typedef.__rlim_t = ulong
rbx.platform.typedef.__rlimit_resource_t = int
rbx.platform.typedef.__rusage_who_t = int
rbx.platform.typedef.__sig_atomic_t = int
rbx.platform.typedef.__socklen_t = uint
rbx.platform.typedef.__ssize_t = long
rbx.platform.typedef.__suseconds_t = long
rbx.platform.typedef.__syscall_slong_t = long
rbx.platform.typedef.__syscall_ulong_t = ulong
rbx.platform.typedef.__time_t = long
rbx.platform.typedef.__timer_t = pointer
rbx.platform.typedef.__u_char = uchar
rbx.platform.typedef.__u_int = uint
rbx.platform.typedef.__u_long = ulong
rbx.platform.typedef.__u_quad_t = ulong
rbx.platform.typedef.__u_short = ushort
rbx.platform.typedef.__uid_t = uint
rbx.platform.typedef.__uint16_t = ushort
rbx.platform.typedef.__uint32_t = uint
rbx.platform.typedef.__uint64_t = ulong
rbx.platform.typedef.__uint8_t = uchar
rbx.platform.typedef.__useconds_t = uint
rbx.platform.typedef.blkcnt_t = long
rbx.platform.typedef.blksize_t = long
rbx.platform.typedef.clock_t = long
rbx.platform.typedef.clockid_t = int
rbx.platform.typedef.daddr_t = int
rbx.platform.typedef.dev_t = ulong
rbx.platform.typedef.fd_mask = long
rbx.platform.typedef.fsblkcnt_t = ulong
rbx.platform.typedef.fsfilcnt_t = ulong
rbx.platform.typedef.gid_t = uint
rbx.platform.typedef.id_t = uint
rbx.platform.typedef.ino_t = ulong
rbx.platform.typedef.int16_t = short
rbx.platform.typedef.int32_t = int
rbx.platform.typedef.int64_t = long_long
rbx.platform.typedef.int8_t = char
rbx.platform.typedef.key_t = int
rbx.platform.typedef.loff_t = long
rbx.platform.typedef.mode_t = uint
rbx.platform.typedef.nlink_t = ulong
rbx.platform.typedef.off_t = long
rbx.platform.typedef.pid_t = int
rbx.platform.typedef.pthread_key_t = uint
rbx.platform.typedef.pthread_once_t = int
rbx.platform.typedef.pthread_t = ulong
rbx.platform.typedef.quad_t = long
rbx.platform.typedef.register_t = long
rbx.platform.typedef.rlim_t = ulong
rbx.platform.typedef.sa_family_t = ushort
rbx.platform.typedef.size_t = ulong
rbx.platform.typedef.socklen_t = uint
rbx.platform.typedef.ssize_t = long
rbx.platform.typedef.suseconds_t = long
rbx.platform.typedef.time_t = long
rbx.platform.typedef.timer_t = pointer
rbx.platform.typedef.u_char = uchar
rbx.platform.typedef.u_int = uint
rbx.platform.typedef.u_int16_t = ushort
rbx.platform.typedef.u_int32_t = uint
rbx.platform.typedef.u_int64_t = ulong_long
rbx.platform.typedef.u_int8_t = uchar
rbx.platform.typedef.u_long = ulong
rbx.platform.typedef.u_quad_t = ulong
rbx.platform.typedef.u_short = ushort
rbx.platform.typedef.uid_t = uint
rbx.platform.typedef.uint = uint
rbx.platform.typedef.ulong = ulong
rbx.platform.typedef.ushort = ushort
@@ -0,0 +1,104 @@
rbx.platform.typedef.*__caddr_t = char
rbx.platform.typedef.*__qaddr_t = long
rbx.platform.typedef.__blkcnt64_t = long
rbx.platform.typedef.__blkcnt_t = long
rbx.platform.typedef.__blksize_t = long
rbx.platform.typedef.__clock_t = long
rbx.platform.typedef.__clockid_t = int
rbx.platform.typedef.__daddr_t = int
rbx.platform.typedef.__dev_t = ulong
rbx.platform.typedef.__fd_mask = long
rbx.platform.typedef.__fsblkcnt64_t = ulong
rbx.platform.typedef.__fsblkcnt_t = ulong
rbx.platform.typedef.__fsfilcnt64_t = ulong
rbx.platform.typedef.__fsfilcnt_t = ulong
rbx.platform.typedef.__fsword_t = long
rbx.platform.typedef.__gid_t = uint
rbx.platform.typedef.__id_t = uint
rbx.platform.typedef.__ino64_t = ulong
rbx.platform.typedef.__ino_t = ulong
rbx.platform.typedef.__int16_t = short
rbx.platform.typedef.__int32_t = int
rbx.platform.typedef.__int64_t = long
rbx.platform.typedef.__int8_t = char
rbx.platform.typedef.__intptr_t = long
rbx.platform.typedef.__key_t = int
rbx.platform.typedef.__loff_t = long
rbx.platform.typedef.__mode_t = uint
rbx.platform.typedef.__nlink_t = ulong
rbx.platform.typedef.__off64_t = long
rbx.platform.typedef.__off_t = long
rbx.platform.typedef.__pid_t = int
rbx.platform.typedef.__priority_which_t = int
rbx.platform.typedef.__quad_t = long
rbx.platform.typedef.__rlim64_t = ulong
rbx.platform.typedef.__rlim_t = ulong
rbx.platform.typedef.__rlimit_resource_t = int
rbx.platform.typedef.__rusage_who_t = int
rbx.platform.typedef.__sig_atomic_t = int
rbx.platform.typedef.__socklen_t = uint
rbx.platform.typedef.__ssize_t = long
rbx.platform.typedef.__suseconds_t = long
rbx.platform.typedef.__syscall_slong_t = long
rbx.platform.typedef.__syscall_ulong_t = ulong
rbx.platform.typedef.__time_t = long
rbx.platform.typedef.__timer_t = pointer
rbx.platform.typedef.__u_char = uchar
rbx.platform.typedef.__u_int = uint
rbx.platform.typedef.__u_long = ulong
rbx.platform.typedef.__u_quad_t = ulong
rbx.platform.typedef.__u_short = ushort
rbx.platform.typedef.__uid_t = uint
rbx.platform.typedef.__uint16_t = ushort
rbx.platform.typedef.__uint32_t = uint
rbx.platform.typedef.__uint64_t = ulong
rbx.platform.typedef.__uint8_t = uchar
rbx.platform.typedef.__useconds_t = uint
rbx.platform.typedef.blkcnt_t = long
rbx.platform.typedef.blksize_t = long
rbx.platform.typedef.clock_t = long
rbx.platform.typedef.clockid_t = int
rbx.platform.typedef.daddr_t = int
rbx.platform.typedef.dev_t = ulong
rbx.platform.typedef.fd_mask = long
rbx.platform.typedef.fsblkcnt_t = ulong
rbx.platform.typedef.fsfilcnt_t = ulong
rbx.platform.typedef.gid_t = uint
rbx.platform.typedef.id_t = uint
rbx.platform.typedef.ino_t = ulong
rbx.platform.typedef.int16_t = short
rbx.platform.typedef.int32_t = int
rbx.platform.typedef.int64_t = long_long
rbx.platform.typedef.int8_t = char
rbx.platform.typedef.key_t = int
rbx.platform.typedef.loff_t = long
rbx.platform.typedef.mode_t = uint
rbx.platform.typedef.nlink_t = ulong
rbx.platform.typedef.off_t = long
rbx.platform.typedef.pid_t = int
rbx.platform.typedef.pthread_key_t = uint
rbx.platform.typedef.pthread_once_t = int
rbx.platform.typedef.pthread_t = ulong
rbx.platform.typedef.quad_t = long
rbx.platform.typedef.register_t = long
rbx.platform.typedef.rlim_t = ulong
rbx.platform.typedef.sa_family_t = ushort
rbx.platform.typedef.size_t = ulong
rbx.platform.typedef.socklen_t = uint
rbx.platform.typedef.ssize_t = long
rbx.platform.typedef.suseconds_t = long
rbx.platform.typedef.time_t = long
rbx.platform.typedef.timer_t = pointer
rbx.platform.typedef.u_char = uchar
rbx.platform.typedef.u_int = uint
rbx.platform.typedef.u_int16_t = ushort
rbx.platform.typedef.u_int32_t = uint
rbx.platform.typedef.u_int64_t = ulong_long
rbx.platform.typedef.u_int8_t = uchar
rbx.platform.typedef.u_long = ulong
rbx.platform.typedef.u_quad_t = ulong
rbx.platform.typedef.u_short = ushort
rbx.platform.typedef.uid_t = uint
rbx.platform.typedef.uint = uint
rbx.platform.typedef.ulong = ulong
rbx.platform.typedef.ushort = ushort
@@ -0,0 +1,102 @@
rbx.platform.typedef.*__caddr_t = char
rbx.platform.typedef.*__qaddr_t = long_long
rbx.platform.typedef.__blkcnt64_t = long_long
rbx.platform.typedef.__blkcnt_t = long
rbx.platform.typedef.__blksize_t = long
rbx.platform.typedef.__clock_t = long
rbx.platform.typedef.__clockid_t = int
rbx.platform.typedef.__daddr_t = int
rbx.platform.typedef.__dev_t = ulong_long
rbx.platform.typedef.__fd_mask = long
rbx.platform.typedef.__fsblkcnt64_t = ulong_long
rbx.platform.typedef.__fsblkcnt_t = ulong
rbx.platform.typedef.__fsfilcnt64_t = ulong_long
rbx.platform.typedef.__fsfilcnt_t = ulong
rbx.platform.typedef.__gid_t = uint
rbx.platform.typedef.__id_t = uint
rbx.platform.typedef.__ino64_t = ulong_long
rbx.platform.typedef.__ino_t = ulong
rbx.platform.typedef.__int16_t = short
rbx.platform.typedef.__int32_t = int
rbx.platform.typedef.__int64_t = long_long
rbx.platform.typedef.__int8_t = char
rbx.platform.typedef.__intptr_t = int
rbx.platform.typedef.__key_t = int
rbx.platform.typedef.__loff_t = long_long
rbx.platform.typedef.__mode_t = uint
rbx.platform.typedef.__nlink_t = uint
rbx.platform.typedef.__off64_t = long_long
rbx.platform.typedef.__off_t = long
rbx.platform.typedef.__pid_t = int
rbx.platform.typedef.__priority_which_t = int
rbx.platform.typedef.__quad_t = long_long
rbx.platform.typedef.__rlim64_t = ulong_long
rbx.platform.typedef.__rlim_t = ulong
rbx.platform.typedef.__rlimit_resource_t = int
rbx.platform.typedef.__rusage_who_t = int
rbx.platform.typedef.__sig_atomic_t = int
rbx.platform.typedef.__socklen_t = uint
rbx.platform.typedef.__ssize_t = int
rbx.platform.typedef.__suseconds_t = long
rbx.platform.typedef.__swblk_t = long
rbx.platform.typedef.__time_t = long
rbx.platform.typedef.__timer_t = pointer
rbx.platform.typedef.__u_char = uchar
rbx.platform.typedef.__u_int = uint
rbx.platform.typedef.__u_long = ulong
rbx.platform.typedef.__u_quad_t = ulong_long
rbx.platform.typedef.__u_short = ushort
rbx.platform.typedef.__uid_t = uint
rbx.platform.typedef.__uint16_t = ushort
rbx.platform.typedef.__uint32_t = uint
rbx.platform.typedef.__uint64_t = ulong_long
rbx.platform.typedef.__uint8_t = uchar
rbx.platform.typedef.__useconds_t = uint
rbx.platform.typedef.blkcnt_t = long_long
rbx.platform.typedef.blksize_t = long
rbx.platform.typedef.clock_t = long
rbx.platform.typedef.clockid_t = int
rbx.platform.typedef.daddr_t = int
rbx.platform.typedef.dev_t = ulong_long
rbx.platform.typedef.fd_mask = long
rbx.platform.typedef.fsblkcnt_t = ulong_long
rbx.platform.typedef.fsfilcnt_t = ulong_long
rbx.platform.typedef.gid_t = uint
rbx.platform.typedef.id_t = uint
rbx.platform.typedef.ino_t = ulong_long
rbx.platform.typedef.int16_t = short
rbx.platform.typedef.int32_t = int
rbx.platform.typedef.int64_t = long_long
rbx.platform.typedef.int8_t = char
rbx.platform.typedef.key_t = int
rbx.platform.typedef.loff_t = long_long
rbx.platform.typedef.mode_t = uint
rbx.platform.typedef.nlink_t = uint
rbx.platform.typedef.off_t = long_long
rbx.platform.typedef.pid_t = int
rbx.platform.typedef.pthread_key_t = uint
rbx.platform.typedef.pthread_once_t = int
rbx.platform.typedef.pthread_t = ulong
rbx.platform.typedef.quad_t = long_long
rbx.platform.typedef.register_t = long
rbx.platform.typedef.rlim_t = ulong_long
rbx.platform.typedef.sa_family_t = ushort
rbx.platform.typedef.size_t = uint
rbx.platform.typedef.socklen_t = uint
rbx.platform.typedef.ssize_t = int
rbx.platform.typedef.suseconds_t = long
rbx.platform.typedef.time_t = long
rbx.platform.typedef.timer_t = pointer
rbx.platform.typedef.u_char = uchar
rbx.platform.typedef.u_int = uint
rbx.platform.typedef.u_int16_t = ushort
rbx.platform.typedef.u_int32_t = uint
rbx.platform.typedef.u_int64_t = ulong_long
rbx.platform.typedef.u_int8_t = uchar
rbx.platform.typedef.u_long = ulong
rbx.platform.typedef.u_quad_t = ulong_long
rbx.platform.typedef.u_short = ushort
rbx.platform.typedef.uid_t = uint
rbx.platform.typedef.uint = uint
rbx.platform.typedef.ulong = ulong
rbx.platform.typedef.ushort = ushort
@@ -0,0 +1,102 @@
rbx.platform.typedef.*__caddr_t = char
rbx.platform.typedef.*__qaddr_t = long_long
rbx.platform.typedef.__blkcnt64_t = long_long
rbx.platform.typedef.__blkcnt_t = long
rbx.platform.typedef.__blksize_t = long
rbx.platform.typedef.__clock_t = long
rbx.platform.typedef.__clockid_t = int
rbx.platform.typedef.__daddr_t = int
rbx.platform.typedef.__dev_t = ulong_long
rbx.platform.typedef.__fd_mask = long
rbx.platform.typedef.__fsblkcnt64_t = ulong_long
rbx.platform.typedef.__fsblkcnt_t = ulong
rbx.platform.typedef.__fsfilcnt64_t = ulong_long
rbx.platform.typedef.__fsfilcnt_t = ulong
rbx.platform.typedef.__gid_t = uint
rbx.platform.typedef.__id_t = uint
rbx.platform.typedef.__ino64_t = ulong_long
rbx.platform.typedef.__ino_t = ulong
rbx.platform.typedef.__int16_t = short
rbx.platform.typedef.__int32_t = int
rbx.platform.typedef.__int64_t = long_long
rbx.platform.typedef.__int8_t = char
rbx.platform.typedef.__intptr_t = int
rbx.platform.typedef.__key_t = int
rbx.platform.typedef.__loff_t = long_long
rbx.platform.typedef.__mode_t = uint
rbx.platform.typedef.__nlink_t = uint
rbx.platform.typedef.__off64_t = long_long
rbx.platform.typedef.__off_t = long
rbx.platform.typedef.__pid_t = int
rbx.platform.typedef.__priority_which_t = int
rbx.platform.typedef.__quad_t = long_long
rbx.platform.typedef.__rlim64_t = ulong_long
rbx.platform.typedef.__rlim_t = ulong
rbx.platform.typedef.__rlimit_resource_t = int
rbx.platform.typedef.__rusage_who_t = int
rbx.platform.typedef.__sig_atomic_t = int
rbx.platform.typedef.__socklen_t = uint
rbx.platform.typedef.__ssize_t = int
rbx.platform.typedef.__suseconds_t = long
rbx.platform.typedef.__swblk_t = long
rbx.platform.typedef.__time_t = long
rbx.platform.typedef.__timer_t = pointer
rbx.platform.typedef.__u_char = uchar
rbx.platform.typedef.__u_int = uint
rbx.platform.typedef.__u_long = ulong
rbx.platform.typedef.__u_quad_t = ulong_long
rbx.platform.typedef.__u_short = ushort
rbx.platform.typedef.__uid_t = uint
rbx.platform.typedef.__uint16_t = ushort
rbx.platform.typedef.__uint32_t = uint
rbx.platform.typedef.__uint64_t = ulong_long
rbx.platform.typedef.__uint8_t = uchar
rbx.platform.typedef.__useconds_t = uint
rbx.platform.typedef.blkcnt_t = long_long
rbx.platform.typedef.blksize_t = long
rbx.platform.typedef.clock_t = long
rbx.platform.typedef.clockid_t = int
rbx.platform.typedef.daddr_t = int
rbx.platform.typedef.dev_t = ulong_long
rbx.platform.typedef.fd_mask = long
rbx.platform.typedef.fsblkcnt_t = ulong_long
rbx.platform.typedef.fsfilcnt_t = ulong_long
rbx.platform.typedef.gid_t = uint
rbx.platform.typedef.id_t = uint
rbx.platform.typedef.ino_t = ulong_long
rbx.platform.typedef.int16_t = short
rbx.platform.typedef.int32_t = int
rbx.platform.typedef.int64_t = long_long
rbx.platform.typedef.int8_t = char
rbx.platform.typedef.key_t = int
rbx.platform.typedef.loff_t = long_long
rbx.platform.typedef.mode_t = uint
rbx.platform.typedef.nlink_t = uint
rbx.platform.typedef.off_t = long_long
rbx.platform.typedef.pid_t = int
rbx.platform.typedef.pthread_key_t = uint
rbx.platform.typedef.pthread_once_t = int
rbx.platform.typedef.pthread_t = ulong
rbx.platform.typedef.quad_t = long_long
rbx.platform.typedef.register_t = long
rbx.platform.typedef.rlim_t = ulong_long
rbx.platform.typedef.sa_family_t = ushort
rbx.platform.typedef.size_t = uint
rbx.platform.typedef.socklen_t = uint
rbx.platform.typedef.ssize_t = int
rbx.platform.typedef.suseconds_t = long
rbx.platform.typedef.time_t = long
rbx.platform.typedef.timer_t = pointer
rbx.platform.typedef.u_char = uchar
rbx.platform.typedef.u_int = uint
rbx.platform.typedef.u_int16_t = ushort
rbx.platform.typedef.u_int32_t = uint
rbx.platform.typedef.u_int64_t = ulong_long
rbx.platform.typedef.u_int8_t = uchar
rbx.platform.typedef.u_long = ulong
rbx.platform.typedef.u_quad_t = ulong_long
rbx.platform.typedef.u_short = ushort
rbx.platform.typedef.uid_t = uint
rbx.platform.typedef.uint = uint
rbx.platform.typedef.ulong = ulong
rbx.platform.typedef.ushort = ushort
@@ -0,0 +1,102 @@
rbx.platform.typedef.*__caddr_t = char
rbx.platform.typedef.*__qaddr_t = long_long
rbx.platform.typedef.__blkcnt64_t = long_long
rbx.platform.typedef.__blkcnt_t = long
rbx.platform.typedef.__blksize_t = long
rbx.platform.typedef.__clock_t = long
rbx.platform.typedef.__clockid_t = int
rbx.platform.typedef.__daddr_t = int
rbx.platform.typedef.__dev_t = ulong_long
rbx.platform.typedef.__fd_mask = long
rbx.platform.typedef.__fsblkcnt64_t = ulong_long
rbx.platform.typedef.__fsblkcnt_t = ulong
rbx.platform.typedef.__fsfilcnt64_t = ulong_long
rbx.platform.typedef.__fsfilcnt_t = ulong
rbx.platform.typedef.__gid_t = uint
rbx.platform.typedef.__id_t = uint
rbx.platform.typedef.__ino64_t = ulong_long
rbx.platform.typedef.__ino_t = ulong
rbx.platform.typedef.__int16_t = short
rbx.platform.typedef.__int32_t = int
rbx.platform.typedef.__int64_t = long_long
rbx.platform.typedef.__int8_t = char
rbx.platform.typedef.__intptr_t = int
rbx.platform.typedef.__key_t = int
rbx.platform.typedef.__loff_t = long_long
rbx.platform.typedef.__mode_t = uint
rbx.platform.typedef.__nlink_t = uint
rbx.platform.typedef.__off64_t = long_long
rbx.platform.typedef.__off_t = long
rbx.platform.typedef.__pid_t = int
rbx.platform.typedef.__priority_which_t = int
rbx.platform.typedef.__quad_t = long_long
rbx.platform.typedef.__rlim64_t = ulong_long
rbx.platform.typedef.__rlim_t = ulong
rbx.platform.typedef.__rlimit_resource_t = int
rbx.platform.typedef.__rusage_who_t = int
rbx.platform.typedef.__sig_atomic_t = int
rbx.platform.typedef.__socklen_t = uint
rbx.platform.typedef.__ssize_t = int
rbx.platform.typedef.__suseconds_t = long
rbx.platform.typedef.__swblk_t = long
rbx.platform.typedef.__time_t = long
rbx.platform.typedef.__timer_t = pointer
rbx.platform.typedef.__u_char = uchar
rbx.platform.typedef.__u_int = uint
rbx.platform.typedef.__u_long = ulong
rbx.platform.typedef.__u_quad_t = ulong_long
rbx.platform.typedef.__u_short = ushort
rbx.platform.typedef.__uid_t = uint
rbx.platform.typedef.__uint16_t = ushort
rbx.platform.typedef.__uint32_t = uint
rbx.platform.typedef.__uint64_t = ulong_long
rbx.platform.typedef.__uint8_t = uchar
rbx.platform.typedef.__useconds_t = uint
rbx.platform.typedef.blkcnt_t = long_long
rbx.platform.typedef.blksize_t = long
rbx.platform.typedef.clock_t = long
rbx.platform.typedef.clockid_t = int
rbx.platform.typedef.daddr_t = int
rbx.platform.typedef.dev_t = ulong_long
rbx.platform.typedef.fd_mask = long
rbx.platform.typedef.fsblkcnt_t = ulong_long
rbx.platform.typedef.fsfilcnt_t = ulong_long
rbx.platform.typedef.gid_t = uint
rbx.platform.typedef.id_t = uint
rbx.platform.typedef.ino_t = ulong_long
rbx.platform.typedef.int16_t = short
rbx.platform.typedef.int32_t = int
rbx.platform.typedef.int64_t = long_long
rbx.platform.typedef.int8_t = char
rbx.platform.typedef.key_t = int
rbx.platform.typedef.loff_t = long_long
rbx.platform.typedef.mode_t = uint
rbx.platform.typedef.nlink_t = uint
rbx.platform.typedef.off_t = long_long
rbx.platform.typedef.pid_t = int
rbx.platform.typedef.pthread_key_t = uint
rbx.platform.typedef.pthread_once_t = int
rbx.platform.typedef.pthread_t = ulong
rbx.platform.typedef.quad_t = long_long
rbx.platform.typedef.register_t = long
rbx.platform.typedef.rlim_t = ulong_long
rbx.platform.typedef.sa_family_t = ushort
rbx.platform.typedef.size_t = uint
rbx.platform.typedef.socklen_t = uint
rbx.platform.typedef.ssize_t = int
rbx.platform.typedef.suseconds_t = long
rbx.platform.typedef.time_t = long
rbx.platform.typedef.timer_t = pointer
rbx.platform.typedef.u_char = uchar
rbx.platform.typedef.u_int = uint
rbx.platform.typedef.u_int16_t = ushort
rbx.platform.typedef.u_int32_t = uint
rbx.platform.typedef.u_int64_t = ulong_long
rbx.platform.typedef.u_int8_t = uchar
rbx.platform.typedef.u_long = ulong
rbx.platform.typedef.u_quad_t = ulong_long
rbx.platform.typedef.u_short = ushort
rbx.platform.typedef.uid_t = uint
rbx.platform.typedef.uint = uint
rbx.platform.typedef.ulong = ulong
rbx.platform.typedef.ushort = ushort
@@ -0,0 +1,104 @@
rbx.platform.typedef.*__caddr_t = char
rbx.platform.typedef.*__qaddr_t = long
rbx.platform.typedef.__blkcnt64_t = long
rbx.platform.typedef.__blkcnt_t = long
rbx.platform.typedef.__blksize_t = long
rbx.platform.typedef.__clock_t = long
rbx.platform.typedef.__clockid_t = int
rbx.platform.typedef.__daddr_t = int
rbx.platform.typedef.__dev_t = ulong
rbx.platform.typedef.__fd_mask = long
rbx.platform.typedef.__fsblkcnt64_t = ulong
rbx.platform.typedef.__fsblkcnt_t = ulong
rbx.platform.typedef.__fsfilcnt64_t = ulong
rbx.platform.typedef.__fsfilcnt_t = ulong
rbx.platform.typedef.__fsword_t = long
rbx.platform.typedef.__gid_t = uint
rbx.platform.typedef.__id_t = uint
rbx.platform.typedef.__ino64_t = ulong
rbx.platform.typedef.__ino_t = ulong
rbx.platform.typedef.__int16_t = short
rbx.platform.typedef.__int32_t = int
rbx.platform.typedef.__int64_t = long
rbx.platform.typedef.__int8_t = char
rbx.platform.typedef.__intptr_t = long
rbx.platform.typedef.__key_t = int
rbx.platform.typedef.__loff_t = long
rbx.platform.typedef.__mode_t = uint
rbx.platform.typedef.__nlink_t = ulong
rbx.platform.typedef.__off64_t = long
rbx.platform.typedef.__off_t = long
rbx.platform.typedef.__pid_t = int
rbx.platform.typedef.__priority_which_t = int
rbx.platform.typedef.__quad_t = long
rbx.platform.typedef.__rlim64_t = ulong
rbx.platform.typedef.__rlim_t = ulong
rbx.platform.typedef.__rlimit_resource_t = int
rbx.platform.typedef.__rusage_who_t = int
rbx.platform.typedef.__sig_atomic_t = int
rbx.platform.typedef.__socklen_t = uint
rbx.platform.typedef.__ssize_t = long
rbx.platform.typedef.__suseconds_t = long
rbx.platform.typedef.__syscall_slong_t = long
rbx.platform.typedef.__syscall_ulong_t = ulong
rbx.platform.typedef.__time_t = long
rbx.platform.typedef.__timer_t = pointer
rbx.platform.typedef.__u_char = uchar
rbx.platform.typedef.__u_int = uint
rbx.platform.typedef.__u_long = ulong
rbx.platform.typedef.__u_quad_t = ulong
rbx.platform.typedef.__u_short = ushort
rbx.platform.typedef.__uid_t = uint
rbx.platform.typedef.__uint16_t = ushort
rbx.platform.typedef.__uint32_t = uint
rbx.platform.typedef.__uint64_t = ulong
rbx.platform.typedef.__uint8_t = uchar
rbx.platform.typedef.__useconds_t = uint
rbx.platform.typedef.blkcnt_t = long
rbx.platform.typedef.blksize_t = long
rbx.platform.typedef.clock_t = long
rbx.platform.typedef.clockid_t = int
rbx.platform.typedef.daddr_t = int
rbx.platform.typedef.dev_t = ulong
rbx.platform.typedef.fd_mask = long
rbx.platform.typedef.fsblkcnt_t = ulong
rbx.platform.typedef.fsfilcnt_t = ulong
rbx.platform.typedef.gid_t = uint
rbx.platform.typedef.id_t = uint
rbx.platform.typedef.ino_t = ulong
rbx.platform.typedef.int16_t = short
rbx.platform.typedef.int32_t = int
rbx.platform.typedef.int64_t = long_long
rbx.platform.typedef.int8_t = char
rbx.platform.typedef.key_t = int
rbx.platform.typedef.loff_t = long
rbx.platform.typedef.mode_t = uint
rbx.platform.typedef.nlink_t = ulong
rbx.platform.typedef.off_t = long
rbx.platform.typedef.pid_t = int
rbx.platform.typedef.pthread_key_t = uint
rbx.platform.typedef.pthread_once_t = int
rbx.platform.typedef.pthread_t = ulong
rbx.platform.typedef.quad_t = long
rbx.platform.typedef.register_t = long
rbx.platform.typedef.rlim_t = ulong
rbx.platform.typedef.sa_family_t = ushort
rbx.platform.typedef.size_t = ulong
rbx.platform.typedef.socklen_t = uint
rbx.platform.typedef.ssize_t = long
rbx.platform.typedef.suseconds_t = long
rbx.platform.typedef.time_t = long
rbx.platform.typedef.timer_t = pointer
rbx.platform.typedef.u_char = uchar
rbx.platform.typedef.u_int = uint
rbx.platform.typedef.u_int16_t = ushort
rbx.platform.typedef.u_int32_t = uint
rbx.platform.typedef.u_int64_t = ulong_long
rbx.platform.typedef.u_int8_t = uchar
rbx.platform.typedef.u_long = ulong
rbx.platform.typedef.u_quad_t = ulong
rbx.platform.typedef.u_short = ushort
rbx.platform.typedef.uid_t = uint
rbx.platform.typedef.uint = uint
rbx.platform.typedef.ulong = ulong
rbx.platform.typedef.ushort = ushort
@@ -0,0 +1,104 @@
rbx.platform.typedef.*__caddr_t = char
rbx.platform.typedef.*__qaddr_t = long
rbx.platform.typedef.__blkcnt64_t = long
rbx.platform.typedef.__blkcnt_t = long
rbx.platform.typedef.__blksize_t = long
rbx.platform.typedef.__clock_t = long
rbx.platform.typedef.__clockid_t = int
rbx.platform.typedef.__daddr_t = int
rbx.platform.typedef.__dev_t = ulong
rbx.platform.typedef.__fd_mask = long
rbx.platform.typedef.__fsblkcnt64_t = ulong
rbx.platform.typedef.__fsblkcnt_t = ulong
rbx.platform.typedef.__fsfilcnt64_t = ulong
rbx.platform.typedef.__fsfilcnt_t = ulong
rbx.platform.typedef.__fsword_t = long
rbx.platform.typedef.__gid_t = uint
rbx.platform.typedef.__id_t = uint
rbx.platform.typedef.__ino64_t = ulong
rbx.platform.typedef.__ino_t = ulong
rbx.platform.typedef.__int16_t = short
rbx.platform.typedef.__int32_t = int
rbx.platform.typedef.__int64_t = long
rbx.platform.typedef.__int8_t = char
rbx.platform.typedef.__intptr_t = long
rbx.platform.typedef.__key_t = int
rbx.platform.typedef.__loff_t = long
rbx.platform.typedef.__mode_t = uint
rbx.platform.typedef.__nlink_t = ulong
rbx.platform.typedef.__off64_t = long
rbx.platform.typedef.__off_t = long
rbx.platform.typedef.__pid_t = int
rbx.platform.typedef.__priority_which_t = int
rbx.platform.typedef.__quad_t = long
rbx.platform.typedef.__rlim64_t = ulong
rbx.platform.typedef.__rlim_t = ulong
rbx.platform.typedef.__rlimit_resource_t = int
rbx.platform.typedef.__rusage_who_t = int
rbx.platform.typedef.__sig_atomic_t = int
rbx.platform.typedef.__socklen_t = uint
rbx.platform.typedef.__ssize_t = long
rbx.platform.typedef.__suseconds_t = long
rbx.platform.typedef.__syscall_slong_t = long
rbx.platform.typedef.__syscall_ulong_t = ulong
rbx.platform.typedef.__time_t = long
rbx.platform.typedef.__timer_t = pointer
rbx.platform.typedef.__u_char = uchar
rbx.platform.typedef.__u_int = uint
rbx.platform.typedef.__u_long = ulong
rbx.platform.typedef.__u_quad_t = ulong
rbx.platform.typedef.__u_short = ushort
rbx.platform.typedef.__uid_t = uint
rbx.platform.typedef.__uint16_t = ushort
rbx.platform.typedef.__uint32_t = uint
rbx.platform.typedef.__uint64_t = ulong
rbx.platform.typedef.__uint8_t = uchar
rbx.platform.typedef.__useconds_t = uint
rbx.platform.typedef.blkcnt_t = long
rbx.platform.typedef.blksize_t = long
rbx.platform.typedef.clock_t = long
rbx.platform.typedef.clockid_t = int
rbx.platform.typedef.daddr_t = int
rbx.platform.typedef.dev_t = ulong
rbx.platform.typedef.fd_mask = long
rbx.platform.typedef.fsblkcnt_t = ulong
rbx.platform.typedef.fsfilcnt_t = ulong
rbx.platform.typedef.gid_t = uint
rbx.platform.typedef.id_t = uint
rbx.platform.typedef.ino_t = ulong
rbx.platform.typedef.int16_t = short
rbx.platform.typedef.int32_t = int
rbx.platform.typedef.int64_t = long_long
rbx.platform.typedef.int8_t = char
rbx.platform.typedef.key_t = int
rbx.platform.typedef.loff_t = long
rbx.platform.typedef.mode_t = uint
rbx.platform.typedef.nlink_t = ulong
rbx.platform.typedef.off_t = long
rbx.platform.typedef.pid_t = int
rbx.platform.typedef.pthread_key_t = uint
rbx.platform.typedef.pthread_once_t = int
rbx.platform.typedef.pthread_t = ulong
rbx.platform.typedef.quad_t = long
rbx.platform.typedef.register_t = long
rbx.platform.typedef.rlim_t = ulong
rbx.platform.typedef.sa_family_t = ushort
rbx.platform.typedef.size_t = ulong
rbx.platform.typedef.socklen_t = uint
rbx.platform.typedef.ssize_t = long
rbx.platform.typedef.suseconds_t = long
rbx.platform.typedef.time_t = long
rbx.platform.typedef.timer_t = pointer
rbx.platform.typedef.u_char = uchar
rbx.platform.typedef.u_int = uint
rbx.platform.typedef.u_int16_t = ushort
rbx.platform.typedef.u_int32_t = uint
rbx.platform.typedef.u_int64_t = ulong_long
rbx.platform.typedef.u_int8_t = uchar
rbx.platform.typedef.u_long = ulong
rbx.platform.typedef.u_quad_t = ulong
rbx.platform.typedef.u_short = ushort
rbx.platform.typedef.uid_t = uint
rbx.platform.typedef.uint = uint
rbx.platform.typedef.ulong = ulong
rbx.platform.typedef.ushort = ushort
@@ -0,0 +1,180 @@
rbx.platform.typedef.UTF32Char = uint
rbx.platform.typedef.UniChar = ushort
rbx.platform.typedef.__cptr32 = string
rbx.platform.typedef.__cptr64 = ulong_long
rbx.platform.typedef.__long32_t = long
rbx.platform.typedef.__long64_t = int
rbx.platform.typedef.__ptr32 = pointer
rbx.platform.typedef.__ptr64 = ulong_long
rbx.platform.typedef.__ulong32_t = ulong
rbx.platform.typedef.__ulong64_t = uint
rbx.platform.typedef.aptx_t = ushort
rbx.platform.typedef.blkcnt32_t = int
rbx.platform.typedef.blkcnt64_t = ulong_long
rbx.platform.typedef.blkcnt_t = int
rbx.platform.typedef.blksize32_t = int
rbx.platform.typedef.blksize64_t = ulong_long
rbx.platform.typedef.blksize_t = int
rbx.platform.typedef.boolean_t = int
rbx.platform.typedef.caddr_t = string
rbx.platform.typedef.chan_t = int
rbx.platform.typedef.class_id_t = uint
rbx.platform.typedef.clock_t = int
rbx.platform.typedef.clockid_t = long_long
rbx.platform.typedef.cnt64_t = long_long
rbx.platform.typedef.cnt_t = short
rbx.platform.typedef.crid_t = int
rbx.platform.typedef.daddr32_t = int
rbx.platform.typedef.daddr64_t = long_long
rbx.platform.typedef.daddr_t = int
rbx.platform.typedef.dev32_t = uint
rbx.platform.typedef.dev64_t = ulong_long
rbx.platform.typedef.dev_t = uint
rbx.platform.typedef.esid_t = uint
rbx.platform.typedef.ext_t = int
rbx.platform.typedef.fpos64_t = long_long
rbx.platform.typedef.fpos_t = long
rbx.platform.typedef.fsblkcnt_t = ulong
rbx.platform.typedef.fsfilcnt_t = ulong
rbx.platform.typedef.gid_t = uint
rbx.platform.typedef.id_t = uint
rbx.platform.typedef.ino32_t = uint
rbx.platform.typedef.ino64_t = ulong_long
rbx.platform.typedef.ino_t = uint
rbx.platform.typedef.int16 = short
rbx.platform.typedef.int16_t = short
rbx.platform.typedef.int32 = int
rbx.platform.typedef.int32_t = int
rbx.platform.typedef.int32long64_t = int
rbx.platform.typedef.int64 = long_long
rbx.platform.typedef.int64_t = long_long
rbx.platform.typedef.int8 = char
rbx.platform.typedef.int8_t = char
rbx.platform.typedef.int_fast16_t = short
rbx.platform.typedef.int_fast32_t = int
rbx.platform.typedef.int_fast64_t = long_long
rbx.platform.typedef.int_fast8_t = char
rbx.platform.typedef.int_least16_t = short
rbx.platform.typedef.int_least32_t = int
rbx.platform.typedef.int_least64_t = long_long
rbx.platform.typedef.int_least8_t = char
rbx.platform.typedef.intfast_t = int
rbx.platform.typedef.intmax_t = long_long
rbx.platform.typedef.intptr_t = long
rbx.platform.typedef.key_t = int
rbx.platform.typedef.krpn_t = int
rbx.platform.typedef.kvmhandle_t = ulong
rbx.platform.typedef.kvmid_t = long
rbx.platform.typedef.kvpn_t = int
rbx.platform.typedef.level_t = int
rbx.platform.typedef.liobn_t = uint
rbx.platform.typedef.long32int64_t = long
rbx.platform.typedef.longlong_t = long_long
rbx.platform.typedef.mid_t = pointer
rbx.platform.typedef.mode_t = uint
rbx.platform.typedef.mtyp_t = long
rbx.platform.typedef.nlink_t = short
rbx.platform.typedef.off64_t = long_long
rbx.platform.typedef.off_t = long
rbx.platform.typedef.offset_t = long_long
rbx.platform.typedef.paddr_t = long
rbx.platform.typedef.pdtx_t = int
rbx.platform.typedef.pid32_t = int
rbx.platform.typedef.pid64_t = ulong_long
rbx.platform.typedef.pid_t = int
rbx.platform.typedef.pshift_t = ushort
rbx.platform.typedef.psize_t = long_long
rbx.platform.typedef.psx_t = short
rbx.platform.typedef.ptex_t = ulong
rbx.platform.typedef.pthread_key_t = uint
rbx.platform.typedef.pthread_t = uint
rbx.platform.typedef.ptrdiff_t = long
rbx.platform.typedef.rlim64_t = ulong_long
rbx.platform.typedef.rlim_t = ulong
rbx.platform.typedef.rpn64_t = long_long
rbx.platform.typedef.rpn_t = int
rbx.platform.typedef.sa_family_t = uchar
rbx.platform.typedef.signal_t = int
rbx.platform.typedef.size64_t = ulong_long
rbx.platform.typedef.size_t = ulong
rbx.platform.typedef.slab_t[12] = char
rbx.platform.typedef.snidx_t = int
rbx.platform.typedef.socklen_t = ulong
rbx.platform.typedef.soff_t = int
rbx.platform.typedef.sshift_t = ushort
rbx.platform.typedef.ssize64_t = long_long
rbx.platform.typedef.ssize_t = long
rbx.platform.typedef.suseconds_t = int
rbx.platform.typedef.swblk_t = int
rbx.platform.typedef.swhatx_t = ulong
rbx.platform.typedef.tid32_t = int
rbx.platform.typedef.tid64_t = ulong_long
rbx.platform.typedef.tid_t = int
rbx.platform.typedef.time32_t = int
rbx.platform.typedef.time64_t = long_long
rbx.platform.typedef.time_t = int
rbx.platform.typedef.timer32_t = int
rbx.platform.typedef.timer64_t = long_long
rbx.platform.typedef.timer_t = int
rbx.platform.typedef.u_char = uchar
rbx.platform.typedef.u_int = uint
rbx.platform.typedef.u_int16 = ushort
rbx.platform.typedef.u_int16_t = ushort
rbx.platform.typedef.u_int32 = uint
rbx.platform.typedef.u_int32_t = uint
rbx.platform.typedef.u_int64 = ulong_long
rbx.platform.typedef.u_int64_t = ulong_long
rbx.platform.typedef.u_int8 = uchar
rbx.platform.typedef.u_int8_t = uchar
rbx.platform.typedef.u_long = ulong
rbx.platform.typedef.u_longlong_t = ulong_long
rbx.platform.typedef.u_short = ushort
rbx.platform.typedef.uchar = uchar
rbx.platform.typedef.uchar_t = uchar
rbx.platform.typedef.uid_t = uint
rbx.platform.typedef.uint = uint
rbx.platform.typedef.uint16_t = ushort
rbx.platform.typedef.uint32_t = uint
rbx.platform.typedef.uint32long64_t = uint
rbx.platform.typedef.uint64_t = ulong_long
rbx.platform.typedef.uint8_t = uchar
rbx.platform.typedef.uint_fast16_t = ushort
rbx.platform.typedef.uint_fast32_t = uint
rbx.platform.typedef.uint_fast64_t = ulong_long
rbx.platform.typedef.uint_fast8_t = uchar
rbx.platform.typedef.uint_least16_t = ushort
rbx.platform.typedef.uint_least32_t = uint
rbx.platform.typedef.uint_least64_t = ulong_long
rbx.platform.typedef.uint_least8_t = uchar
rbx.platform.typedef.uint_t = uint
rbx.platform.typedef.uintfast_t = uint
rbx.platform.typedef.uintmax_t = ulong_long
rbx.platform.typedef.uintptr_t = ulong
rbx.platform.typedef.ulong = ulong
rbx.platform.typedef.ulong32int64_t = ulong
rbx.platform.typedef.ulong_t = ulong
rbx.platform.typedef.unidx_t = int
rbx.platform.typedef.unit_addr_t = ulong_long
rbx.platform.typedef.ureg_t = ulong
rbx.platform.typedef.useconds_t = uint
rbx.platform.typedef.ushort = ushort
rbx.platform.typedef.ushort_t = ushort
rbx.platform.typedef.va_list = string
rbx.platform.typedef.vmfkey_t = uint
rbx.platform.typedef.vmhandle32_t = uint
rbx.platform.typedef.vmhandle_t = ulong
rbx.platform.typedef.vmhwkey_t = int
rbx.platform.typedef.vmid32_t = int
rbx.platform.typedef.vmid64_t = long_long
rbx.platform.typedef.vmid_t = long
rbx.platform.typedef.vmidx_t = int
rbx.platform.typedef.vmkey_t = int
rbx.platform.typedef.vmlpghandle_t = ulong
rbx.platform.typedef.vmm_lock_t = int
rbx.platform.typedef.vmnodeidx_t = int
rbx.platform.typedef.vmprkey_t = uint
rbx.platform.typedef.vmsize_t = int
rbx.platform.typedef.vpn_t = int
rbx.platform.typedef.wchar_t = ushort
rbx.platform.typedef.wctype_t = uint
rbx.platform.typedef.wint_t = int
@@ -0,0 +1,100 @@
rbx.platform.typedef.__darwin_blkcnt_t = long_long
rbx.platform.typedef.__darwin_blksize_t = int
rbx.platform.typedef.__darwin_clock_t = ulong
rbx.platform.typedef.__darwin_ct_rune_t = int
rbx.platform.typedef.__darwin_dev_t = int
rbx.platform.typedef.__darwin_fsblkcnt_t = uint
rbx.platform.typedef.__darwin_fsfilcnt_t = uint
rbx.platform.typedef.__darwin_gid_t = uint
rbx.platform.typedef.__darwin_id_t = uint
rbx.platform.typedef.__darwin_ino64_t = ulong_long
rbx.platform.typedef.__darwin_ino_t = ulong_long
rbx.platform.typedef.__darwin_intptr_t = long
rbx.platform.typedef.__darwin_mach_port_name_t = uint
rbx.platform.typedef.__darwin_mach_port_t = uint
rbx.platform.typedef.__darwin_mode_t = ushort
rbx.platform.typedef.__darwin_natural_t = uint
rbx.platform.typedef.__darwin_off_t = long_long
rbx.platform.typedef.__darwin_pid_t = int
rbx.platform.typedef.__darwin_pthread_key_t = ulong
rbx.platform.typedef.__darwin_ptrdiff_t = int
rbx.platform.typedef.__darwin_rune_t = int
rbx.platform.typedef.__darwin_sigset_t = uint
rbx.platform.typedef.__darwin_size_t = ulong
rbx.platform.typedef.__darwin_socklen_t = uint
rbx.platform.typedef.__darwin_ssize_t = long
rbx.platform.typedef.__darwin_suseconds_t = int
rbx.platform.typedef.__darwin_time_t = long
rbx.platform.typedef.__darwin_uid_t = uint
rbx.platform.typedef.__darwin_useconds_t = uint
rbx.platform.typedef.__darwin_uuid_t[16] = uchar
rbx.platform.typedef.__darwin_wchar_t = int
rbx.platform.typedef.__darwin_wint_t = int
rbx.platform.typedef.__int16_t = short
rbx.platform.typedef.__int32_t = int
rbx.platform.typedef.__int64_t = long_long
rbx.platform.typedef.__int8_t = char
rbx.platform.typedef.__uint16_t = ushort
rbx.platform.typedef.__uint32_t = uint
rbx.platform.typedef.__uint64_t = ulong_long
rbx.platform.typedef.__uint8_t = uchar
rbx.platform.typedef.blkcnt_t = long_long
rbx.platform.typedef.blksize_t = int
rbx.platform.typedef.caddr_t = string
rbx.platform.typedef.clock_t = ulong
rbx.platform.typedef.daddr_t = int
rbx.platform.typedef.dev_t = int
rbx.platform.typedef.fd_mask = int
rbx.platform.typedef.fixpt_t = uint
rbx.platform.typedef.fsblkcnt_t = uint
rbx.platform.typedef.fsfilcnt_t = uint
rbx.platform.typedef.gid_t = uint
rbx.platform.typedef.id_t = uint
rbx.platform.typedef.in_addr_t = uint
rbx.platform.typedef.in_port_t = ushort
rbx.platform.typedef.ino64_t = ulong_long
rbx.platform.typedef.ino_t = ulong_long
rbx.platform.typedef.int16_t = short
rbx.platform.typedef.int32_t = int
rbx.platform.typedef.int64_t = long_long
rbx.platform.typedef.int8_t = char
rbx.platform.typedef.intptr_t = long
rbx.platform.typedef.key_t = int
rbx.platform.typedef.mode_t = ushort
rbx.platform.typedef.nlink_t = ushort
rbx.platform.typedef.off_t = long_long
rbx.platform.typedef.pid_t = int
rbx.platform.typedef.pthread_key_t = ulong
rbx.platform.typedef.qaddr_t = pointer
rbx.platform.typedef.quad_t = long_long
rbx.platform.typedef.register_t = int
rbx.platform.typedef.rlim_t = ulong_long
rbx.platform.typedef.sa_family_t = uchar
rbx.platform.typedef.segsz_t = int
rbx.platform.typedef.size_t = ulong
rbx.platform.typedef.socklen_t = uint
rbx.platform.typedef.ssize_t = long
rbx.platform.typedef.suseconds_t = int
rbx.platform.typedef.swblk_t = int
rbx.platform.typedef.syscall_arg_t = ulong_long
rbx.platform.typedef.time_t = long
rbx.platform.typedef.u_char = uchar
rbx.platform.typedef.u_int = uint
rbx.platform.typedef.u_int16_t = ushort
rbx.platform.typedef.u_int32_t = uint
rbx.platform.typedef.u_int64_t = ulong_long
rbx.platform.typedef.u_int8_t = uchar
rbx.platform.typedef.u_long = ulong
rbx.platform.typedef.u_quad_t = ulong_long
rbx.platform.typedef.u_short = ushort
rbx.platform.typedef.uid_t = uint
rbx.platform.typedef.uint = uint
rbx.platform.typedef.uintptr_t = ulong
rbx.platform.typedef.useconds_t = uint
rbx.platform.typedef.user_addr_t = ulong_long
rbx.platform.typedef.user_long_t = long_long
rbx.platform.typedef.user_size_t = ulong_long
rbx.platform.typedef.user_ssize_t = long_long
rbx.platform.typedef.user_time_t = long_long
rbx.platform.typedef.user_ulong_t = ulong_long
rbx.platform.typedef.ushort = ushort
@@ -0,0 +1,130 @@
rbx.platform.typedef.*__caddr_t = char
rbx.platform.typedef.*__qaddr_t = long_long
rbx.platform.typedef.__blkcnt64_t = long_long
rbx.platform.typedef.__blkcnt_t = long
rbx.platform.typedef.__blksize_t = long
rbx.platform.typedef.__clock_t = long
rbx.platform.typedef.__clockid_t = int
rbx.platform.typedef.__daddr_t = int
rbx.platform.typedef.__dev_t = ulong_long
rbx.platform.typedef.__fd_mask = long
rbx.platform.typedef.__fsblkcnt64_t = ulong_long
rbx.platform.typedef.__fsblkcnt_t = ulong
rbx.platform.typedef.__fsfilcnt64_t = ulong_long
rbx.platform.typedef.__fsfilcnt_t = ulong
rbx.platform.typedef.__fsword_t = int
rbx.platform.typedef.__gid_t = uint
rbx.platform.typedef.__id_t = uint
rbx.platform.typedef.__ino64_t = ulong_long
rbx.platform.typedef.__ino_t = ulong
rbx.platform.typedef.__int16_t = short
rbx.platform.typedef.__int32_t = int
rbx.platform.typedef.__int64_t = long_long
rbx.platform.typedef.__int8_t = char
rbx.platform.typedef.__intptr_t = int
rbx.platform.typedef.__key_t = int
rbx.platform.typedef.__loff_t = long_long
rbx.platform.typedef.__mode_t = uint
rbx.platform.typedef.__nlink_t = uint
rbx.platform.typedef.__off64_t = long_long
rbx.platform.typedef.__off_t = long
rbx.platform.typedef.__pid_t = int
rbx.platform.typedef.__priority_which_t = int
rbx.platform.typedef.__quad_t = long_long
rbx.platform.typedef.__rlim64_t = ulong_long
rbx.platform.typedef.__rlim_t = ulong
rbx.platform.typedef.__rlimit_resource_t = int
rbx.platform.typedef.__rusage_who_t = int
rbx.platform.typedef.__sig_atomic_t = int
rbx.platform.typedef.__socklen_t = uint
rbx.platform.typedef.__ssize_t = int
rbx.platform.typedef.__suseconds_t = long
rbx.platform.typedef.__syscall_slong_t = long
rbx.platform.typedef.__syscall_ulong_t = ulong
rbx.platform.typedef.__time_t = long
rbx.platform.typedef.__timer_t = pointer
rbx.platform.typedef.__u_char = uchar
rbx.platform.typedef.__u_int = uint
rbx.platform.typedef.__u_long = ulong
rbx.platform.typedef.__u_quad_t = ulong_long
rbx.platform.typedef.__u_short = ushort
rbx.platform.typedef.__uid_t = uint
rbx.platform.typedef.__uint16_t = ushort
rbx.platform.typedef.__uint32_t = uint
rbx.platform.typedef.__uint64_t = ulong_long
rbx.platform.typedef.__uint8_t = uchar
rbx.platform.typedef.__useconds_t = uint
rbx.platform.typedef.blkcnt_t = long_long
rbx.platform.typedef.blksize_t = long
rbx.platform.typedef.clock_t = long
rbx.platform.typedef.clockid_t = int
rbx.platform.typedef.daddr_t = int
rbx.platform.typedef.dev_t = ulong_long
rbx.platform.typedef.fd_mask = long
rbx.platform.typedef.fsblkcnt_t = ulong_long
rbx.platform.typedef.fsfilcnt_t = ulong_long
rbx.platform.typedef.gid_t = uint
rbx.platform.typedef.id_t = uint
rbx.platform.typedef.in_addr_t = uint
rbx.platform.typedef.in_port_t = ushort
rbx.platform.typedef.ino_t = ulong_long
rbx.platform.typedef.int32_t = int
rbx.platform.typedef.int64_t = long_long
rbx.platform.typedef.int8_t = char
rbx.platform.typedef.int_fast16_t = int
rbx.platform.typedef.int_fast32_t = int
rbx.platform.typedef.int_fast64_t = long_long
rbx.platform.typedef.int_fast8_t = char
rbx.platform.typedef.int_least32_t = int
rbx.platform.typedef.int_least64_t = long_long
rbx.platform.typedef.int_least8_t = char
rbx.platform.typedef.intmax_t = long_long
rbx.platform.typedef.intptr_t = int
rbx.platform.typedef.key_t = int
rbx.platform.typedef.loff_t = long_long
rbx.platform.typedef.mode_t = uint
rbx.platform.typedef.nlink_t = uint
rbx.platform.typedef.off_t = long_long
rbx.platform.typedef.pid_t = int
rbx.platform.typedef.pthread_key_t = uint
rbx.platform.typedef.pthread_once_t = int
rbx.platform.typedef.pthread_t = ulong
rbx.platform.typedef.ptrdiff_t = int
rbx.platform.typedef.quad_t = long_long
rbx.platform.typedef.register_t = long
rbx.platform.typedef.rlim_t = ulong_long
rbx.platform.typedef.sa_family_t = ushort
rbx.platform.typedef.size_t = uint
rbx.platform.typedef.socklen_t = uint
rbx.platform.typedef.ssize_t = int
rbx.platform.typedef.suseconds_t = long
rbx.platform.typedef.time_t = long
rbx.platform.typedef.timer_t = pointer
rbx.platform.typedef.u_char = uchar
rbx.platform.typedef.u_int = uint
rbx.platform.typedef.u_int16_t = ushort
rbx.platform.typedef.u_int32_t = uint
rbx.platform.typedef.u_int64_t = ulong_long
rbx.platform.typedef.u_int8_t = uchar
rbx.platform.typedef.u_long = ulong
rbx.platform.typedef.u_quad_t = ulong_long
rbx.platform.typedef.u_short = ushort
rbx.platform.typedef.uid_t = uint
rbx.platform.typedef.uint = uint
rbx.platform.typedef.uint16_t = ushort
rbx.platform.typedef.uint32_t = uint
rbx.platform.typedef.uint64_t = ulong_long
rbx.platform.typedef.uint8_t = uchar
rbx.platform.typedef.uint_fast16_t = uint
rbx.platform.typedef.uint_fast32_t = uint
rbx.platform.typedef.uint_fast64_t = ulong_long
rbx.platform.typedef.uint_fast8_t = uchar
rbx.platform.typedef.uint_least16_t = ushort
rbx.platform.typedef.uint_least32_t = uint
rbx.platform.typedef.uint_least64_t = ulong_long
rbx.platform.typedef.uint_least8_t = uchar
rbx.platform.typedef.uintmax_t = ulong_long
rbx.platform.typedef.uintptr_t = uint
rbx.platform.typedef.ulong = ulong
rbx.platform.typedef.ushort = ushort
rbx.platform.typedef.wchar_t = long
@@ -0,0 +1,156 @@
rbx.platform.typedef.__blkcnt_t = long_long
rbx.platform.typedef.__blksize_t = int
rbx.platform.typedef.__clock_t = long_long
rbx.platform.typedef.__clockid_t = int
rbx.platform.typedef.__cpuid_t = ulong
rbx.platform.typedef.__dev_t = int
rbx.platform.typedef.__fd_mask = uint
rbx.platform.typedef.__fixpt_t = uint
rbx.platform.typedef.__fsblkcnt_t = ulong_long
rbx.platform.typedef.__fsfilcnt_t = ulong_long
rbx.platform.typedef.__gid_t = uint
rbx.platform.typedef.__id_t = uint
rbx.platform.typedef.__in_addr_t = uint
rbx.platform.typedef.__in_port_t = ushort
rbx.platform.typedef.__ino_t = ulong_long
rbx.platform.typedef.__int16_t = short
rbx.platform.typedef.__int32_t = int
rbx.platform.typedef.__int64_t = long_long
rbx.platform.typedef.__int8_t = char
rbx.platform.typedef.__int_fast16_t = int
rbx.platform.typedef.__int_fast32_t = int
rbx.platform.typedef.__int_fast64_t = long_long
rbx.platform.typedef.__int_fast8_t = int
rbx.platform.typedef.__int_least16_t = short
rbx.platform.typedef.__int_least32_t = int
rbx.platform.typedef.__int_least64_t = long_long
rbx.platform.typedef.__int_least8_t = char
rbx.platform.typedef.__intmax_t = long_long
rbx.platform.typedef.__intptr_t = long
rbx.platform.typedef.__key_t = long
rbx.platform.typedef.__mode_t = uint
rbx.platform.typedef.__nlink_t = uint
rbx.platform.typedef.__off_t = long_long
rbx.platform.typedef.__paddr_t = ulong
rbx.platform.typedef.__pid_t = int
rbx.platform.typedef.__psize_t = ulong
rbx.platform.typedef.__ptrdiff_t = long
rbx.platform.typedef.__register_t = long
rbx.platform.typedef.__rlim_t = ulong_long
rbx.platform.typedef.__rune_t = int
rbx.platform.typedef.__sa_family_t = uchar
rbx.platform.typedef.__segsz_t = int
rbx.platform.typedef.__size_t = ulong
rbx.platform.typedef.__socklen_t = uint
rbx.platform.typedef.__ssize_t = long
rbx.platform.typedef.__suseconds_t = long
rbx.platform.typedef.__swblk_t = int
rbx.platform.typedef.__time_t = long_long
rbx.platform.typedef.__timer_t = int
rbx.platform.typedef.__uid_t = uint
rbx.platform.typedef.__uint16_t = ushort
rbx.platform.typedef.__uint32_t = uint
rbx.platform.typedef.__uint64_t = ulong_long
rbx.platform.typedef.__uint8_t = uchar
rbx.platform.typedef.__uint_fast16_t = uint
rbx.platform.typedef.__uint_fast32_t = uint
rbx.platform.typedef.__uint_fast64_t = ulong_long
rbx.platform.typedef.__uint_fast8_t = uint
rbx.platform.typedef.__uint_least16_t = ushort
rbx.platform.typedef.__uint_least32_t = uint
rbx.platform.typedef.__uint_least64_t = ulong_long
rbx.platform.typedef.__uint_least8_t = uchar
rbx.platform.typedef.__uintmax_t = ulong_long
rbx.platform.typedef.__uintptr_t = ulong
rbx.platform.typedef.__useconds_t = uint
rbx.platform.typedef.__vaddr_t = ulong
rbx.platform.typedef.__vsize_t = ulong
rbx.platform.typedef.__wchar_t = int
rbx.platform.typedef.__wctrans_t = pointer
rbx.platform.typedef.__wctype_t = pointer
rbx.platform.typedef.__wint_t = int
rbx.platform.typedef.blkcnt_t = long_long
rbx.platform.typedef.blksize_t = int
rbx.platform.typedef.caddr_t = string
rbx.platform.typedef.clock_t = long_long
rbx.platform.typedef.clockid_t = int
rbx.platform.typedef.cpuid_t = ulong
rbx.platform.typedef.daddr32_t = int
rbx.platform.typedef.daddr_t = long_long
rbx.platform.typedef.dev_t = int
rbx.platform.typedef.fixpt_t = uint
rbx.platform.typedef.fsblkcnt_t = ulong_long
rbx.platform.typedef.fsfilcnt_t = ulong_long
rbx.platform.typedef.gid_t = uint
rbx.platform.typedef.id_t = uint
rbx.platform.typedef.in_addr_t = uint
rbx.platform.typedef.in_port_t = ushort
rbx.platform.typedef.ino_t = ulong_long
rbx.platform.typedef.int16_t = short
rbx.platform.typedef.int32_t = int
rbx.platform.typedef.int64_t = long_long
rbx.platform.typedef.int8_t = char
rbx.platform.typedef.int_fast16_t = int
rbx.platform.typedef.int_fast32_t = int
rbx.platform.typedef.int_fast64_t = long_long
rbx.platform.typedef.int_fast8_t = int
rbx.platform.typedef.int_least16_t = short
rbx.platform.typedef.int_least32_t = int
rbx.platform.typedef.int_least64_t = long_long
rbx.platform.typedef.int_least8_t = char
rbx.platform.typedef.intmax_t = long_long
rbx.platform.typedef.intptr_t = long
rbx.platform.typedef.key_t = long
rbx.platform.typedef.mode_t = uint
rbx.platform.typedef.nlink_t = uint
rbx.platform.typedef.off_t = long_long
rbx.platform.typedef.paddr_t = ulong
rbx.platform.typedef.pid_t = int
rbx.platform.typedef.psize_t = ulong
rbx.platform.typedef.ptrdiff_t = long
rbx.platform.typedef.quad_t = long_long
rbx.platform.typedef.register_t = long
rbx.platform.typedef.rlim_t = ulong_long
rbx.platform.typedef.sa_family_t = uchar
rbx.platform.typedef.segsz_t = int
rbx.platform.typedef.sigset_t = uint
rbx.platform.typedef.size_t = ulong
rbx.platform.typedef.socklen_t = uint
rbx.platform.typedef.ssize_t = long
rbx.platform.typedef.suseconds_t = long
rbx.platform.typedef.swblk_t = int
rbx.platform.typedef.time_t = long_long
rbx.platform.typedef.timer_t = int
rbx.platform.typedef.u_char = uchar
rbx.platform.typedef.u_int = uint
rbx.platform.typedef.u_int16_t = ushort
rbx.platform.typedef.u_int32_t = uint
rbx.platform.typedef.u_int64_t = ulong_long
rbx.platform.typedef.u_int8_t = uchar
rbx.platform.typedef.u_long = ulong
rbx.platform.typedef.u_quad_t = ulong_long
rbx.platform.typedef.u_short = ushort
rbx.platform.typedef.uid_t = uint
rbx.platform.typedef.uint = uint
rbx.platform.typedef.uint16_t = ushort
rbx.platform.typedef.uint32_t = uint
rbx.platform.typedef.uint64_t = ulong_long
rbx.platform.typedef.uint8_t = uchar
rbx.platform.typedef.uint_fast16_t = uint
rbx.platform.typedef.uint_fast32_t = uint
rbx.platform.typedef.uint_fast64_t = ulong_long
rbx.platform.typedef.uint_fast8_t = uint
rbx.platform.typedef.uint_least16_t = ushort
rbx.platform.typedef.uint_least32_t = uint
rbx.platform.typedef.uint_least64_t = ulong_long
rbx.platform.typedef.uint_least8_t = uchar
rbx.platform.typedef.uintmax_t = ulong_long
rbx.platform.typedef.uintptr_t = ulong
rbx.platform.typedef.ulong = ulong
rbx.platform.typedef.unchar = uchar
rbx.platform.typedef.useconds_t = uint
rbx.platform.typedef.ushort = ushort
rbx.platform.typedef.vaddr_t = ulong
rbx.platform.typedef.vsize_t = ulong
rbx.platform.typedef.wchar_t = int
rbx.platform.typedef.wint_t = int
@@ -0,0 +1,104 @@
rbx.platform.typedef.*__caddr_t = char
rbx.platform.typedef.*__qaddr_t = long
rbx.platform.typedef.__blkcnt64_t = long
rbx.platform.typedef.__blkcnt_t = long
rbx.platform.typedef.__blksize_t = long
rbx.platform.typedef.__clock_t = long
rbx.platform.typedef.__clockid_t = int
rbx.platform.typedef.__daddr_t = int
rbx.platform.typedef.__dev_t = ulong
rbx.platform.typedef.__fd_mask = long
rbx.platform.typedef.__fsblkcnt64_t = ulong
rbx.platform.typedef.__fsblkcnt_t = ulong
rbx.platform.typedef.__fsfilcnt64_t = ulong
rbx.platform.typedef.__fsfilcnt_t = ulong
rbx.platform.typedef.__fsword_t = long
rbx.platform.typedef.__gid_t = uint
rbx.platform.typedef.__id_t = uint
rbx.platform.typedef.__ino64_t = ulong
rbx.platform.typedef.__ino_t = ulong
rbx.platform.typedef.__int16_t = short
rbx.platform.typedef.__int32_t = int
rbx.platform.typedef.__int64_t = long
rbx.platform.typedef.__int8_t = char
rbx.platform.typedef.__intptr_t = long
rbx.platform.typedef.__key_t = int
rbx.platform.typedef.__loff_t = long
rbx.platform.typedef.__mode_t = uint
rbx.platform.typedef.__nlink_t = ulong
rbx.platform.typedef.__off64_t = long
rbx.platform.typedef.__off_t = long
rbx.platform.typedef.__pid_t = int
rbx.platform.typedef.__priority_which_t = int
rbx.platform.typedef.__quad_t = long
rbx.platform.typedef.__rlim64_t = ulong
rbx.platform.typedef.__rlim_t = ulong
rbx.platform.typedef.__rlimit_resource_t = int
rbx.platform.typedef.__rusage_who_t = int
rbx.platform.typedef.__sig_atomic_t = int
rbx.platform.typedef.__socklen_t = uint
rbx.platform.typedef.__ssize_t = long
rbx.platform.typedef.__suseconds_t = long
rbx.platform.typedef.__syscall_slong_t = long
rbx.platform.typedef.__syscall_ulong_t = ulong
rbx.platform.typedef.__time_t = long
rbx.platform.typedef.__timer_t = pointer
rbx.platform.typedef.__u_char = uchar
rbx.platform.typedef.__u_int = uint
rbx.platform.typedef.__u_long = ulong
rbx.platform.typedef.__u_quad_t = ulong
rbx.platform.typedef.__u_short = ushort
rbx.platform.typedef.__uid_t = uint
rbx.platform.typedef.__uint16_t = ushort
rbx.platform.typedef.__uint32_t = uint
rbx.platform.typedef.__uint64_t = ulong
rbx.platform.typedef.__uint8_t = uchar
rbx.platform.typedef.__useconds_t = uint
rbx.platform.typedef.blkcnt_t = long
rbx.platform.typedef.blksize_t = long
rbx.platform.typedef.clock_t = long
rbx.platform.typedef.clockid_t = int
rbx.platform.typedef.daddr_t = int
rbx.platform.typedef.dev_t = ulong
rbx.platform.typedef.fd_mask = long
rbx.platform.typedef.fsblkcnt_t = ulong
rbx.platform.typedef.fsfilcnt_t = ulong
rbx.platform.typedef.gid_t = uint
rbx.platform.typedef.id_t = uint
rbx.platform.typedef.ino_t = ulong
rbx.platform.typedef.int16_t = short
rbx.platform.typedef.int32_t = int
rbx.platform.typedef.int64_t = long_long
rbx.platform.typedef.int8_t = char
rbx.platform.typedef.key_t = int
rbx.platform.typedef.loff_t = long
rbx.platform.typedef.mode_t = uint
rbx.platform.typedef.nlink_t = ulong
rbx.platform.typedef.off_t = long
rbx.platform.typedef.pid_t = int
rbx.platform.typedef.pthread_key_t = uint
rbx.platform.typedef.pthread_once_t = int
rbx.platform.typedef.pthread_t = ulong
rbx.platform.typedef.quad_t = long
rbx.platform.typedef.register_t = long
rbx.platform.typedef.rlim_t = ulong
rbx.platform.typedef.sa_family_t = ushort
rbx.platform.typedef.size_t = ulong
rbx.platform.typedef.socklen_t = uint
rbx.platform.typedef.ssize_t = long
rbx.platform.typedef.suseconds_t = long
rbx.platform.typedef.time_t = long
rbx.platform.typedef.timer_t = pointer
rbx.platform.typedef.u_char = uchar
rbx.platform.typedef.u_int = uint
rbx.platform.typedef.u_int16_t = ushort
rbx.platform.typedef.u_int32_t = uint
rbx.platform.typedef.u_int64_t = ulong_long
rbx.platform.typedef.u_int8_t = uchar
rbx.platform.typedef.u_long = ulong
rbx.platform.typedef.u_quad_t = ulong
rbx.platform.typedef.u_short = ushort
rbx.platform.typedef.uid_t = uint
rbx.platform.typedef.uint = uint
rbx.platform.typedef.ulong = ulong
rbx.platform.typedef.ushort = ushort
@@ -0,0 +1,100 @@
rbx.platform.typedef.*__caddr_t = char
rbx.platform.typedef.*__qaddr_t = long
rbx.platform.typedef.__blkcnt64_t = long
rbx.platform.typedef.__blkcnt_t = long
rbx.platform.typedef.__blksize_t = long
rbx.platform.typedef.__clock_t = long
rbx.platform.typedef.__clockid_t = int
rbx.platform.typedef.__daddr_t = int
rbx.platform.typedef.__dev_t = ulong
rbx.platform.typedef.__fd_mask = long
rbx.platform.typedef.__fsblkcnt64_t = ulong
rbx.platform.typedef.__fsblkcnt_t = ulong
rbx.platform.typedef.__fsfilcnt64_t = ulong
rbx.platform.typedef.__fsfilcnt_t = ulong
rbx.platform.typedef.__gid_t = uint
rbx.platform.typedef.__id_t = uint
rbx.platform.typedef.__ino64_t = ulong
rbx.platform.typedef.__ino_t = ulong
rbx.platform.typedef.__int16_t = short
rbx.platform.typedef.__int32_t = int
rbx.platform.typedef.__int64_t = long
rbx.platform.typedef.__int8_t = char
rbx.platform.typedef.__intptr_t = long
rbx.platform.typedef.__key_t = int
rbx.platform.typedef.__loff_t = long
rbx.platform.typedef.__mode_t = uint
rbx.platform.typedef.__nlink_t = ulong
rbx.platform.typedef.__off64_t = long
rbx.platform.typedef.__off_t = long
rbx.platform.typedef.__pid_t = int
rbx.platform.typedef.__priority_which_t = int
rbx.platform.typedef.__quad_t = long
rbx.platform.typedef.__rlim64_t = ulong
rbx.platform.typedef.__rlim_t = ulong
rbx.platform.typedef.__rlimit_resource_t = int
rbx.platform.typedef.__rusage_who_t = int
rbx.platform.typedef.__sig_atomic_t = int
rbx.platform.typedef.__socklen_t = uint
rbx.platform.typedef.__ssize_t = long
rbx.platform.typedef.__suseconds_t = long
rbx.platform.typedef.__swblk_t = long
rbx.platform.typedef.__time_t = long
rbx.platform.typedef.__timer_t = pointer
rbx.platform.typedef.__u_char = uchar
rbx.platform.typedef.__u_int = uint
rbx.platform.typedef.__u_long = ulong
rbx.platform.typedef.__u_quad_t = ulong
rbx.platform.typedef.__u_short = ushort
rbx.platform.typedef.__uid_t = uint
rbx.platform.typedef.__uint16_t = ushort
rbx.platform.typedef.__uint32_t = uint
rbx.platform.typedef.__uint64_t = ulong
rbx.platform.typedef.__uint8_t = uchar
rbx.platform.typedef.__useconds_t = uint
rbx.platform.typedef.blkcnt_t = long
rbx.platform.typedef.clockid_t = int
rbx.platform.typedef.daddr_t = int
rbx.platform.typedef.dev_t = ulong
rbx.platform.typedef.fd_mask = long
rbx.platform.typedef.fsblkcnt_t = ulong
rbx.platform.typedef.fsfilcnt_t = ulong
rbx.platform.typedef.gid_t = uint
rbx.platform.typedef.id_t = uint
rbx.platform.typedef.ino_t = ulong
rbx.platform.typedef.int16_t = short
rbx.platform.typedef.int32_t = int
rbx.platform.typedef.int64_t = long
rbx.platform.typedef.int8_t = char
rbx.platform.typedef.key_t = int
rbx.platform.typedef.loff_t = long
rbx.platform.typedef.mode_t = uint
rbx.platform.typedef.nlink_t = ulong
rbx.platform.typedef.off_t = long
rbx.platform.typedef.pid_t = int
rbx.platform.typedef.pthread_key_t = uint
rbx.platform.typedef.pthread_once_t = int
rbx.platform.typedef.pthread_t = ulong
rbx.platform.typedef.quad_t = long
rbx.platform.typedef.register_t = long
rbx.platform.typedef.rlim_t = ulong
rbx.platform.typedef.sa_family_t = ushort
rbx.platform.typedef.size_t = ulong
rbx.platform.typedef.socklen_t = uint
rbx.platform.typedef.ssize_t = long
rbx.platform.typedef.suseconds_t = long
rbx.platform.typedef.time_t = long
rbx.platform.typedef.timer_t = pointer
rbx.platform.typedef.u_char = uchar
rbx.platform.typedef.u_int = uint
rbx.platform.typedef.u_int16_t = ushort
rbx.platform.typedef.u_int32_t = uint
rbx.platform.typedef.u_int64_t = ulong
rbx.platform.typedef.u_int8_t = uchar
rbx.platform.typedef.u_long = ulong
rbx.platform.typedef.u_quad_t = ulong
rbx.platform.typedef.u_short = ushort
rbx.platform.typedef.uid_t = uint
rbx.platform.typedef.uint = uint
rbx.platform.typedef.ulong = ulong
rbx.platform.typedef.ushort = ushort
@@ -0,0 +1,104 @@
rbx.platform.typedef.*__caddr_t = char
rbx.platform.typedef.*__qaddr_t = long
rbx.platform.typedef.__blkcnt64_t = long
rbx.platform.typedef.__blkcnt_t = long
rbx.platform.typedef.__blksize_t = int
rbx.platform.typedef.__clock_t = long
rbx.platform.typedef.__clockid_t = int
rbx.platform.typedef.__daddr_t = int
rbx.platform.typedef.__dev_t = ulong
rbx.platform.typedef.__fd_mask = long
rbx.platform.typedef.__fsblkcnt64_t = ulong
rbx.platform.typedef.__fsblkcnt_t = ulong
rbx.platform.typedef.__fsfilcnt64_t = ulong
rbx.platform.typedef.__fsfilcnt_t = ulong
rbx.platform.typedef.__fsword_t = long
rbx.platform.typedef.__gid_t = uint
rbx.platform.typedef.__id_t = uint
rbx.platform.typedef.__ino64_t = ulong
rbx.platform.typedef.__ino_t = ulong
rbx.platform.typedef.__int16_t = short
rbx.platform.typedef.__int32_t = int
rbx.platform.typedef.__int64_t = long
rbx.platform.typedef.__int8_t = char
rbx.platform.typedef.__intptr_t = long
rbx.platform.typedef.__key_t = int
rbx.platform.typedef.__loff_t = long
rbx.platform.typedef.__mode_t = uint
rbx.platform.typedef.__nlink_t = uint
rbx.platform.typedef.__off64_t = long
rbx.platform.typedef.__off_t = long
rbx.platform.typedef.__pid_t = int
rbx.platform.typedef.__priority_which_t = int
rbx.platform.typedef.__quad_t = long
rbx.platform.typedef.__rlim64_t = ulong
rbx.platform.typedef.__rlim_t = ulong
rbx.platform.typedef.__rlimit_resource_t = int
rbx.platform.typedef.__rusage_who_t = int
rbx.platform.typedef.__sig_atomic_t = int
rbx.platform.typedef.__socklen_t = uint
rbx.platform.typedef.__ssize_t = long
rbx.platform.typedef.__suseconds_t = long
rbx.platform.typedef.__syscall_slong_t = long
rbx.platform.typedef.__syscall_ulong_t = ulong
rbx.platform.typedef.__time_t = long
rbx.platform.typedef.__timer_t = pointer
rbx.platform.typedef.__u_char = uchar
rbx.platform.typedef.__u_int = uint
rbx.platform.typedef.__u_long = ulong
rbx.platform.typedef.__u_quad_t = ulong
rbx.platform.typedef.__u_short = ushort
rbx.platform.typedef.__uid_t = uint
rbx.platform.typedef.__uint16_t = ushort
rbx.platform.typedef.__uint32_t = uint
rbx.platform.typedef.__uint64_t = ulong
rbx.platform.typedef.__uint8_t = uchar
rbx.platform.typedef.__useconds_t = uint
rbx.platform.typedef.blkcnt_t = long
rbx.platform.typedef.blksize_t = int
rbx.platform.typedef.clock_t = long
rbx.platform.typedef.clockid_t = int
rbx.platform.typedef.daddr_t = int
rbx.platform.typedef.dev_t = ulong
rbx.platform.typedef.fd_mask = long
rbx.platform.typedef.fsblkcnt_t = ulong
rbx.platform.typedef.fsfilcnt_t = ulong
rbx.platform.typedef.gid_t = uint
rbx.platform.typedef.id_t = uint
rbx.platform.typedef.ino_t = ulong
rbx.platform.typedef.int16_t = short
rbx.platform.typedef.int32_t = int
rbx.platform.typedef.int64_t = long
rbx.platform.typedef.int8_t = char
rbx.platform.typedef.key_t = int
rbx.platform.typedef.loff_t = long
rbx.platform.typedef.mode_t = uint
rbx.platform.typedef.nlink_t = uint
rbx.platform.typedef.off_t = long
rbx.platform.typedef.pid_t = int
rbx.platform.typedef.pthread_key_t = uint
rbx.platform.typedef.pthread_once_t = int
rbx.platform.typedef.pthread_t = ulong
rbx.platform.typedef.quad_t = long
rbx.platform.typedef.register_t = long
rbx.platform.typedef.rlim_t = ulong
rbx.platform.typedef.sa_family_t = ushort
rbx.platform.typedef.size_t = ulong
rbx.platform.typedef.socklen_t = uint
rbx.platform.typedef.ssize_t = long
rbx.platform.typedef.suseconds_t = long
rbx.platform.typedef.time_t = long
rbx.platform.typedef.timer_t = pointer
rbx.platform.typedef.u_char = uchar
rbx.platform.typedef.u_int = uint
rbx.platform.typedef.u_int16_t = ushort
rbx.platform.typedef.u_int32_t = uint
rbx.platform.typedef.u_int64_t = ulong
rbx.platform.typedef.u_int8_t = uchar
rbx.platform.typedef.u_long = ulong
rbx.platform.typedef.u_quad_t = ulong
rbx.platform.typedef.u_short = ushort
rbx.platform.typedef.uid_t = uint
rbx.platform.typedef.uint = uint
rbx.platform.typedef.ulong = ulong
rbx.platform.typedef.ushort = ushort
@@ -0,0 +1,102 @@
rbx.platform.typedef.*__caddr_t = char
rbx.platform.typedef.*__qaddr_t = long_long
rbx.platform.typedef.__blkcnt64_t = long_long
rbx.platform.typedef.__blkcnt_t = long
rbx.platform.typedef.__blksize_t = long
rbx.platform.typedef.__clock_t = long
rbx.platform.typedef.__clockid_t = int
rbx.platform.typedef.__daddr_t = int
rbx.platform.typedef.__dev_t = ulong_long
rbx.platform.typedef.__fd_mask = long
rbx.platform.typedef.__fsblkcnt64_t = ulong_long
rbx.platform.typedef.__fsblkcnt_t = ulong
rbx.platform.typedef.__fsfilcnt64_t = ulong_long
rbx.platform.typedef.__fsfilcnt_t = ulong
rbx.platform.typedef.__gid_t = uint
rbx.platform.typedef.__id_t = uint
rbx.platform.typedef.__ino64_t = ulong_long
rbx.platform.typedef.__ino_t = ulong
rbx.platform.typedef.__int16_t = short
rbx.platform.typedef.__int32_t = int
rbx.platform.typedef.__int64_t = long_long
rbx.platform.typedef.__int8_t = char
rbx.platform.typedef.__intptr_t = int
rbx.platform.typedef.__key_t = int
rbx.platform.typedef.__loff_t = long_long
rbx.platform.typedef.__mode_t = uint
rbx.platform.typedef.__nlink_t = uint
rbx.platform.typedef.__off64_t = long_long
rbx.platform.typedef.__off_t = long
rbx.platform.typedef.__pid_t = int
rbx.platform.typedef.__priority_which_t = int
rbx.platform.typedef.__quad_t = long_long
rbx.platform.typedef.__rlim64_t = ulong_long
rbx.platform.typedef.__rlim_t = ulong
rbx.platform.typedef.__rlimit_resource_t = int
rbx.platform.typedef.__rusage_who_t = int
rbx.platform.typedef.__sig_atomic_t = int
rbx.platform.typedef.__socklen_t = uint
rbx.platform.typedef.__ssize_t = long
rbx.platform.typedef.__suseconds_t = long
rbx.platform.typedef.__swblk_t = long
rbx.platform.typedef.__time_t = long
rbx.platform.typedef.__timer_t = pointer
rbx.platform.typedef.__u_char = uchar
rbx.platform.typedef.__u_int = uint
rbx.platform.typedef.__u_long = ulong
rbx.platform.typedef.__u_quad_t = ulong_long
rbx.platform.typedef.__u_short = ushort
rbx.platform.typedef.__uid_t = uint
rbx.platform.typedef.__uint16_t = ushort
rbx.platform.typedef.__uint32_t = uint
rbx.platform.typedef.__uint64_t = ulong_long
rbx.platform.typedef.__uint8_t = uchar
rbx.platform.typedef.__useconds_t = uint
rbx.platform.typedef.blkcnt_t = long_long
rbx.platform.typedef.blksize_t = long
rbx.platform.typedef.clock_t = long
rbx.platform.typedef.clockid_t = int
rbx.platform.typedef.daddr_t = int
rbx.platform.typedef.dev_t = ulong_long
rbx.platform.typedef.fd_mask = long
rbx.platform.typedef.fsblkcnt_t = ulong_long
rbx.platform.typedef.fsfilcnt_t = ulong_long
rbx.platform.typedef.gid_t = uint
rbx.platform.typedef.id_t = uint
rbx.platform.typedef.ino_t = ulong_long
rbx.platform.typedef.int16_t = short
rbx.platform.typedef.int32_t = int
rbx.platform.typedef.int64_t = long_long
rbx.platform.typedef.int8_t = char
rbx.platform.typedef.key_t = int
rbx.platform.typedef.loff_t = long_long
rbx.platform.typedef.mode_t = uint
rbx.platform.typedef.nlink_t = uint
rbx.platform.typedef.off_t = long_long
rbx.platform.typedef.pid_t = int
rbx.platform.typedef.pthread_key_t = uint
rbx.platform.typedef.pthread_once_t = int
rbx.platform.typedef.pthread_t = ulong
rbx.platform.typedef.quad_t = long_long
rbx.platform.typedef.register_t = long
rbx.platform.typedef.rlim_t = ulong_long
rbx.platform.typedef.sa_family_t = ushort
rbx.platform.typedef.size_t = ulong
rbx.platform.typedef.socklen_t = uint
rbx.platform.typedef.ssize_t = long
rbx.platform.typedef.suseconds_t = long
rbx.platform.typedef.time_t = long
rbx.platform.typedef.timer_t = pointer
rbx.platform.typedef.u_char = uchar
rbx.platform.typedef.u_int = uint
rbx.platform.typedef.u_int16_t = ushort
rbx.platform.typedef.u_int32_t = uint
rbx.platform.typedef.u_int64_t = ulong_long
rbx.platform.typedef.u_int8_t = uchar
rbx.platform.typedef.u_long = ulong
rbx.platform.typedef.u_quad_t = ulong_long
rbx.platform.typedef.u_short = ushort
rbx.platform.typedef.uid_t = uint
rbx.platform.typedef.uint = uint
rbx.platform.typedef.ulong = ulong
rbx.platform.typedef.ushort = ushort
@@ -0,0 +1,102 @@
rbx.platform.typedef.*__caddr_t = char
rbx.platform.typedef.*__qaddr_t = long
rbx.platform.typedef.__blkcnt64_t = long
rbx.platform.typedef.__blkcnt_t = long
rbx.platform.typedef.__blksize_t = long
rbx.platform.typedef.__clock_t = long
rbx.platform.typedef.__clockid_t = int
rbx.platform.typedef.__daddr_t = int
rbx.platform.typedef.__dev_t = ulong
rbx.platform.typedef.__fd_mask = long
rbx.platform.typedef.__fsblkcnt64_t = ulong
rbx.platform.typedef.__fsblkcnt_t = ulong
rbx.platform.typedef.__fsfilcnt64_t = ulong
rbx.platform.typedef.__fsfilcnt_t = ulong
rbx.platform.typedef.__gid_t = uint
rbx.platform.typedef.__id_t = uint
rbx.platform.typedef.__ino64_t = ulong
rbx.platform.typedef.__ino_t = ulong
rbx.platform.typedef.__int16_t = short
rbx.platform.typedef.__int32_t = int
rbx.platform.typedef.__int64_t = long
rbx.platform.typedef.__int8_t = char
rbx.platform.typedef.__intptr_t = long
rbx.platform.typedef.__key_t = int
rbx.platform.typedef.__loff_t = long
rbx.platform.typedef.__mode_t = uint
rbx.platform.typedef.__nlink_t = ulong
rbx.platform.typedef.__off64_t = long
rbx.platform.typedef.__off_t = long
rbx.platform.typedef.__pid_t = int
rbx.platform.typedef.__priority_which_t = int
rbx.platform.typedef.__quad_t = long
rbx.platform.typedef.__rlim64_t = ulong
rbx.platform.typedef.__rlim_t = ulong
rbx.platform.typedef.__rlimit_resource_t = int
rbx.platform.typedef.__rusage_who_t = int
rbx.platform.typedef.__sig_atomic_t = int
rbx.platform.typedef.__socklen_t = uint
rbx.platform.typedef.__ssize_t = long
rbx.platform.typedef.__suseconds_t = long
rbx.platform.typedef.__swblk_t = long
rbx.platform.typedef.__time_t = long
rbx.platform.typedef.__timer_t = pointer
rbx.platform.typedef.__u_char = uchar
rbx.platform.typedef.__u_int = uint
rbx.platform.typedef.__u_long = ulong
rbx.platform.typedef.__u_quad_t = ulong
rbx.platform.typedef.__u_short = ushort
rbx.platform.typedef.__uid_t = uint
rbx.platform.typedef.__uint16_t = ushort
rbx.platform.typedef.__uint32_t = uint
rbx.platform.typedef.__uint64_t = ulong
rbx.platform.typedef.__uint8_t = uchar
rbx.platform.typedef.__useconds_t = uint
rbx.platform.typedef.blkcnt_t = long
rbx.platform.typedef.blksize_t = long
rbx.platform.typedef.clock_t = long
rbx.platform.typedef.clockid_t = int
rbx.platform.typedef.daddr_t = int
rbx.platform.typedef.dev_t = ulong
rbx.platform.typedef.fd_mask = long
rbx.platform.typedef.fsblkcnt_t = ulong
rbx.platform.typedef.fsfilcnt_t = ulong
rbx.platform.typedef.gid_t = uint
rbx.platform.typedef.id_t = uint
rbx.platform.typedef.ino_t = ulong
rbx.platform.typedef.int16_t = short
rbx.platform.typedef.int32_t = int
rbx.platform.typedef.int64_t = long_long
rbx.platform.typedef.int8_t = char
rbx.platform.typedef.key_t = int
rbx.platform.typedef.loff_t = long
rbx.platform.typedef.mode_t = uint
rbx.platform.typedef.nlink_t = ulong
rbx.platform.typedef.off_t = long
rbx.platform.typedef.pid_t = int
rbx.platform.typedef.pthread_key_t = uint
rbx.platform.typedef.pthread_once_t = int
rbx.platform.typedef.pthread_t = ulong
rbx.platform.typedef.quad_t = long
rbx.platform.typedef.register_t = long
rbx.platform.typedef.rlim_t = ulong
rbx.platform.typedef.sa_family_t = ushort
rbx.platform.typedef.size_t = ulong
rbx.platform.typedef.socklen_t = uint
rbx.platform.typedef.ssize_t = long
rbx.platform.typedef.suseconds_t = long
rbx.platform.typedef.time_t = long
rbx.platform.typedef.timer_t = pointer
rbx.platform.typedef.u_char = uchar
rbx.platform.typedef.u_int = uint
rbx.platform.typedef.u_int16_t = ushort
rbx.platform.typedef.u_int32_t = uint
rbx.platform.typedef.u_int64_t = ulong_long
rbx.platform.typedef.u_int8_t = uchar
rbx.platform.typedef.u_long = ulong
rbx.platform.typedef.u_quad_t = ulong
rbx.platform.typedef.u_short = ushort
rbx.platform.typedef.uid_t = uint
rbx.platform.typedef.uint = uint
rbx.platform.typedef.ulong = ulong
rbx.platform.typedef.ushort = ushort
@@ -0,0 +1,102 @@
rbx.platform.typedef.*__caddr_t = char
rbx.platform.typedef.*__qaddr_t = long_long
rbx.platform.typedef.__blkcnt64_t = long_long
rbx.platform.typedef.__blkcnt_t = long
rbx.platform.typedef.__blksize_t = long
rbx.platform.typedef.__clock_t = long
rbx.platform.typedef.__clockid_t = int
rbx.platform.typedef.__daddr_t = int
rbx.platform.typedef.__dev_t = ulong_long
rbx.platform.typedef.__fd_mask = long
rbx.platform.typedef.__fsblkcnt64_t = ulong_long
rbx.platform.typedef.__fsblkcnt_t = ulong
rbx.platform.typedef.__fsfilcnt64_t = ulong_long
rbx.platform.typedef.__fsfilcnt_t = ulong
rbx.platform.typedef.__gid_t = uint
rbx.platform.typedef.__id_t = uint
rbx.platform.typedef.__ino64_t = ulong_long
rbx.platform.typedef.__ino_t = ulong
rbx.platform.typedef.__int16_t = short
rbx.platform.typedef.__int32_t = int
rbx.platform.typedef.__int64_t = long_long
rbx.platform.typedef.__int8_t = char
rbx.platform.typedef.__intptr_t = int
rbx.platform.typedef.__key_t = int
rbx.platform.typedef.__loff_t = long_long
rbx.platform.typedef.__mode_t = uint
rbx.platform.typedef.__nlink_t = uint
rbx.platform.typedef.__off64_t = long_long
rbx.platform.typedef.__off_t = long
rbx.platform.typedef.__pid_t = int
rbx.platform.typedef.__priority_which_t = int
rbx.platform.typedef.__quad_t = long_long
rbx.platform.typedef.__rlim64_t = ulong_long
rbx.platform.typedef.__rlim_t = ulong
rbx.platform.typedef.__rlimit_resource_t = int
rbx.platform.typedef.__rusage_who_t = int
rbx.platform.typedef.__sig_atomic_t = int
rbx.platform.typedef.__socklen_t = uint
rbx.platform.typedef.__ssize_t = int
rbx.platform.typedef.__suseconds_t = int
rbx.platform.typedef.__swblk_t = long
rbx.platform.typedef.__time_t = long
rbx.platform.typedef.__timer_t = pointer
rbx.platform.typedef.__u_char = uchar
rbx.platform.typedef.__u_int = uint
rbx.platform.typedef.__u_long = ulong
rbx.platform.typedef.__u_quad_t = ulong_long
rbx.platform.typedef.__u_short = ushort
rbx.platform.typedef.__uid_t = uint
rbx.platform.typedef.__uint16_t = ushort
rbx.platform.typedef.__uint32_t = uint
rbx.platform.typedef.__uint64_t = ulong_long
rbx.platform.typedef.__uint8_t = uchar
rbx.platform.typedef.__useconds_t = uint
rbx.platform.typedef.blkcnt_t = long_long
rbx.platform.typedef.blksize_t = long
rbx.platform.typedef.clock_t = long
rbx.platform.typedef.clockid_t = int
rbx.platform.typedef.daddr_t = int
rbx.platform.typedef.dev_t = ulong_long
rbx.platform.typedef.fd_mask = long
rbx.platform.typedef.fsblkcnt_t = ulong_long
rbx.platform.typedef.fsfilcnt_t = ulong_long
rbx.platform.typedef.gid_t = uint
rbx.platform.typedef.id_t = uint
rbx.platform.typedef.ino_t = ulong_long
rbx.platform.typedef.int16_t = short
rbx.platform.typedef.int32_t = int
rbx.platform.typedef.int64_t = long_long
rbx.platform.typedef.int8_t = char
rbx.platform.typedef.key_t = int
rbx.platform.typedef.loff_t = long_long
rbx.platform.typedef.mode_t = uint
rbx.platform.typedef.nlink_t = uint
rbx.platform.typedef.off_t = long_long
rbx.platform.typedef.pid_t = int
rbx.platform.typedef.pthread_key_t = uint
rbx.platform.typedef.pthread_once_t = int
rbx.platform.typedef.pthread_t = ulong
rbx.platform.typedef.quad_t = long_long
rbx.platform.typedef.register_t = long
rbx.platform.typedef.rlim_t = ulong_long
rbx.platform.typedef.sa_family_t = ushort
rbx.platform.typedef.size_t = uint
rbx.platform.typedef.socklen_t = uint
rbx.platform.typedef.ssize_t = int
rbx.platform.typedef.suseconds_t = int
rbx.platform.typedef.time_t = long
rbx.platform.typedef.timer_t = pointer
rbx.platform.typedef.u_char = uchar
rbx.platform.typedef.u_int = uint
rbx.platform.typedef.u_int16_t = ushort
rbx.platform.typedef.u_int32_t = uint
rbx.platform.typedef.u_int64_t = ulong_long
rbx.platform.typedef.u_int8_t = uchar
rbx.platform.typedef.u_long = ulong
rbx.platform.typedef.u_quad_t = ulong_long
rbx.platform.typedef.u_short = ushort
rbx.platform.typedef.uid_t = uint
rbx.platform.typedef.uint = uint
rbx.platform.typedef.ulong = ulong
rbx.platform.typedef.ushort = ushort
@@ -0,0 +1,128 @@
rbx.platform.typedef.() = pointer
rbx.platform.typedef.*caddr_t = char
rbx.platform.typedef.Psocklen_t = pointer
rbx.platform.typedef.avl_index_t = uint
rbx.platform.typedef.blkcnt64_t = long_long
rbx.platform.typedef.blkcnt_t = long_long
rbx.platform.typedef.blksize_t = long
rbx.platform.typedef.clock_t = long
rbx.platform.typedef.clockid_t = int
rbx.platform.typedef.cnt_t = short
rbx.platform.typedef.cpu_flag_t = ushort
rbx.platform.typedef.ctid_t = long
rbx.platform.typedef.daddr_t = long
rbx.platform.typedef.dev_t = ulong
rbx.platform.typedef.diskaddr_t = ulong_long
rbx.platform.typedef.disp_lock_t = uchar
rbx.platform.typedef.fd_mask = long
rbx.platform.typedef.fds_mask = long
rbx.platform.typedef.fsblkcnt64_t = ulong_long
rbx.platform.typedef.fsblkcnt_t = ulong_long
rbx.platform.typedef.fsfilcnt64_t = ulong_long
rbx.platform.typedef.fsfilcnt_t = ulong_long
rbx.platform.typedef.gid_t = long
rbx.platform.typedef.hrtime_t = long_long
rbx.platform.typedef.id_t = long
rbx.platform.typedef.in_addr_t = uint
rbx.platform.typedef.in_port_t = ushort
rbx.platform.typedef.index_t = short
rbx.platform.typedef.ino64_t = ulong_long
rbx.platform.typedef.ino_t = ulong_long
rbx.platform.typedef.int) = pointer
rbx.platform.typedef.int) = pointer
rbx.platform.typedef.int16_t = short
rbx.platform.typedef.int32_t = int
rbx.platform.typedef.int64_t = long_long
rbx.platform.typedef.int8_t = char
rbx.platform.typedef.int_fast16_t = int
rbx.platform.typedef.int_fast32_t = int
rbx.platform.typedef.int_fast64_t = long_long
rbx.platform.typedef.int_fast8_t = char
rbx.platform.typedef.int_least16_t = short
rbx.platform.typedef.int_least32_t = int
rbx.platform.typedef.int_least64_t = long_long
rbx.platform.typedef.int_least8_t = char
rbx.platform.typedef.intmax_t = long_long
rbx.platform.typedef.intptr_t = int
rbx.platform.typedef.ipaddr_t = uint
rbx.platform.typedef.k_fltset_t = uint
rbx.platform.typedef.key_t = int
rbx.platform.typedef.kid_t = int
rbx.platform.typedef.len_t = ulong_long
rbx.platform.typedef.lock_t = uchar
rbx.platform.typedef.longlong_t = long_long
rbx.platform.typedef.major_t = ulong
rbx.platform.typedef.minor_t = ulong
rbx.platform.typedef.mode_t = ulong
rbx.platform.typedef.model_t = uint
rbx.platform.typedef.nfds_t = ulong
rbx.platform.typedef.nlink_t = ulong
rbx.platform.typedef.o_dev_t = short
rbx.platform.typedef.o_gid_t = ushort
rbx.platform.typedef.o_ino_t = ushort
rbx.platform.typedef.o_mode_t = ushort
rbx.platform.typedef.o_nlink_t = short
rbx.platform.typedef.o_pid_t = short
rbx.platform.typedef.o_uid_t = ushort
rbx.platform.typedef.off64_t = long_long
rbx.platform.typedef.off_t = long_long
rbx.platform.typedef.offset_t = long_long
rbx.platform.typedef.pad64_t = long_long
rbx.platform.typedef.pfn_t = ulong
rbx.platform.typedef.pgcnt_t = ulong
rbx.platform.typedef.pid_t = long
rbx.platform.typedef.poolid_t = long
rbx.platform.typedef.pri_t = short
rbx.platform.typedef.projid_t = long
rbx.platform.typedef.pthread_key_t = uint
rbx.platform.typedef.pthread_t = uint
rbx.platform.typedef.ptrdiff_t = int
rbx.platform.typedef.rlim64_t = ulong_long
rbx.platform.typedef.rlim_t = ulong_long
rbx.platform.typedef.sa_family_t = ushort
rbx.platform.typedef.size_t = uint
rbx.platform.typedef.size_t) = pointer
rbx.platform.typedef.socklen_t = uint
rbx.platform.typedef.spgcnt_t = long
rbx.platform.typedef.ssize_t = int
rbx.platform.typedef.suseconds_t = long
rbx.platform.typedef.sysid_t = short
rbx.platform.typedef.t_scalar_t = long
rbx.platform.typedef.t_uscalar_t = ulong
rbx.platform.typedef.taskid_t = long
rbx.platform.typedef.time_t = long
rbx.platform.typedef.timer_t = int
rbx.platform.typedef.ts_t = long_long
rbx.platform.typedef.u_char = uchar
rbx.platform.typedef.u_int = uint
rbx.platform.typedef.u_long = ulong
rbx.platform.typedef.u_longlong_t = ulong_long
rbx.platform.typedef.u_offset_t = ulong_long
rbx.platform.typedef.u_short = ushort
rbx.platform.typedef.uchar_t = uchar
rbx.platform.typedef.uid_t = long
rbx.platform.typedef.uint = uint
rbx.platform.typedef.uint16_t = ushort
rbx.platform.typedef.uint32_t = uint
rbx.platform.typedef.uint64_t = ulong_long
rbx.platform.typedef.uint8_t = uchar
rbx.platform.typedef.uint_fast16_t = uint
rbx.platform.typedef.uint_fast32_t = uint
rbx.platform.typedef.uint_fast64_t = ulong_long
rbx.platform.typedef.uint_fast8_t = uchar
rbx.platform.typedef.uint_least16_t = ushort
rbx.platform.typedef.uint_least32_t = uint
rbx.platform.typedef.uint_least64_t = ulong_long
rbx.platform.typedef.uint_least8_t = uchar
rbx.platform.typedef.uint_t = uint
rbx.platform.typedef.uintmax_t = ulong_long
rbx.platform.typedef.uintptr_t = uint
rbx.platform.typedef.ulong = ulong
rbx.platform.typedef.ulong_t = ulong
rbx.platform.typedef.unchar = uchar
rbx.platform.typedef.upad64_t = ulong_long
rbx.platform.typedef.use_t = uchar
rbx.platform.typedef.useconds_t = uint
rbx.platform.typedef.ushort = ushort
rbx.platform.typedef.ushort_t = ushort
rbx.platform.typedef.zoneid_t = long
@@ -0,0 +1,102 @@
rbx.platform.typedef.*__caddr_t = char
rbx.platform.typedef.*__qaddr_t = long
rbx.platform.typedef.__blkcnt64_t = long
rbx.platform.typedef.__blkcnt_t = long
rbx.platform.typedef.__blksize_t = long
rbx.platform.typedef.__clock_t = long
rbx.platform.typedef.__clockid_t = int
rbx.platform.typedef.__daddr_t = int
rbx.platform.typedef.__dev_t = ulong
rbx.platform.typedef.__fd_mask = long
rbx.platform.typedef.__fsblkcnt64_t = ulong
rbx.platform.typedef.__fsblkcnt_t = ulong
rbx.platform.typedef.__fsfilcnt64_t = ulong
rbx.platform.typedef.__fsfilcnt_t = ulong
rbx.platform.typedef.__gid_t = uint
rbx.platform.typedef.__id_t = uint
rbx.platform.typedef.__ino64_t = ulong
rbx.platform.typedef.__ino_t = ulong
rbx.platform.typedef.__int16_t = short
rbx.platform.typedef.__int32_t = int
rbx.platform.typedef.__int64_t = long
rbx.platform.typedef.__int8_t = char
rbx.platform.typedef.__intptr_t = long
rbx.platform.typedef.__key_t = int
rbx.platform.typedef.__loff_t = long
rbx.platform.typedef.__mode_t = uint
rbx.platform.typedef.__nlink_t = uint
rbx.platform.typedef.__off64_t = long
rbx.platform.typedef.__off_t = long
rbx.platform.typedef.__pid_t = int
rbx.platform.typedef.__priority_which_t = int
rbx.platform.typedef.__quad_t = long
rbx.platform.typedef.__rlim64_t = ulong
rbx.platform.typedef.__rlim_t = ulong
rbx.platform.typedef.__rlimit_resource_t = int
rbx.platform.typedef.__rusage_who_t = int
rbx.platform.typedef.__sig_atomic_t = int
rbx.platform.typedef.__socklen_t = uint
rbx.platform.typedef.__ssize_t = long
rbx.platform.typedef.__suseconds_t = int
rbx.platform.typedef.__swblk_t = long
rbx.platform.typedef.__time_t = long
rbx.platform.typedef.__timer_t = pointer
rbx.platform.typedef.__u_char = uchar
rbx.platform.typedef.__u_int = uint
rbx.platform.typedef.__u_long = ulong
rbx.platform.typedef.__u_quad_t = ulong
rbx.platform.typedef.__u_short = ushort
rbx.platform.typedef.__uid_t = uint
rbx.platform.typedef.__uint16_t = ushort
rbx.platform.typedef.__uint32_t = uint
rbx.platform.typedef.__uint64_t = ulong
rbx.platform.typedef.__uint8_t = uchar
rbx.platform.typedef.__useconds_t = uint
rbx.platform.typedef.blkcnt_t = long
rbx.platform.typedef.blksize_t = long
rbx.platform.typedef.clock_t = long
rbx.platform.typedef.clockid_t = int
rbx.platform.typedef.daddr_t = int
rbx.platform.typedef.dev_t = ulong
rbx.platform.typedef.fd_mask = long
rbx.platform.typedef.fsblkcnt_t = ulong
rbx.platform.typedef.fsfilcnt_t = ulong
rbx.platform.typedef.gid_t = uint
rbx.platform.typedef.id_t = uint
rbx.platform.typedef.ino_t = ulong
rbx.platform.typedef.int16_t = short
rbx.platform.typedef.int32_t = int
rbx.platform.typedef.int64_t = long_long
rbx.platform.typedef.int8_t = char
rbx.platform.typedef.key_t = int
rbx.platform.typedef.loff_t = long
rbx.platform.typedef.mode_t = uint
rbx.platform.typedef.nlink_t = uint
rbx.platform.typedef.off_t = long
rbx.platform.typedef.pid_t = int
rbx.platform.typedef.pthread_key_t = uint
rbx.platform.typedef.pthread_once_t = int
rbx.platform.typedef.pthread_t = ulong
rbx.platform.typedef.quad_t = long
rbx.platform.typedef.register_t = long
rbx.platform.typedef.rlim_t = ulong
rbx.platform.typedef.sa_family_t = ushort
rbx.platform.typedef.size_t = ulong
rbx.platform.typedef.socklen_t = uint
rbx.platform.typedef.ssize_t = long
rbx.platform.typedef.suseconds_t = int
rbx.platform.typedef.time_t = long
rbx.platform.typedef.timer_t = pointer
rbx.platform.typedef.u_char = uchar
rbx.platform.typedef.u_int = uint
rbx.platform.typedef.u_int16_t = ushort
rbx.platform.typedef.u_int32_t = uint
rbx.platform.typedef.u_int64_t = ulong_long
rbx.platform.typedef.u_int8_t = uchar
rbx.platform.typedef.u_long = ulong
rbx.platform.typedef.u_quad_t = ulong
rbx.platform.typedef.u_short = ushort
rbx.platform.typedef.uid_t = uint
rbx.platform.typedef.uint = uint
rbx.platform.typedef.ulong = ulong
rbx.platform.typedef.ushort = ushort
@@ -0,0 +1,156 @@
rbx.platform.typedef.__blkcnt_t = long_long
rbx.platform.typedef.__blksize_t = int
rbx.platform.typedef.__clock_t = long_long
rbx.platform.typedef.__clockid_t = int
rbx.platform.typedef.__cpuid_t = ulong
rbx.platform.typedef.__dev_t = int
rbx.platform.typedef.__fd_mask = uint
rbx.platform.typedef.__fixpt_t = uint
rbx.platform.typedef.__fsblkcnt_t = ulong_long
rbx.platform.typedef.__fsfilcnt_t = ulong_long
rbx.platform.typedef.__gid_t = uint
rbx.platform.typedef.__id_t = uint
rbx.platform.typedef.__in_addr_t = uint
rbx.platform.typedef.__in_port_t = ushort
rbx.platform.typedef.__ino_t = ulong_long
rbx.platform.typedef.__int16_t = short
rbx.platform.typedef.__int32_t = int
rbx.platform.typedef.__int64_t = long_long
rbx.platform.typedef.__int8_t = char
rbx.platform.typedef.__int_fast16_t = int
rbx.platform.typedef.__int_fast32_t = int
rbx.platform.typedef.__int_fast64_t = long_long
rbx.platform.typedef.__int_fast8_t = int
rbx.platform.typedef.__int_least16_t = short
rbx.platform.typedef.__int_least32_t = int
rbx.platform.typedef.__int_least64_t = long_long
rbx.platform.typedef.__int_least8_t = char
rbx.platform.typedef.__intmax_t = long_long
rbx.platform.typedef.__intptr_t = long
rbx.platform.typedef.__key_t = long
rbx.platform.typedef.__mode_t = uint
rbx.platform.typedef.__nlink_t = uint
rbx.platform.typedef.__off_t = long_long
rbx.platform.typedef.__paddr_t = ulong
rbx.platform.typedef.__pid_t = int
rbx.platform.typedef.__psize_t = ulong
rbx.platform.typedef.__ptrdiff_t = long
rbx.platform.typedef.__register_t = long
rbx.platform.typedef.__rlim_t = ulong_long
rbx.platform.typedef.__rune_t = int
rbx.platform.typedef.__sa_family_t = uchar
rbx.platform.typedef.__segsz_t = int
rbx.platform.typedef.__size_t = ulong
rbx.platform.typedef.__socklen_t = uint
rbx.platform.typedef.__ssize_t = long
rbx.platform.typedef.__suseconds_t = long
rbx.platform.typedef.__swblk_t = int
rbx.platform.typedef.__time_t = long_long
rbx.platform.typedef.__timer_t = int
rbx.platform.typedef.__uid_t = uint
rbx.platform.typedef.__uint16_t = ushort
rbx.platform.typedef.__uint32_t = uint
rbx.platform.typedef.__uint64_t = ulong_long
rbx.platform.typedef.__uint8_t = uchar
rbx.platform.typedef.__uint_fast16_t = uint
rbx.platform.typedef.__uint_fast32_t = uint
rbx.platform.typedef.__uint_fast64_t = ulong_long
rbx.platform.typedef.__uint_fast8_t = uint
rbx.platform.typedef.__uint_least16_t = ushort
rbx.platform.typedef.__uint_least32_t = uint
rbx.platform.typedef.__uint_least64_t = ulong_long
rbx.platform.typedef.__uint_least8_t = uchar
rbx.platform.typedef.__uintmax_t = ulong_long
rbx.platform.typedef.__uintptr_t = ulong
rbx.platform.typedef.__useconds_t = uint
rbx.platform.typedef.__vaddr_t = ulong
rbx.platform.typedef.__vsize_t = ulong
rbx.platform.typedef.__wchar_t = int
rbx.platform.typedef.__wctrans_t = pointer
rbx.platform.typedef.__wctype_t = pointer
rbx.platform.typedef.__wint_t = int
rbx.platform.typedef.blkcnt_t = long_long
rbx.platform.typedef.blksize_t = int
rbx.platform.typedef.caddr_t = string
rbx.platform.typedef.clock_t = long_long
rbx.platform.typedef.clockid_t = int
rbx.platform.typedef.cpuid_t = ulong
rbx.platform.typedef.daddr32_t = int
rbx.platform.typedef.daddr_t = long_long
rbx.platform.typedef.dev_t = int
rbx.platform.typedef.fixpt_t = uint
rbx.platform.typedef.fsblkcnt_t = ulong_long
rbx.platform.typedef.fsfilcnt_t = ulong_long
rbx.platform.typedef.gid_t = uint
rbx.platform.typedef.id_t = uint
rbx.platform.typedef.in_addr_t = uint
rbx.platform.typedef.in_port_t = ushort
rbx.platform.typedef.ino_t = ulong_long
rbx.platform.typedef.int16_t = short
rbx.platform.typedef.int32_t = int
rbx.platform.typedef.int64_t = long_long
rbx.platform.typedef.int8_t = char
rbx.platform.typedef.int_fast16_t = int
rbx.platform.typedef.int_fast32_t = int
rbx.platform.typedef.int_fast64_t = long_long
rbx.platform.typedef.int_fast8_t = int
rbx.platform.typedef.int_least16_t = short
rbx.platform.typedef.int_least32_t = int
rbx.platform.typedef.int_least64_t = long_long
rbx.platform.typedef.int_least8_t = char
rbx.platform.typedef.intmax_t = long_long
rbx.platform.typedef.intptr_t = long
rbx.platform.typedef.key_t = long
rbx.platform.typedef.mode_t = uint
rbx.platform.typedef.nlink_t = uint
rbx.platform.typedef.off_t = long_long
rbx.platform.typedef.paddr_t = ulong
rbx.platform.typedef.pid_t = int
rbx.platform.typedef.psize_t = ulong
rbx.platform.typedef.ptrdiff_t = long
rbx.platform.typedef.quad_t = long_long
rbx.platform.typedef.register_t = long
rbx.platform.typedef.rlim_t = ulong_long
rbx.platform.typedef.sa_family_t = uchar
rbx.platform.typedef.segsz_t = int
rbx.platform.typedef.sigset_t = uint
rbx.platform.typedef.size_t = ulong
rbx.platform.typedef.socklen_t = uint
rbx.platform.typedef.ssize_t = long
rbx.platform.typedef.suseconds_t = long
rbx.platform.typedef.swblk_t = int
rbx.platform.typedef.time_t = long_long
rbx.platform.typedef.timer_t = int
rbx.platform.typedef.u_char = uchar
rbx.platform.typedef.u_int = uint
rbx.platform.typedef.u_int16_t = ushort
rbx.platform.typedef.u_int32_t = uint
rbx.platform.typedef.u_int64_t = ulong_long
rbx.platform.typedef.u_int8_t = uchar
rbx.platform.typedef.u_long = ulong
rbx.platform.typedef.u_quad_t = ulong_long
rbx.platform.typedef.u_short = ushort
rbx.platform.typedef.uid_t = uint
rbx.platform.typedef.uint = uint
rbx.platform.typedef.uint16_t = ushort
rbx.platform.typedef.uint32_t = uint
rbx.platform.typedef.uint64_t = ulong_long
rbx.platform.typedef.uint8_t = uchar
rbx.platform.typedef.uint_fast16_t = uint
rbx.platform.typedef.uint_fast32_t = uint
rbx.platform.typedef.uint_fast64_t = ulong_long
rbx.platform.typedef.uint_fast8_t = uint
rbx.platform.typedef.uint_least16_t = ushort
rbx.platform.typedef.uint_least32_t = uint
rbx.platform.typedef.uint_least64_t = ulong_long
rbx.platform.typedef.uint_least8_t = uchar
rbx.platform.typedef.uintmax_t = ulong_long
rbx.platform.typedef.uintptr_t = ulong
rbx.platform.typedef.ulong = ulong
rbx.platform.typedef.unchar = uchar
rbx.platform.typedef.useconds_t = uint
rbx.platform.typedef.ushort = ushort
rbx.platform.typedef.vaddr_t = ulong
rbx.platform.typedef.vsize_t = ulong
rbx.platform.typedef.wchar_t = int
rbx.platform.typedef.wint_t = int
@@ -0,0 +1,128 @@
rbx.platform.typedef.() = pointer
rbx.platform.typedef.*caddr_t = char
rbx.platform.typedef.Psocklen_t = pointer
rbx.platform.typedef.avl_index_t = uint
rbx.platform.typedef.blkcnt64_t = long_long
rbx.platform.typedef.blkcnt_t = long_long
rbx.platform.typedef.blksize_t = long
rbx.platform.typedef.clock_t = long
rbx.platform.typedef.clockid_t = int
rbx.platform.typedef.cnt_t = short
rbx.platform.typedef.cpu_flag_t = ushort
rbx.platform.typedef.ctid_t = long
rbx.platform.typedef.daddr_t = long
rbx.platform.typedef.dev_t = ulong
rbx.platform.typedef.diskaddr_t = ulong_long
rbx.platform.typedef.disp_lock_t = uchar
rbx.platform.typedef.fd_mask = long
rbx.platform.typedef.fds_mask = long
rbx.platform.typedef.fsblkcnt64_t = ulong_long
rbx.platform.typedef.fsblkcnt_t = ulong_long
rbx.platform.typedef.fsfilcnt64_t = ulong_long
rbx.platform.typedef.fsfilcnt_t = ulong_long
rbx.platform.typedef.gid_t = long
rbx.platform.typedef.hrtime_t = long_long
rbx.platform.typedef.id_t = long
rbx.platform.typedef.in_addr_t = uint
rbx.platform.typedef.in_port_t = ushort
rbx.platform.typedef.index_t = short
rbx.platform.typedef.ino64_t = ulong_long
rbx.platform.typedef.ino_t = ulong_long
rbx.platform.typedef.int) = pointer
rbx.platform.typedef.int) = pointer
rbx.platform.typedef.int16_t = short
rbx.platform.typedef.int32_t = int
rbx.platform.typedef.int64_t = long_long
rbx.platform.typedef.int8_t = char
rbx.platform.typedef.int_fast16_t = int
rbx.platform.typedef.int_fast32_t = int
rbx.platform.typedef.int_fast64_t = long_long
rbx.platform.typedef.int_fast8_t = char
rbx.platform.typedef.int_least16_t = short
rbx.platform.typedef.int_least32_t = int
rbx.platform.typedef.int_least64_t = long_long
rbx.platform.typedef.int_least8_t = char
rbx.platform.typedef.intmax_t = long_long
rbx.platform.typedef.intptr_t = int
rbx.platform.typedef.ipaddr_t = uint
rbx.platform.typedef.k_fltset_t = uint
rbx.platform.typedef.key_t = int
rbx.platform.typedef.kid_t = int
rbx.platform.typedef.len_t = ulong_long
rbx.platform.typedef.lock_t = uchar
rbx.platform.typedef.longlong_t = long_long
rbx.platform.typedef.major_t = ulong
rbx.platform.typedef.minor_t = ulong
rbx.platform.typedef.mode_t = ulong
rbx.platform.typedef.model_t = uint
rbx.platform.typedef.nfds_t = ulong
rbx.platform.typedef.nlink_t = ulong
rbx.platform.typedef.o_dev_t = short
rbx.platform.typedef.o_gid_t = ushort
rbx.platform.typedef.o_ino_t = ushort
rbx.platform.typedef.o_mode_t = ushort
rbx.platform.typedef.o_nlink_t = short
rbx.platform.typedef.o_pid_t = short
rbx.platform.typedef.o_uid_t = ushort
rbx.platform.typedef.off64_t = long_long
rbx.platform.typedef.off_t = long_long
rbx.platform.typedef.offset_t = long_long
rbx.platform.typedef.pad64_t = long_long
rbx.platform.typedef.pfn_t = ulong
rbx.platform.typedef.pgcnt_t = ulong
rbx.platform.typedef.pid_t = long
rbx.platform.typedef.poolid_t = long
rbx.platform.typedef.pri_t = short
rbx.platform.typedef.projid_t = long
rbx.platform.typedef.pthread_key_t = uint
rbx.platform.typedef.pthread_t = uint
rbx.platform.typedef.ptrdiff_t = int
rbx.platform.typedef.rlim64_t = ulong_long
rbx.platform.typedef.rlim_t = ulong_long
rbx.platform.typedef.sa_family_t = ushort
rbx.platform.typedef.size_t = uint
rbx.platform.typedef.size_t) = pointer
rbx.platform.typedef.socklen_t = uint
rbx.platform.typedef.spgcnt_t = long
rbx.platform.typedef.ssize_t = int
rbx.platform.typedef.suseconds_t = long
rbx.platform.typedef.sysid_t = short
rbx.platform.typedef.t_scalar_t = long
rbx.platform.typedef.t_uscalar_t = ulong
rbx.platform.typedef.taskid_t = long
rbx.platform.typedef.time_t = long
rbx.platform.typedef.timer_t = int
rbx.platform.typedef.ts_t = long_long
rbx.platform.typedef.u_char = uchar
rbx.platform.typedef.u_int = uint
rbx.platform.typedef.u_long = ulong
rbx.platform.typedef.u_longlong_t = ulong_long
rbx.platform.typedef.u_offset_t = ulong_long
rbx.platform.typedef.u_short = ushort
rbx.platform.typedef.uchar_t = uchar
rbx.platform.typedef.uid_t = long
rbx.platform.typedef.uint = uint
rbx.platform.typedef.uint16_t = ushort
rbx.platform.typedef.uint32_t = uint
rbx.platform.typedef.uint64_t = ulong_long
rbx.platform.typedef.uint8_t = uchar
rbx.platform.typedef.uint_fast16_t = uint
rbx.platform.typedef.uint_fast32_t = uint
rbx.platform.typedef.uint_fast64_t = ulong_long
rbx.platform.typedef.uint_fast8_t = uchar
rbx.platform.typedef.uint_least16_t = ushort
rbx.platform.typedef.uint_least32_t = uint
rbx.platform.typedef.uint_least64_t = ulong_long
rbx.platform.typedef.uint_least8_t = uchar
rbx.platform.typedef.uint_t = uint
rbx.platform.typedef.uintmax_t = ulong_long
rbx.platform.typedef.uintptr_t = uint
rbx.platform.typedef.ulong = ulong
rbx.platform.typedef.ulong_t = ulong
rbx.platform.typedef.unchar = uchar
rbx.platform.typedef.upad64_t = ulong_long
rbx.platform.typedef.use_t = uchar
rbx.platform.typedef.useconds_t = uint
rbx.platform.typedef.ushort = ushort
rbx.platform.typedef.ushort_t = ushort
rbx.platform.typedef.zoneid_t = long
@@ -0,0 +1,141 @@
rbx.platform.typedef.*__caddr_t = char
rbx.platform.typedef.__blkcnt64_t = long
rbx.platform.typedef.__blkcnt_t = long
rbx.platform.typedef.__blksize_t = int
rbx.platform.typedef.__clock_t = long
rbx.platform.typedef.__clockid_t = int
rbx.platform.typedef.__daddr_t = int
rbx.platform.typedef.__dev_t = ulong
rbx.platform.typedef.__fd_mask = long
rbx.platform.typedef.__fsblkcnt64_t = ulong
rbx.platform.typedef.__fsblkcnt_t = ulong
rbx.platform.typedef.__fsfilcnt64_t = ulong
rbx.platform.typedef.__fsfilcnt_t = ulong
rbx.platform.typedef.__fsword_t = long
rbx.platform.typedef.__gid_t = uint
rbx.platform.typedef.__id_t = uint
rbx.platform.typedef.__ino64_t = ulong
rbx.platform.typedef.__ino_t = ulong
rbx.platform.typedef.__int16_t = short
rbx.platform.typedef.__int32_t = int
rbx.platform.typedef.__int64_t = long
rbx.platform.typedef.__int8_t = char
rbx.platform.typedef.__int_least16_t = short
rbx.platform.typedef.__int_least32_t = int
rbx.platform.typedef.__int_least64_t = long
rbx.platform.typedef.__int_least8_t = char
rbx.platform.typedef.__intmax_t = long
rbx.platform.typedef.__intptr_t = long
rbx.platform.typedef.__key_t = int
rbx.platform.typedef.__loff_t = long
rbx.platform.typedef.__mode_t = uint
rbx.platform.typedef.__nlink_t = uint
rbx.platform.typedef.__off64_t = long
rbx.platform.typedef.__off_t = long
rbx.platform.typedef.__pid_t = int
rbx.platform.typedef.__priority_which_t = int
rbx.platform.typedef.__quad_t = long
rbx.platform.typedef.__rlim64_t = ulong
rbx.platform.typedef.__rlim_t = ulong
rbx.platform.typedef.__rlimit_resource_t = int
rbx.platform.typedef.__rusage_who_t = int
rbx.platform.typedef.__sig_atomic_t = int
rbx.platform.typedef.__socklen_t = uint
rbx.platform.typedef.__ssize_t = long
rbx.platform.typedef.__suseconds_t = long
rbx.platform.typedef.__syscall_slong_t = long
rbx.platform.typedef.__syscall_ulong_t = ulong
rbx.platform.typedef.__time_t = long
rbx.platform.typedef.__timer_t = pointer
rbx.platform.typedef.__u_char = uchar
rbx.platform.typedef.__u_int = uint
rbx.platform.typedef.__u_long = ulong
rbx.platform.typedef.__u_quad_t = ulong
rbx.platform.typedef.__u_short = ushort
rbx.platform.typedef.__uid_t = uint
rbx.platform.typedef.__uint16_t = ushort
rbx.platform.typedef.__uint32_t = uint
rbx.platform.typedef.__uint64_t = ulong
rbx.platform.typedef.__uint8_t = uchar
rbx.platform.typedef.__uint_least16_t = ushort
rbx.platform.typedef.__uint_least32_t = uint
rbx.platform.typedef.__uint_least64_t = ulong
rbx.platform.typedef.__uint_least8_t = uchar
rbx.platform.typedef.__uintmax_t = ulong
rbx.platform.typedef.__useconds_t = uint
rbx.platform.typedef.blkcnt_t = long
rbx.platform.typedef.blksize_t = int
rbx.platform.typedef.clock_t = long
rbx.platform.typedef.clockid_t = int
rbx.platform.typedef.daddr_t = int
rbx.platform.typedef.dev_t = ulong
rbx.platform.typedef.fd_mask = long
rbx.platform.typedef.fsblkcnt_t = ulong
rbx.platform.typedef.fsfilcnt_t = ulong
rbx.platform.typedef.gid_t = uint
rbx.platform.typedef.id_t = uint
rbx.platform.typedef.in_addr_t = uint
rbx.platform.typedef.in_port_t = ushort
rbx.platform.typedef.ino_t = ulong
rbx.platform.typedef.int16_t = short
rbx.platform.typedef.int32_t = int
rbx.platform.typedef.int64_t = long
rbx.platform.typedef.int8_t = char
rbx.platform.typedef.int_fast16_t = long
rbx.platform.typedef.int_fast32_t = long
rbx.platform.typedef.int_fast64_t = long
rbx.platform.typedef.int_fast8_t = char
rbx.platform.typedef.int_least16_t = short
rbx.platform.typedef.int_least32_t = int
rbx.platform.typedef.int_least64_t = long
rbx.platform.typedef.int_least8_t = char
rbx.platform.typedef.intmax_t = long
rbx.platform.typedef.intptr_t = long
rbx.platform.typedef.key_t = int
rbx.platform.typedef.loff_t = long
rbx.platform.typedef.mode_t = uint
rbx.platform.typedef.nlink_t = uint
rbx.platform.typedef.off_t = long
rbx.platform.typedef.pid_t = int
rbx.platform.typedef.pthread_key_t = uint
rbx.platform.typedef.pthread_once_t = int
rbx.platform.typedef.pthread_t = ulong
rbx.platform.typedef.ptrdiff_t = long
rbx.platform.typedef.quad_t = long
rbx.platform.typedef.register_t = long
rbx.platform.typedef.rlim_t = ulong
rbx.platform.typedef.sa_family_t = ushort
rbx.platform.typedef.size_t = ulong
rbx.platform.typedef.socklen_t = uint
rbx.platform.typedef.ssize_t = long
rbx.platform.typedef.suseconds_t = long
rbx.platform.typedef.time_t = long
rbx.platform.typedef.timer_t = pointer
rbx.platform.typedef.u_char = uchar
rbx.platform.typedef.u_int = uint
rbx.platform.typedef.u_int16_t = ushort
rbx.platform.typedef.u_int32_t = uint
rbx.platform.typedef.u_int64_t = ulong_long
rbx.platform.typedef.u_int8_t = uchar
rbx.platform.typedef.u_long = ulong
rbx.platform.typedef.u_quad_t = ulong
rbx.platform.typedef.u_short = ushort
rbx.platform.typedef.uid_t = uint
rbx.platform.typedef.uint = uint
rbx.platform.typedef.uint16_t = ushort
rbx.platform.typedef.uint32_t = uint
rbx.platform.typedef.uint64_t = ulong
rbx.platform.typedef.uint8_t = uchar
rbx.platform.typedef.uint_fast16_t = ulong
rbx.platform.typedef.uint_fast32_t = ulong
rbx.platform.typedef.uint_fast64_t = ulong
rbx.platform.typedef.uint_fast8_t = uchar
rbx.platform.typedef.uint_least16_t = ushort
rbx.platform.typedef.uint_least32_t = uint
rbx.platform.typedef.uint_least64_t = ulong
rbx.platform.typedef.uint_least8_t = uchar
rbx.platform.typedef.uintmax_t = ulong
rbx.platform.typedef.uintptr_t = ulong
rbx.platform.typedef.ulong = ulong
rbx.platform.typedef.ushort = ushort
rbx.platform.typedef.wchar_t = int
@@ -0,0 +1,3 @@
rbx.platform.typedef.ptrdiff_t = int64
rbx.platform.typedef.size_t = uint64
rbx.platform.typedef.ssize_t = int64
@@ -0,0 +1,130 @@
rbx.platform.typedef.__darwin_blkcnt_t = long_long
rbx.platform.typedef.__darwin_blksize_t = int
rbx.platform.typedef.__darwin_clock_t = ulong
rbx.platform.typedef.__darwin_ct_rune_t = int
rbx.platform.typedef.__darwin_dev_t = int
rbx.platform.typedef.__darwin_fsblkcnt_t = uint
rbx.platform.typedef.__darwin_fsfilcnt_t = uint
rbx.platform.typedef.__darwin_gid_t = uint
rbx.platform.typedef.__darwin_id_t = uint
rbx.platform.typedef.__darwin_ino64_t = ulong_long
rbx.platform.typedef.__darwin_ino_t = ulong_long
rbx.platform.typedef.__darwin_intptr_t = long
rbx.platform.typedef.__darwin_mach_port_name_t = uint
rbx.platform.typedef.__darwin_mach_port_t = uint
rbx.platform.typedef.__darwin_mode_t = ushort
rbx.platform.typedef.__darwin_natural_t = uint
rbx.platform.typedef.__darwin_off_t = long_long
rbx.platform.typedef.__darwin_pid_t = int
rbx.platform.typedef.__darwin_pthread_key_t = ulong
rbx.platform.typedef.__darwin_ptrdiff_t = long
rbx.platform.typedef.__darwin_rune_t = int
rbx.platform.typedef.__darwin_sigset_t = uint
rbx.platform.typedef.__darwin_size_t = ulong
rbx.platform.typedef.__darwin_socklen_t = uint
rbx.platform.typedef.__darwin_ssize_t = long
rbx.platform.typedef.__darwin_suseconds_t = int
rbx.platform.typedef.__darwin_time_t = long
rbx.platform.typedef.__darwin_uid_t = uint
rbx.platform.typedef.__darwin_useconds_t = uint
rbx.platform.typedef.__darwin_uuid_string_t[37] = char
rbx.platform.typedef.__darwin_uuid_t[16] = uchar
rbx.platform.typedef.__darwin_wchar_t = int
rbx.platform.typedef.__darwin_wint_t = int
rbx.platform.typedef.__int16_t = short
rbx.platform.typedef.__int32_t = int
rbx.platform.typedef.__int64_t = long_long
rbx.platform.typedef.__int8_t = char
rbx.platform.typedef.__uint16_t = ushort
rbx.platform.typedef.__uint32_t = uint
rbx.platform.typedef.__uint64_t = ulong_long
rbx.platform.typedef.__uint8_t = uchar
rbx.platform.typedef.blkcnt_t = long_long
rbx.platform.typedef.blksize_t = int
rbx.platform.typedef.caddr_t = string
rbx.platform.typedef.clock_t = ulong
rbx.platform.typedef.daddr_t = int
rbx.platform.typedef.dev_t = int
rbx.platform.typedef.errno_t = int
rbx.platform.typedef.fd_mask = int
rbx.platform.typedef.fixpt_t = uint
rbx.platform.typedef.fsblkcnt_t = uint
rbx.platform.typedef.fsfilcnt_t = uint
rbx.platform.typedef.gid_t = uint
rbx.platform.typedef.id_t = uint
rbx.platform.typedef.in_addr_t = uint
rbx.platform.typedef.in_port_t = ushort
rbx.platform.typedef.ino64_t = ulong_long
rbx.platform.typedef.ino_t = ulong_long
rbx.platform.typedef.int16_t = short
rbx.platform.typedef.int32_t = int
rbx.platform.typedef.int64_t = long_long
rbx.platform.typedef.int8_t = char
rbx.platform.typedef.int_fast16_t = short
rbx.platform.typedef.int_fast32_t = int
rbx.platform.typedef.int_fast64_t = long_long
rbx.platform.typedef.int_fast8_t = char
rbx.platform.typedef.int_least16_t = short
rbx.platform.typedef.int_least32_t = int
rbx.platform.typedef.int_least64_t = long_long
rbx.platform.typedef.int_least8_t = char
rbx.platform.typedef.intmax_t = long
rbx.platform.typedef.intptr_t = long
rbx.platform.typedef.key_t = int
rbx.platform.typedef.mode_t = ushort
rbx.platform.typedef.nlink_t = ushort
rbx.platform.typedef.off_t = long_long
rbx.platform.typedef.pid_t = int
rbx.platform.typedef.pthread_key_t = ulong
rbx.platform.typedef.ptrdiff_t = long
rbx.platform.typedef.qaddr_t = pointer
rbx.platform.typedef.quad_t = long_long
rbx.platform.typedef.register_t = long_long
rbx.platform.typedef.rlim_t = ulong_long
rbx.platform.typedef.rsize_t = ulong
rbx.platform.typedef.sa_family_t = uchar
rbx.platform.typedef.sae_associd_t = uint
rbx.platform.typedef.sae_connid_t = uint
rbx.platform.typedef.segsz_t = int
rbx.platform.typedef.size_t = ulong
rbx.platform.typedef.socklen_t = uint
rbx.platform.typedef.ssize_t = long
rbx.platform.typedef.suseconds_t = int
rbx.platform.typedef.swblk_t = int
rbx.platform.typedef.syscall_arg_t = ulong_long
rbx.platform.typedef.time_t = long
rbx.platform.typedef.u_char = uchar
rbx.platform.typedef.u_int = uint
rbx.platform.typedef.u_int16_t = ushort
rbx.platform.typedef.u_int32_t = uint
rbx.platform.typedef.u_int64_t = ulong_long
rbx.platform.typedef.u_int8_t = uchar
rbx.platform.typedef.u_long = ulong
rbx.platform.typedef.u_quad_t = ulong_long
rbx.platform.typedef.u_short = ushort
rbx.platform.typedef.uid_t = uint
rbx.platform.typedef.uint = uint
rbx.platform.typedef.uint16_t = ushort
rbx.platform.typedef.uint32_t = uint
rbx.platform.typedef.uint64_t = ulong_long
rbx.platform.typedef.uint8_t = uchar
rbx.platform.typedef.uint_fast16_t = ushort
rbx.platform.typedef.uint_fast32_t = uint
rbx.platform.typedef.uint_fast64_t = ulong_long
rbx.platform.typedef.uint_fast8_t = uchar
rbx.platform.typedef.uint_least16_t = ushort
rbx.platform.typedef.uint_least32_t = uint
rbx.platform.typedef.uint_least64_t = ulong_long
rbx.platform.typedef.uint_least8_t = uchar
rbx.platform.typedef.uintmax_t = ulong
rbx.platform.typedef.uintptr_t = ulong
rbx.platform.typedef.useconds_t = uint
rbx.platform.typedef.user_addr_t = ulong_long
rbx.platform.typedef.user_long_t = long_long
rbx.platform.typedef.user_off_t = long_long
rbx.platform.typedef.user_size_t = ulong_long
rbx.platform.typedef.user_ssize_t = long_long
rbx.platform.typedef.user_time_t = long_long
rbx.platform.typedef.user_ulong_t = ulong_long
rbx.platform.typedef.ushort = ushort
rbx.platform.typedef.wchar_t = int
@@ -0,0 +1,130 @@
rbx.platform.typedef.*) = pointer
rbx.platform.typedef.___wchar_t = int
rbx.platform.typedef.__clock_t = ulong
rbx.platform.typedef.__clockid_t = ulong
rbx.platform.typedef.__fd_mask = ulong
rbx.platform.typedef.__int16_t = short
rbx.platform.typedef.__int32_t = int
rbx.platform.typedef.__int64_t = long
rbx.platform.typedef.__int8_t = char
rbx.platform.typedef.__int_fast16_t = int
rbx.platform.typedef.__int_fast32_t = int
rbx.platform.typedef.__int_fast64_t = long
rbx.platform.typedef.__int_fast8_t = int
rbx.platform.typedef.__int_least16_t = short
rbx.platform.typedef.__int_least32_t = int
rbx.platform.typedef.__int_least64_t = long
rbx.platform.typedef.__int_least8_t = char
rbx.platform.typedef.__intlp_t = long
rbx.platform.typedef.__intmax_t = long
rbx.platform.typedef.__intptr_t = long
rbx.platform.typedef.__off_t = long
rbx.platform.typedef.__pid_t = int
rbx.platform.typedef.__ptrdiff_t = long
rbx.platform.typedef.__register_t = long
rbx.platform.typedef.__rlim_t = long
rbx.platform.typedef.__sig_atomic_t = int
rbx.platform.typedef.__size_t = ulong
rbx.platform.typedef.__socklen_t = uint
rbx.platform.typedef.__ssize_t = long
rbx.platform.typedef.__suseconds_t = long
rbx.platform.typedef.__time_t = long
rbx.platform.typedef.__timer_t = int
rbx.platform.typedef.__uint16_t = ushort
rbx.platform.typedef.__uint32_t = uint
rbx.platform.typedef.__uint64_t = ulong
rbx.platform.typedef.__uint8_t = uchar
rbx.platform.typedef.__uint_fast16_t = uint
rbx.platform.typedef.__uint_fast32_t = uint
rbx.platform.typedef.__uint_fast64_t = ulong
rbx.platform.typedef.__uint_fast8_t = uint
rbx.platform.typedef.__uint_least16_t = ushort
rbx.platform.typedef.__uint_least32_t = uint
rbx.platform.typedef.__uint_least64_t = ulong
rbx.platform.typedef.__uint_least8_t = uchar
rbx.platform.typedef.__uintlp_t = ulong
rbx.platform.typedef.__uintmax_t = ulong
rbx.platform.typedef.__uintptr_t = ulong
rbx.platform.typedef.__wint_t = int
rbx.platform.typedef.blkcnt_t = long
rbx.platform.typedef.blksize_t = long
rbx.platform.typedef.c_caddr_t = pointer
rbx.platform.typedef.caddr_t = string
rbx.platform.typedef.clock_t = ulong
rbx.platform.typedef.clockid_t = ulong
rbx.platform.typedef.daddr_t = int
rbx.platform.typedef.dev_t = uint
rbx.platform.typedef.fixpt_t = uint
rbx.platform.typedef.fsblkcnt_t = ulong
rbx.platform.typedef.fsfilcnt_t = ulong
rbx.platform.typedef.gid_t = uint
rbx.platform.typedef.id_t = long
rbx.platform.typedef.in_addr_t = uint
rbx.platform.typedef.in_port_t = ushort
rbx.platform.typedef.ino_t = ulong
rbx.platform.typedef.int16_t = short
rbx.platform.typedef.int32_t = int
rbx.platform.typedef.int64_t = long
rbx.platform.typedef.int8_t = char
rbx.platform.typedef.int_fast16_t = int
rbx.platform.typedef.int_fast32_t = int
rbx.platform.typedef.int_fast64_t = long
rbx.platform.typedef.int_fast8_t = int
rbx.platform.typedef.int_least16_t = short
rbx.platform.typedef.int_least32_t = int
rbx.platform.typedef.int_least64_t = long
rbx.platform.typedef.int_least8_t = char
rbx.platform.typedef.intmax_t = long
rbx.platform.typedef.intptr_t = long
rbx.platform.typedef.key_t = long
rbx.platform.typedef.lwpid_t = int
rbx.platform.typedef.mode_t = ushort
rbx.platform.typedef.nlink_t = uint
rbx.platform.typedef.off_t = long
rbx.platform.typedef.pid_t = int
rbx.platform.typedef.pthread_key_t = int
rbx.platform.typedef.ptrdiff_t = long
rbx.platform.typedef.qaddr_t = pointer
rbx.platform.typedef.quad_t = long
rbx.platform.typedef.register_t = long
rbx.platform.typedef.rlim_t = long
rbx.platform.typedef.sa_family_t = uchar
rbx.platform.typedef.segsz_t = long
rbx.platform.typedef.size_t = ulong
rbx.platform.typedef.socklen_t = uint
rbx.platform.typedef.ssize_t = long
rbx.platform.typedef.suseconds_t = long
rbx.platform.typedef.time_t = long
rbx.platform.typedef.timer_t = int
rbx.platform.typedef.u_char = uchar
rbx.platform.typedef.u_daddr_t = uint
rbx.platform.typedef.u_int = uint
rbx.platform.typedef.u_int16_t = ushort
rbx.platform.typedef.u_int32_t = uint
rbx.platform.typedef.u_int64_t = ulong
rbx.platform.typedef.u_int8_t = uchar
rbx.platform.typedef.u_long = ulong
rbx.platform.typedef.u_quad_t = ulong
rbx.platform.typedef.u_short = ushort
rbx.platform.typedef.uid_t = uint
rbx.platform.typedef.uint = uint
rbx.platform.typedef.uint16_t = ushort
rbx.platform.typedef.uint32_t = uint
rbx.platform.typedef.uint64_t = ulong
rbx.platform.typedef.uint8_t = uchar
rbx.platform.typedef.uint_fast16_t = uint
rbx.platform.typedef.uint_fast32_t = uint
rbx.platform.typedef.uint_fast64_t = ulong
rbx.platform.typedef.uint_fast8_t = uint
rbx.platform.typedef.uint_least16_t = ushort
rbx.platform.typedef.uint_least32_t = uint
rbx.platform.typedef.uint_least64_t = ulong
rbx.platform.typedef.uint_least8_t = uchar
rbx.platform.typedef.uintmax_t = ulong
rbx.platform.typedef.uintptr_t = ulong
rbx.platform.typedef.ulong = ulong
rbx.platform.typedef.unchar = uchar
rbx.platform.typedef.useconds_t = uint
rbx.platform.typedef.ushort = ushort
rbx.platform.typedef.v_caddr_t = pointer
rbx.platform.typedef.wchar_t = int
@@ -0,0 +1,128 @@
rbx.platform.typedef.__clock_t = int
rbx.platform.typedef.__clockid_t = int
rbx.platform.typedef.__cpuid_t = ulong
rbx.platform.typedef.__dev_t = int
rbx.platform.typedef.__fd_mask = int
rbx.platform.typedef.__fixpt_t = uint
rbx.platform.typedef.__gid_t = uint
rbx.platform.typedef.__id_t = uint
rbx.platform.typedef.__in_addr_t = uint
rbx.platform.typedef.__in_port_t = ushort
rbx.platform.typedef.__ino_t = uint
rbx.platform.typedef.__int16_t = short
rbx.platform.typedef.__int32_t = int
rbx.platform.typedef.__int64_t = long_long
rbx.platform.typedef.__int8_t = char
rbx.platform.typedef.__int_fast16_t = int
rbx.platform.typedef.__int_fast32_t = int
rbx.platform.typedef.__int_fast64_t = long_long
rbx.platform.typedef.__int_fast8_t = int
rbx.platform.typedef.__int_least16_t = short
rbx.platform.typedef.__int_least32_t = int
rbx.platform.typedef.__int_least64_t = long_long
rbx.platform.typedef.__int_least8_t = char
rbx.platform.typedef.__intmax_t = long_long
rbx.platform.typedef.__intptr_t = long
rbx.platform.typedef.__key_t = long
rbx.platform.typedef.__mode_t = uint
rbx.platform.typedef.__nlink_t = uint
rbx.platform.typedef.__off_t = long_long
rbx.platform.typedef.__paddr_t = ulong
rbx.platform.typedef.__pid_t = int
rbx.platform.typedef.__psize_t = ulong
rbx.platform.typedef.__ptrdiff_t = long
rbx.platform.typedef.__register_t = long_long
rbx.platform.typedef.__rlim_t = ulong_long
rbx.platform.typedef.__rune_t = int
rbx.platform.typedef.__sa_family_t = uchar
rbx.platform.typedef.__segsz_t = int
rbx.platform.typedef.__size_t = ulong
rbx.platform.typedef.__socklen_t = uint
rbx.platform.typedef.__ssize_t = long
rbx.platform.typedef.__suseconds_t = long
rbx.platform.typedef.__swblk_t = int
rbx.platform.typedef.__time_t = long
rbx.platform.typedef.__timer_t = int
rbx.platform.typedef.__uid_t = uint
rbx.platform.typedef.__uint16_t = ushort
rbx.platform.typedef.__uint32_t = uint
rbx.platform.typedef.__uint64_t = ulong_long
rbx.platform.typedef.__uint8_t = uchar
rbx.platform.typedef.__uint_fast16_t = uint
rbx.platform.typedef.__uint_fast32_t = uint
rbx.platform.typedef.__uint_fast64_t = ulong_long
rbx.platform.typedef.__uint_fast8_t = uint
rbx.platform.typedef.__uint_least16_t = ushort
rbx.platform.typedef.__uint_least32_t = uint
rbx.platform.typedef.__uint_least64_t = ulong_long
rbx.platform.typedef.__uint_least8_t = uchar
rbx.platform.typedef.__uintmax_t = ulong_long
rbx.platform.typedef.__uintptr_t = ulong
rbx.platform.typedef.__useconds_t = uint
rbx.platform.typedef.__vaddr_t = ulong
rbx.platform.typedef.__vsize_t = ulong
rbx.platform.typedef.__wchar_t = int
rbx.platform.typedef.__wctrans_t = pointer
rbx.platform.typedef.__wctype_t = pointer
rbx.platform.typedef.__wint_t = int
rbx.platform.typedef.caddr_t = string
rbx.platform.typedef.clock_t = int
rbx.platform.typedef.clockid_t = int
rbx.platform.typedef.cpuid_t = ulong
rbx.platform.typedef.daddr32_t = int
rbx.platform.typedef.daddr64_t = long_long
rbx.platform.typedef.daddr_t = int
rbx.platform.typedef.dev_t = int
rbx.platform.typedef.fixpt_t = uint
rbx.platform.typedef.gid_t = uint
rbx.platform.typedef.id_t = uint
rbx.platform.typedef.in_addr_t = uint
rbx.platform.typedef.in_port_t = ushort
rbx.platform.typedef.ino_t = uint
rbx.platform.typedef.int16_t = short
rbx.platform.typedef.int32_t = int
rbx.platform.typedef.int64_t = long_long
rbx.platform.typedef.int8_t = char
rbx.platform.typedef.intptr_t = long
rbx.platform.typedef.key_t = long
rbx.platform.typedef.mode_t = uint
rbx.platform.typedef.nlink_t = uint
rbx.platform.typedef.off_t = long_long
rbx.platform.typedef.paddr_t = ulong
rbx.platform.typedef.pid_t = int
rbx.platform.typedef.psize_t = ulong
rbx.platform.typedef.qaddr_t = pointer
rbx.platform.typedef.quad_t = long_long
rbx.platform.typedef.register_t = long_long
rbx.platform.typedef.rlim_t = ulong_long
rbx.platform.typedef.sa_family_t = uchar
rbx.platform.typedef.segsz_t = int
rbx.platform.typedef.size_t = ulong
rbx.platform.typedef.socklen_t = uint
rbx.platform.typedef.ssize_t = long
rbx.platform.typedef.suseconds_t = long
rbx.platform.typedef.swblk_t = int
rbx.platform.typedef.time_t = long
rbx.platform.typedef.timer_t = int
rbx.platform.typedef.u_char = uchar
rbx.platform.typedef.u_int = uint
rbx.platform.typedef.u_int16_t = ushort
rbx.platform.typedef.u_int32_t = uint
rbx.platform.typedef.u_int64_t = ulong_long
rbx.platform.typedef.u_int8_t = uchar
rbx.platform.typedef.u_long = ulong
rbx.platform.typedef.u_quad_t = ulong_long
rbx.platform.typedef.u_short = ushort
rbx.platform.typedef.uid_t = uint
rbx.platform.typedef.uint = uint
rbx.platform.typedef.uint16_t = ushort
rbx.platform.typedef.uint32_t = uint
rbx.platform.typedef.uint64_t = ulong_long
rbx.platform.typedef.uint8_t = uchar
rbx.platform.typedef.uintptr_t = ulong
rbx.platform.typedef.ulong = ulong
rbx.platform.typedef.unchar = uchar
rbx.platform.typedef.useconds_t = uint
rbx.platform.typedef.ushort = ushort
rbx.platform.typedef.vaddr_t = ulong
rbx.platform.typedef.vsize_t = ulong
@@ -0,0 +1,158 @@
rbx.platform.typedef.*) = pointer
rbx.platform.typedef.___wchar_t = int
rbx.platform.typedef.__accmode_t = int
rbx.platform.typedef.__blkcnt_t = long
rbx.platform.typedef.__blksize_t = int
rbx.platform.typedef.__char16_t = ushort
rbx.platform.typedef.__char32_t = uint
rbx.platform.typedef.__clock_t = int
rbx.platform.typedef.__clockid_t = int
rbx.platform.typedef.__cpulevel_t = int
rbx.platform.typedef.__cpusetid_t = int
rbx.platform.typedef.__cpuwhich_t = int
rbx.platform.typedef.__critical_t = long
rbx.platform.typedef.__ct_rune_t = int
rbx.platform.typedef.__dev_t = ulong
rbx.platform.typedef.__fd_mask = ulong
rbx.platform.typedef.__fflags_t = uint
rbx.platform.typedef.__fixpt_t = uint
rbx.platform.typedef.__fsblkcnt_t = ulong
rbx.platform.typedef.__fsfilcnt_t = ulong
rbx.platform.typedef.__gid_t = uint
rbx.platform.typedef.__id_t = long
rbx.platform.typedef.__ino_t = ulong
rbx.platform.typedef.__int16_t = short
rbx.platform.typedef.__int32_t = int
rbx.platform.typedef.__int64_t = long
rbx.platform.typedef.__int8_t = char
rbx.platform.typedef.__int_fast16_t = int
rbx.platform.typedef.__int_fast32_t = int
rbx.platform.typedef.__int_fast64_t = long
rbx.platform.typedef.__int_fast8_t = int
rbx.platform.typedef.__int_least16_t = short
rbx.platform.typedef.__int_least32_t = int
rbx.platform.typedef.__int_least64_t = long
rbx.platform.typedef.__int_least8_t = char
rbx.platform.typedef.__intfptr_t = long
rbx.platform.typedef.__intmax_t = long
rbx.platform.typedef.__intptr_t = long
rbx.platform.typedef.__key_t = long
rbx.platform.typedef.__lwpid_t = int
rbx.platform.typedef.__mode_t = ushort
rbx.platform.typedef.__nl_item = int
rbx.platform.typedef.__nlink_t = ulong
rbx.platform.typedef.__off64_t = long
rbx.platform.typedef.__off_t = long
rbx.platform.typedef.__pid_t = int
rbx.platform.typedef.__ptrdiff_t = long
rbx.platform.typedef.__register_t = long
rbx.platform.typedef.__rlim_t = long
rbx.platform.typedef.__rman_res_t = ulong
rbx.platform.typedef.__rune_t = int
rbx.platform.typedef.__sa_family_t = uchar
rbx.platform.typedef.__segsz_t = long
rbx.platform.typedef.__size_t = ulong
rbx.platform.typedef.__socklen_t = uint
rbx.platform.typedef.__ssize_t = long
rbx.platform.typedef.__suseconds_t = long
rbx.platform.typedef.__time_t = long
rbx.platform.typedef.__u_register_t = ulong
rbx.platform.typedef.__uid_t = uint
rbx.platform.typedef.__uint16_t = ushort
rbx.platform.typedef.__uint32_t = uint
rbx.platform.typedef.__uint64_t = ulong
rbx.platform.typedef.__uint8_t = uchar
rbx.platform.typedef.__uint_fast16_t = uint
rbx.platform.typedef.__uint_fast32_t = uint
rbx.platform.typedef.__uint_fast64_t = ulong
rbx.platform.typedef.__uint_fast8_t = uint
rbx.platform.typedef.__uint_least16_t = ushort
rbx.platform.typedef.__uint_least32_t = uint
rbx.platform.typedef.__uint_least64_t = ulong
rbx.platform.typedef.__uint_least8_t = uchar
rbx.platform.typedef.__uintfptr_t = ulong
rbx.platform.typedef.__uintmax_t = ulong
rbx.platform.typedef.__uintptr_t = ulong
rbx.platform.typedef.__useconds_t = uint
rbx.platform.typedef.__vm_offset_t = ulong
rbx.platform.typedef.__vm_paddr_t = ulong
rbx.platform.typedef.__vm_size_t = ulong
rbx.platform.typedef.__wint_t = int
rbx.platform.typedef.accmode_t = int
rbx.platform.typedef.blkcnt_t = long
rbx.platform.typedef.blksize_t = int
rbx.platform.typedef.c_caddr_t = pointer
rbx.platform.typedef.caddr_t = string
rbx.platform.typedef.cap_ioctl_t = ulong
rbx.platform.typedef.clock_t = int
rbx.platform.typedef.clockid_t = int
rbx.platform.typedef.cpulevel_t = int
rbx.platform.typedef.cpusetid_t = int
rbx.platform.typedef.cpuwhich_t = int
rbx.platform.typedef.critical_t = long
rbx.platform.typedef.daddr_t = long
rbx.platform.typedef.dev_t = ulong
rbx.platform.typedef.fd_mask = ulong
rbx.platform.typedef.fflags_t = uint
rbx.platform.typedef.fixpt_t = uint
rbx.platform.typedef.fsblkcnt_t = ulong
rbx.platform.typedef.fsfilcnt_t = ulong
rbx.platform.typedef.gid_t = uint
rbx.platform.typedef.id_t = long
rbx.platform.typedef.in_addr_t = uint
rbx.platform.typedef.in_port_t = ushort
rbx.platform.typedef.ino_t = ulong
rbx.platform.typedef.int16_t = short
rbx.platform.typedef.int32_t = int
rbx.platform.typedef.int64_t = long
rbx.platform.typedef.int8_t = char
rbx.platform.typedef.intmax_t = long
rbx.platform.typedef.intptr_t = long
rbx.platform.typedef.key_t = long
rbx.platform.typedef.ksize_t = ulong
rbx.platform.typedef.kvaddr_t = ulong
rbx.platform.typedef.lwpid_t = int
rbx.platform.typedef.mode_t = ushort
rbx.platform.typedef.nlink_t = ulong
rbx.platform.typedef.off64_t = long
rbx.platform.typedef.off_t = long
rbx.platform.typedef.pid_t = int
rbx.platform.typedef.pthread_key_t = int
rbx.platform.typedef.qaddr_t = pointer
rbx.platform.typedef.quad_t = long
rbx.platform.typedef.register_t = long
rbx.platform.typedef.rlim_t = long
rbx.platform.typedef.rman_res_t = ulong
rbx.platform.typedef.sa_family_t = uchar
rbx.platform.typedef.sbintime_t = long
rbx.platform.typedef.segsz_t = long
rbx.platform.typedef.size_t = ulong
rbx.platform.typedef.socklen_t = uint
rbx.platform.typedef.ssize_t = long
rbx.platform.typedef.suseconds_t = long
rbx.platform.typedef.time_t = long
rbx.platform.typedef.u_char = uchar
rbx.platform.typedef.u_int = uint
rbx.platform.typedef.u_int16_t = ushort
rbx.platform.typedef.u_int32_t = uint
rbx.platform.typedef.u_int64_t = ulong
rbx.platform.typedef.u_int8_t = uchar
rbx.platform.typedef.u_long = ulong
rbx.platform.typedef.u_quad_t = ulong
rbx.platform.typedef.u_register_t = ulong
rbx.platform.typedef.u_short = ushort
rbx.platform.typedef.uid_t = uint
rbx.platform.typedef.uint = uint
rbx.platform.typedef.uint16_t = ushort
rbx.platform.typedef.uint32_t = uint
rbx.platform.typedef.uint64_t = ulong
rbx.platform.typedef.uint8_t = uchar
rbx.platform.typedef.uintmax_t = ulong
rbx.platform.typedef.uintptr_t = ulong
rbx.platform.typedef.useconds_t = uint
rbx.platform.typedef.ushort = ushort
rbx.platform.typedef.vm_offset_t = ulong
rbx.platform.typedef.vm_ooffset_t = long
rbx.platform.typedef.vm_paddr_t = ulong
rbx.platform.typedef.vm_pindex_t = ulong
rbx.platform.typedef.vm_size_t = ulong
@@ -0,0 +1,117 @@
rbx.platform.typedef.__haiku_addr_t = ulong
rbx.platform.typedef.__haiku_generic_addr_t = ulong
rbx.platform.typedef.__haiku_int16 = short
rbx.platform.typedef.__haiku_int32 = int
rbx.platform.typedef.__haiku_int64 = long
rbx.platform.typedef.__haiku_int8 = char
rbx.platform.typedef.__haiku_phys_addr_t = ulong
rbx.platform.typedef.__haiku_phys_saddr_t = long
rbx.platform.typedef.__haiku_saddr_t = long
rbx.platform.typedef.__haiku_std_int16 = short
rbx.platform.typedef.__haiku_std_int32 = int
rbx.platform.typedef.__haiku_std_int64 = long
rbx.platform.typedef.__haiku_std_int8 = char
rbx.platform.typedef.__haiku_std_uint16 = ushort
rbx.platform.typedef.__haiku_std_uint32 = uint
rbx.platform.typedef.__haiku_std_uint64 = ulong
rbx.platform.typedef.__haiku_std_uint8 = uchar
rbx.platform.typedef.__haiku_uint16 = ushort
rbx.platform.typedef.__haiku_uint32 = uint
rbx.platform.typedef.__haiku_uint64 = ulong
rbx.platform.typedef.__haiku_uint8 = uchar
rbx.platform.typedef.addr_t = ulong
rbx.platform.typedef.bigtime_t = long
rbx.platform.typedef.blkcnt_t = long
rbx.platform.typedef.blksize_t = int
rbx.platform.typedef.caddr_t = pointer
rbx.platform.typedef.clock_t = int
rbx.platform.typedef.clockid_t = int
rbx.platform.typedef.cnt_t = int
rbx.platform.typedef.daddr_t = long
rbx.platform.typedef.dev_t = int
rbx.platform.typedef.fd_mask = uint
rbx.platform.typedef.fsblkcnt_t = long
rbx.platform.typedef.fsfilcnt_t = long
rbx.platform.typedef.generic_addr_t = ulong
rbx.platform.typedef.generic_size_t = ulong
rbx.platform.typedef.gid_t = uint
rbx.platform.typedef.id_t = int
rbx.platform.typedef.in_addr_t = uint
rbx.platform.typedef.in_port_t = ushort
rbx.platform.typedef.ino_t = long
rbx.platform.typedef.int16 = short
rbx.platform.typedef.int16_t = short
rbx.platform.typedef.int32 = int
rbx.platform.typedef.int32_t = int
rbx.platform.typedef.int64 = long
rbx.platform.typedef.int64_t = long
rbx.platform.typedef.int8 = char
rbx.platform.typedef.int8_t = char
rbx.platform.typedef.int_fast16_t = int
rbx.platform.typedef.int_fast32_t = int
rbx.platform.typedef.int_fast64_t = long
rbx.platform.typedef.int_fast8_t = int
rbx.platform.typedef.int_least16_t = short
rbx.platform.typedef.int_least32_t = int
rbx.platform.typedef.int_least64_t = long
rbx.platform.typedef.int_least8_t = char
rbx.platform.typedef.intmax_t = long
rbx.platform.typedef.intptr_t = long
rbx.platform.typedef.key_t = int
rbx.platform.typedef.mode_t = uint
rbx.platform.typedef.nanotime_t = long
rbx.platform.typedef.nlink_t = int
rbx.platform.typedef.off_t = long
rbx.platform.typedef.perform_code = uint
rbx.platform.typedef.phys_addr_t = ulong
rbx.platform.typedef.phys_size_t = ulong
rbx.platform.typedef.pid_t = int
rbx.platform.typedef.pthread_key_t = int
rbx.platform.typedef.ptrdiff_t = long
rbx.platform.typedef.rlim_t = ulong
rbx.platform.typedef.sa_family_t = uchar
rbx.platform.typedef.sig_atomic_t = int
rbx.platform.typedef.sigset_t = ulong
rbx.platform.typedef.size_t = ulong
rbx.platform.typedef.socklen_t = uint
rbx.platform.typedef.status_t = int
rbx.platform.typedef.suseconds_t = int
rbx.platform.typedef.time_t = long
rbx.platform.typedef.type_code = uint
rbx.platform.typedef.u_char = uchar
rbx.platform.typedef.u_int = uint
rbx.platform.typedef.u_int16_t = ushort
rbx.platform.typedef.u_int32_t = uint
rbx.platform.typedef.u_int64_t = ulong
rbx.platform.typedef.u_int8_t = uchar
rbx.platform.typedef.u_long = ulong
rbx.platform.typedef.u_short = ushort
rbx.platform.typedef.uchar = uchar
rbx.platform.typedef.uid_t = uint
rbx.platform.typedef.uint = uint
rbx.platform.typedef.uint16 = ushort
rbx.platform.typedef.uint16_t = ushort
rbx.platform.typedef.uint32 = uint
rbx.platform.typedef.uint32_t = uint
rbx.platform.typedef.uint64 = ulong
rbx.platform.typedef.uint64_t = ulong
rbx.platform.typedef.uint8 = uchar
rbx.platform.typedef.uint8_t = uchar
rbx.platform.typedef.uint_fast16_t = uint
rbx.platform.typedef.uint_fast32_t = uint
rbx.platform.typedef.uint_fast64_t = ulong
rbx.platform.typedef.uint_fast8_t = uint
rbx.platform.typedef.uint_least16_t = ushort
rbx.platform.typedef.uint_least32_t = uint
rbx.platform.typedef.uint_least64_t = ulong
rbx.platform.typedef.uint_least8_t = uchar
rbx.platform.typedef.uintmax_t = ulong
rbx.platform.typedef.uintptr_t = ulong
rbx.platform.typedef.ulong = ulong
rbx.platform.typedef.umode_t = uint
rbx.platform.typedef.unchar = uchar
rbx.platform.typedef.unichar = ushort
rbx.platform.typedef.useconds_t = uint
rbx.platform.typedef.ushort = ushort
rbx.platform.typedef.void*) = pointer
rbx.platform.typedef.wchar_t = int
@@ -0,0 +1,132 @@
rbx.platform.typedef.*__caddr_t = char
rbx.platform.typedef.__blkcnt64_t = long
rbx.platform.typedef.__blkcnt_t = long
rbx.platform.typedef.__blksize_t = long
rbx.platform.typedef.__clock_t = long
rbx.platform.typedef.__clockid_t = int
rbx.platform.typedef.__daddr_t = int
rbx.platform.typedef.__dev_t = ulong
rbx.platform.typedef.__fd_mask = long
rbx.platform.typedef.__fsblkcnt64_t = ulong
rbx.platform.typedef.__fsblkcnt_t = ulong
rbx.platform.typedef.__fsfilcnt64_t = ulong
rbx.platform.typedef.__fsfilcnt_t = ulong
rbx.platform.typedef.__fsword_t = long
rbx.platform.typedef.__gid_t = uint
rbx.platform.typedef.__id_t = uint
rbx.platform.typedef.__ino64_t = ulong
rbx.platform.typedef.__ino_t = ulong
rbx.platform.typedef.__int16_t = short
rbx.platform.typedef.__int32_t = int
rbx.platform.typedef.__int64_t = long
rbx.platform.typedef.__int8_t = char
rbx.platform.typedef.__intmax_t = long
rbx.platform.typedef.__intptr_t = long
rbx.platform.typedef.__key_t = int
rbx.platform.typedef.__loff_t = long
rbx.platform.typedef.__mode_t = uint
rbx.platform.typedef.__nlink_t = ulong
rbx.platform.typedef.__off64_t = long
rbx.platform.typedef.__off_t = long
rbx.platform.typedef.__pid_t = int
rbx.platform.typedef.__priority_which_t = int
rbx.platform.typedef.__quad_t = long
rbx.platform.typedef.__rlim64_t = ulong
rbx.platform.typedef.__rlim_t = ulong
rbx.platform.typedef.__rlimit_resource_t = int
rbx.platform.typedef.__rusage_who_t = int
rbx.platform.typedef.__sig_atomic_t = int
rbx.platform.typedef.__socklen_t = uint
rbx.platform.typedef.__ssize_t = long
rbx.platform.typedef.__suseconds_t = long
rbx.platform.typedef.__syscall_slong_t = long
rbx.platform.typedef.__syscall_ulong_t = ulong
rbx.platform.typedef.__time_t = long
rbx.platform.typedef.__timer_t = pointer
rbx.platform.typedef.__u_char = uchar
rbx.platform.typedef.__u_int = uint
rbx.platform.typedef.__u_long = ulong
rbx.platform.typedef.__u_quad_t = ulong
rbx.platform.typedef.__u_short = ushort
rbx.platform.typedef.__uid_t = uint
rbx.platform.typedef.__uint16_t = ushort
rbx.platform.typedef.__uint32_t = uint
rbx.platform.typedef.__uint64_t = ulong
rbx.platform.typedef.__uint8_t = uchar
rbx.platform.typedef.__uintmax_t = ulong
rbx.platform.typedef.__useconds_t = uint
rbx.platform.typedef.blkcnt_t = long
rbx.platform.typedef.blksize_t = long
rbx.platform.typedef.clock_t = long
rbx.platform.typedef.clockid_t = int
rbx.platform.typedef.daddr_t = int
rbx.platform.typedef.dev_t = ulong
rbx.platform.typedef.fd_mask = long
rbx.platform.typedef.fsblkcnt_t = ulong
rbx.platform.typedef.fsfilcnt_t = ulong
rbx.platform.typedef.gid_t = uint
rbx.platform.typedef.id_t = uint
rbx.platform.typedef.in_addr_t = uint
rbx.platform.typedef.in_port_t = ushort
rbx.platform.typedef.ino_t = ulong
rbx.platform.typedef.int16_t = short
rbx.platform.typedef.int32_t = int
rbx.platform.typedef.int64_t = long
rbx.platform.typedef.int8_t = char
rbx.platform.typedef.int_fast16_t = long
rbx.platform.typedef.int_fast32_t = long
rbx.platform.typedef.int_fast64_t = long
rbx.platform.typedef.int_fast8_t = char
rbx.platform.typedef.int_least32_t = int
rbx.platform.typedef.int_least64_t = long
rbx.platform.typedef.int_least8_t = char
rbx.platform.typedef.intmax_t = long
rbx.platform.typedef.intptr_t = long
rbx.platform.typedef.key_t = int
rbx.platform.typedef.loff_t = long
rbx.platform.typedef.mode_t = uint
rbx.platform.typedef.nlink_t = ulong
rbx.platform.typedef.off_t = long
rbx.platform.typedef.pid_t = int
rbx.platform.typedef.pthread_key_t = uint
rbx.platform.typedef.pthread_once_t = int
rbx.platform.typedef.pthread_t = ulong
rbx.platform.typedef.ptrdiff_t = long
rbx.platform.typedef.quad_t = long
rbx.platform.typedef.register_t = long
rbx.platform.typedef.rlim_t = ulong
rbx.platform.typedef.sa_family_t = ushort
rbx.platform.typedef.size_t = ulong
rbx.platform.typedef.socklen_t = uint
rbx.platform.typedef.ssize_t = long
rbx.platform.typedef.suseconds_t = long
rbx.platform.typedef.time_t = long
rbx.platform.typedef.timer_t = pointer
rbx.platform.typedef.u_char = uchar
rbx.platform.typedef.u_int = uint
rbx.platform.typedef.u_int16_t = ushort
rbx.platform.typedef.u_int32_t = uint
rbx.platform.typedef.u_int64_t = ulong_long
rbx.platform.typedef.u_int8_t = uchar
rbx.platform.typedef.u_long = ulong
rbx.platform.typedef.u_quad_t = ulong
rbx.platform.typedef.u_short = ushort
rbx.platform.typedef.uid_t = uint
rbx.platform.typedef.uint = uint
rbx.platform.typedef.uint16_t = ushort
rbx.platform.typedef.uint32_t = uint
rbx.platform.typedef.uint64_t = ulong
rbx.platform.typedef.uint8_t = uchar
rbx.platform.typedef.uint_fast16_t = ulong
rbx.platform.typedef.uint_fast32_t = ulong
rbx.platform.typedef.uint_fast64_t = ulong
rbx.platform.typedef.uint_fast8_t = uchar
rbx.platform.typedef.uint_least16_t = ushort
rbx.platform.typedef.uint_least32_t = uint
rbx.platform.typedef.uint_least64_t = ulong
rbx.platform.typedef.uint_least8_t = uchar
rbx.platform.typedef.uintmax_t = ulong
rbx.platform.typedef.uintptr_t = ulong
rbx.platform.typedef.ulong = ulong
rbx.platform.typedef.ushort = ushort
rbx.platform.typedef.wchar_t = int
@@ -0,0 +1,119 @@
rbx.platform.typedef.*addr_t = char
rbx.platform.typedef.__ULong = uint
rbx.platform.typedef.__blkcnt_t = long
rbx.platform.typedef.__blksize_t = int
rbx.platform.typedef.__clock_t = ulong
rbx.platform.typedef.__clockid_t = ulong
rbx.platform.typedef.__cpu_mask = ulong
rbx.platform.typedef.__dev_t = uint
rbx.platform.typedef.__fsblkcnt_t = ulong
rbx.platform.typedef.__fsfilcnt_t = ulong
rbx.platform.typedef.__gid_t = uint
rbx.platform.typedef.__id_t = uint
rbx.platform.typedef.__ino_t = ulong
rbx.platform.typedef.__int32_t = int
rbx.platform.typedef.__int64_t = long
rbx.platform.typedef.__int8_t = char
rbx.platform.typedef.__int_least32_t = int
rbx.platform.typedef.__int_least64_t = long
rbx.platform.typedef.__int_least8_t = char
rbx.platform.typedef.__intmax_t = long
rbx.platform.typedef.__intptr_t = long
rbx.platform.typedef.__key_t = long_long
rbx.platform.typedef.__loff_t = long_long
rbx.platform.typedef.__mode_t = uint
rbx.platform.typedef.__nl_item = int
rbx.platform.typedef.__nlink_t = ushort
rbx.platform.typedef.__off_t = long
rbx.platform.typedef.__pid_t = int
rbx.platform.typedef.__sigset_t = ulong
rbx.platform.typedef.__size_t = ulong
rbx.platform.typedef.__socklen_t = int
rbx.platform.typedef.__suseconds_t = long
rbx.platform.typedef.__time_t = long
rbx.platform.typedef.__timer_t = ulong
rbx.platform.typedef.__uid_t = uint
rbx.platform.typedef.__uint32_t = uint
rbx.platform.typedef.__uint64_t = ulong
rbx.platform.typedef.__uint8_t = uchar
rbx.platform.typedef.__uint_least32_t = uint
rbx.platform.typedef.__uint_least64_t = ulong
rbx.platform.typedef.__uint_least8_t = uchar
rbx.platform.typedef.__uintmax_t = ulong
rbx.platform.typedef.__uintptr_t = ulong
rbx.platform.typedef.__useconds_t = ulong
rbx.platform.typedef._fpos64_t = long_long
rbx.platform.typedef._fpos_t = long
rbx.platform.typedef._off64_t = long_long
rbx.platform.typedef._off_t = long
rbx.platform.typedef.blkcnt_t = long
rbx.platform.typedef.blksize_t = int
rbx.platform.typedef.caddr_t = string
rbx.platform.typedef.clock_t = ulong
rbx.platform.typedef.clockid_t = ulong
rbx.platform.typedef.daddr_t = long
rbx.platform.typedef.dev_t = uint
rbx.platform.typedef.fd_mask = ulong
rbx.platform.typedef.fsblkcnt_t = ulong
rbx.platform.typedef.fsfilcnt_t = ulong
rbx.platform.typedef.gid_t = uint
rbx.platform.typedef.id_t = uint
rbx.platform.typedef.in_addr_t = uint
rbx.platform.typedef.ino_t = ulong
rbx.platform.typedef.int32_t = int
rbx.platform.typedef.int64_t = long
rbx.platform.typedef.int8_t = char
rbx.platform.typedef.int_fast16_t = long
rbx.platform.typedef.int_fast32_t = long
rbx.platform.typedef.int_fast64_t = long
rbx.platform.typedef.int_fast8_t = char
rbx.platform.typedef.int_least32_t = int
rbx.platform.typedef.int_least64_t = long
rbx.platform.typedef.int_least8_t = char
rbx.platform.typedef.intmax_t = long
rbx.platform.typedef.intptr_t = long
rbx.platform.typedef.key_t = long_long
rbx.platform.typedef.loff_t = long_long
rbx.platform.typedef.mode_t = uint
rbx.platform.typedef.nlink_t = ushort
rbx.platform.typedef.off_t = long
rbx.platform.typedef.pid_t = int
rbx.platform.typedef.ptrdiff_t = long
rbx.platform.typedef.register_t = long
rbx.platform.typedef.rlim_t = ulong
rbx.platform.typedef.sbintime_t = long
rbx.platform.typedef.sig_atomic_t = int
rbx.platform.typedef.sigset_t = ulong
rbx.platform.typedef.size_t = ulong
rbx.platform.typedef.socklen_t = int
rbx.platform.typedef.suseconds_t = long
rbx.platform.typedef.time_t = long
rbx.platform.typedef.timer_t = ulong
rbx.platform.typedef.u_char = uchar
rbx.platform.typedef.u_int = uint
rbx.platform.typedef.u_int32_t = uint
rbx.platform.typedef.u_int64_t = ulong
rbx.platform.typedef.u_int8_t = uchar
rbx.platform.typedef.u_long = ulong
rbx.platform.typedef.u_register_t = ulong
rbx.platform.typedef.u_short = ushort
rbx.platform.typedef.uid_t = uint
rbx.platform.typedef.uint = uint
rbx.platform.typedef.uint32_t = uint
rbx.platform.typedef.uint64_t = ulong
rbx.platform.typedef.uint8_t = uchar
rbx.platform.typedef.uint_fast16_t = ulong
rbx.platform.typedef.uint_fast32_t = ulong
rbx.platform.typedef.uint_fast64_t = ulong
rbx.platform.typedef.uint_fast8_t = uchar
rbx.platform.typedef.uint_least32_t = uint
rbx.platform.typedef.uint_least64_t = ulong
rbx.platform.typedef.uint_least8_t = uchar
rbx.platform.typedef.uintmax_t = ulong
rbx.platform.typedef.uintptr_t = ulong
rbx.platform.typedef.ulong = ulong
rbx.platform.typedef.useconds_t = ulong
rbx.platform.typedef.ushort = ushort
rbx.platform.typedef.vm_offset_t = ulong
rbx.platform.typedef.vm_size_t = ulong
rbx.platform.typedef.wint_t = uint
@@ -0,0 +1,128 @@
rbx.platform.typedef.__clock_t = int
rbx.platform.typedef.__clockid_t = int
rbx.platform.typedef.__cpuid_t = ulong
rbx.platform.typedef.__dev_t = int
rbx.platform.typedef.__fd_mask = int
rbx.platform.typedef.__fixpt_t = uint
rbx.platform.typedef.__gid_t = uint
rbx.platform.typedef.__id_t = uint
rbx.platform.typedef.__in_addr_t = uint
rbx.platform.typedef.__in_port_t = ushort
rbx.platform.typedef.__ino_t = uint
rbx.platform.typedef.__int16_t = short
rbx.platform.typedef.__int32_t = int
rbx.platform.typedef.__int64_t = long_long
rbx.platform.typedef.__int8_t = char
rbx.platform.typedef.__int_fast16_t = int
rbx.platform.typedef.__int_fast32_t = int
rbx.platform.typedef.__int_fast64_t = long_long
rbx.platform.typedef.__int_fast8_t = int
rbx.platform.typedef.__int_least16_t = short
rbx.platform.typedef.__int_least32_t = int
rbx.platform.typedef.__int_least64_t = long_long
rbx.platform.typedef.__int_least8_t = char
rbx.platform.typedef.__intmax_t = long_long
rbx.platform.typedef.__intptr_t = long
rbx.platform.typedef.__key_t = long
rbx.platform.typedef.__mode_t = uint
rbx.platform.typedef.__nlink_t = uint
rbx.platform.typedef.__off_t = long_long
rbx.platform.typedef.__paddr_t = ulong
rbx.platform.typedef.__pid_t = int
rbx.platform.typedef.__psize_t = ulong
rbx.platform.typedef.__ptrdiff_t = long
rbx.platform.typedef.__register_t = int
rbx.platform.typedef.__rlim_t = ulong_long
rbx.platform.typedef.__rune_t = int
rbx.platform.typedef.__sa_family_t = uchar
rbx.platform.typedef.__segsz_t = int
rbx.platform.typedef.__size_t = ulong
rbx.platform.typedef.__socklen_t = uint
rbx.platform.typedef.__ssize_t = long
rbx.platform.typedef.__suseconds_t = int
rbx.platform.typedef.__swblk_t = int
rbx.platform.typedef.__time_t = int
rbx.platform.typedef.__timer_t = int
rbx.platform.typedef.__uid_t = uint
rbx.platform.typedef.__uint16_t = ushort
rbx.platform.typedef.__uint32_t = uint
rbx.platform.typedef.__uint64_t = ulong_long
rbx.platform.typedef.__uint8_t = uchar
rbx.platform.typedef.__uint_fast16_t = uint
rbx.platform.typedef.__uint_fast32_t = uint
rbx.platform.typedef.__uint_fast64_t = ulong_long
rbx.platform.typedef.__uint_fast8_t = uint
rbx.platform.typedef.__uint_least16_t = ushort
rbx.platform.typedef.__uint_least32_t = uint
rbx.platform.typedef.__uint_least64_t = ulong_long
rbx.platform.typedef.__uint_least8_t = uchar
rbx.platform.typedef.__uintmax_t = ulong_long
rbx.platform.typedef.__uintptr_t = ulong
rbx.platform.typedef.__useconds_t = uint
rbx.platform.typedef.__vaddr_t = ulong
rbx.platform.typedef.__vsize_t = ulong
rbx.platform.typedef.__wchar_t = int
rbx.platform.typedef.__wctrans_t = pointer
rbx.platform.typedef.__wctype_t = pointer
rbx.platform.typedef.__wint_t = int
rbx.platform.typedef.caddr_t = string
rbx.platform.typedef.clock_t = int
rbx.platform.typedef.clockid_t = int
rbx.platform.typedef.cpuid_t = ulong
rbx.platform.typedef.daddr32_t = int
rbx.platform.typedef.daddr64_t = long_long
rbx.platform.typedef.daddr_t = int
rbx.platform.typedef.dev_t = int
rbx.platform.typedef.fixpt_t = uint
rbx.platform.typedef.gid_t = uint
rbx.platform.typedef.id_t = uint
rbx.platform.typedef.in_addr_t = uint
rbx.platform.typedef.in_port_t = ushort
rbx.platform.typedef.ino_t = uint
rbx.platform.typedef.int16_t = short
rbx.platform.typedef.int32_t = int
rbx.platform.typedef.int64_t = long_long
rbx.platform.typedef.int8_t = char
rbx.platform.typedef.intptr_t = long
rbx.platform.typedef.key_t = long
rbx.platform.typedef.mode_t = uint
rbx.platform.typedef.nlink_t = uint
rbx.platform.typedef.off_t = long_long
rbx.platform.typedef.paddr_t = ulong
rbx.platform.typedef.pid_t = int
rbx.platform.typedef.psize_t = ulong
rbx.platform.typedef.qaddr_t = pointer
rbx.platform.typedef.quad_t = long_long
rbx.platform.typedef.register_t = int
rbx.platform.typedef.rlim_t = ulong_long
rbx.platform.typedef.sa_family_t = uchar
rbx.platform.typedef.segsz_t = int
rbx.platform.typedef.size_t = ulong
rbx.platform.typedef.socklen_t = uint
rbx.platform.typedef.ssize_t = long
rbx.platform.typedef.suseconds_t = int
rbx.platform.typedef.swblk_t = int
rbx.platform.typedef.time_t = int
rbx.platform.typedef.timer_t = int
rbx.platform.typedef.u_char = uchar
rbx.platform.typedef.u_int = uint
rbx.platform.typedef.u_int16_t = ushort
rbx.platform.typedef.u_int32_t = uint
rbx.platform.typedef.u_int64_t = ulong_long
rbx.platform.typedef.u_int8_t = uchar
rbx.platform.typedef.u_long = ulong
rbx.platform.typedef.u_quad_t = ulong_long
rbx.platform.typedef.u_short = ushort
rbx.platform.typedef.uid_t = uint
rbx.platform.typedef.uint = uint
rbx.platform.typedef.uint16_t = ushort
rbx.platform.typedef.uint32_t = uint
rbx.platform.typedef.uint64_t = ulong_long
rbx.platform.typedef.uint8_t = uchar
rbx.platform.typedef.uintptr_t = ulong
rbx.platform.typedef.ulong = ulong
rbx.platform.typedef.unchar = uchar
rbx.platform.typedef.useconds_t = uint
rbx.platform.typedef.ushort = ushort
rbx.platform.typedef.vaddr_t = ulong
rbx.platform.typedef.vsize_t = ulong
@@ -0,0 +1,134 @@
rbx.platform.typedef.__blkcnt_t = long_long
rbx.platform.typedef.__blksize_t = int
rbx.platform.typedef.__clock_t = long_long
rbx.platform.typedef.__clockid_t = int
rbx.platform.typedef.__cpuid_t = ulong
rbx.platform.typedef.__dev_t = int
rbx.platform.typedef.__fd_mask = uint
rbx.platform.typedef.__fixpt_t = uint
rbx.platform.typedef.__fsblkcnt_t = ulong_long
rbx.platform.typedef.__fsfilcnt_t = ulong_long
rbx.platform.typedef.__gid_t = uint
rbx.platform.typedef.__id_t = uint
rbx.platform.typedef.__in_addr_t = uint
rbx.platform.typedef.__in_port_t = ushort
rbx.platform.typedef.__ino_t = ulong_long
rbx.platform.typedef.__int16_t = short
rbx.platform.typedef.__int32_t = int
rbx.platform.typedef.__int64_t = long_long
rbx.platform.typedef.__int8_t = char
rbx.platform.typedef.__int_fast16_t = int
rbx.platform.typedef.__int_fast32_t = int
rbx.platform.typedef.__int_fast64_t = long_long
rbx.platform.typedef.__int_fast8_t = int
rbx.platform.typedef.__int_least16_t = short
rbx.platform.typedef.__int_least32_t = int
rbx.platform.typedef.__int_least64_t = long_long
rbx.platform.typedef.__int_least8_t = char
rbx.platform.typedef.__intmax_t = long_long
rbx.platform.typedef.__intptr_t = long
rbx.platform.typedef.__key_t = long
rbx.platform.typedef.__mode_t = uint
rbx.platform.typedef.__nlink_t = uint
rbx.platform.typedef.__off_t = long_long
rbx.platform.typedef.__paddr_t = ulong
rbx.platform.typedef.__pid_t = int
rbx.platform.typedef.__psize_t = ulong
rbx.platform.typedef.__ptrdiff_t = long
rbx.platform.typedef.__register_t = long
rbx.platform.typedef.__rlim_t = ulong_long
rbx.platform.typedef.__rune_t = int
rbx.platform.typedef.__sa_family_t = uchar
rbx.platform.typedef.__segsz_t = int
rbx.platform.typedef.__size_t = ulong
rbx.platform.typedef.__socklen_t = uint
rbx.platform.typedef.__ssize_t = long
rbx.platform.typedef.__suseconds_t = long
rbx.platform.typedef.__swblk_t = int
rbx.platform.typedef.__time_t = long_long
rbx.platform.typedef.__timer_t = int
rbx.platform.typedef.__uid_t = uint
rbx.platform.typedef.__uint16_t = ushort
rbx.platform.typedef.__uint32_t = uint
rbx.platform.typedef.__uint64_t = ulong_long
rbx.platform.typedef.__uint8_t = uchar
rbx.platform.typedef.__uint_fast16_t = uint
rbx.platform.typedef.__uint_fast32_t = uint
rbx.platform.typedef.__uint_fast64_t = ulong_long
rbx.platform.typedef.__uint_fast8_t = uint
rbx.platform.typedef.__uint_least16_t = ushort
rbx.platform.typedef.__uint_least32_t = uint
rbx.platform.typedef.__uint_least64_t = ulong_long
rbx.platform.typedef.__uint_least8_t = uchar
rbx.platform.typedef.__uintmax_t = ulong_long
rbx.platform.typedef.__uintptr_t = ulong
rbx.platform.typedef.__useconds_t = uint
rbx.platform.typedef.__vaddr_t = ulong
rbx.platform.typedef.__vsize_t = ulong
rbx.platform.typedef.__wchar_t = int
rbx.platform.typedef.__wctrans_t = pointer
rbx.platform.typedef.__wctype_t = pointer
rbx.platform.typedef.__wint_t = int
rbx.platform.typedef.blkcnt_t = long_long
rbx.platform.typedef.blksize_t = int
rbx.platform.typedef.caddr_t = string
rbx.platform.typedef.clock_t = long_long
rbx.platform.typedef.clockid_t = int
rbx.platform.typedef.cpuid_t = ulong
rbx.platform.typedef.daddr32_t = int
rbx.platform.typedef.daddr_t = long_long
rbx.platform.typedef.dev_t = int
rbx.platform.typedef.fixpt_t = uint
rbx.platform.typedef.fsblkcnt_t = ulong_long
rbx.platform.typedef.fsfilcnt_t = ulong_long
rbx.platform.typedef.gid_t = uint
rbx.platform.typedef.id_t = uint
rbx.platform.typedef.in_addr_t = uint
rbx.platform.typedef.in_port_t = ushort
rbx.platform.typedef.ino_t = ulong_long
rbx.platform.typedef.int16_t = short
rbx.platform.typedef.int32_t = int
rbx.platform.typedef.int64_t = long_long
rbx.platform.typedef.int8_t = char
rbx.platform.typedef.key_t = long
rbx.platform.typedef.mode_t = uint
rbx.platform.typedef.nlink_t = uint
rbx.platform.typedef.off_t = long_long
rbx.platform.typedef.paddr_t = ulong
rbx.platform.typedef.pid_t = int
rbx.platform.typedef.psize_t = ulong
rbx.platform.typedef.qaddr_t = pointer
rbx.platform.typedef.quad_t = long_long
rbx.platform.typedef.register_t = long
rbx.platform.typedef.rlim_t = ulong_long
rbx.platform.typedef.sa_family_t = uchar
rbx.platform.typedef.segsz_t = int
rbx.platform.typedef.sigset_t = uint
rbx.platform.typedef.size_t = ulong
rbx.platform.typedef.socklen_t = uint
rbx.platform.typedef.ssize_t = long
rbx.platform.typedef.suseconds_t = long
rbx.platform.typedef.swblk_t = int
rbx.platform.typedef.time_t = long_long
rbx.platform.typedef.timer_t = int
rbx.platform.typedef.u_char = uchar
rbx.platform.typedef.u_int = uint
rbx.platform.typedef.u_int16_t = ushort
rbx.platform.typedef.u_int32_t = uint
rbx.platform.typedef.u_int64_t = ulong_long
rbx.platform.typedef.u_int8_t = uchar
rbx.platform.typedef.u_long = ulong
rbx.platform.typedef.u_quad_t = ulong_long
rbx.platform.typedef.u_short = ushort
rbx.platform.typedef.uid_t = uint
rbx.platform.typedef.uint = uint
rbx.platform.typedef.uint16_t = ushort
rbx.platform.typedef.uint32_t = uint
rbx.platform.typedef.uint64_t = ulong_long
rbx.platform.typedef.uint8_t = uchar
rbx.platform.typedef.ulong = ulong
rbx.platform.typedef.unchar = uchar
rbx.platform.typedef.useconds_t = uint
rbx.platform.typedef.ushort = ushort
rbx.platform.typedef.vaddr_t = ulong
rbx.platform.typedef.vsize_t = ulong
@@ -0,0 +1,122 @@
rbx.platform.typedef.*caddr_t = char
rbx.platform.typedef.blkcnt64_t = long
rbx.platform.typedef.blkcnt_t = long
rbx.platform.typedef.blksize_t = int
rbx.platform.typedef.clock_t = long
rbx.platform.typedef.clockid_t = int
rbx.platform.typedef.cnt_t = short
rbx.platform.typedef.cpu_flag_t = ushort
rbx.platform.typedef.ctid_t = int
rbx.platform.typedef.daddr_t = long
rbx.platform.typedef.datalink_id_t = uint
rbx.platform.typedef.dev_t = ulong
rbx.platform.typedef.diskaddr_t = ulong_long
rbx.platform.typedef.disp_lock_t = uchar
rbx.platform.typedef.fd_mask = long
rbx.platform.typedef.fds_mask = long
rbx.platform.typedef.fsblkcnt64_t = ulong
rbx.platform.typedef.fsblkcnt_t = ulong
rbx.platform.typedef.fsfilcnt64_t = ulong
rbx.platform.typedef.fsfilcnt_t = ulong
rbx.platform.typedef.gid_t = uint
rbx.platform.typedef.hrtime_t = long_long
rbx.platform.typedef.id_t = int
rbx.platform.typedef.in_addr_t = uint
rbx.platform.typedef.in_port_t = ushort
rbx.platform.typedef.index_t = short
rbx.platform.typedef.ino64_t = ulong
rbx.platform.typedef.ino_t = ulong
rbx.platform.typedef.int16_t = short
rbx.platform.typedef.int32_t = int
rbx.platform.typedef.int64_t = long
rbx.platform.typedef.int8_t = char
rbx.platform.typedef.int_fast16_t = int
rbx.platform.typedef.int_fast32_t = int
rbx.platform.typedef.int_fast64_t = long
rbx.platform.typedef.int_fast8_t = char
rbx.platform.typedef.int_least16_t = short
rbx.platform.typedef.int_least32_t = int
rbx.platform.typedef.int_least64_t = long
rbx.platform.typedef.int_least8_t = char
rbx.platform.typedef.intmax_t = long
rbx.platform.typedef.intptr_t = long
rbx.platform.typedef.ipaddr_t = uint
rbx.platform.typedef.k_fltset_t = uint
rbx.platform.typedef.key_t = int
rbx.platform.typedef.len_t = ulong_long
rbx.platform.typedef.lgrp_id_t = int
rbx.platform.typedef.lock_t = uchar
rbx.platform.typedef.longlong_t = long_long
rbx.platform.typedef.major_t = uint
rbx.platform.typedef.minor_t = uint
rbx.platform.typedef.mode_t = uint
rbx.platform.typedef.model_t = uint
rbx.platform.typedef.nfds_t = ulong
rbx.platform.typedef.nlink_t = uint
rbx.platform.typedef.o_dev_t = short
rbx.platform.typedef.o_gid_t = ushort
rbx.platform.typedef.o_ino_t = ushort
rbx.platform.typedef.o_mode_t = ushort
rbx.platform.typedef.o_nlink_t = short
rbx.platform.typedef.o_pid_t = short
rbx.platform.typedef.o_uid_t = ushort
rbx.platform.typedef.off64_t = long
rbx.platform.typedef.off_t = long
rbx.platform.typedef.offset_t = long_long
rbx.platform.typedef.pad64_t = long
rbx.platform.typedef.pfn_t = ulong
rbx.platform.typedef.pgcnt_t = ulong
rbx.platform.typedef.pid_t = int
rbx.platform.typedef.poolid_t = int
rbx.platform.typedef.pri_t = short
rbx.platform.typedef.projid_t = int
rbx.platform.typedef.pthread_key_t = uint
rbx.platform.typedef.pthread_t = uint
rbx.platform.typedef.ptrdiff_t = long
rbx.platform.typedef.rlim64_t = ulong_long
rbx.platform.typedef.rlim_t = ulong
rbx.platform.typedef.sa_family_t = ushort
rbx.platform.typedef.size_t = ulong
rbx.platform.typedef.socklen_t = uint
rbx.platform.typedef.spgcnt_t = long
rbx.platform.typedef.ssize_t = long
rbx.platform.typedef.suseconds_t = long
rbx.platform.typedef.sysid_t = short
rbx.platform.typedef.t_scalar_t = int
rbx.platform.typedef.t_uscalar_t = uint
rbx.platform.typedef.taskid_t = int
rbx.platform.typedef.time_t = long
rbx.platform.typedef.timer_t = int
rbx.platform.typedef.u_char = uchar
rbx.platform.typedef.u_int = uint
rbx.platform.typedef.u_long = ulong
rbx.platform.typedef.u_longlong_t = ulong_long
rbx.platform.typedef.u_offset_t = ulong_long
rbx.platform.typedef.u_short = ushort
rbx.platform.typedef.uchar_t = uchar
rbx.platform.typedef.uid_t = uint
rbx.platform.typedef.uint = uint
rbx.platform.typedef.uint16_t = ushort
rbx.platform.typedef.uint32_t = uint
rbx.platform.typedef.uint64_t = ulong
rbx.platform.typedef.uint8_t = uchar
rbx.platform.typedef.uint_fast16_t = uint
rbx.platform.typedef.uint_fast32_t = uint
rbx.platform.typedef.uint_fast64_t = ulong
rbx.platform.typedef.uint_fast8_t = uchar
rbx.platform.typedef.uint_least16_t = ushort
rbx.platform.typedef.uint_least32_t = uint
rbx.platform.typedef.uint_least64_t = ulong
rbx.platform.typedef.uint_least8_t = uchar
rbx.platform.typedef.uint_t = uint
rbx.platform.typedef.uintmax_t = ulong
rbx.platform.typedef.uintptr_t = ulong
rbx.platform.typedef.ulong = ulong
rbx.platform.typedef.ulong_t = ulong
rbx.platform.typedef.unchar = uchar
rbx.platform.typedef.upad64_t = ulong
rbx.platform.typedef.use_t = uchar
rbx.platform.typedef.useconds_t = uint
rbx.platform.typedef.ushort = ushort
rbx.platform.typedef.ushort_t = ushort
rbx.platform.typedef.zoneid_t = int
@@ -0,0 +1,52 @@
rbx.platform.typedef.__time32_t = long
rbx.platform.typedef.__time64_t = long_long
rbx.platform.typedef._dev_t = uint
rbx.platform.typedef._ino_t = ushort
rbx.platform.typedef._mode_t = ushort
rbx.platform.typedef._off64_t = long_long
rbx.platform.typedef._off_t = long
rbx.platform.typedef._pid_t = long_long
rbx.platform.typedef._sigset_t = ulong_long
rbx.platform.typedef.dev_t = uint
rbx.platform.typedef.errno_t = int
rbx.platform.typedef.ino_t = ushort
rbx.platform.typedef.int16_t = short
rbx.platform.typedef.int32_t = int
rbx.platform.typedef.int64_t = long_long
rbx.platform.typedef.int8_t = char
rbx.platform.typedef.int_fast16_t = short
rbx.platform.typedef.int_fast32_t = int
rbx.platform.typedef.int_fast64_t = long_long
rbx.platform.typedef.int_fast8_t = char
rbx.platform.typedef.int_least16_t = short
rbx.platform.typedef.int_least32_t = int
rbx.platform.typedef.int_least64_t = long_long
rbx.platform.typedef.int_least8_t = char
rbx.platform.typedef.intmax_t = long_long
rbx.platform.typedef.intptr_t = long_long
rbx.platform.typedef.mode_t = ushort
rbx.platform.typedef.off32_t = long
rbx.platform.typedef.off64_t = long_long
rbx.platform.typedef.off_t = long_long
rbx.platform.typedef.pid_t = long_long
rbx.platform.typedef.ptrdiff_t = long_long
rbx.platform.typedef.rsize_t = ulong_long
rbx.platform.typedef.size_t = ulong_long
rbx.platform.typedef.ssize_t = long_long
rbx.platform.typedef.time_t = long_long
rbx.platform.typedef.uint16_t = ushort
rbx.platform.typedef.uint64_t = ulong_long
rbx.platform.typedef.uint8_t = uchar
rbx.platform.typedef.uint_fast16_t = ushort
rbx.platform.typedef.uint_fast32_t = uint
rbx.platform.typedef.uint_fast64_t = ulong_long
rbx.platform.typedef.uint_fast8_t = uchar
rbx.platform.typedef.uint_least16_t = ushort
rbx.platform.typedef.uint_least64_t = ulong_long
rbx.platform.typedef.uint_least8_t = uchar
rbx.platform.typedef.uintmax_t = ulong_long
rbx.platform.typedef.uintptr_t = ulong_long
rbx.platform.typedef.useconds_t = uint
rbx.platform.typedef.wchar_t = ushort
rbx.platform.typedef.wctype_t = ushort
rbx.platform.typedef.wint_t = ushort
@@ -0,0 +1,167 @@
#
# Copyright (C) 2008, 2009 Wayne Meissner
# Copyright (c) 2007, 2008 Evan Phoenix
#
# This file is part of ruby-ffi.
#
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice, this
# list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# * Neither the name of the Ruby FFI project nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
require 'ffi/platform'
# NOTE: all method definitions in this file are conditional on
# whether they are not already defined. This is needed because
# some Ruby implementations (e.g., TruffleRuby) might already
# provide these methods due to using FFI internally, and we
# should not override them to avoid warnings.
module FFI
class Pointer
# Pointer size
SIZE = Platform::ADDRESS_SIZE / 8 unless const_defined?(:SIZE)
# Return the size of a pointer on the current platform, in bytes
# @return [Integer]
def self.size
SIZE
end unless respond_to?(:size)
# @param [nil,Integer] len length of string to return
# @return [String]
# Read pointer's contents as a string, or the first +len+ bytes of the
# equivalent string if +len+ is not +nil+.
def read_string(len=nil)
if len
return ''.b if len == 0
get_bytes(0, len)
else
get_string(0)
end
end unless method_defined?(:read_string)
# @param [Integer] len length of string to return
# @return [String]
# Read the first +len+ bytes of pointer's contents as a string.
#
# Same as:
# ptr.read_string(len) # with len not nil
def read_string_length(len)
get_bytes(0, len)
end unless method_defined?(:read_string_length)
# @return [String]
# Read pointer's contents as a string.
#
# Same as:
# ptr.read_string # with no len
def read_string_to_null
get_string(0)
end unless method_defined?(:read_string_to_null)
# @param [String] str string to write
# @param [Integer] len length of string to return
# @return [self]
# Write +len+ first bytes of +str+ in pointer's contents.
#
# Same as:
# ptr.write_string(str, len) # with len not nil
def write_string_length(str, len)
put_bytes(0, str, 0, len)
end unless method_defined?(:write_string_length)
# @param [String] str string to write
# @param [Integer] len length of string to return
# @return [self]
# Write +str+ in pointer's contents, or first +len+ bytes if
# +len+ is not +nil+.
def write_string(str, len=nil)
len = str.bytesize unless len
# Write the string data without NUL termination
put_bytes(0, str, 0, len)
end unless method_defined?(:write_string)
# @param [Type] type type of data to read from pointer's contents
# @param [Symbol] reader method to send to +self+ to read +type+
# @param [Integer] length
# @return [Array]
# Read an array of +type+ of length +length+.
# @example
# ptr.read_array_of_type(TYPE_UINT8, :read_uint8, 4) # -> [1, 2, 3, 4]
def read_array_of_type(type, reader, length)
ary = []
size = FFI.type_size(type)
tmp = self
length.times { |j|
ary << tmp.send(reader)
tmp += size unless j == length-1 # avoid OOB
}
ary
end unless method_defined?(:read_array_of_type)
# @param [Type] type type of data to write to pointer's contents
# @param [Symbol] writer method to send to +self+ to write +type+
# @param [Array] ary
# @return [self]
# Write +ary+ in pointer's contents as +type+.
# @example
# ptr.write_array_of_type(TYPE_UINT8, :put_uint8, [1, 2, 3 ,4])
def write_array_of_type(type, writer, ary)
size = FFI.type_size(type)
ary.each_with_index { |val, i|
break unless i < self.size
self.send(writer, i * size, val)
}
self
end unless method_defined?(:write_array_of_type)
# @return [self]
def to_ptr
self
end unless method_defined?(:to_ptr)
# @param [Symbol,Type] type of data to read
# @return [Object]
# Read pointer's contents as +type+
#
# Same as:
# ptr.get(type, 0)
def read(type)
get(type, 0)
end unless method_defined?(:read)
# @param [Symbol,Type] type of data to read
# @param [Object] value to write
# @return [nil]
# Write +value+ of type +type+ to pointer's content
#
# Same as:
# ptr.put(type, 0)
def write(type, value)
put(type, 0, value)
end unless method_defined?(:write)
end
end
@@ -0,0 +1,317 @@
#
# Copyright (C) 2008-2010 Wayne Meissner
# Copyright (C) 2008, 2009 Andrea Fazzi
# Copyright (C) 2008, 2009 Luc Heinrich
#
# This file is part of ruby-ffi.
#
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice, this
# list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# * Neither the name of the Ruby FFI project nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
require 'ffi/platform'
require 'ffi/struct_layout'
require 'ffi/struct_layout_builder'
require 'ffi/struct_by_reference'
module FFI
class Struct
# Get struct size
# @return [Integer]
def size
self.class.size
end
# @return [Integer] Struct alignment
def alignment
self.class.alignment
end
alias_method :align, :alignment
# (see FFI::StructLayout#offset_of)
def offset_of(name)
self.class.offset_of(name)
end
# (see FFI::StructLayout#members)
def members
self.class.members
end
# @return [Array]
# Get array of values from Struct fields.
def values
members.map { |m| self[m] }
end
# (see FFI::StructLayout#offsets)
def offsets
self.class.offsets
end
# Clear the struct content.
# @return [self]
def clear
pointer.clear
self
end
# Get {Pointer} to struct content.
# @return [AbstractMemory]
def to_ptr
pointer
end
# Get struct size
# @return [Integer]
def self.size
defined?(@layout) ? @layout.size : defined?(@size) ? @size : 0
end
# set struct size
# @param [Integer] size
# @return [size]
def self.size=(size)
raise ArgumentError, "Size already set" if defined?(@size) || defined?(@layout)
@size = size
end
# @return (see Struct#alignment)
def self.alignment
@layout.alignment
end
# (see FFI::Type#members)
def self.members
@layout.members
end
# (see FFI::StructLayout#offsets)
def self.offsets
@layout.offsets
end
# (see FFI::StructLayout#offset_of)
def self.offset_of(name)
@layout.offset_of(name)
end
def self.in
ptr(:in)
end
def self.out
ptr(:out)
end
def self.ptr(flags = :inout)
@ref_data_type ||= Type::Mapped.new(StructByReference.new(self))
end
def self.val
@val_data_type ||= StructByValue.new(self)
end
def self.by_value
self.val
end
def self.by_ref(flags = :inout)
self.ptr(flags)
end
class ManagedStructConverter < StructByReference
# @param [Struct] struct_class
def initialize(struct_class)
super(struct_class)
raise NoMethodError, "release() not implemented for class #{struct_class}" unless struct_class.respond_to? :release
@method = struct_class.method(:release)
end
# @param [Pointer] ptr
# @param [nil] ctx
# @return [Struct]
def from_native(ptr, ctx)
struct_class.new(AutoPointer.new(ptr, @method))
end
end
def self.auto_ptr
@managed_type ||= Type::Mapped.new(ManagedStructConverter.new(self))
end
class << self
public
# @return [StructLayout]
# @overload layout
# @return [StructLayout]
# Get struct layout.
# @overload layout(*spec)
# @param [Array<Symbol, Integer>,Array(Hash)] spec
# @return [StructLayout]
# Create struct layout from +spec+.
# @example Creating a layout from an array +spec+
# class MyStruct < Struct
# layout :field1, :int,
# :field2, :pointer,
# :field3, :string
# end
# @example Creating a layout from an array +spec+ with offset
# class MyStructWithOffset < Struct
# layout :field1, :int,
# :field2, :pointer, 6, # set offset to 6 for this field
# :field3, :string
# end
# @example Creating a layout from a hash +spec+
# class MyStructFromHash < Struct
# layout :field1 => :int,
# :field2 => :pointer,
# :field3 => :string
# end
# @example Creating a layout with pointers to functions
# class MyFunctionTable < Struct
# layout :function1, callback([:int, :int], :int),
# :function2, callback([:pointer], :void),
# :field3, :string
# end
def layout(*spec)
return @layout if spec.size == 0
warn "[DEPRECATION] Struct layout is already defined for class #{self.inspect}. Redefinition as in #{caller[0]} will be disallowed in ffi-2.0." if defined?(@layout)
builder = StructLayoutBuilder.new
builder.union = self < Union
builder.packed = @packed if defined?(@packed)
builder.alignment = @min_alignment if defined?(@min_alignment)
if spec[0].kind_of?(Hash)
hash_layout(builder, spec)
else
array_layout(builder, spec)
end
builder.size = @size if defined?(@size) && @size > builder.size
cspec = builder.build
@layout = cspec unless self == Struct
@size = cspec.size
return cspec
end
protected
def callback(params, ret)
mod = enclosing_module
ret_type = find_type(ret, mod)
if ret_type == Type::STRING
raise TypeError, ":string is not allowed as return type of callbacks"
end
FFI::CallbackInfo.new(ret_type, params.map { |e| find_type(e, mod) })
end
def packed(packed = 1)
@packed = packed
end
alias :pack :packed
def aligned(alignment = 1)
@min_alignment = alignment
end
alias :align :aligned
def enclosing_module
begin
mod = self.name.split("::")[0..-2].inject(Object) { |obj, c| obj.const_get(c) }
if mod.respond_to?(:find_type) && (mod.is_a?(FFI::Library) || mod < FFI::Struct)
mod
end
rescue Exception
nil
end
end
def find_field_type(type, mod = enclosing_module)
if type.kind_of?(Class) && type < Struct
FFI::Type::Struct.new(type)
elsif type.kind_of?(Class) && type < FFI::StructLayout::Field
type
elsif type.kind_of?(::Array)
FFI::Type::Array.new(find_field_type(type[0]), type[1])
else
find_type(type, mod)
end
end
def find_type(type, mod = enclosing_module)
if mod
mod.find_type(type)
end || FFI.find_type(type)
end
private
# @param [StructLayoutBuilder] builder
# @param [Hash] spec
# @return [builder]
# Add hash +spec+ to +builder+.
def hash_layout(builder, spec)
spec[0].each do |name, type|
builder.add name, find_field_type(type), nil
end
end
# @param [StructLayoutBuilder] builder
# @param [Array<Symbol, Integer>] spec
# @return [builder]
# Add array +spec+ to +builder+.
def array_layout(builder, spec)
i = 0
while i < spec.size
name, type = spec[i, 2]
i += 2
# If the next param is a Integer, it specifies the offset
if spec[i].kind_of?(Integer)
offset = spec[i]
i += 1
else
offset = nil
end
builder.add name, find_field_type(type), offset
end
end
end
end
end
@@ -0,0 +1,72 @@
#
# Copyright (C) 2010 Wayne Meissner
#
# This file is part of ruby-ffi.
#
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice, this
# list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# * Neither the name of the Ruby FFI project nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.#
module FFI
# This class includes the {FFI::DataConverter} module.
class StructByReference
include DataConverter
attr_reader :struct_class
# @param [Struct] struct_class
def initialize(struct_class)
unless Class === struct_class and struct_class < FFI::Struct
raise TypeError, 'wrong type (expected subclass of FFI::Struct)'
end
@struct_class = struct_class
end
# Always get {FFI::Type}::POINTER.
def native_type(_type = nil)
FFI::Type::POINTER
end
# @param [nil, Struct] value
# @param [nil] ctx
# @return [AbstractMemory] Pointer on +value+.
def to_native(value, ctx)
return Pointer::NULL if value.nil?
unless @struct_class === value
raise TypeError, "wrong argument type #{value.class} (expected #{@struct_class})"
end
value.pointer
end
# @param [AbstractMemory] value
# @param [nil] ctx
# @return [Struct]
# Create a struct from content of memory +value+.
def from_native(value, ctx)
@struct_class.new(value)
end
end
end
@@ -0,0 +1,96 @@
#
# Copyright (C) 2008-2010 Wayne Meissner
# Copyright (C) 2008, 2009 Andrea Fazzi
# Copyright (C) 2008, 2009 Luc Heinrich
#
# This file is part of ruby-ffi.
#
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice, this
# list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# * Neither the name of the Ruby FFI project nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
module FFI
class StructLayout
# @return [Array<Array(Symbol, Integer)>
# Get an array of tuples (field name, offset of the field).
def offsets
members.map { |m| [ m, self[m].offset ] }
end
# @return [Integer]
# Get the offset of a field.
def offset_of(field_name)
self[field_name].offset
end
# An enum {Field} in a {StructLayout}.
class Enum < Field
# @param [AbstractMemory] ptr pointer on a {Struct}
# @return [Object]
# Get an object of type {#type} from memory pointed by +ptr+.
def get(ptr)
type.find(ptr.get_int(offset))
end
# @param [AbstractMemory] ptr pointer on a {Struct}
# @param value
# @return [nil]
# Set +value+ into memory pointed by +ptr+.
def put(ptr, value)
ptr.put_int(offset, type.find(value))
end
end
class InnerStruct < Field
def get(ptr)
type.struct_class.new(ptr.slice(self.offset, self.size))
end
def put(ptr, value)
raise TypeError, "wrong value type (expected #{type.struct_class})" unless value.is_a?(type.struct_class)
ptr.slice(self.offset, self.size).__copy_from__(value.pointer, self.size)
end
end
class Mapped < Field
def initialize(name, offset, type, orig_field)
@orig_field = orig_field
super(name, offset, type)
end
def get(ptr)
type.from_native(@orig_field.get(ptr), nil)
end
def put(ptr, value)
@orig_field.put(ptr, type.to_native(value, nil))
end
end
end
end
@@ -0,0 +1,227 @@
#
# Copyright (C) 2008-2010 Wayne Meissner
#
# This file is part of ruby-ffi.
#
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice, this
# list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# * Neither the name of the Ruby FFI project nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
module FFI
# Build a {StructLayout struct layout}.
class StructLayoutBuilder
attr_reader :size
attr_reader :alignment
def initialize
@size = 0
@alignment = 1
@min_alignment = 1
@packed = false
@union = false
@fields = Array.new
end
# Set size attribute with +size+ only if +size+ is greater than attribute value.
# @param [Integer] size
def size=(size)
@size = size if size > @size
end
# Set alignment attribute with +align+ only if it is greater than attribute value.
# @param [Integer] align
def alignment=(align)
@alignment = align if align > @alignment
@min_alignment = align
end
# Set union attribute.
# Set to +true+ to build a {Union} instead of a {Struct}.
# @param [Boolean] is_union
# @return [is_union]
def union=(is_union)
@union = is_union
end
# Building a {Union} or a {Struct} ?
#
# @return [Boolean]
#
def union?
@union
end
# Set packed attribute
# @overload packed=(packed) Set alignment and packed attributes to
# +packed+.
#
# @param [Integer] packed
#
# @return [packed]
# @overload packed=(packed) Set packed attribute.
# @param packed
#
# @return [0,1]
#
def packed=(packed)
if packed.is_a?(0.class)
@alignment = packed
@packed = packed
else
@packed = packed ? 1 : 0
end
end
# List of number types
NUMBER_TYPES = [
Type::INT8,
Type::UINT8,
Type::INT16,
Type::UINT16,
Type::INT32,
Type::UINT32,
Type::LONG,
Type::ULONG,
Type::INT64,
Type::UINT64,
Type::FLOAT32,
Type::FLOAT64,
Type::LONGDOUBLE,
Type::BOOL,
].freeze
# @param [String, Symbol] name name of the field
# @param [Array, DataConverter, Struct, StructLayout::Field, Symbol, Type] type type of the field
# @param [Integer, nil] offset
# @return [self]
# Add a field to the builder.
# @note Setting +offset+ to +nil+ or +-1+ is equivalent to +0+.
def add(name, type, offset = nil)
if offset.nil? || offset == -1
offset = @union ? 0 : align(@size, @packed ? [ @packed, type.alignment ].min : [ @min_alignment, type.alignment ].max)
end
#
# If a FFI::Type type was passed in as the field arg, try and convert to a StructLayout::Field instance
#
field = type.is_a?(StructLayout::Field) ? type : field_for_type(name, offset, type)
@fields << field
@alignment = [ @alignment, field.alignment ].max unless @packed
@size = [ @size, field.size + (@union ? 0 : field.offset) ].max
return self
end
# @param (see #add)
# @return (see #add)
# Same as {#add}.
# @see #add
def add_field(name, type, offset = nil)
add(name, type, offset)
end
# @param (see #add)
# @return (see #add)
# Add a struct as a field to the builder.
def add_struct(name, type, offset = nil)
add(name, Type::Struct.new(type), offset)
end
# @param name (see #add)
# @param type (see #add)
# @param [Integer] count array length
# @param offset (see #add)
# @return (see #add)
# Add an array as a field to the builder.
def add_array(name, type, count, offset = nil)
add(name, Type::Array.new(type, count), offset)
end
# @return [StructLayout]
# Build and return the struct layout.
def build
# Add tail padding if the struct is not packed
size = @packed ? @size : align(@size, @alignment)
layout = StructLayout.new(@fields, size, @alignment)
layout.__union! if @union
layout
end
private
# @param [Integer] offset
# @param [Integer] align
# @return [Integer]
def align(offset, align)
align + ((offset - 1) & ~(align - 1));
end
# @param (see #add)
# @return [StructLayout::Field]
def field_for_type(name, offset, type)
field_class = case
when type.is_a?(Type::Function)
StructLayout::Function
when type.is_a?(Type::Struct)
StructLayout::InnerStruct
when type.is_a?(Type::Array)
StructLayout::Array
when type.is_a?(FFI::Enum)
StructLayout::Enum
when NUMBER_TYPES.include?(type)
StructLayout::Number
when type == Type::POINTER
StructLayout::Pointer
when type == Type::STRING
StructLayout::String
when type.is_a?(Class) && type < StructLayout::Field
type
when type.is_a?(DataConverter)
return StructLayout::Mapped.new(name, offset, Type::Mapped.new(type), field_for_type(name, offset, type.native_type))
when type.is_a?(Type::Mapped)
return StructLayout::Mapped.new(name, offset, type, field_for_type(name, offset, type.native_type))
else
raise TypeError, "invalid struct field type #{type.inspect}"
end
field_class.new(name, offset, type)
end
end
end
@@ -0,0 +1,232 @@
require 'tempfile'
require 'open3'
module FFI
# ConstGenerator turns C constants into ruby values.
#
# @example a simple example for stdio
# require 'ffi/tools/const_generator'
# cg = FFI::ConstGenerator.new('stdio') do |gen|
# gen.const(:SEEK_SET)
# gen.const('SEEK_CUR')
# gen.const('seek_end') # this constant does not exist
# end # #calculate called automatically at the end of the block
#
# cg['SEEK_SET'] # => 0
# cg['SEEK_CUR'] # => 1
# cg['seek_end'] # => nil
# cg.to_ruby # => "SEEK_SET = 0\nSEEK_CUR = 1\n# seek_end not available"
class ConstGenerator
@options = {}
attr_reader :constants
# Creates a new constant generator that uses +prefix+ as a name, and an
# options hash.
#
# The only option is +:required+, which if set to +true+ raises an error if a
# constant you have requested was not found.
#
# @param [#to_s] prefix
# @param [Hash] options
# @return
# @option options [Boolean] :required
# @overload initialize(prefix, options)
# @overload initialize(prefix, options) { |gen| ... }
# @yieldparam [ConstGenerator] gen new generator is passed to the block
# When passed a block, {#calculate} is automatically called at the end of
# the block, otherwise you must call it yourself.
def initialize(prefix = nil, options = {})
@includes = ['stdio.h', 'stddef.h']
@constants = {}
@prefix = prefix
@required = options[:required]
@options = options
if block_given? then
yield self
calculate self.class.options.merge(options)
end
end
# Set class options
# These options are merged with {#initialize} options when it is called with a block.
# @param [Hash] options
# @return [Hash] class options
def self.options=(options)
@options = options
end
# Get class options.
# @return [Hash] class options
def self.options
@options
end
# @param [String] name
# @return constant value (converted if a +converter+ was defined).
# Access a constant by name.
def [](name)
@constants[name].converted_value
end
# Request the value for C constant +name+.
#
# @param [#to_s] name C constant name
# @param [String] format a printf format string to print the value out
# @param [String] cast a C cast for the value
# @param ruby_name alternate ruby name for {#to_ruby}
#
# @overload const(name, format=nil, cast='', ruby_name=nil, converter=nil)
# +converter+ is a Method or a Proc.
# @param [#call] converter convert the value from a string to the appropriate
# type for {#to_ruby}.
# @overload const(name, format=nil, cast='', ruby_name=nil) { |value| ... }
# Use a converter block. This block convert the value from a string to the
# appropriate type for {#to_ruby}.
# @yieldparam value constant value
def const(name, format = nil, cast = '', ruby_name = nil, converter = nil,
&converter_proc)
format ||= '%d'
cast ||= ''
if converter_proc and converter then
raise ArgumentError, "Supply only converter or converter block"
end
converter = converter_proc if converter.nil?
const = Constant.new name, format, cast, ruby_name, converter
@constants[name.to_s] = const
return const
end
# Calculate constants values.
# @param [Hash] options
# @option options [String] :cppflags flags for C compiler
# @return [nil]
# @raise if a constant is missing and +:required+ was set to +true+ (see {#initialize})
def calculate(options = {})
binary_path = nil
Tempfile.open("#{@prefix}.const_generator") do |f|
binary_path = f.path + ".bin"
@includes.each do |inc|
f.puts "#include <#{inc}>"
end
f.puts "\nint main(int argc, char **argv)\n{"
@constants.each_value do |const|
f.puts <<-EOF
#ifdef #{const.name}
printf("#{const.name} #{const.format}\\n", #{const.cast}#{const.name});
#endif
EOF
end
f.puts "\n\treturn 0;\n}"
f.flush
cc = ENV['CC'] || 'gcc'
output = `#{cc} #{options[:cppflags]} -D_DARWIN_USE_64_BIT_INODE -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -x c -Wall -Werror #{f.path} -o #{binary_path} 2>&1`
unless $?.success? then
output = output.split("\n").map { |l| "\t#{l}" }.join "\n"
raise "Compilation error generating constants #{@prefix}:\n#{output}"
end
end
output = `#{binary_path}`
File.unlink(binary_path + (FFI::Platform.windows? ? ".exe" : ""))
output.each_line do |line|
line =~ /^(\S+)\s(.*)$/
const = @constants[$1]
const.value = $2
end
missing_constants = @constants.select do |name, constant|
constant.value.nil?
end.map { |name,| name }
if @required and not missing_constants.empty? then
raise "Missing required constants for #{@prefix}: #{missing_constants.join ', '}"
end
end
# Dump constants to +io+.
# @param [#puts] io
# @return [nil]
def dump_constants(io)
@constants.each do |name, constant|
name = [@prefix, name].join '.' if @prefix
io.puts "#{name} = #{constant.converted_value}"
end
end
# Outputs values for discovered constants. If the constant's value was
# not discovered it is not omitted.
# @return [String]
def to_ruby
@constants.sort_by { |name,| name }.map do |name, constant|
if constant.value.nil? then
"# #{name} not available"
else
constant.to_ruby
end
end.join "\n"
end
# Add additional C include file(s) to calculate constants from.
# @note +stdio.h+ and +stddef.h+ automatically included
# @param [List<String>, Array<String>] i include file(s)
# @return [Array<String>] array of include files
def include(*i)
@includes |= i.flatten
end
end
# This class hold constants for {ConstGenerator}
class ConstGenerator::Constant
attr_reader :name, :format, :cast
attr_accessor :value
# @param [#to_s] name
# @param [String] format a printf format string to print the value out
# @param [String] cast a C cast for the value
# @param ruby_name alternate ruby name for {#to_ruby}
# @param [#call] converter convert the value from a string to the appropriate
# type for {#to_ruby}.
def initialize(name, format, cast, ruby_name = nil, converter=nil)
@name = name
@format = format
@cast = cast
@ruby_name = ruby_name
@converter = converter
@value = nil
end
# Return constant value (converted if a +converter+ was defined).
# @return constant value.
def converted_value
if @converter
@converter.call(@value)
else
@value
end
end
# get constant ruby name
# @return [String]
def ruby_name
@ruby_name || @name
end
# Get an evaluable string from constant.
# @return [String]
def to_ruby
"#{ruby_name} = #{converted_value}"
end
end
end
@@ -0,0 +1,105 @@
require 'ffi/tools/struct_generator'
require 'ffi/tools/const_generator'
module FFI
##
# Generate files with C structs for FFI::Struct and C constants.
#
# == A simple example
#
# In file +zlib.rb.ffi+:
# module Zlib
# @@@
# constants do |c|
# c.include "zlib.h"
# c.const :ZLIB_VERNUM
# end
# @@@
#
# class ZStream < FFI::Struct
#
# struct do |s|
# s.name "struct z_stream_s"
# s.include "zlib.h"
#
# s.field :next_in, :pointer
# s.field :avail_in, :uint
# s.field :total_in, :ulong
# end
# @@@
# end
# end
#
# Translate the file:
# require "ffi/tools/generator"
# FFI::Generator.new "zlib.rb.ffi", "zlib.rb"
#
# Generates the file +zlib.rb+ with constant values and offsets:
# module Zlib
# ZLIB_VERNUM = 4784
#
# class ZStream < FFI::Struct
# layout :next_in, :pointer, 0,
# :avail_in, :uint, 8,
# :total_in, :ulong, 16
# end
#
# @see FFI::Generator::Task for easy integration in a Rakefile
class Generator
def initialize(ffi_name, rb_name, options = {})
@ffi_name = ffi_name
@rb_name = rb_name
@options = options
@name = File.basename rb_name, '.rb'
file = File.read @ffi_name
new_file = file.gsub(/^( *)@@@(.*?)@@@/m) do
@constants = []
@structs = []
indent = $1
original_lines = $2.count "\n"
instance_eval $2, @ffi_name, $`.count("\n")
new_lines = []
@constants.each { |c| new_lines << c.to_ruby }
@structs.each { |s| new_lines << s.generate_layout }
new_lines = new_lines.join("\n").split "\n" # expand multiline blocks
new_lines = new_lines.map { |line| indent + line }
padding = original_lines - new_lines.length
new_lines += [nil] * padding if padding >= 0
new_lines.join "\n"
end
open @rb_name, 'w' do |f|
f.puts "# This file is generated from `#{@ffi_name}'. Do not edit."
f.puts
f.puts new_file
end
end
def constants(options = {}, &block)
@constants << FFI::ConstGenerator.new(@name, @options.merge(options), &block)
end
def struct(options = {}, &block)
@structs << FFI::StructGenerator.new(@name, @options.merge(options), &block)
end
##
# Utility converter for constants
def to_s
proc { |obj| obj.to_s.inspect }
end
end
end
@@ -0,0 +1,32 @@
require 'ffi/tools/generator'
require 'rake'
require 'rake/tasklib'
##
# Add Rake tasks that generate files with C structs for FFI::Struct and C constants.
#
# @example a simple example for your Rakefile
# require "ffi/tools/generator_task"
# # Add a task to generate my_object.rb out of my_object.rb.ffi
# FFI::Generator::Task.new ["my_object.rb"], cflags: "-I/usr/local/mylibrary"
#
# The generated files are also added to the 'clear' task.
#
# @see FFI::Generator for a description of the file content
class FFI::Generator::Task < Rake::TaskLib
def initialize(rb_names, options={})
task :clean do rm_f rb_names end
rb_names.each do |rb_name|
ffi_name = "#{rb_name}.ffi"
file rb_name => ffi_name do |t|
puts "Generating #{rb_name}..." if Rake.application.options.trace
FFI::Generator.new ffi_name, rb_name, options
end
end
end
end
@@ -0,0 +1,195 @@
require 'tempfile'
module FFI
##
# Generates an FFI Struct layout.
#
# Given the @@@ portion in:
#
# class Zlib::ZStream < FFI::Struct
# @@@
# name "struct z_stream_s"
# include "zlib.h"
#
# field :next_in, :pointer
# field :avail_in, :uint
# field :total_in, :ulong
#
# # ...
# @@@
# end
#
# StructGenerator will create the layout:
#
# layout :next_in, :pointer, 0,
# :avail_in, :uint, 4,
# :total_in, :ulong, 8,
# # ...
#
# StructGenerator does its best to pad the layout it produces to preserve
# line numbers. Place the struct definition as close to the top of the file
# for best results.
class StructGenerator
@options = {}
attr_accessor :size
attr_reader :fields
def initialize(name, options = {})
@name = name
@struct_name = nil
@includes = []
@fields = []
@found = false
@size = nil
if block_given? then
yield self
calculate self.class.options.merge(options)
end
end
def self.options=(options)
@options = options
end
def self.options
@options
end
def calculate(options = {})
binary = File.join Dir.tmpdir, "rb_struct_gen_bin_#{Process.pid}"
raise "struct name not set" if @struct_name.nil?
Tempfile.open("#{@name}.struct_generator") do |f|
f.puts "#include <stdio.h>"
@includes.each do |inc|
f.puts "#include <#{inc}>"
end
f.puts "#include <stddef.h>\n\n"
f.puts "int main(int argc, char **argv)\n{"
f.puts " #{@struct_name} s;"
f.puts %[ printf("sizeof(#{@struct_name}) %u\\n", (unsigned int) sizeof(#{@struct_name}));]
@fields.each do |field|
f.puts <<-EOF
printf("#{field.name} %u %u\\n", (unsigned int) offsetof(#{@struct_name}, #{field.name}),
(unsigned int) sizeof(s.#{field.name}));
EOF
end
f.puts "\n return 0;\n}"
f.flush
cc = ENV['CC'] || 'gcc'
output = `#{cc} #{options[:cppflags]} #{options[:cflags]} -D_DARWIN_USE_64_BIT_INODE -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -x c -Wall -Werror #{f.path} -o #{binary} 2>&1`
unless $?.success? then
@found = false
output = output.split("\n").map { |l| "\t#{l}" }.join "\n"
raise "Compilation error generating struct #{@name} (#{@struct_name}):\n#{output}"
end
end
output = `#{binary}`.split "\n"
File.unlink(binary + (FFI::Platform.windows? ? ".exe" : ""))
sizeof = output.shift
unless @size
m = /\s*sizeof\([^)]+\) (\d+)/.match sizeof
@size = m[1]
end
line_no = 0
output.each do |line|
md = line.match(/.+ (\d+) (\d+)/)
@fields[line_no].offset = md[1].to_i
@fields[line_no].size = md[2].to_i
line_no += 1
end
@found = true
end
def field(name, type=nil)
field = Field.new(name, type)
@fields << field
return field
end
def found?
@found
end
def dump_config(io)
io.puts "rbx.platform.#{@name}.sizeof = #{@size}"
@fields.each { |field| io.puts field.to_config(@name) }
end
def generate_layout
buf = ""
@fields.each_with_index do |field, i|
if buf.empty?
buf << "layout :#{field.name}, :#{field.type}, #{field.offset}"
else
buf << " :#{field.name}, :#{field.type}, #{field.offset}"
end
if i < @fields.length - 1
buf << ",\n"
end
end
buf
end
def get_field(name)
@fields.find { |f| name == f.name }
end
def include(i)
@includes << i
end
def name(n)
@struct_name = n
end
end
##
# A field in a Struct.
class StructGenerator::Field
attr_reader :name
attr_reader :type
attr_reader :offset
attr_accessor :size
def initialize(name, type)
@name = name
@type = type
@offset = nil
@size = nil
end
def offset=(o)
@offset = o
end
def to_config(name)
buf = []
buf << "rbx.platform.#{name}.#{@name}.offset = #{@offset}"
buf << "rbx.platform.#{name}.#{@name}.size = #{@size}"
buf << "rbx.platform.#{name}.#{@name}.type = #{@type}" if @type
buf
end
end
end

Some files were not shown because too many files have changed in this diff Show More