ffi-bindings-libfixposix 0.5.1.0

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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 1d8ea6cc207e6b0d01212e65a6c47f87ab9329339077fd85bbfbf4f632071e6d
4
+ data.tar.gz: 1cee631055711a31ba67fb8ce39eb85b009cf8ae8608ab3cd88760a5fb7d3dde
5
+ SHA512:
6
+ metadata.gz: e1b9013a6ebf3437837b3cc3a785784ba72c16078df72d7cdc467f165b7b8f29cab084a6456855d0332f7a499ed662f2cf8e036dd6df23d91e6fde870146aaf2
7
+ data.tar.gz: ec61ab8a845d05fc7bbdc747f1586755829525a765bcd4b7f09e1424354cb095d50bd8ffd3ffb8f1101a5d30e63da5fe827cd44d214ea2e0085f25e3204d3ae3
data/Gemfile ADDED
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ source "https://rubygems.org"
4
+
5
+ # Specify your gem's dependencies in ffi-bindings-libfixposix.gemspec
6
+ gemspec
7
+
8
+ gem "rake", "~> 13.0"
9
+ gem "ffi", "~> 1.0"
data/README.md ADDED
@@ -0,0 +1,26 @@
1
+ # ffi-bindings-libfixposix
2
+
3
+ Straightforward ffi bindings for libfixposix. Doesn't include a binary. See ffi-binary-libfixposix for that.
4
+
5
+ ## Installation
6
+
7
+ Install the gem and add to the application's Gemfile by executing:
8
+
9
+ $ bundle add ffi-bindings-libfixposix
10
+
11
+ If bundler is not being used to manage dependencies, install the gem by executing:
12
+
13
+ $ gem install ffi-bindings-libfixposix
14
+
15
+ ## Usage
16
+
17
+ ```rb
18
+ require 'libfixposix'
19
+ ```
20
+ Note that binaries are picked up automatically, they don't need to be manually required. See parent SubSpawn for more information.
21
+
22
+ `lfp_foo(...)` is mapped to `LFP.foo(...)` and simple class wrappers are generated too. See ffi.rb (generated) for all methods mapped from C. Use `LFP::INTERFACE_VERSION`, `LFP::SO_VERSION`, and/or `LFP::COMPLETE_VERSION` as appropriate.
23
+
24
+ ## Development
25
+
26
+ See parent SubSpawn readme
data/Rakefile ADDED
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "bundler/gem_tasks"
4
+
5
+ task default: :build
@@ -0,0 +1,532 @@
1
+ require 'ffi'
2
+
3
+ module LFP
4
+ extend FFI::Library
5
+ ffi_lib LFPFile.local_so
6
+ INTERFACE_VERSION = "0.5.1"
7
+
8
+ # enums
9
+ enum :memsize_measure_unit, [:octets, 0, :kb, :kib, :mb, :mib, :gb, :gib, :tb, :tib, :pb, :pib, :eb, :eib]
10
+ enum :flags, [:setsigmask, 1, :setsigdefault, 2, :setpgroup, 4, :resetids, 8, :setcwd, 64, :setsid, 128, :setctty, 256, :usevfork, 512, :setumask, 1024, :setrlimit, 2048]
11
+
12
+ # callbacks
13
+ # typedef void (*lfp_sighandler_t)(int);
14
+ callback :sighandler, [:int32], :void
15
+
16
+ def self.const_missing( sym )
17
+ value = enum_value( sym )
18
+ return super unless value
19
+ value
20
+ end
21
+
22
+
23
+ # structs and classes
24
+ class Rlimit < FFI::Struct
25
+
26
+ # main data
27
+ layout :resource, :int32, # int resource;
28
+ :rlim_cur, :rlim_t, # struct rlimit rlim; - The current (soft) limit
29
+ :rlim_max, :rlim_t # struct rlimit rlim; - The hard limit
30
+
31
+ def self.const_missing( sym )
32
+ value = enum_value( sym )
33
+ return super unless value
34
+ value
35
+ end
36
+
37
+ end
38
+
39
+ class Buildinfo < FFI::Struct
40
+
41
+ # main data
42
+ layout :release, :uint64, # unsigned long int release;
43
+ :vcsid, [:uint8, 33] # char vcsid[32 + 1];
44
+
45
+ def self.const_missing( sym )
46
+ value = enum_value( sym )
47
+ return super unless value
48
+ value
49
+ end
50
+
51
+ end
52
+
53
+ class SpawnFileActions
54
+ SIZEOF = 32
55
+ def initialize
56
+ if block_given?
57
+ ret = nil # ffi doesn't return the result, must save it manually
58
+ FFI::MemoryPointer.new(:uint8, SIZEOF) do |ptr|
59
+ @this = ptr
60
+ ret = yield self
61
+ end
62
+ ret
63
+ else
64
+ @this = FFI::MemoryPointer.new(:uint8, SIZEOF)
65
+ end
66
+ end
67
+ attr_reader :this
68
+ alias :to_ptr :this #ffi casting
69
+
70
+ # forwarding proxies
71
+
72
+ # int (lfp_spawn_file_actions_t *file_actions, int fd)
73
+ def addclose(*args); LFP.spawn_file_actions_addclose(@this, *args); end
74
+
75
+ # int (lfp_spawn_file_actions_t *file_actions, int fd, int newfd)
76
+ def adddup2(*args); LFP.spawn_file_actions_adddup2(@this, *args); end
77
+
78
+ # int (lfp_spawn_file_actions_t *file_actions, int fd)
79
+ def addkeep(*args); LFP.spawn_file_actions_addkeep(@this, *args); end
80
+
81
+ # int (lfp_spawn_file_actions_t *file_actions, int fd, const char *path, unsigned long int oflags, mode_t mode)
82
+ def addopen(*args); LFP.spawn_file_actions_addopen(@this, *args); end
83
+
84
+ # int (lfp_spawn_file_actions_t *file_actions)
85
+ def destroy(*args); LFP.spawn_file_actions_destroy(@this, *args); end
86
+
87
+ # int (lfp_spawn_file_actions_t *file_actions)
88
+ def init(*args); LFP.spawn_file_actions_init(@this, *args); end
89
+
90
+ end
91
+
92
+ class Spawnattr
93
+ SIZEOF = 320
94
+ def initialize
95
+ if block_given?
96
+ ret = nil # ffi doesn't return the result, must save it manually
97
+ FFI::MemoryPointer.new(:uint8, SIZEOF) do |ptr|
98
+ @this = ptr
99
+ ret = yield self
100
+ end
101
+ ret
102
+ else
103
+ @this = FFI::MemoryPointer.new(:uint8, SIZEOF)
104
+ end
105
+ end
106
+ attr_reader :this
107
+ alias :to_ptr :this #ffi casting
108
+
109
+ # forwarding proxies
110
+
111
+ # int (lfp_spawnattr_t *attr)
112
+ def destroy(*args); LFP.spawnattr_destroy(@this, *args); end
113
+
114
+ # int (lfp_spawnattr_t *attr, char **path)
115
+ def getctty(*args); LFP.spawnattr_getctty(@this, *args); end
116
+ def ctty(); LFP.spawnattr_getctty(@this); end
117
+
118
+ # int (lfp_spawnattr_t *attr, char **path)
119
+ def getcwd(*args); LFP.spawnattr_getcwd(@this, *args); end
120
+ def cwd(); LFP.spawnattr_getcwd(@this); end
121
+
122
+ # int (lfp_spawnattr_t *attr, unsigned int *flags)
123
+ def getflags(*args); LFP.spawnattr_getflags(@this, *args); end
124
+ def flags(); LFP.spawnattr_getflags(@this); end
125
+
126
+ # int (lfp_spawnattr_t *attr, pid_t *pgroup)
127
+ def getpgroup(*args); LFP.spawnattr_getpgroup(@this, *args); end
128
+ def pgroup(); LFP.spawnattr_getpgroup(@this); end
129
+
130
+ # int (lfp_spawnattr_t *attr, lfp_rlimit_t **rlim, size_t *rlim_size)
131
+ def getrlimit(*args); LFP.spawnattr_getrlimit(@this, *args); end
132
+ def rlimit(); LFP.spawnattr_getrlimit(@this); end
133
+
134
+ # int (lfp_spawnattr_t *attr, struct sigset_t *sigdefault)
135
+ def getsigdefault(*args); LFP.spawnattr_getsigdefault(@this, *args); end
136
+ def sigdefault(); LFP.spawnattr_getsigdefault(@this); end
137
+
138
+ # int (lfp_spawnattr_t *attr, struct sigset_t *sigmask)
139
+ def getsigmask(*args); LFP.spawnattr_getsigmask(@this, *args); end
140
+ def sigmask(); LFP.spawnattr_getsigmask(@this); end
141
+
142
+ # int (lfp_spawnattr_t *attr, mode_t *umask)
143
+ def getumask(*args); LFP.spawnattr_getumask(@this, *args); end
144
+ def umask(); LFP.spawnattr_getumask(@this); end
145
+
146
+ # int (lfp_spawnattr_t *attr)
147
+ def init(*args); LFP.spawnattr_init(@this, *args); end
148
+
149
+ # int (lfp_spawnattr_t *attr, const char *path)
150
+ def setctty(*args); LFP.spawnattr_setctty(@this, *args); end
151
+ def ctty=(value); LFP.spawnattr_setctty(@this, value); end
152
+
153
+ # int (lfp_spawnattr_t *attr, const char *path)
154
+ def setcwd(*args); LFP.spawnattr_setcwd(@this, *args); end
155
+ def cwd=(value); LFP.spawnattr_setcwd(@this, value); end
156
+
157
+ # int (lfp_spawnattr_t *attr, const unsigned int flags)
158
+ def setflags(*args); LFP.spawnattr_setflags(@this, *args); end
159
+ def flags=(value); LFP.spawnattr_setflags(@this, value); end
160
+
161
+ # int (lfp_spawnattr_t *attr, const pid_t pgroup)
162
+ def setpgroup(*args); LFP.spawnattr_setpgroup(@this, *args); end
163
+ def pgroup=(value); LFP.spawnattr_setpgroup(@this, value); end
164
+
165
+ # int (lfp_spawnattr_t *attr, const lfp_rlimit_t *rlim, size_t rlim_size)
166
+ def setrlimit(*args); LFP.spawnattr_setrlimit(@this, *args); end
167
+ def rlimit=(value); LFP.spawnattr_setrlimit(@this, value); end
168
+
169
+ # int (lfp_spawnattr_t *attr)
170
+ def setsid(*args); LFP.spawnattr_setsid(@this, *args); end
171
+ def sid=(value); LFP.spawnattr_setsid(@this, value); end
172
+
173
+ # int (lfp_spawnattr_t *attr, const struct sigset_t *sigdefault)
174
+ def setsigdefault(*args); LFP.spawnattr_setsigdefault(@this, *args); end
175
+ def sigdefault=(value); LFP.spawnattr_setsigdefault(@this, value); end
176
+
177
+ # int (lfp_spawnattr_t *attr, const struct sigset_t *sigmask)
178
+ def setsigmask(*args); LFP.spawnattr_setsigmask(@this, *args); end
179
+ def sigmask=(value); LFP.spawnattr_setsigmask(@this, value); end
180
+
181
+ # int (lfp_spawnattr_t *attr, const mode_t umask)
182
+ def setumask(*args); LFP.spawnattr_setumask(@this, *args); end
183
+ def umask=(value); LFP.spawnattr_setumask(@this, value); end
184
+
185
+ end
186
+
187
+
188
+ # methods
189
+
190
+ # int (int sockfd, struct sockaddr *addr, socklen_t *addrlen, unsigned long int flags)
191
+ attach_function :accept, :lfp_accept, [:int32, :pointer, :buffer_inout, :uint64], :int32
192
+
193
+ # int (struct lfp_buildinfo *v)
194
+ attach_function :buildinfo, :lfp_buildinfo, [Buildinfo.by_ref], :int32
195
+
196
+ # int (void)
197
+ attach_function :clearenv, :lfp_clearenv, [], :int32
198
+
199
+ # int (int clk_id, struct timespec *res)
200
+ attach_function :clock_getres, :lfp_clock_getres, [:int32, :pointer], :int32
201
+
202
+ # int (int clk_id, struct timespec *tp)
203
+ attach_function :clock_gettime, :lfp_clock_gettime, [:int32, :pointer], :int32
204
+
205
+ # int (int clk_id, struct timespec *tp)
206
+ attach_function :clock_settime, :lfp_clock_settime, [:int32, :pointer], :int32
207
+
208
+ # int (struct opaque_ptr *dirp)
209
+ attach_function :closedir, :lfp_closedir, [:pointer], :int32
210
+
211
+ # void (void)
212
+ attach_function :closelog, :lfp_closelog, [], :void
213
+
214
+ # void *(struct cmsghdr *cmsg)
215
+ attach_function :cmsg_data, :lfp_cmsg_data, [:pointer], :pointer
216
+
217
+ # struct cmsghdr *(struct msghdr *msgh)
218
+ attach_function :cmsg_firsthdr, :lfp_cmsg_firsthdr, [:pointer], :pointer
219
+
220
+ # size_t (size_t length)
221
+ attach_function :cmsg_len, :lfp_cmsg_len, [:size_t], :size_t
222
+
223
+ # struct cmsghdr *(struct msghdr *msgh, struct cmsghdr *cmsg)
224
+ attach_function :cmsg_nxthdr, :lfp_cmsg_nxthdr, [:pointer, :pointer], :pointer
225
+
226
+ # size_t (size_t length)
227
+ attach_function :cmsg_space, :lfp_cmsg_space, [:size_t], :size_t
228
+
229
+ # int (const char *pathname, mode_t mode)
230
+ attach_function :creat, :lfp_creat, [:string, :mode_t], :int32
231
+
232
+ # int (void)
233
+ attach_function :errno, :lfp_errno, [], :int32
234
+
235
+ # int (const char *path, char *const argv[], char *const envp[])
236
+ attach_function :execve, :lfp_execve, [:string, :pointer, :pointer], :int32
237
+
238
+ # int (const char *file, char *const argv[], char *const envp[])
239
+ attach_function :execvpe, :lfp_execvpe, [:string, :pointer, :pointer], :int32
240
+
241
+ # void (int fd, struct opaque_ptr *set)
242
+ attach_function :fd_clr, :lfp_fd_clr, [:int32, :pointer], :void
243
+
244
+ # _Bool (int fd, struct opaque_ptr *set)
245
+ attach_function :fd_isset, :lfp_fd_isset, [:int32, :pointer], :bool
246
+
247
+ # void (int fd, struct opaque_ptr *set)
248
+ attach_function :fd_set, :lfp_fd_set, [:int32, :pointer], :void
249
+
250
+ # void (struct opaque_ptr *set)
251
+ attach_function :fd_zero, :lfp_fd_zero, [:pointer], :void
252
+
253
+ # int (int fd, struct stat *buf)
254
+ attach_function :fstat, :lfp_fstat, [:int32, :pointer], :int32
255
+
256
+ # int (int fd, off_t length)
257
+ attach_function :ftruncate, :lfp_ftruncate, [:int32, :off_t], :int32
258
+
259
+ # char **(void)
260
+ attach_function :get_environ, :lfp_get_environ, [], :pointer
261
+
262
+ # char *(char *const envp[])
263
+ attach_function :getpath, :lfp_getpath, [:pointer], :string
264
+
265
+ # int (int socket, uid_t *euid, gid_t *egid)
266
+ attach_function :getpeereid, :lfp_getpeereid, [:int32, :buffer_inout, :buffer_inout], :int32
267
+
268
+ # int (int resource, struct rlimit *rlim)
269
+ attach_function :getrlimit, :lfp_getrlimit, [:int32, :pointer], :int32
270
+
271
+ # int (int fd)
272
+ attach_function :is_fd_cloexec, :lfp_is_fd_cloexec, [:int32], :int32
273
+
274
+ # int (int fd)
275
+ attach_function :is_fd_nonblock, :lfp_is_fd_nonblock, [:int32], :int32
276
+
277
+ # int (int fd)
278
+ attach_function :is_fd_open, :lfp_is_fd_open, [:int32], :int32
279
+
280
+ # _Bool (mode_t mode)
281
+ attach_function :isblk, :lfp_isblk, [:mode_t], :bool
282
+
283
+ # _Bool (mode_t mode)
284
+ attach_function :ischr, :lfp_ischr, [:mode_t], :bool
285
+
286
+ # _Bool (mode_t mode)
287
+ attach_function :isdir, :lfp_isdir, [:mode_t], :bool
288
+
289
+ # _Bool (mode_t mode)
290
+ attach_function :isfifo, :lfp_isfifo, [:mode_t], :bool
291
+
292
+ # _Bool (mode_t mode)
293
+ attach_function :islnk, :lfp_islnk, [:mode_t], :bool
294
+
295
+ # _Bool (mode_t mode)
296
+ attach_function :isreg, :lfp_isreg, [:mode_t], :bool
297
+
298
+ # _Bool (mode_t mode)
299
+ attach_function :issock, :lfp_issock, [:mode_t], :bool
300
+
301
+ # int (int priority)
302
+ attach_function :log_mask, :lfp_log_mask, [:int32], :int32
303
+
304
+ # int (int priority)
305
+ attach_function :log_upto, :lfp_log_upto, [:int32], :int32
306
+
307
+ # off_t (int fd, off_t offset, int whence)
308
+ attach_function :lseek, :lfp_lseek, [:int32, :off_t, :int32], :off_t
309
+
310
+ # int (const char *path, struct stat *buf)
311
+ attach_function :lstat, :lfp_lstat, [:string, :pointer], :int32
312
+
313
+ # int (char *tmplate, unsigned long int flags)
314
+ attach_function :mkostemp, :lfp_mkostemp, [:buffer_inout, :uint64], :int32
315
+
316
+ # int (char *tmplate)
317
+ attach_function :mkstemp, :lfp_mkstemp, [:buffer_inout], :int32
318
+
319
+ # void *(void *addr, size_t length, int prot, int flags, int fd, off_t offset)
320
+ attach_function :mmap, :lfp_mmap, [:buffer_inout, :size_t, :int32, :int32, :int32, :off_t], :pointer
321
+
322
+ # int (void *addr, size_t length)
323
+ attach_function :munmap, :lfp_munmap, [:buffer_inout, :size_t], :int32
324
+
325
+ # int (int incr, int *new_nice)
326
+ attach_function :nice_k, :lfp_nice_k, [:int32, :buffer_inout], :int32
327
+
328
+ # int (int *newfd, const char *pathname, unsigned long int flags, mode_t mode)
329
+ attach_function :open_k, :lfp_open_k, [:buffer_inout, :string, :uint64, :mode_t], :int32
330
+
331
+ # struct opaque_ptr *(const char *name)
332
+ attach_function :opendir, :lfp_opendir, [:string], :pointer
333
+
334
+ # void (const char *ident, int options, int facility)
335
+ attach_function :openlog, :lfp_openlog, [:string, :int32, :int32], :void
336
+
337
+ # int (unsigned long int flags)
338
+ attach_function :openpt, :lfp_openpt, [:uint64], :int32
339
+
340
+ # long int (const char *s, enum lfp_memsize_measure_unit default_unit)
341
+ attach_function :parse_memsize, :lfp_parse_memsize, [:string, :memsize_measure_unit], :int64
342
+
343
+ # int (int pipefd[2], unsigned long int flags)
344
+ attach_function :pipe, :lfp_pipe, [:buffer_in, :uint64], :int32
345
+
346
+ # ssize_t (int fd, void *buf, size_t count, off_t offset)
347
+ attach_function :pread, :lfp_pread, [:int32, :buffer_inout, :size_t, :off_t], :ssize_t
348
+
349
+ # int (int masterfd, char *buf, size_t buflen)
350
+ attach_function :ptsname, :lfp_ptsname, [:int32, :buffer_inout, :size_t], :int32
351
+
352
+ # ssize_t (int fd, const void *buf, size_t count, off_t offset)
353
+ attach_function :pwrite, :lfp_pwrite, [:int32, :buffer_inout, :size_t, :off_t], :ssize_t
354
+
355
+ # int (struct opaque_ptr *dirp, struct dirent *entry, struct dirent **result)
356
+ attach_function :readdir, :lfp_readdir, [:pointer, :pointer, :pointer], :int32
357
+
358
+ # void (struct opaque_ptr *dirp)
359
+ attach_function :rewinddir, :lfp_rewinddir, [:pointer], :void
360
+
361
+ # void (struct opaque_ptr *dirp, long int offset)
362
+ attach_function :seekdir, :lfp_seekdir, [:pointer, :int64], :void
363
+
364
+ # int (int nfds, struct opaque_ptr *readfds, struct opaque_ptr *writefds, struct opaque_ptr *exceptfds, const struct timespec *timeout)
365
+ attach_function :select, :lfp_select, [:int32, :pointer, :pointer, :pointer, :pointer], :int32
366
+
367
+ # ssize_t (int out_fd, int in_fd, off_t offset, size_t nbytes)
368
+ attach_function :sendfile, :lfp_sendfile, [:int32, :int32, :off_t, :size_t], :ssize_t
369
+
370
+ # int (char **newenv)
371
+ attach_function :set_environ, :lfp_set_environ, [:buffer_inout], :int32
372
+
373
+ # int (int value)
374
+ attach_function :set_errno, :lfp_set_errno, [:int32], :int32
375
+
376
+ # int (int fd, _Bool enabled)
377
+ attach_function :set_fd_cloexec, :lfp_set_fd_cloexec, [:int32, :bool], :int32
378
+
379
+ # int (int fd, _Bool enabled)
380
+ attach_function :set_fd_nonblock, :lfp_set_fd_nonblock, [:int32, :bool], :int32
381
+
382
+ # int (int maskpri)
383
+ attach_function :setlogmask, :lfp_setlogmask, [:int32], :int32
384
+
385
+ # int (int resource, const struct rlimit *rlim)
386
+ attach_function :setrlimit, :lfp_setrlimit, [:int32, :pointer], :int32
387
+
388
+ # lfp_sighandler_t (void)
389
+ attach_function :sig_dfl, :lfp_sig_dfl, [], :sighandler
390
+
391
+ # lfp_sighandler_t (void)
392
+ attach_function :sig_err, :lfp_sig_err, [], :sighandler
393
+
394
+ # lfp_sighandler_t (void)
395
+ attach_function :sig_hold, :lfp_sig_hold, [], :sighandler
396
+
397
+ # lfp_sighandler_t (void)
398
+ attach_function :sig_ign, :lfp_sig_ign, [], :sighandler
399
+
400
+ # int (void)
401
+ attach_function :sigrtmax, :lfp_sigrtmax, [], :int32
402
+
403
+ # int (void)
404
+ attach_function :sigrtmin, :lfp_sigrtmin, [], :int32
405
+
406
+ # int (int domain, int type, int protocol, unsigned long int flags)
407
+ attach_function :socket, :lfp_socket, [:int32, :int32, :int32, :uint64], :int32
408
+
409
+ # int (pid_t *restrict pid, const char *restrict path, char *const argv[], char *const envp[], const lfp_spawn_file_actions_t *restrict file_actions, const lfp_spawnattr_t *restrict attr)
410
+ attach_function :spawn, :lfp_spawn, [:buffer_inout, :string, :pointer, :pointer, :pointer, :pointer], :int32
411
+
412
+ # int (pid_t *restrict pid, const char *restrict file, char *const argv[], char *const envp[], const lfp_spawn_file_actions_t *restrict file_actions, const lfp_spawnattr_t *restrict attr)
413
+ attach_function :spawnp, :lfp_spawnp, [:buffer_inout, :string, :pointer, :pointer, :pointer, :pointer], :int32
414
+
415
+ # int (const char *path, struct stat *buf)
416
+ attach_function :stat, :lfp_stat, [:string, :pointer], :int32
417
+
418
+ # char *(const char *s, size_t maxlen)
419
+ attach_function :strndup, :lfp_strndup, [:string, :size_t], :string
420
+
421
+ # size_t (const char *s, size_t maxlen)
422
+ attach_function :strnlen, :lfp_strnlen, [:string, :size_t], :size_t
423
+
424
+ # long int (struct opaque_ptr *dirp)
425
+ attach_function :telldir, :lfp_telldir, [:pointer], :int64
426
+
427
+ # int (const char *path, off_t length)
428
+ attach_function :truncate, :lfp_truncate, [:string, :off_t], :int32
429
+
430
+ # void (int priority, const char *msg, va_list args)
431
+ attach_function :vsyslog, :lfp_vsyslog, [:int32, :string, :pointer], :void
432
+
433
+ # _Bool (int status)
434
+ attach_function :wcoredump, :lfp_wcoredump, [:int32], :bool
435
+
436
+ # int (int status)
437
+ attach_function :wexitstatus, :lfp_wexitstatus, [:int32], :int32
438
+
439
+ # _Bool (int status)
440
+ attach_function :wifcontinued, :lfp_wifcontinued, [:int32], :bool
441
+
442
+ # _Bool (int status)
443
+ attach_function :wifexited, :lfp_wifexited, [:int32], :bool
444
+
445
+ # _Bool (int status)
446
+ attach_function :wifsignaled, :lfp_wifsignaled, [:int32], :bool
447
+
448
+ # _Bool (int status)
449
+ attach_function :wifstopped, :lfp_wifstopped, [:int32], :bool
450
+
451
+ # int (int status)
452
+ attach_function :wstopsig, :lfp_wstopsig, [:int32], :int32
453
+
454
+ # int (int status)
455
+ attach_function :wtermsig, :lfp_wtermsig, [:int32], :int32
456
+
457
+ # int (lfp_spawn_file_actions_t *file_actions, int fd)
458
+ attach_function :spawn_file_actions_addclose, :lfp_spawn_file_actions_addclose, [:pointer, :int32], :int32
459
+
460
+ # int (lfp_spawn_file_actions_t *file_actions, int fd, int newfd)
461
+ attach_function :spawn_file_actions_adddup2, :lfp_spawn_file_actions_adddup2, [:pointer, :int32, :int32], :int32
462
+
463
+ # int (lfp_spawn_file_actions_t *file_actions, int fd)
464
+ attach_function :spawn_file_actions_addkeep, :lfp_spawn_file_actions_addkeep, [:pointer, :int32], :int32
465
+
466
+ # int (lfp_spawn_file_actions_t *file_actions, int fd, const char *path, unsigned long int oflags, mode_t mode)
467
+ attach_function :spawn_file_actions_addopen, :lfp_spawn_file_actions_addopen, [:pointer, :int32, :string, :uint64, :mode_t], :int32
468
+
469
+ # int (lfp_spawn_file_actions_t *file_actions)
470
+ attach_function :spawn_file_actions_destroy, :lfp_spawn_file_actions_destroy, [:pointer], :int32
471
+
472
+ # int (lfp_spawn_file_actions_t *file_actions)
473
+ attach_function :spawn_file_actions_init, :lfp_spawn_file_actions_init, [:pointer], :int32
474
+
475
+ # int (lfp_spawnattr_t *attr)
476
+ attach_function :spawnattr_destroy, :lfp_spawnattr_destroy, [:pointer], :int32
477
+
478
+ # int (lfp_spawnattr_t *attr, char **path)
479
+ attach_function :spawnattr_getctty, :lfp_spawnattr_getctty, [:pointer, :buffer_inout], :int32
480
+
481
+ # int (lfp_spawnattr_t *attr, char **path)
482
+ attach_function :spawnattr_getcwd, :lfp_spawnattr_getcwd, [:pointer, :buffer_inout], :int32
483
+
484
+ # int (lfp_spawnattr_t *attr, unsigned int *flags)
485
+ attach_function :spawnattr_getflags, :lfp_spawnattr_getflags, [:pointer, :buffer_inout], :int32
486
+
487
+ # int (lfp_spawnattr_t *attr, pid_t *pgroup)
488
+ attach_function :spawnattr_getpgroup, :lfp_spawnattr_getpgroup, [:pointer, :buffer_inout], :int32
489
+
490
+ # int (lfp_spawnattr_t *attr, lfp_rlimit_t **rlim, size_t *rlim_size)
491
+ attach_function :spawnattr_getrlimit, :lfp_spawnattr_getrlimit, [:pointer, :pointer, :buffer_inout], :int32
492
+
493
+ # int (lfp_spawnattr_t *attr, struct sigset_t *sigdefault)
494
+ attach_function :spawnattr_getsigdefault, :lfp_spawnattr_getsigdefault, [:pointer, :pointer], :int32
495
+
496
+ # int (lfp_spawnattr_t *attr, struct sigset_t *sigmask)
497
+ attach_function :spawnattr_getsigmask, :lfp_spawnattr_getsigmask, [:pointer, :pointer], :int32
498
+
499
+ # int (lfp_spawnattr_t *attr, mode_t *umask)
500
+ attach_function :spawnattr_getumask, :lfp_spawnattr_getumask, [:pointer, :buffer_inout], :int32
501
+
502
+ # int (lfp_spawnattr_t *attr)
503
+ attach_function :spawnattr_init, :lfp_spawnattr_init, [:pointer], :int32
504
+
505
+ # int (lfp_spawnattr_t *attr, const char *path)
506
+ attach_function :spawnattr_setctty, :lfp_spawnattr_setctty, [:pointer, :string], :int32
507
+
508
+ # int (lfp_spawnattr_t *attr, const char *path)
509
+ attach_function :spawnattr_setcwd, :lfp_spawnattr_setcwd, [:pointer, :string], :int32
510
+
511
+ # int (lfp_spawnattr_t *attr, const unsigned int flags)
512
+ attach_function :spawnattr_setflags, :lfp_spawnattr_setflags, [:pointer, :uint32], :int32
513
+
514
+ # int (lfp_spawnattr_t *attr, const pid_t pgroup)
515
+ attach_function :spawnattr_setpgroup, :lfp_spawnattr_setpgroup, [:pointer, :pid_t], :int32
516
+
517
+ # int (lfp_spawnattr_t *attr, const lfp_rlimit_t *rlim, size_t rlim_size)
518
+ attach_function :spawnattr_setrlimit, :lfp_spawnattr_setrlimit, [:pointer, :pointer, :size_t], :int32
519
+
520
+ # int (lfp_spawnattr_t *attr)
521
+ attach_function :spawnattr_setsid, :lfp_spawnattr_setsid, [:pointer], :int32
522
+
523
+ # int (lfp_spawnattr_t *attr, const struct sigset_t *sigdefault)
524
+ attach_function :spawnattr_setsigdefault, :lfp_spawnattr_setsigdefault, [:pointer, :pointer], :int32
525
+
526
+ # int (lfp_spawnattr_t *attr, const struct sigset_t *sigmask)
527
+ attach_function :spawnattr_setsigmask, :lfp_spawnattr_setsigmask, [:pointer, :pointer], :int32
528
+
529
+ # int (lfp_spawnattr_t *attr, const mode_t umask)
530
+ attach_function :spawnattr_setumask, :lfp_spawnattr_setumask, [:pointer, :mode_t], :int32
531
+
532
+ end
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+ require_relative '../libfixposix'
3
+ require_relative '../libfixposix/ffi'
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LFP
4
+ module LFPFile
5
+ def self.local_so
6
+ list = []
7
+ list += ENV["LIBFIXPOSIX_PATH"].split(";;") if ENV["LIBFIXPOSIX_PATH"]
8
+ list << "fixposix"
9
+ list
10
+ end
11
+ end
12
+ end
13
+ begin
14
+ require "libfixposix/binary"
15
+ rescue LoadError
16
+ # no binary installed, use system wide or ENV var
17
+ end
18
+ require_relative "./libfixposix/ffi"
19
+
20
+ # Extract bound version
21
+ module LFP
22
+ VERSION = "#{LFP::INTERFACE_VERSION}.0"
23
+ Buildinfo.new.tap {|ptr|
24
+ LFP.buildinfo(ptr)
25
+ SO_VERSION = [ptr[:release]].pack("L").unpack("ccc").reverse.join(".")
26
+ }
27
+ COMPLETE_VERSION = {
28
+ gem: LFP::VERSION,
29
+ interface: LFP::INTERFACE_VERSION,
30
+ library: LFP::SO_VERSION,
31
+ }
32
+ if defined? LFP::Binary
33
+ COMPLETE_VERSION[:binary] = {
34
+ gem: LFP::Binary::GEM_VERSION,
35
+ interface: LFP::Binary::API_VERSION,
36
+ library: LFP::Binary::SO_VERSION,
37
+ }
38
+ end
39
+ end
metadata ADDED
@@ -0,0 +1,79 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ffi-bindings-libfixposix
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.5.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Patrick Plenefisch
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2022-11-11 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: ffi
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: ffi-binary-libfixposix
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 0.5.1
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 0.5.1
41
+ description: Direct FFI bindings for libfixposix. Binary not included.
42
+ email:
43
+ - simonpatp@gmail.com
44
+ executables: []
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - Gemfile
49
+ - README.md
50
+ - Rakefile
51
+ - lib/libfixposix.rb
52
+ - lib/libfixposix/ffi.rb
53
+ - lib/libfixposix/version.rb
54
+ homepage: https://github.com/byteit101/subspawn
55
+ licenses: []
56
+ metadata:
57
+ homepage_uri: https://github.com/byteit101/subspawn
58
+ source_code_uri: https://github.com/byteit101/subspawn
59
+ changelog_uri: https://github.com/byteit101/subspawn
60
+ post_install_message:
61
+ rdoc_options: []
62
+ require_paths:
63
+ - lib
64
+ required_ruby_version: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: 2.6.0
69
+ required_rubygems_version: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ version: '0'
74
+ requirements: []
75
+ rubygems_version: 3.0.3.1
76
+ signing_key:
77
+ specification_version: 4
78
+ summary: Direct FFI bindings for libfixposix
79
+ test_files: []