Skip to content

Commit 1adc87b

Browse files
committed
Automatically find the type of struct fields with C++ typeid().name()
* This fixes a few invalid types and avoids hardcoding types. * Notably, msghdr.msg_iovlen and msghdr.msg_controllen were incorrect on macOS.
1 parent 7931aa1 commit 1adc87b

File tree

3 files changed

+118
-79
lines changed

3 files changed

+118
-79
lines changed

src/main/java/org/truffleruby/platform/darwin/DarwinNativeConfiguration.java

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ public static void load(NativeConfiguration configuration, RubyContext context)
6464
configuration.config("platform.addrinfo.ai_protocol.type", string(context, "int"));
6565
configuration.config("platform.addrinfo.ai_addrlen.offset", 16);
6666
configuration.config("platform.addrinfo.ai_addrlen.size", 4);
67-
configuration.config("platform.addrinfo.ai_addrlen.type", string(context, "int"));
67+
configuration.config("platform.addrinfo.ai_addrlen.type", string(context, "uint"));
6868
configuration.config("platform.addrinfo.ai_addr.offset", 32);
6969
configuration.config("platform.addrinfo.ai_addr.size", 8);
7070
configuration.config("platform.addrinfo.ai_addr.type", string(context, "pointer"));
@@ -83,7 +83,7 @@ public static void load(NativeConfiguration configuration, RubyContext context)
8383
configuration.config("platform.ifaddrs.ifa_name.type", string(context, "string"));
8484
configuration.config("platform.ifaddrs.ifa_flags.offset", 16);
8585
configuration.config("platform.ifaddrs.ifa_flags.size", 4);
86-
configuration.config("platform.ifaddrs.ifa_flags.type", string(context, "int"));
86+
configuration.config("platform.ifaddrs.ifa_flags.type", string(context, "uint"));
8787
configuration.config("platform.ifaddrs.ifa_addr.offset", 24);
8888
configuration.config("platform.ifaddrs.ifa_addr.size", 8);
8989
configuration.config("platform.ifaddrs.ifa_addr.type", string(context, "pointer"));
@@ -99,40 +99,43 @@ public static void load(NativeConfiguration configuration, RubyContext context)
9999
configuration.config("platform.sockaddr.sizeof", 16);
100100
configuration.config("platform.sockaddr.sa_family.offset", 1);
101101
configuration.config("platform.sockaddr.sa_family.size", 1);
102-
configuration.config("platform.sockaddr.sa_family.type", string(context, "sa_family_t"));
102+
configuration.config("platform.sockaddr.sa_family.type", string(context, "uchar"));
103103
configuration.config("platform.sockaddr.sa_data.offset", 2);
104104
configuration.config("platform.sockaddr.sa_data.size", 14);
105105
configuration.config("platform.sockaddr.sa_data.type", string(context, "char_array"));
106106
configuration.config("platform.sockaddr_in.sizeof", 16);
107107
configuration.config("platform.sockaddr_in.sin_family.offset", 1);
108108
configuration.config("platform.sockaddr_in.sin_family.size", 1);
109-
configuration.config("platform.sockaddr_in.sin_family.type", string(context, "sa_family_t"));
109+
configuration.config("platform.sockaddr_in.sin_family.type", string(context, "uchar"));
110110
configuration.config("platform.sockaddr_in.sin_port.offset", 2);
111111
configuration.config("platform.sockaddr_in.sin_port.size", 2);
112112
configuration.config("platform.sockaddr_in.sin_port.type", string(context, "ushort"));
113113
configuration.config("platform.sockaddr_in.sin_addr.offset", 4);
114114
configuration.config("platform.sockaddr_in.sin_addr.size", 4);
115+
configuration.config("platform.sockaddr_in.sin_addr.type", string(context, "char_array"));
115116
configuration.config("platform.sockaddr_in.sin_zero.offset", 8);
116117
configuration.config("platform.sockaddr_in.sin_zero.size", 8);
117118
configuration.config("platform.sockaddr_in.sin_zero.type", string(context, "char_array"));
118119
configuration.config("platform.sockaddr_in6.sizeof", 28);
119120
configuration.config("platform.sockaddr_in6.sin6_family.offset", 1);
120121
configuration.config("platform.sockaddr_in6.sin6_family.size", 1);
121-
configuration.config("platform.sockaddr_in6.sin6_family.type", string(context, "sa_family_t"));
122+
configuration.config("platform.sockaddr_in6.sin6_family.type", string(context, "uchar"));
122123
configuration.config("platform.sockaddr_in6.sin6_port.offset", 2);
123124
configuration.config("platform.sockaddr_in6.sin6_port.size", 2);
124125
configuration.config("platform.sockaddr_in6.sin6_port.type", string(context, "ushort"));
125126
configuration.config("platform.sockaddr_in6.sin6_flowinfo.offset", 4);
126127
configuration.config("platform.sockaddr_in6.sin6_flowinfo.size", 4);
128+
configuration.config("platform.sockaddr_in6.sin6_flowinfo.type", string(context, "uint"));
127129
configuration.config("platform.sockaddr_in6.sin6_addr.offset", 8);
128130
configuration.config("platform.sockaddr_in6.sin6_addr.size", 16);
129131
configuration.config("platform.sockaddr_in6.sin6_addr.type", string(context, "char_array"));
130132
configuration.config("platform.sockaddr_in6.sin6_scope_id.offset", 24);
131133
configuration.config("platform.sockaddr_in6.sin6_scope_id.size", 4);
134+
configuration.config("platform.sockaddr_in6.sin6_scope_id.type", string(context, "uint"));
132135
configuration.config("platform.sockaddr_un.sizeof", 106);
133136
configuration.config("platform.sockaddr_un.sun_family.offset", 1);
134137
configuration.config("platform.sockaddr_un.sun_family.size", 1);
135-
configuration.config("platform.sockaddr_un.sun_family.type", string(context, "sa_family_t"));
138+
configuration.config("platform.sockaddr_un.sun_family.type", string(context, "uchar"));
136139
configuration.config("platform.sockaddr_un.sun_path.offset", 2);
137140
configuration.config("platform.sockaddr_un.sun_path.size", 104);
138141
configuration.config("platform.sockaddr_un.sun_path.type", string(context, "char_array"));
@@ -165,33 +168,33 @@ public static void load(NativeConfiguration configuration, RubyContext context)
165168
configuration.config("platform.iovec.iov_base.type", string(context, "pointer"));
166169
configuration.config("platform.iovec.iov_len.offset", 8);
167170
configuration.config("platform.iovec.iov_len.size", 8);
168-
configuration.config("platform.iovec.iov_len.type", string(context, "size_t"));
171+
configuration.config("platform.iovec.iov_len.type", string(context, "ulong"));
169172
configuration.config("platform.msghdr.sizeof", 48);
170173
configuration.config("platform.msghdr.msg_name.offset", 0);
171174
configuration.config("platform.msghdr.msg_name.size", 8);
172175
configuration.config("platform.msghdr.msg_name.type", string(context, "pointer"));
173176
configuration.config("platform.msghdr.msg_namelen.offset", 8);
174177
configuration.config("platform.msghdr.msg_namelen.size", 4);
175-
configuration.config("platform.msghdr.msg_namelen.type", string(context, "int"));
178+
configuration.config("platform.msghdr.msg_namelen.type", string(context, "uint"));
176179
configuration.config("platform.msghdr.msg_iov.offset", 16);
177180
configuration.config("platform.msghdr.msg_iov.size", 8);
178181
configuration.config("platform.msghdr.msg_iov.type", string(context, "pointer"));
179182
configuration.config("platform.msghdr.msg_iovlen.offset", 24);
180183
configuration.config("platform.msghdr.msg_iovlen.size", 4);
181-
configuration.config("platform.msghdr.msg_iovlen.type", string(context, "size_t"));
184+
configuration.config("platform.msghdr.msg_iovlen.type", string(context, "int"));
182185
configuration.config("platform.msghdr.msg_control.offset", 32);
183186
configuration.config("platform.msghdr.msg_control.size", 8);
184187
configuration.config("platform.msghdr.msg_control.type", string(context, "pointer"));
185188
configuration.config("platform.msghdr.msg_controllen.offset", 40);
186189
configuration.config("platform.msghdr.msg_controllen.size", 4);
187-
configuration.config("platform.msghdr.msg_controllen.type", string(context, "size_t"));
190+
configuration.config("platform.msghdr.msg_controllen.type", string(context, "uint"));
188191
configuration.config("platform.msghdr.msg_flags.offset", 44);
189192
configuration.config("platform.msghdr.msg_flags.size", 4);
190193
configuration.config("platform.msghdr.msg_flags.type", string(context, "int"));
191194
configuration.config("platform.servent.sizeof", 32);
192195
configuration.config("platform.servent.s_name.offset", 0);
193196
configuration.config("platform.servent.s_name.size", 8);
194-
configuration.config("platform.servent.s_name.type", string(context, "pointer"));
197+
configuration.config("platform.servent.s_name.type", string(context, "string"));
195198
configuration.config("platform.servent.s_aliases.offset", 8);
196199
configuration.config("platform.servent.s_aliases.size", 8);
197200
configuration.config("platform.servent.s_aliases.type", string(context, "pointer"));
@@ -200,7 +203,7 @@ public static void load(NativeConfiguration configuration, RubyContext context)
200203
configuration.config("platform.servent.s_port.type", string(context, "int"));
201204
configuration.config("platform.servent.s_proto.offset", 24);
202205
configuration.config("platform.servent.s_proto.size", 8);
203-
configuration.config("platform.servent.s_proto.type", string(context, "pointer"));
206+
configuration.config("platform.servent.s_proto.type", string(context, "string"));
204207
configuration.config("platform.errno.EPERM", 1);
205208
configuration.config("platform.errno.ENOENT", 2);
206209
configuration.config("platform.errno.ESRCH", 3);

src/main/java/org/truffleruby/platform/linux/LinuxNativeConfiguration.java

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ public static void load(NativeConfiguration configuration, RubyContext context)
6464
configuration.config("platform.addrinfo.ai_protocol.type", string(context, "int"));
6565
configuration.config("platform.addrinfo.ai_addrlen.offset", 16);
6666
configuration.config("platform.addrinfo.ai_addrlen.size", 4);
67-
configuration.config("platform.addrinfo.ai_addrlen.type", string(context, "int"));
67+
configuration.config("platform.addrinfo.ai_addrlen.type", string(context, "uint"));
6868
configuration.config("platform.addrinfo.ai_addr.offset", 24);
6969
configuration.config("platform.addrinfo.ai_addr.size", 8);
7070
configuration.config("platform.addrinfo.ai_addr.type", string(context, "pointer"));
@@ -83,7 +83,7 @@ public static void load(NativeConfiguration configuration, RubyContext context)
8383
configuration.config("platform.ifaddrs.ifa_name.type", string(context, "string"));
8484
configuration.config("platform.ifaddrs.ifa_flags.offset", 16);
8585
configuration.config("platform.ifaddrs.ifa_flags.size", 4);
86-
configuration.config("platform.ifaddrs.ifa_flags.type", string(context, "int"));
86+
configuration.config("platform.ifaddrs.ifa_flags.type", string(context, "uint"));
8787
configuration.config("platform.ifaddrs.ifa_addr.offset", 24);
8888
configuration.config("platform.ifaddrs.ifa_addr.size", 8);
8989
configuration.config("platform.ifaddrs.ifa_addr.type", string(context, "pointer"));
@@ -99,40 +99,43 @@ public static void load(NativeConfiguration configuration, RubyContext context)
9999
configuration.config("platform.sockaddr.sizeof", 16);
100100
configuration.config("platform.sockaddr.sa_family.offset", 0);
101101
configuration.config("platform.sockaddr.sa_family.size", 2);
102-
configuration.config("platform.sockaddr.sa_family.type", string(context, "sa_family_t"));
102+
configuration.config("platform.sockaddr.sa_family.type", string(context, "ushort"));
103103
configuration.config("platform.sockaddr.sa_data.offset", 2);
104104
configuration.config("platform.sockaddr.sa_data.size", 14);
105105
configuration.config("platform.sockaddr.sa_data.type", string(context, "char_array"));
106106
configuration.config("platform.sockaddr_in.sizeof", 16);
107107
configuration.config("platform.sockaddr_in.sin_family.offset", 0);
108108
configuration.config("platform.sockaddr_in.sin_family.size", 2);
109-
configuration.config("platform.sockaddr_in.sin_family.type", string(context, "sa_family_t"));
109+
configuration.config("platform.sockaddr_in.sin_family.type", string(context, "ushort"));
110110
configuration.config("platform.sockaddr_in.sin_port.offset", 2);
111111
configuration.config("platform.sockaddr_in.sin_port.size", 2);
112112
configuration.config("platform.sockaddr_in.sin_port.type", string(context, "ushort"));
113113
configuration.config("platform.sockaddr_in.sin_addr.offset", 4);
114114
configuration.config("platform.sockaddr_in.sin_addr.size", 4);
115+
configuration.config("platform.sockaddr_in.sin_addr.type", string(context, "char_array"));
115116
configuration.config("platform.sockaddr_in.sin_zero.offset", 8);
116117
configuration.config("platform.sockaddr_in.sin_zero.size", 8);
117118
configuration.config("platform.sockaddr_in.sin_zero.type", string(context, "char_array"));
118119
configuration.config("platform.sockaddr_in6.sizeof", 28);
119120
configuration.config("platform.sockaddr_in6.sin6_family.offset", 0);
120121
configuration.config("platform.sockaddr_in6.sin6_family.size", 2);
121-
configuration.config("platform.sockaddr_in6.sin6_family.type", string(context, "sa_family_t"));
122+
configuration.config("platform.sockaddr_in6.sin6_family.type", string(context, "ushort"));
122123
configuration.config("platform.sockaddr_in6.sin6_port.offset", 2);
123124
configuration.config("platform.sockaddr_in6.sin6_port.size", 2);
124125
configuration.config("platform.sockaddr_in6.sin6_port.type", string(context, "ushort"));
125126
configuration.config("platform.sockaddr_in6.sin6_flowinfo.offset", 4);
126127
configuration.config("platform.sockaddr_in6.sin6_flowinfo.size", 4);
128+
configuration.config("platform.sockaddr_in6.sin6_flowinfo.type", string(context, "uint"));
127129
configuration.config("platform.sockaddr_in6.sin6_addr.offset", 8);
128130
configuration.config("platform.sockaddr_in6.sin6_addr.size", 16);
129131
configuration.config("platform.sockaddr_in6.sin6_addr.type", string(context, "char_array"));
130132
configuration.config("platform.sockaddr_in6.sin6_scope_id.offset", 24);
131133
configuration.config("platform.sockaddr_in6.sin6_scope_id.size", 4);
134+
configuration.config("platform.sockaddr_in6.sin6_scope_id.type", string(context, "uint"));
132135
configuration.config("platform.sockaddr_un.sizeof", 110);
133136
configuration.config("platform.sockaddr_un.sun_family.offset", 0);
134137
configuration.config("platform.sockaddr_un.sun_family.size", 2);
135-
configuration.config("platform.sockaddr_un.sun_family.type", string(context, "sa_family_t"));
138+
configuration.config("platform.sockaddr_un.sun_family.type", string(context, "ushort"));
136139
configuration.config("platform.sockaddr_un.sun_path.offset", 2);
137140
configuration.config("platform.sockaddr_un.sun_path.size", 108);
138141
configuration.config("platform.sockaddr_un.sun_path.type", string(context, "char_array"));
@@ -165,33 +168,33 @@ public static void load(NativeConfiguration configuration, RubyContext context)
165168
configuration.config("platform.iovec.iov_base.type", string(context, "pointer"));
166169
configuration.config("platform.iovec.iov_len.offset", 8);
167170
configuration.config("platform.iovec.iov_len.size", 8);
168-
configuration.config("platform.iovec.iov_len.type", string(context, "size_t"));
171+
configuration.config("platform.iovec.iov_len.type", string(context, "ulong"));
169172
configuration.config("platform.msghdr.sizeof", 56);
170173
configuration.config("platform.msghdr.msg_name.offset", 0);
171174
configuration.config("platform.msghdr.msg_name.size", 8);
172175
configuration.config("platform.msghdr.msg_name.type", string(context, "pointer"));
173176
configuration.config("platform.msghdr.msg_namelen.offset", 8);
174177
configuration.config("platform.msghdr.msg_namelen.size", 4);
175-
configuration.config("platform.msghdr.msg_namelen.type", string(context, "int"));
178+
configuration.config("platform.msghdr.msg_namelen.type", string(context, "uint"));
176179
configuration.config("platform.msghdr.msg_iov.offset", 16);
177180
configuration.config("platform.msghdr.msg_iov.size", 8);
178181
configuration.config("platform.msghdr.msg_iov.type", string(context, "pointer"));
179182
configuration.config("platform.msghdr.msg_iovlen.offset", 24);
180183
configuration.config("platform.msghdr.msg_iovlen.size", 8);
181-
configuration.config("platform.msghdr.msg_iovlen.type", string(context, "size_t"));
184+
configuration.config("platform.msghdr.msg_iovlen.type", string(context, "ulong"));
182185
configuration.config("platform.msghdr.msg_control.offset", 32);
183186
configuration.config("platform.msghdr.msg_control.size", 8);
184187
configuration.config("platform.msghdr.msg_control.type", string(context, "pointer"));
185188
configuration.config("platform.msghdr.msg_controllen.offset", 40);
186189
configuration.config("platform.msghdr.msg_controllen.size", 8);
187-
configuration.config("platform.msghdr.msg_controllen.type", string(context, "size_t"));
190+
configuration.config("platform.msghdr.msg_controllen.type", string(context, "ulong"));
188191
configuration.config("platform.msghdr.msg_flags.offset", 48);
189192
configuration.config("platform.msghdr.msg_flags.size", 4);
190193
configuration.config("platform.msghdr.msg_flags.type", string(context, "int"));
191194
configuration.config("platform.servent.sizeof", 32);
192195
configuration.config("platform.servent.s_name.offset", 0);
193196
configuration.config("platform.servent.s_name.size", 8);
194-
configuration.config("platform.servent.s_name.type", string(context, "pointer"));
197+
configuration.config("platform.servent.s_name.type", string(context, "string"));
195198
configuration.config("platform.servent.s_aliases.offset", 8);
196199
configuration.config("platform.servent.s_aliases.size", 8);
197200
configuration.config("platform.servent.s_aliases.type", string(context, "pointer"));
@@ -200,7 +203,7 @@ public static void load(NativeConfiguration configuration, RubyContext context)
200203
configuration.config("platform.servent.s_port.type", string(context, "int"));
201204
configuration.config("platform.servent.s_proto.offset", 24);
202205
configuration.config("platform.servent.s_proto.size", 8);
203-
configuration.config("platform.servent.s_proto.type", string(context, "pointer"));
206+
configuration.config("platform.servent.s_proto.type", string(context, "string"));
204207
configuration.config("platform.errno.EPERM", 1);
205208
configuration.config("platform.errno.ENOENT", 2);
206209
configuration.config("platform.errno.ESRCH", 3);

0 commit comments

Comments
 (0)