ffi 1.12.2-java → 1.14.2-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.
Files changed (97) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +82 -0
  3. data/Gemfile +17 -0
  4. data/LICENSE.SPECS +22 -0
  5. data/README.md +10 -2
  6. data/Rakefile +31 -43
  7. data/ffi.gemspec +43 -0
  8. data/lib/ffi.rb +28 -0
  9. data/lib/ffi/abstract_memory.rb +44 -0
  10. data/lib/ffi/autopointer.rb +203 -0
  11. data/lib/ffi/buffer.rb +4 -0
  12. data/lib/ffi/callback.rb +4 -0
  13. data/lib/ffi/data_converter.rb +67 -0
  14. data/lib/ffi/enum.rb +296 -0
  15. data/lib/ffi/errno.rb +43 -0
  16. data/lib/ffi/ffi.rb +47 -0
  17. data/lib/ffi/io.rb +62 -0
  18. data/lib/ffi/library.rb +592 -0
  19. data/lib/ffi/managedstruct.rb +84 -0
  20. data/lib/ffi/memorypointer.rb +1 -0
  21. data/lib/ffi/platform.rb +188 -0
  22. data/lib/ffi/platform/aarch64-darwin/types.conf +130 -0
  23. data/lib/ffi/platform/aarch64-freebsd/types.conf +128 -0
  24. data/lib/ffi/platform/aarch64-freebsd12/types.conf +128 -0
  25. data/lib/ffi/platform/aarch64-linux/types.conf +104 -0
  26. data/lib/ffi/platform/aarch64-openbsd/types.conf +134 -0
  27. data/lib/ffi/platform/arm-freebsd/types.conf +152 -0
  28. data/lib/ffi/platform/arm-freebsd12/types.conf +152 -0
  29. data/lib/ffi/platform/arm-linux/types.conf +132 -0
  30. data/lib/ffi/platform/i386-cygwin/types.conf +3 -0
  31. data/lib/ffi/platform/i386-darwin/types.conf +100 -0
  32. data/lib/ffi/platform/i386-freebsd/types.conf +152 -0
  33. data/lib/ffi/platform/i386-freebsd12/types.conf +152 -0
  34. data/lib/ffi/platform/i386-gnu/types.conf +107 -0
  35. data/lib/ffi/platform/i386-linux/types.conf +103 -0
  36. data/lib/ffi/platform/i386-netbsd/types.conf +126 -0
  37. data/lib/ffi/platform/i386-openbsd/types.conf +128 -0
  38. data/lib/ffi/platform/i386-solaris/types.conf +122 -0
  39. data/lib/ffi/platform/i386-windows/types.conf +52 -0
  40. data/lib/ffi/platform/ia64-linux/types.conf +104 -0
  41. data/lib/ffi/platform/mips-linux/types.conf +102 -0
  42. data/lib/ffi/platform/mips64-linux/types.conf +104 -0
  43. data/lib/ffi/platform/mips64el-linux/types.conf +104 -0
  44. data/lib/ffi/platform/mipsel-linux/types.conf +102 -0
  45. data/lib/ffi/platform/mipsisa32r6-linux/types.conf +102 -0
  46. data/lib/ffi/platform/mipsisa32r6el-linux/types.conf +102 -0
  47. data/lib/ffi/platform/mipsisa64r6-linux/types.conf +104 -0
  48. data/lib/ffi/platform/mipsisa64r6el-linux/types.conf +104 -0
  49. data/lib/ffi/platform/powerpc-aix/types.conf +180 -0
  50. data/lib/ffi/platform/powerpc-darwin/types.conf +100 -0
  51. data/lib/ffi/platform/powerpc-linux/types.conf +130 -0
  52. data/lib/ffi/platform/powerpc-openbsd/types.conf +156 -0
  53. data/lib/ffi/platform/powerpc64-linux/types.conf +104 -0
  54. data/lib/ffi/platform/s390-linux/types.conf +102 -0
  55. data/lib/ffi/platform/s390x-linux/types.conf +102 -0
  56. data/lib/ffi/platform/sparc-linux/types.conf +102 -0
  57. data/lib/ffi/platform/sparc-solaris/types.conf +128 -0
  58. data/lib/ffi/platform/sparc64-linux/types.conf +102 -0
  59. data/lib/ffi/platform/sparcv9-openbsd/types.conf +156 -0
  60. data/lib/ffi/platform/sparcv9-solaris/types.conf +128 -0
  61. data/lib/ffi/platform/x86_64-cygwin/types.conf +3 -0
  62. data/lib/ffi/platform/x86_64-darwin/types.conf +130 -0
  63. data/lib/ffi/platform/x86_64-dragonflybsd/types.conf +130 -0
  64. data/lib/ffi/platform/x86_64-freebsd/types.conf +128 -0
  65. data/lib/ffi/platform/x86_64-freebsd12/types.conf +158 -0
  66. data/lib/ffi/platform/x86_64-haiku/types.conf +117 -0
  67. data/lib/ffi/platform/x86_64-linux/types.conf +132 -0
  68. data/lib/ffi/platform/x86_64-msys/types.conf +119 -0
  69. data/lib/ffi/platform/x86_64-netbsd/types.conf +128 -0
  70. data/lib/ffi/platform/x86_64-openbsd/types.conf +134 -0
  71. data/lib/ffi/platform/x86_64-solaris/types.conf +122 -0
  72. data/lib/ffi/platform/x86_64-windows/types.conf +52 -0
  73. data/lib/ffi/pointer.rb +167 -0
  74. data/lib/ffi/struct.rb +316 -0
  75. data/lib/ffi/struct_by_reference.rb +72 -0
  76. data/lib/ffi/struct_layout.rb +96 -0
  77. data/lib/ffi/struct_layout_builder.rb +227 -0
  78. data/lib/ffi/tools/const_generator.rb +230 -0
  79. data/lib/ffi/tools/generator.rb +105 -0
  80. data/lib/ffi/tools/generator_task.rb +32 -0
  81. data/lib/ffi/tools/struct_generator.rb +194 -0
  82. data/lib/ffi/tools/types_generator.rb +137 -0
  83. data/lib/ffi/types.rb +194 -0
  84. data/lib/ffi/union.rb +43 -0
  85. data/lib/ffi/variadic.rb +78 -0
  86. data/lib/ffi/version.rb +3 -0
  87. data/samples/getlogin.rb +8 -0
  88. data/samples/getpid.rb +8 -0
  89. data/samples/gettimeofday.rb +18 -0
  90. data/samples/hello.rb +8 -0
  91. data/samples/inotify.rb +60 -0
  92. data/samples/pty.rb +75 -0
  93. data/samples/qsort.rb +20 -0
  94. metadata +175 -29
  95. checksums.yaml.gz.sig +0 -3
  96. data.tar.gz.sig +0 -3
  97. metadata.gz.sig +0 -4
@@ -0,0 +1,128 @@
1
+ rbx.platform.typedef.__clock_t = int
2
+ rbx.platform.typedef.__clockid_t = int
3
+ rbx.platform.typedef.__cpuid_t = ulong
4
+ rbx.platform.typedef.__dev_t = int
5
+ rbx.platform.typedef.__fd_mask = int
6
+ rbx.platform.typedef.__fixpt_t = uint
7
+ rbx.platform.typedef.__gid_t = uint
8
+ rbx.platform.typedef.__id_t = uint
9
+ rbx.platform.typedef.__in_addr_t = uint
10
+ rbx.platform.typedef.__in_port_t = ushort
11
+ rbx.platform.typedef.__ino_t = uint
12
+ rbx.platform.typedef.__int16_t = short
13
+ rbx.platform.typedef.__int32_t = int
14
+ rbx.platform.typedef.__int64_t = long_long
15
+ rbx.platform.typedef.__int8_t = char
16
+ rbx.platform.typedef.__int_fast16_t = int
17
+ rbx.platform.typedef.__int_fast32_t = int
18
+ rbx.platform.typedef.__int_fast64_t = long_long
19
+ rbx.platform.typedef.__int_fast8_t = int
20
+ rbx.platform.typedef.__int_least16_t = short
21
+ rbx.platform.typedef.__int_least32_t = int
22
+ rbx.platform.typedef.__int_least64_t = long_long
23
+ rbx.platform.typedef.__int_least8_t = char
24
+ rbx.platform.typedef.__intmax_t = long_long
25
+ rbx.platform.typedef.__intptr_t = long
26
+ rbx.platform.typedef.__key_t = long
27
+ rbx.platform.typedef.__mode_t = uint
28
+ rbx.platform.typedef.__nlink_t = uint
29
+ rbx.platform.typedef.__off_t = long_long
30
+ rbx.platform.typedef.__paddr_t = ulong
31
+ rbx.platform.typedef.__pid_t = int
32
+ rbx.platform.typedef.__psize_t = ulong
33
+ rbx.platform.typedef.__ptrdiff_t = long
34
+ rbx.platform.typedef.__register_t = int
35
+ rbx.platform.typedef.__rlim_t = ulong_long
36
+ rbx.platform.typedef.__rune_t = int
37
+ rbx.platform.typedef.__sa_family_t = uchar
38
+ rbx.platform.typedef.__segsz_t = int
39
+ rbx.platform.typedef.__size_t = ulong
40
+ rbx.platform.typedef.__socklen_t = uint
41
+ rbx.platform.typedef.__ssize_t = long
42
+ rbx.platform.typedef.__suseconds_t = int
43
+ rbx.platform.typedef.__swblk_t = int
44
+ rbx.platform.typedef.__time_t = int
45
+ rbx.platform.typedef.__timer_t = int
46
+ rbx.platform.typedef.__uid_t = uint
47
+ rbx.platform.typedef.__uint16_t = ushort
48
+ rbx.platform.typedef.__uint32_t = uint
49
+ rbx.platform.typedef.__uint64_t = ulong_long
50
+ rbx.platform.typedef.__uint8_t = uchar
51
+ rbx.platform.typedef.__uint_fast16_t = uint
52
+ rbx.platform.typedef.__uint_fast32_t = uint
53
+ rbx.platform.typedef.__uint_fast64_t = ulong_long
54
+ rbx.platform.typedef.__uint_fast8_t = uint
55
+ rbx.platform.typedef.__uint_least16_t = ushort
56
+ rbx.platform.typedef.__uint_least32_t = uint
57
+ rbx.platform.typedef.__uint_least64_t = ulong_long
58
+ rbx.platform.typedef.__uint_least8_t = uchar
59
+ rbx.platform.typedef.__uintmax_t = ulong_long
60
+ rbx.platform.typedef.__uintptr_t = ulong
61
+ rbx.platform.typedef.__useconds_t = uint
62
+ rbx.platform.typedef.__vaddr_t = ulong
63
+ rbx.platform.typedef.__vsize_t = ulong
64
+ rbx.platform.typedef.__wchar_t = int
65
+ rbx.platform.typedef.__wctrans_t = pointer
66
+ rbx.platform.typedef.__wctype_t = pointer
67
+ rbx.platform.typedef.__wint_t = int
68
+ rbx.platform.typedef.caddr_t = string
69
+ rbx.platform.typedef.clock_t = int
70
+ rbx.platform.typedef.clockid_t = int
71
+ rbx.platform.typedef.cpuid_t = ulong
72
+ rbx.platform.typedef.daddr32_t = int
73
+ rbx.platform.typedef.daddr64_t = long_long
74
+ rbx.platform.typedef.daddr_t = int
75
+ rbx.platform.typedef.dev_t = int
76
+ rbx.platform.typedef.fixpt_t = uint
77
+ rbx.platform.typedef.gid_t = uint
78
+ rbx.platform.typedef.id_t = uint
79
+ rbx.platform.typedef.in_addr_t = uint
80
+ rbx.platform.typedef.in_port_t = ushort
81
+ rbx.platform.typedef.ino_t = uint
82
+ rbx.platform.typedef.int16_t = short
83
+ rbx.platform.typedef.int32_t = int
84
+ rbx.platform.typedef.int64_t = long_long
85
+ rbx.platform.typedef.int8_t = char
86
+ rbx.platform.typedef.intptr_t = long
87
+ rbx.platform.typedef.key_t = long
88
+ rbx.platform.typedef.mode_t = uint
89
+ rbx.platform.typedef.nlink_t = uint
90
+ rbx.platform.typedef.off_t = long_long
91
+ rbx.platform.typedef.paddr_t = ulong
92
+ rbx.platform.typedef.pid_t = int
93
+ rbx.platform.typedef.psize_t = ulong
94
+ rbx.platform.typedef.qaddr_t = pointer
95
+ rbx.platform.typedef.quad_t = long_long
96
+ rbx.platform.typedef.register_t = int
97
+ rbx.platform.typedef.rlim_t = ulong_long
98
+ rbx.platform.typedef.sa_family_t = uchar
99
+ rbx.platform.typedef.segsz_t = int
100
+ rbx.platform.typedef.size_t = ulong
101
+ rbx.platform.typedef.socklen_t = uint
102
+ rbx.platform.typedef.ssize_t = long
103
+ rbx.platform.typedef.suseconds_t = int
104
+ rbx.platform.typedef.swblk_t = int
105
+ rbx.platform.typedef.time_t = int
106
+ rbx.platform.typedef.timer_t = int
107
+ rbx.platform.typedef.u_char = uchar
108
+ rbx.platform.typedef.u_int = uint
109
+ rbx.platform.typedef.u_int16_t = ushort
110
+ rbx.platform.typedef.u_int32_t = uint
111
+ rbx.platform.typedef.u_int64_t = ulong_long
112
+ rbx.platform.typedef.u_int8_t = uchar
113
+ rbx.platform.typedef.u_long = ulong
114
+ rbx.platform.typedef.u_quad_t = ulong_long
115
+ rbx.platform.typedef.u_short = ushort
116
+ rbx.platform.typedef.uid_t = uint
117
+ rbx.platform.typedef.uint = uint
118
+ rbx.platform.typedef.uint16_t = ushort
119
+ rbx.platform.typedef.uint32_t = uint
120
+ rbx.platform.typedef.uint64_t = ulong_long
121
+ rbx.platform.typedef.uint8_t = uchar
122
+ rbx.platform.typedef.uintptr_t = ulong
123
+ rbx.platform.typedef.ulong = ulong
124
+ rbx.platform.typedef.unchar = uchar
125
+ rbx.platform.typedef.useconds_t = uint
126
+ rbx.platform.typedef.ushort = ushort
127
+ rbx.platform.typedef.vaddr_t = ulong
128
+ rbx.platform.typedef.vsize_t = ulong
@@ -0,0 +1,134 @@
1
+ rbx.platform.typedef.__blkcnt_t = long_long
2
+ rbx.platform.typedef.__blksize_t = int
3
+ rbx.platform.typedef.__clock_t = long_long
4
+ rbx.platform.typedef.__clockid_t = int
5
+ rbx.platform.typedef.__cpuid_t = ulong
6
+ rbx.platform.typedef.__dev_t = int
7
+ rbx.platform.typedef.__fd_mask = uint
8
+ rbx.platform.typedef.__fixpt_t = uint
9
+ rbx.platform.typedef.__fsblkcnt_t = ulong_long
10
+ rbx.platform.typedef.__fsfilcnt_t = ulong_long
11
+ rbx.platform.typedef.__gid_t = uint
12
+ rbx.platform.typedef.__id_t = uint
13
+ rbx.platform.typedef.__in_addr_t = uint
14
+ rbx.platform.typedef.__in_port_t = ushort
15
+ rbx.platform.typedef.__ino_t = ulong_long
16
+ rbx.platform.typedef.__int16_t = short
17
+ rbx.platform.typedef.__int32_t = int
18
+ rbx.platform.typedef.__int64_t = long_long
19
+ rbx.platform.typedef.__int8_t = char
20
+ rbx.platform.typedef.__int_fast16_t = int
21
+ rbx.platform.typedef.__int_fast32_t = int
22
+ rbx.platform.typedef.__int_fast64_t = long_long
23
+ rbx.platform.typedef.__int_fast8_t = int
24
+ rbx.platform.typedef.__int_least16_t = short
25
+ rbx.platform.typedef.__int_least32_t = int
26
+ rbx.platform.typedef.__int_least64_t = long_long
27
+ rbx.platform.typedef.__int_least8_t = char
28
+ rbx.platform.typedef.__intmax_t = long_long
29
+ rbx.platform.typedef.__intptr_t = long
30
+ rbx.platform.typedef.__key_t = long
31
+ rbx.platform.typedef.__mode_t = uint
32
+ rbx.platform.typedef.__nlink_t = uint
33
+ rbx.platform.typedef.__off_t = long_long
34
+ rbx.platform.typedef.__paddr_t = ulong
35
+ rbx.platform.typedef.__pid_t = int
36
+ rbx.platform.typedef.__psize_t = ulong
37
+ rbx.platform.typedef.__ptrdiff_t = long
38
+ rbx.platform.typedef.__register_t = long
39
+ rbx.platform.typedef.__rlim_t = ulong_long
40
+ rbx.platform.typedef.__rune_t = int
41
+ rbx.platform.typedef.__sa_family_t = uchar
42
+ rbx.platform.typedef.__segsz_t = int
43
+ rbx.platform.typedef.__size_t = ulong
44
+ rbx.platform.typedef.__socklen_t = uint
45
+ rbx.platform.typedef.__ssize_t = long
46
+ rbx.platform.typedef.__suseconds_t = long
47
+ rbx.platform.typedef.__swblk_t = int
48
+ rbx.platform.typedef.__time_t = long_long
49
+ rbx.platform.typedef.__timer_t = int
50
+ rbx.platform.typedef.__uid_t = uint
51
+ rbx.platform.typedef.__uint16_t = ushort
52
+ rbx.platform.typedef.__uint32_t = uint
53
+ rbx.platform.typedef.__uint64_t = ulong_long
54
+ rbx.platform.typedef.__uint8_t = uchar
55
+ rbx.platform.typedef.__uint_fast16_t = uint
56
+ rbx.platform.typedef.__uint_fast32_t = uint
57
+ rbx.platform.typedef.__uint_fast64_t = ulong_long
58
+ rbx.platform.typedef.__uint_fast8_t = uint
59
+ rbx.platform.typedef.__uint_least16_t = ushort
60
+ rbx.platform.typedef.__uint_least32_t = uint
61
+ rbx.platform.typedef.__uint_least64_t = ulong_long
62
+ rbx.platform.typedef.__uint_least8_t = uchar
63
+ rbx.platform.typedef.__uintmax_t = ulong_long
64
+ rbx.platform.typedef.__uintptr_t = ulong
65
+ rbx.platform.typedef.__useconds_t = uint
66
+ rbx.platform.typedef.__vaddr_t = ulong
67
+ rbx.platform.typedef.__vsize_t = ulong
68
+ rbx.platform.typedef.__wchar_t = int
69
+ rbx.platform.typedef.__wctrans_t = pointer
70
+ rbx.platform.typedef.__wctype_t = pointer
71
+ rbx.platform.typedef.__wint_t = int
72
+ rbx.platform.typedef.blkcnt_t = long_long
73
+ rbx.platform.typedef.blksize_t = int
74
+ rbx.platform.typedef.caddr_t = string
75
+ rbx.platform.typedef.clock_t = long_long
76
+ rbx.platform.typedef.clockid_t = int
77
+ rbx.platform.typedef.cpuid_t = ulong
78
+ rbx.platform.typedef.daddr32_t = int
79
+ rbx.platform.typedef.daddr_t = long_long
80
+ rbx.platform.typedef.dev_t = int
81
+ rbx.platform.typedef.fixpt_t = uint
82
+ rbx.platform.typedef.fsblkcnt_t = ulong_long
83
+ rbx.platform.typedef.fsfilcnt_t = ulong_long
84
+ rbx.platform.typedef.gid_t = uint
85
+ rbx.platform.typedef.id_t = uint
86
+ rbx.platform.typedef.in_addr_t = uint
87
+ rbx.platform.typedef.in_port_t = ushort
88
+ rbx.platform.typedef.ino_t = ulong_long
89
+ rbx.platform.typedef.int16_t = short
90
+ rbx.platform.typedef.int32_t = int
91
+ rbx.platform.typedef.int64_t = long_long
92
+ rbx.platform.typedef.int8_t = char
93
+ rbx.platform.typedef.key_t = long
94
+ rbx.platform.typedef.mode_t = uint
95
+ rbx.platform.typedef.nlink_t = uint
96
+ rbx.platform.typedef.off_t = long_long
97
+ rbx.platform.typedef.paddr_t = ulong
98
+ rbx.platform.typedef.pid_t = int
99
+ rbx.platform.typedef.psize_t = ulong
100
+ rbx.platform.typedef.qaddr_t = pointer
101
+ rbx.platform.typedef.quad_t = long_long
102
+ rbx.platform.typedef.register_t = long
103
+ rbx.platform.typedef.rlim_t = ulong_long
104
+ rbx.platform.typedef.sa_family_t = uchar
105
+ rbx.platform.typedef.segsz_t = int
106
+ rbx.platform.typedef.sigset_t = uint
107
+ rbx.platform.typedef.size_t = ulong
108
+ rbx.platform.typedef.socklen_t = uint
109
+ rbx.platform.typedef.ssize_t = long
110
+ rbx.platform.typedef.suseconds_t = long
111
+ rbx.platform.typedef.swblk_t = int
112
+ rbx.platform.typedef.time_t = long_long
113
+ rbx.platform.typedef.timer_t = int
114
+ rbx.platform.typedef.u_char = uchar
115
+ rbx.platform.typedef.u_int = uint
116
+ rbx.platform.typedef.u_int16_t = ushort
117
+ rbx.platform.typedef.u_int32_t = uint
118
+ rbx.platform.typedef.u_int64_t = ulong_long
119
+ rbx.platform.typedef.u_int8_t = uchar
120
+ rbx.platform.typedef.u_long = ulong
121
+ rbx.platform.typedef.u_quad_t = ulong_long
122
+ rbx.platform.typedef.u_short = ushort
123
+ rbx.platform.typedef.uid_t = uint
124
+ rbx.platform.typedef.uint = uint
125
+ rbx.platform.typedef.uint16_t = ushort
126
+ rbx.platform.typedef.uint32_t = uint
127
+ rbx.platform.typedef.uint64_t = ulong_long
128
+ rbx.platform.typedef.uint8_t = uchar
129
+ rbx.platform.typedef.ulong = ulong
130
+ rbx.platform.typedef.unchar = uchar
131
+ rbx.platform.typedef.useconds_t = uint
132
+ rbx.platform.typedef.ushort = ushort
133
+ rbx.platform.typedef.vaddr_t = ulong
134
+ rbx.platform.typedef.vsize_t = ulong
@@ -0,0 +1,122 @@
1
+ rbx.platform.typedef.*caddr_t = char
2
+ rbx.platform.typedef.blkcnt64_t = long
3
+ rbx.platform.typedef.blkcnt_t = long
4
+ rbx.platform.typedef.blksize_t = int
5
+ rbx.platform.typedef.clock_t = long
6
+ rbx.platform.typedef.clockid_t = int
7
+ rbx.platform.typedef.cnt_t = short
8
+ rbx.platform.typedef.cpu_flag_t = ushort
9
+ rbx.platform.typedef.ctid_t = int
10
+ rbx.platform.typedef.daddr_t = long
11
+ rbx.platform.typedef.datalink_id_t = uint
12
+ rbx.platform.typedef.dev_t = ulong
13
+ rbx.platform.typedef.diskaddr_t = ulong_long
14
+ rbx.platform.typedef.disp_lock_t = uchar
15
+ rbx.platform.typedef.fd_mask = long
16
+ rbx.platform.typedef.fds_mask = long
17
+ rbx.platform.typedef.fsblkcnt64_t = ulong
18
+ rbx.platform.typedef.fsblkcnt_t = ulong
19
+ rbx.platform.typedef.fsfilcnt64_t = ulong
20
+ rbx.platform.typedef.fsfilcnt_t = ulong
21
+ rbx.platform.typedef.gid_t = uint
22
+ rbx.platform.typedef.hrtime_t = long_long
23
+ rbx.platform.typedef.id_t = int
24
+ rbx.platform.typedef.in_addr_t = uint
25
+ rbx.platform.typedef.in_port_t = ushort
26
+ rbx.platform.typedef.index_t = short
27
+ rbx.platform.typedef.ino64_t = ulong
28
+ rbx.platform.typedef.ino_t = ulong
29
+ rbx.platform.typedef.int16_t = short
30
+ rbx.platform.typedef.int32_t = int
31
+ rbx.platform.typedef.int64_t = long
32
+ rbx.platform.typedef.int8_t = char
33
+ rbx.platform.typedef.int_fast16_t = int
34
+ rbx.platform.typedef.int_fast32_t = int
35
+ rbx.platform.typedef.int_fast64_t = long
36
+ rbx.platform.typedef.int_fast8_t = char
37
+ rbx.platform.typedef.int_least16_t = short
38
+ rbx.platform.typedef.int_least32_t = int
39
+ rbx.platform.typedef.int_least64_t = long
40
+ rbx.platform.typedef.int_least8_t = char
41
+ rbx.platform.typedef.intmax_t = long
42
+ rbx.platform.typedef.intptr_t = long
43
+ rbx.platform.typedef.ipaddr_t = uint
44
+ rbx.platform.typedef.k_fltset_t = uint
45
+ rbx.platform.typedef.key_t = int
46
+ rbx.platform.typedef.len_t = ulong_long
47
+ rbx.platform.typedef.lgrp_id_t = int
48
+ rbx.platform.typedef.lock_t = uchar
49
+ rbx.platform.typedef.longlong_t = long_long
50
+ rbx.platform.typedef.major_t = uint
51
+ rbx.platform.typedef.minor_t = uint
52
+ rbx.platform.typedef.mode_t = uint
53
+ rbx.platform.typedef.model_t = uint
54
+ rbx.platform.typedef.nfds_t = ulong
55
+ rbx.platform.typedef.nlink_t = uint
56
+ rbx.platform.typedef.o_dev_t = short
57
+ rbx.platform.typedef.o_gid_t = ushort
58
+ rbx.platform.typedef.o_ino_t = ushort
59
+ rbx.platform.typedef.o_mode_t = ushort
60
+ rbx.platform.typedef.o_nlink_t = short
61
+ rbx.platform.typedef.o_pid_t = short
62
+ rbx.platform.typedef.o_uid_t = ushort
63
+ rbx.platform.typedef.off64_t = long
64
+ rbx.platform.typedef.off_t = long
65
+ rbx.platform.typedef.offset_t = long_long
66
+ rbx.platform.typedef.pad64_t = long
67
+ rbx.platform.typedef.pfn_t = ulong
68
+ rbx.platform.typedef.pgcnt_t = ulong
69
+ rbx.platform.typedef.pid_t = int
70
+ rbx.platform.typedef.poolid_t = int
71
+ rbx.platform.typedef.pri_t = short
72
+ rbx.platform.typedef.projid_t = int
73
+ rbx.platform.typedef.pthread_key_t = uint
74
+ rbx.platform.typedef.pthread_t = uint
75
+ rbx.platform.typedef.ptrdiff_t = long
76
+ rbx.platform.typedef.rlim64_t = ulong_long
77
+ rbx.platform.typedef.rlim_t = ulong
78
+ rbx.platform.typedef.sa_family_t = ushort
79
+ rbx.platform.typedef.size_t = ulong
80
+ rbx.platform.typedef.socklen_t = uint
81
+ rbx.platform.typedef.spgcnt_t = long
82
+ rbx.platform.typedef.ssize_t = long
83
+ rbx.platform.typedef.suseconds_t = long
84
+ rbx.platform.typedef.sysid_t = short
85
+ rbx.platform.typedef.t_scalar_t = int
86
+ rbx.platform.typedef.t_uscalar_t = uint
87
+ rbx.platform.typedef.taskid_t = int
88
+ rbx.platform.typedef.time_t = long
89
+ rbx.platform.typedef.timer_t = int
90
+ rbx.platform.typedef.u_char = uchar
91
+ rbx.platform.typedef.u_int = uint
92
+ rbx.platform.typedef.u_long = ulong
93
+ rbx.platform.typedef.u_longlong_t = ulong_long
94
+ rbx.platform.typedef.u_offset_t = ulong_long
95
+ rbx.platform.typedef.u_short = ushort
96
+ rbx.platform.typedef.uchar_t = uchar
97
+ rbx.platform.typedef.uid_t = uint
98
+ rbx.platform.typedef.uint = uint
99
+ rbx.platform.typedef.uint16_t = ushort
100
+ rbx.platform.typedef.uint32_t = uint
101
+ rbx.platform.typedef.uint64_t = ulong
102
+ rbx.platform.typedef.uint8_t = uchar
103
+ rbx.platform.typedef.uint_fast16_t = uint
104
+ rbx.platform.typedef.uint_fast32_t = uint
105
+ rbx.platform.typedef.uint_fast64_t = ulong
106
+ rbx.platform.typedef.uint_fast8_t = uchar
107
+ rbx.platform.typedef.uint_least16_t = ushort
108
+ rbx.platform.typedef.uint_least32_t = uint
109
+ rbx.platform.typedef.uint_least64_t = ulong
110
+ rbx.platform.typedef.uint_least8_t = uchar
111
+ rbx.platform.typedef.uint_t = uint
112
+ rbx.platform.typedef.uintmax_t = ulong
113
+ rbx.platform.typedef.uintptr_t = ulong
114
+ rbx.platform.typedef.ulong = ulong
115
+ rbx.platform.typedef.ulong_t = ulong
116
+ rbx.platform.typedef.unchar = uchar
117
+ rbx.platform.typedef.upad64_t = ulong
118
+ rbx.platform.typedef.use_t = uchar
119
+ rbx.platform.typedef.useconds_t = uint
120
+ rbx.platform.typedef.ushort = ushort
121
+ rbx.platform.typedef.ushort_t = ushort
122
+ rbx.platform.typedef.zoneid_t = int
@@ -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,167 @@
1
+ #
2
+ # Copyright (C) 2008, 2009 Wayne Meissner
3
+ # Copyright (c) 2007, 2008 Evan Phoenix
4
+ #
5
+ # This file is part of ruby-ffi.
6
+ #
7
+ # All rights reserved.
8
+ #
9
+ # Redistribution and use in source and binary forms, with or without
10
+ # modification, are permitted provided that the following conditions are met:
11
+ #
12
+ # * Redistributions of source code must retain the above copyright notice, this
13
+ # list of conditions and the following disclaimer.
14
+ # * Redistributions in binary form must reproduce the above copyright notice
15
+ # this list of conditions and the following disclaimer in the documentation
16
+ # and/or other materials provided with the distribution.
17
+ # * Neither the name of the Ruby FFI project nor the names of its contributors
18
+ # may be used to endorse or promote products derived from this software
19
+ # without specific prior written permission.
20
+ #
21
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
22
+ # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23
+ # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
24
+ # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
25
+ # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26
+ # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
27
+ # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
28
+ # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
29
+ # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30
+ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31
+ #
32
+
33
+ require 'ffi/platform'
34
+
35
+ # NOTE: all method definitions in this file are conditional on
36
+ # whether they are not already defined. This is needed because
37
+ # some Ruby implementations (e.g., TruffleRuby) might already
38
+ # provide these methods due to using FFI internally, and we
39
+ # should not override them to avoid warnings.
40
+
41
+ module FFI
42
+ class Pointer
43
+
44
+ # Pointer size
45
+ SIZE = Platform::ADDRESS_SIZE / 8 unless const_defined?(:SIZE)
46
+
47
+ # Return the size of a pointer on the current platform, in bytes
48
+ # @return [Numeric]
49
+ def self.size
50
+ SIZE
51
+ end unless respond_to?(:size)
52
+
53
+ # @param [nil,Numeric] len length of string to return
54
+ # @return [String]
55
+ # Read pointer's contents as a string, or the first +len+ bytes of the
56
+ # equivalent string if +len+ is not +nil+.
57
+ def read_string(len=nil)
58
+ if len
59
+ return ''.b if len == 0
60
+ get_bytes(0, len)
61
+ else
62
+ get_string(0)
63
+ end
64
+ end unless method_defined?(:read_string)
65
+
66
+ # @param [Numeric] len length of string to return
67
+ # @return [String]
68
+ # Read the first +len+ bytes of pointer's contents as a string.
69
+ #
70
+ # Same as:
71
+ # ptr.read_string(len) # with len not nil
72
+ def read_string_length(len)
73
+ get_bytes(0, len)
74
+ end unless method_defined?(:read_string_length)
75
+
76
+ # @return [String]
77
+ # Read pointer's contents as a string.
78
+ #
79
+ # Same as:
80
+ # ptr.read_string # with no len
81
+ def read_string_to_null
82
+ get_string(0)
83
+ end unless method_defined?(:read_string_to_null)
84
+
85
+ # @param [String] str string to write
86
+ # @param [Numeric] len length of string to return
87
+ # @return [self]
88
+ # Write +len+ first bytes of +str+ in pointer's contents.
89
+ #
90
+ # Same as:
91
+ # ptr.write_string(str, len) # with len not nil
92
+ def write_string_length(str, len)
93
+ put_bytes(0, str, 0, len)
94
+ end unless method_defined?(:write_string_length)
95
+
96
+ # @param [String] str string to write
97
+ # @param [Numeric] len length of string to return
98
+ # @return [self]
99
+ # Write +str+ in pointer's contents, or first +len+ bytes if
100
+ # +len+ is not +nil+.
101
+ def write_string(str, len=nil)
102
+ len = str.bytesize unless len
103
+ # Write the string data without NUL termination
104
+ put_bytes(0, str, 0, len)
105
+ end unless method_defined?(:write_string)
106
+
107
+ # @param [Type] type type of data to read from pointer's contents
108
+ # @param [Symbol] reader method to send to +self+ to read +type+
109
+ # @param [Numeric] length
110
+ # @return [Array]
111
+ # Read an array of +type+ of length +length+.
112
+ # @example
113
+ # ptr.read_array_of_type(TYPE_UINT8, :read_uint8, 4) # -> [1, 2, 3, 4]
114
+ def read_array_of_type(type, reader, length)
115
+ ary = []
116
+ size = FFI.type_size(type)
117
+ tmp = self
118
+ length.times { |j|
119
+ ary << tmp.send(reader)
120
+ tmp += size unless j == length-1 # avoid OOB
121
+ }
122
+ ary
123
+ end unless method_defined?(:read_array_of_type)
124
+
125
+ # @param [Type] type type of data to write to pointer's contents
126
+ # @param [Symbol] writer method to send to +self+ to write +type+
127
+ # @param [Array] ary
128
+ # @return [self]
129
+ # Write +ary+ in pointer's contents as +type+.
130
+ # @example
131
+ # ptr.write_array_of_type(TYPE_UINT8, :put_uint8, [1, 2, 3 ,4])
132
+ def write_array_of_type(type, writer, ary)
133
+ size = FFI.type_size(type)
134
+ ary.each_with_index { |val, i|
135
+ break unless i < self.size
136
+ self.send(writer, i * size, val)
137
+ }
138
+ self
139
+ end unless method_defined?(:write_array_of_type)
140
+
141
+ # @return [self]
142
+ def to_ptr
143
+ self
144
+ end unless method_defined?(:to_ptr)
145
+
146
+ # @param [Symbol,Type] type of data to read
147
+ # @return [Object]
148
+ # Read pointer's contents as +type+
149
+ #
150
+ # Same as:
151
+ # ptr.get(type, 0)
152
+ def read(type)
153
+ get(type, 0)
154
+ end unless method_defined?(:read)
155
+
156
+ # @param [Symbol,Type] type of data to read
157
+ # @param [Object] value to write
158
+ # @return [nil]
159
+ # Write +value+ of type +type+ to pointer's content
160
+ #
161
+ # Same as:
162
+ # ptr.put(type, 0)
163
+ def write(type, value)
164
+ put(type, 0, value)
165
+ end unless method_defined?(:write)
166
+ end
167
+ end