ffi 1.15.4.pre1-java → 1.16.0-java

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/lib/ffi/library.rb CHANGED
@@ -28,10 +28,12 @@
28
28
  # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29
29
  # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.#
30
30
 
31
+ require 'ffi/dynamic_library'
32
+
31
33
  module FFI
32
- CURRENT_PROCESS = USE_THIS_PROCESS_AS_LIBRARY = Object.new
34
+ CURRENT_PROCESS = USE_THIS_PROCESS_AS_LIBRARY = FFI.make_shareable(Object.new)
33
35
 
34
- # @param [#to_s] lib library name
36
+ # @param [String, FFI::LibraryPath] lib library name or LibraryPath object
35
37
  # @return [String] library name formatted for current platform
36
38
  # Transform a generic library name to a platform library name
37
39
  # @example
@@ -43,15 +45,7 @@ module FFI
43
45
  # FFI.map_library_name 'jpeg' # -> "jpeg.dll"
44
46
  def self.map_library_name(lib)
45
47
  # Mangle the library name to reflect the native library naming conventions
46
- lib = Library::LIBC if lib == 'c'
47
-
48
- if lib && File.basename(lib) == lib
49
- lib = Platform::LIBPREFIX + lib unless lib =~ /^#{Platform::LIBPREFIX}/
50
- r = Platform::IS_WINDOWS || Platform::IS_MAC ? "\\.#{Platform::LIBSUFFIX}$" : "\\.so($|\\.[1234567890]+)"
51
- lib += ".#{Platform::LIBSUFFIX}" unless lib =~ /#{r}/
52
- end
53
-
54
- lib
48
+ LibraryPath.wrap(lib).to_s
55
49
  end
56
50
 
57
51
  # Exception raised when a function is not found in libraries
@@ -84,7 +78,7 @@ module FFI
84
78
  # @raise {RuntimeError} if +mod+ is not a Module
85
79
  # Test if extended object is a Module. If not, raise RuntimeError.
86
80
  def self.extended(mod)
87
- raise RuntimeError.new("must only be extended by module") unless mod.kind_of?(Module)
81
+ raise RuntimeError.new("must only be extended by module") unless mod.kind_of?(::Module)
88
82
  end
89
83
 
90
84
 
@@ -95,62 +89,11 @@ module FFI
95
89
  def ffi_lib(*names)
96
90
  raise LoadError.new("library names list must not be empty") if names.empty?
97
91
 
98
- lib_flags = defined?(@ffi_lib_flags) ? @ffi_lib_flags : FFI::DynamicLibrary::RTLD_LAZY | FFI::DynamicLibrary::RTLD_LOCAL
99
- ffi_libs = names.map do |name|
92
+ lib_flags = defined?(@ffi_lib_flags) && @ffi_lib_flags
100
93
 
101
- if name == FFI::CURRENT_PROCESS
102
- FFI::DynamicLibrary.open(nil, FFI::DynamicLibrary::RTLD_LAZY | FFI::DynamicLibrary::RTLD_LOCAL)
103
-
104
- else
105
- libnames = (name.is_a?(::Array) ? name : [ name ]).map(&:to_s).map { |n| [ n, FFI.map_library_name(n) ].uniq }.flatten.compact
106
- lib = nil
107
- errors = {}
108
-
109
- libnames.each do |libname|
110
- begin
111
- orig = libname
112
- lib = FFI::DynamicLibrary.open(libname, lib_flags)
113
- break if lib
114
-
115
- rescue Exception => ex
116
- ldscript = false
117
- if ex.message =~ /(([^ \t()])+\.so([^ \t:()])*):([ \t])*(invalid ELF header|file too short|invalid file format)/
118
- if File.binread($1) =~ /(?:GROUP|INPUT) *\( *([^ \)]+)/
119
- libname = $1
120
- ldscript = true
121
- end
122
- end
123
-
124
- if ldscript
125
- retry
126
- else
127
- # TODO better library lookup logic
128
- unless libname.start_with?("/") || FFI::Platform.windows?
129
- path = ['/usr/lib/','/usr/local/lib/','/opt/local/lib/', '/opt/homebrew/lib/'].find do |pth|
130
- File.exist?(pth + libname)
131
- end
132
- if path
133
- libname = path + libname
134
- retry
135
- end
136
- end
137
-
138
- libr = (orig == libname ? orig : "#{orig} #{libname}")
139
- errors[libr] = ex
140
- end
141
- end
142
- end
143
-
144
- if lib.nil?
145
- raise LoadError.new(errors.values.join(".\n"))
146
- end
147
-
148
- # return the found lib
149
- lib
150
- end
94
+ @ffi_libs = names.map do |name|
95
+ FFI::DynamicLibrary.send(:load_library, name, lib_flags)
151
96
  end
152
-
153
- @ffi_libs = ffi_libs
154
97
  end
155
98
 
156
99
  # Set the calling convention for {#attach_function} and {#callback}
@@ -258,7 +201,7 @@ module FFI
258
201
  end
259
202
  raise LoadError unless function
260
203
 
261
- invokers << if arg_types.length > 0 && arg_types[arg_types.length - 1] == FFI::NativeType::VARARGS
204
+ invokers << if arg_types[-1] == FFI::NativeType::VARARGS
262
205
  VariadicInvoker.new(function, arg_types, find_type(ret_type), options)
263
206
 
264
207
  else
@@ -330,6 +273,7 @@ module FFI
330
273
  # Attach C variable +cname+ to this module.
331
274
  def attach_variable(mname, a1, a2 = nil)
332
275
  cname, type = a2 ? [ a1, a2 ] : [ mname.to_s, a1 ]
276
+ mname = mname.to_sym
333
277
  address = nil
334
278
  ffi_libraries.each do |lib|
335
279
  begin
@@ -344,9 +288,10 @@ module FFI
344
288
  # If it is a global struct, just attach directly to the pointer
345
289
  s = s = type.new(address) # Assigning twice to suppress unused variable warning
346
290
  self.module_eval <<-code, __FILE__, __LINE__
347
- @@ffi_gvar_#{mname} = s
291
+ @ffi_gsvars = {} unless defined?(@ffi_gsvars)
292
+ @ffi_gsvars[#{mname.inspect}] = s
348
293
  def self.#{mname}
349
- @@ffi_gvar_#{mname}
294
+ @ffi_gsvars[#{mname.inspect}]
350
295
  end
351
296
  code
352
297
 
@@ -358,12 +303,13 @@ module FFI
358
303
  # Attach to this module as mname/mname=
359
304
  #
360
305
  self.module_eval <<-code, __FILE__, __LINE__
361
- @@ffi_gvar_#{mname} = s
306
+ @ffi_gvars = {} unless defined?(@ffi_gvars)
307
+ @ffi_gvars[#{mname.inspect}] = s
362
308
  def self.#{mname}
363
- @@ffi_gvar_#{mname}[:gvar]
309
+ @ffi_gvars[#{mname.inspect}][:gvar]
364
310
  end
365
311
  def self.#{mname}=(value)
366
- @@ffi_gvar_#{mname}[:gvar] = value
312
+ @ffi_gvars[#{mname.inspect}][:gvar] = value
367
313
  end
368
314
  code
369
315
 
@@ -588,5 +534,43 @@ module FFI
588
534
 
589
535
  end || FFI.find_type(t)
590
536
  end
537
+
538
+ # Retrieve all attached functions and their function signature
539
+ #
540
+ # This method returns a Hash of method names of attached functions connected by #attach_function and the corresponding function type.
541
+ # The function type responds to #return_type and #param_types which return the FFI types of the function signature.
542
+ #
543
+ # @return [Hash< Symbol => [FFI::Function, FFI::VariadicInvoker] >]
544
+ def attached_functions
545
+ @ffi_functions || {}
546
+ end
547
+
548
+ # Retrieve all attached variables and their type
549
+ #
550
+ # This method returns a Hash of variable names and the corresponding type or variables connected by #attach_variable .
551
+ #
552
+ # @return [Hash< Symbol => ffi_type >]
553
+ def attached_variables
554
+ (
555
+ (@ffi_gsvars || {}).map do |name, gvar|
556
+ [name, gvar.class]
557
+ end +
558
+ (@ffi_gvars || {}).map do |name, gvar|
559
+ [name, gvar.layout[:gvar].type]
560
+ end
561
+ ).to_h
562
+ end
563
+
564
+ # Freeze all definitions of the module
565
+ #
566
+ # This freezes the module's definitions, so that it can be used in a Ractor.
567
+ # No further methods or variables can be attached and no further enums or typedefs can be created in this module afterwards.
568
+ def freeze
569
+ instance_variables.each do |name|
570
+ var = instance_variable_get(name)
571
+ FFI.make_shareable(var)
572
+ end
573
+ nil
574
+ end
591
575
  end
592
576
  end
@@ -0,0 +1,109 @@
1
+ #
2
+ # Copyright (C) 2023 Lars Kanis
3
+ #
4
+ # This file is part of ruby-ffi.
5
+ #
6
+ # All rights reserved.
7
+ #
8
+ # Redistribution and use in source and binary forms, with or without
9
+ # modification, are permitted provided that the following conditions are met:
10
+ #
11
+ # * Redistributions of source code must retain the above copyright notice, this
12
+ # list of conditions and the following disclaimer.
13
+ # * Redistributions in binary form must reproduce the above copyright notice
14
+ # this list of conditions and the following disclaimer in the documentation
15
+ # and/or other materials provided with the distribution.
16
+ # * Neither the name of the Ruby FFI project nor the names of its contributors
17
+ # may be used to endorse or promote products derived from this software
18
+ # without specific prior written permission.
19
+ #
20
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21
+ # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22
+ # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
23
+ # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
24
+ # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25
+ # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
26
+ # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
27
+ # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
28
+ # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29
+ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.#
30
+
31
+ module FFI
32
+ # Transform a generic library name and ABI number to a platform library name
33
+ #
34
+ # Example:
35
+ # module LibVips
36
+ # extend FFI::Library
37
+ # ffi_lib LibraryPath.new("vips", abi_number: 42)
38
+ # end
39
+ #
40
+ # This translates to the following library file names:
41
+ # libvips-42.dll on Windows
42
+ # libvips.so.42 on Linux
43
+ # libvips.42.dylib on Macos
44
+ #
45
+ # See https://packaging.ubuntu.com/html/libraries.html for more information about library naming.
46
+ class LibraryPath
47
+ attr_reader :name
48
+ attr_reader :abi_number
49
+ attr_reader :root
50
+
51
+ # Build a new library path
52
+ #
53
+ # * <tt>name</tt> : The name of the library without file prefix or suffix.
54
+ # * <tt>abi_number</tt> : The ABI number of the library.
55
+ # * <tt>root</tt> : An optional base path prepended to the library name.
56
+ def initialize(name, abi_number: nil, root: nil)
57
+ @name = name
58
+ @abi_number = abi_number
59
+ @root = root
60
+ end
61
+
62
+ def self.wrap(value)
63
+ # We allow instances of LibraryPath to pass through transparently:
64
+ return value if value.is_a?(self)
65
+
66
+ # We special case a library named 'c' to be the standard C library:
67
+ return Library::LIBC if value == 'c'
68
+
69
+ # If provided a relative file name we convert it into a library path:
70
+ if value && File.basename(value) == value
71
+ return self.new(value)
72
+ end
73
+
74
+ # Otherwise, we assume it's a full path to a library:
75
+ return value
76
+ end
77
+
78
+ def full_name
79
+ # If the abi_number is given, we format it specifically according to platform rules:
80
+ if abi_number
81
+ if Platform.windows?
82
+ "#{Platform::LIBPREFIX}#{name}-#{abi_number}.#{Platform::LIBSUFFIX}"
83
+ elsif Platform.mac?
84
+ "#{Platform::LIBPREFIX}#{name}.#{abi_number}.#{Platform::LIBSUFFIX}"
85
+ else # Linux? BSD? etc.
86
+ "#{Platform::LIBPREFIX}#{name}.#{Platform::LIBSUFFIX}.#{abi_number}"
87
+ end
88
+ else
89
+ # Otherwise we just add prefix and suffix:
90
+ lib = name
91
+ # Add library prefix if missing
92
+ lib = Platform::LIBPREFIX + lib unless lib =~ /^#{Platform::LIBPREFIX}/
93
+ # Add library extension if missing
94
+ r = Platform.windows? || Platform.mac? ? "\\.#{Platform::LIBSUFFIX}$" : "\\.so($|\\.[1234567890]+)"
95
+ lib += ".#{Platform::LIBSUFFIX}" unless lib =~ /#{r}/
96
+ lib
97
+ end
98
+ end
99
+
100
+ def to_s
101
+ if root
102
+ # If the root path is given, we generate the full path:
103
+ File.join(root, full_name)
104
+ else
105
+ full_name
106
+ end
107
+ end
108
+ end
109
+ end
@@ -75,7 +75,7 @@ module FFI
75
75
  # @overload initialize
76
76
  # A new instance of FFI::ManagedStruct.
77
77
  def initialize(pointer=nil)
78
- raise NoMethodError, "release() not implemented for class #{self}" unless self.class.respond_to? :release
78
+ raise NoMethodError, "release() not implemented for class #{self}" unless self.class.respond_to?(:release, true)
79
79
  raise ArgumentError, "Must supply a pointer to memory for the Struct" unless pointer
80
80
  super AutoPointer.new(pointer, self.class.method(:release))
81
81
  end
@@ -0,0 +1,52 @@
1
+ rbx.platform.typedef.__time32_t = long
2
+ rbx.platform.typedef.__time64_t = long_long
3
+ rbx.platform.typedef._dev_t = uint
4
+ rbx.platform.typedef._ino_t = ushort
5
+ rbx.platform.typedef._mode_t = ushort
6
+ rbx.platform.typedef._off64_t = long_long
7
+ rbx.platform.typedef._off_t = long
8
+ rbx.platform.typedef._pid_t = long_long
9
+ rbx.platform.typedef._sigset_t = ulong_long
10
+ rbx.platform.typedef.dev_t = uint
11
+ rbx.platform.typedef.errno_t = int
12
+ rbx.platform.typedef.ino_t = ushort
13
+ rbx.platform.typedef.int16_t = short
14
+ rbx.platform.typedef.int32_t = int
15
+ rbx.platform.typedef.int64_t = long_long
16
+ rbx.platform.typedef.int8_t = char
17
+ rbx.platform.typedef.int_fast16_t = short
18
+ rbx.platform.typedef.int_fast32_t = int
19
+ rbx.platform.typedef.int_fast64_t = long_long
20
+ rbx.platform.typedef.int_fast8_t = char
21
+ rbx.platform.typedef.int_least16_t = short
22
+ rbx.platform.typedef.int_least32_t = int
23
+ rbx.platform.typedef.int_least64_t = long_long
24
+ rbx.platform.typedef.int_least8_t = char
25
+ rbx.platform.typedef.intmax_t = long_long
26
+ rbx.platform.typedef.intptr_t = long_long
27
+ rbx.platform.typedef.mode_t = ushort
28
+ rbx.platform.typedef.off32_t = long
29
+ rbx.platform.typedef.off64_t = long_long
30
+ rbx.platform.typedef.off_t = long_long
31
+ rbx.platform.typedef.pid_t = long_long
32
+ rbx.platform.typedef.ptrdiff_t = long_long
33
+ rbx.platform.typedef.rsize_t = ulong_long
34
+ rbx.platform.typedef.size_t = ulong_long
35
+ rbx.platform.typedef.ssize_t = long_long
36
+ rbx.platform.typedef.time_t = long_long
37
+ rbx.platform.typedef.uint16_t = ushort
38
+ rbx.platform.typedef.uint64_t = ulong_long
39
+ rbx.platform.typedef.uint8_t = uchar
40
+ rbx.platform.typedef.uint_fast16_t = ushort
41
+ rbx.platform.typedef.uint_fast32_t = uint
42
+ rbx.platform.typedef.uint_fast64_t = ulong_long
43
+ rbx.platform.typedef.uint_fast8_t = uchar
44
+ rbx.platform.typedef.uint_least16_t = ushort
45
+ rbx.platform.typedef.uint_least64_t = ulong_long
46
+ rbx.platform.typedef.uint_least8_t = uchar
47
+ rbx.platform.typedef.uintmax_t = ulong_long
48
+ rbx.platform.typedef.uintptr_t = ulong_long
49
+ rbx.platform.typedef.useconds_t = uint
50
+ rbx.platform.typedef.wchar_t = ushort
51
+ rbx.platform.typedef.wctype_t = ushort
52
+ rbx.platform.typedef.wint_t = ushort
@@ -0,0 +1,178 @@
1
+ rbx.platform.typedef.*__caddr_t = char
2
+ rbx.platform.typedef.__blkcnt64_t = long_long
3
+ rbx.platform.typedef.__blkcnt_t = long
4
+ rbx.platform.typedef.__blksize_t = long
5
+ rbx.platform.typedef.__clock_t = long
6
+ rbx.platform.typedef.__clockid_t = int
7
+ rbx.platform.typedef.__daddr_t = int
8
+ rbx.platform.typedef.__dev_t = ulong_long
9
+ rbx.platform.typedef.__fd_mask = long
10
+ rbx.platform.typedef.__fsblkcnt64_t = ulong_long
11
+ rbx.platform.typedef.__fsblkcnt_t = ulong
12
+ rbx.platform.typedef.__fsfilcnt64_t = ulong_long
13
+ rbx.platform.typedef.__fsfilcnt_t = ulong
14
+ rbx.platform.typedef.__fsword_t = int
15
+ rbx.platform.typedef.__gid_t = uint
16
+ rbx.platform.typedef.__id_t = uint
17
+ rbx.platform.typedef.__ino64_t = ulong_long
18
+ rbx.platform.typedef.__ino_t = ulong
19
+ rbx.platform.typedef.__int16_t = short
20
+ rbx.platform.typedef.__int32_t = int
21
+ rbx.platform.typedef.__int64_t = long_long
22
+ rbx.platform.typedef.__int8_t = char
23
+ rbx.platform.typedef.__int_least16_t = short
24
+ rbx.platform.typedef.__int_least32_t = int
25
+ rbx.platform.typedef.__int_least64_t = long_long
26
+ rbx.platform.typedef.__int_least8_t = char
27
+ rbx.platform.typedef.__intmax_t = long_long
28
+ rbx.platform.typedef.__intptr_t = int
29
+ rbx.platform.typedef.__kernel_caddr_t = string
30
+ rbx.platform.typedef.__kernel_clock_t = long
31
+ rbx.platform.typedef.__kernel_clockid_t = int
32
+ rbx.platform.typedef.__kernel_daddr_t = int
33
+ rbx.platform.typedef.__kernel_gid16_t = ushort
34
+ rbx.platform.typedef.__kernel_gid32_t = uint
35
+ rbx.platform.typedef.__kernel_gid_t = uint
36
+ rbx.platform.typedef.__kernel_ino64_t = ulong_long
37
+ rbx.platform.typedef.__kernel_ino_t = ulong
38
+ rbx.platform.typedef.__kernel_ipc_pid_t = ushort
39
+ rbx.platform.typedef.__kernel_key_t = int
40
+ rbx.platform.typedef.__kernel_loff_t = long_long
41
+ rbx.platform.typedef.__kernel_long_t = long
42
+ rbx.platform.typedef.__kernel_mode_t = ushort
43
+ rbx.platform.typedef.__kernel_mqd_t = int
44
+ rbx.platform.typedef.__kernel_off64_t = long_long
45
+ rbx.platform.typedef.__kernel_off_t = long
46
+ rbx.platform.typedef.__kernel_old_dev_t = uint
47
+ rbx.platform.typedef.__kernel_old_gid_t = uint
48
+ rbx.platform.typedef.__kernel_old_time_t = long
49
+ rbx.platform.typedef.__kernel_old_uid_t = uint
50
+ rbx.platform.typedef.__kernel_pid_t = int
51
+ rbx.platform.typedef.__kernel_ptrdiff_t = int
52
+ rbx.platform.typedef.__kernel_size_t = uint
53
+ rbx.platform.typedef.__kernel_ssize_t = int
54
+ rbx.platform.typedef.__kernel_suseconds_t = long
55
+ rbx.platform.typedef.__kernel_time64_t = long_long
56
+ rbx.platform.typedef.__kernel_time_t = long
57
+ rbx.platform.typedef.__kernel_timer_t = int
58
+ rbx.platform.typedef.__kernel_uid16_t = ushort
59
+ rbx.platform.typedef.__kernel_uid32_t = uint
60
+ rbx.platform.typedef.__kernel_uid_t = uint
61
+ rbx.platform.typedef.__kernel_ulong_t = ulong
62
+ rbx.platform.typedef.__key_t = int
63
+ rbx.platform.typedef.__loff_t = long_long
64
+ rbx.platform.typedef.__mode_t = uint
65
+ rbx.platform.typedef.__nlink_t = uint
66
+ rbx.platform.typedef.__off64_t = long_long
67
+ rbx.platform.typedef.__off_t = long
68
+ rbx.platform.typedef.__pid_t = int
69
+ rbx.platform.typedef.__priority_which_t = int
70
+ rbx.platform.typedef.__quad_t = long_long
71
+ rbx.platform.typedef.__rlim64_t = ulong_long
72
+ rbx.platform.typedef.__rlim_t = ulong
73
+ rbx.platform.typedef.__rlimit_resource_t = int
74
+ rbx.platform.typedef.__rusage_who_t = int
75
+ rbx.platform.typedef.__sig_atomic_t = int
76
+ rbx.platform.typedef.__socklen_t = uint
77
+ rbx.platform.typedef.__ssize_t = int
78
+ rbx.platform.typedef.__suseconds64_t = long_long
79
+ rbx.platform.typedef.__suseconds_t = long
80
+ rbx.platform.typedef.__syscall_slong_t = long
81
+ rbx.platform.typedef.__syscall_ulong_t = ulong
82
+ rbx.platform.typedef.__thrd_t = ulong
83
+ rbx.platform.typedef.__time64_t = long_long
84
+ rbx.platform.typedef.__time_t = long
85
+ rbx.platform.typedef.__timer_t = pointer
86
+ rbx.platform.typedef.__tss_t = uint
87
+ rbx.platform.typedef.__u_char = uchar
88
+ rbx.platform.typedef.__u_int = uint
89
+ rbx.platform.typedef.__u_long = ulong
90
+ rbx.platform.typedef.__u_quad_t = ulong_long
91
+ rbx.platform.typedef.__u_short = ushort
92
+ rbx.platform.typedef.__uid_t = uint
93
+ rbx.platform.typedef.__uint16_t = ushort
94
+ rbx.platform.typedef.__uint32_t = uint
95
+ rbx.platform.typedef.__uint64_t = ulong_long
96
+ rbx.platform.typedef.__uint8_t = uchar
97
+ rbx.platform.typedef.__uint_least16_t = ushort
98
+ rbx.platform.typedef.__uint_least32_t = uint
99
+ rbx.platform.typedef.__uint_least64_t = ulong_long
100
+ rbx.platform.typedef.__uint_least8_t = uchar
101
+ rbx.platform.typedef.__uintmax_t = ulong_long
102
+ rbx.platform.typedef.__useconds_t = uint
103
+ rbx.platform.typedef.blkcnt_t = long_long
104
+ rbx.platform.typedef.blksize_t = long
105
+ rbx.platform.typedef.clock_t = long
106
+ rbx.platform.typedef.clockid_t = int
107
+ rbx.platform.typedef.daddr_t = int
108
+ rbx.platform.typedef.dev_t = ulong_long
109
+ rbx.platform.typedef.fd_mask = long
110
+ rbx.platform.typedef.fsblkcnt_t = ulong_long
111
+ rbx.platform.typedef.fsfilcnt_t = ulong_long
112
+ rbx.platform.typedef.gid_t = uint
113
+ rbx.platform.typedef.id_t = uint
114
+ rbx.platform.typedef.in_addr_t = uint
115
+ rbx.platform.typedef.in_port_t = ushort
116
+ rbx.platform.typedef.ino_t = ulong_long
117
+ rbx.platform.typedef.int16_t = short
118
+ rbx.platform.typedef.int32_t = int
119
+ rbx.platform.typedef.int64_t = long_long
120
+ rbx.platform.typedef.int8_t = char
121
+ rbx.platform.typedef.int_fast16_t = int
122
+ rbx.platform.typedef.int_fast32_t = int
123
+ rbx.platform.typedef.int_fast64_t = long_long
124
+ rbx.platform.typedef.int_fast8_t = char
125
+ rbx.platform.typedef.int_least16_t = short
126
+ rbx.platform.typedef.int_least32_t = int
127
+ rbx.platform.typedef.int_least64_t = long_long
128
+ rbx.platform.typedef.int_least8_t = char
129
+ rbx.platform.typedef.intmax_t = long_long
130
+ rbx.platform.typedef.intptr_t = int
131
+ rbx.platform.typedef.key_t = int
132
+ rbx.platform.typedef.loff_t = long_long
133
+ rbx.platform.typedef.mode_t = uint
134
+ rbx.platform.typedef.nlink_t = uint
135
+ rbx.platform.typedef.off_t = long_long
136
+ rbx.platform.typedef.pid_t = int
137
+ rbx.platform.typedef.pthread_key_t = uint
138
+ rbx.platform.typedef.pthread_once_t = int
139
+ rbx.platform.typedef.pthread_t = ulong
140
+ rbx.platform.typedef.ptrdiff_t = int
141
+ rbx.platform.typedef.quad_t = long_long
142
+ rbx.platform.typedef.register_t = long
143
+ rbx.platform.typedef.rlim_t = ulong_long
144
+ rbx.platform.typedef.sa_family_t = ushort
145
+ rbx.platform.typedef.size_t = uint
146
+ rbx.platform.typedef.socklen_t = uint
147
+ rbx.platform.typedef.ssize_t = int
148
+ rbx.platform.typedef.suseconds_t = long
149
+ rbx.platform.typedef.time_t = long
150
+ rbx.platform.typedef.timer_t = pointer
151
+ rbx.platform.typedef.u_char = uchar
152
+ rbx.platform.typedef.u_int = uint
153
+ rbx.platform.typedef.u_int16_t = ushort
154
+ rbx.platform.typedef.u_int32_t = uint
155
+ rbx.platform.typedef.u_int64_t = ulong_long
156
+ rbx.platform.typedef.u_int8_t = uchar
157
+ rbx.platform.typedef.u_long = ulong
158
+ rbx.platform.typedef.u_quad_t = ulong_long
159
+ rbx.platform.typedef.u_short = ushort
160
+ rbx.platform.typedef.uid_t = uint
161
+ rbx.platform.typedef.uint = uint
162
+ rbx.platform.typedef.uint16_t = ushort
163
+ rbx.platform.typedef.uint32_t = uint
164
+ rbx.platform.typedef.uint64_t = ulong_long
165
+ rbx.platform.typedef.uint8_t = uchar
166
+ rbx.platform.typedef.uint_fast16_t = uint
167
+ rbx.platform.typedef.uint_fast32_t = uint
168
+ rbx.platform.typedef.uint_fast64_t = ulong_long
169
+ rbx.platform.typedef.uint_fast8_t = uchar
170
+ rbx.platform.typedef.uint_least16_t = ushort
171
+ rbx.platform.typedef.uint_least32_t = uint
172
+ rbx.platform.typedef.uint_least64_t = ulong_long
173
+ rbx.platform.typedef.uint_least8_t = uchar
174
+ rbx.platform.typedef.uintmax_t = ulong_long
175
+ rbx.platform.typedef.uintptr_t = uint
176
+ rbx.platform.typedef.ulong = ulong
177
+ rbx.platform.typedef.ushort = ushort
178
+ rbx.platform.typedef.wchar_t = long