Skip to content

Commit a9a0f59

Browse files
committed
fix: segmentation fault core dumped
1 parent ba5b0fe commit a9a0f59

File tree

4 files changed

+106
-192
lines changed

4 files changed

+106
-192
lines changed

evdev/device.lua

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
local ffi = require("ffi")
22

3-
local input = require("evdev.linux.input")
43
local Event = require("evdev.event")
5-
local evdev = require("evdev.libevdev")
4+
local input = require("evdev.linux.input")
65
local util = require("evdev.util")
76

8-
local libevdev_grab_mode = evdev.enum.libevdev_grab_mode
9-
local libevdev_read_flag = evdev.enum.libevdev_read_flag
7+
local libevdev = require("evdev.libevdev")
8+
local evdev_enum = libevdev.enum
9+
local evdev = libevdev.lib
10+
11+
local libevdev_grab_mode = evdev_enum.libevdev_grab_mode
12+
local libevdev_read_flag = evdev_enum.libevdev_read_flag
1013
local open_flag = util.enum.open_flag
1114

1215
local new_libevdev_ptr = ffi.typeof("struct libevdev *[1]")

evdev/libevdev-uinput.lua

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,17 @@ const char* libevdev_uinput_get_devnode(struct libevdev_uinput *uinput_dev);
1515
int libevdev_uinput_write_event(const struct libevdev_uinput *uinput_dev, unsigned int type, unsigned int code, int value);
1616
]])
1717

18-
local c = ffi.load("evdev")
18+
---@class libevdev_uinput
19+
---@field libevdev_uinput_create_from_device fun(dev: ffi.cdata*, uinput_fd: number, uinput_dev: ffi.cdata*): number
20+
---@field libevdev_uinput_destroy fun(uinput_dev: ffi.cdata*): nil
21+
---@field libevdev_uinput_get_fd fun(uinput_dev: ffi.cdata*): number
22+
---@field libevdev_uinput_get_syspath fun(uinput_dev: ffi.cdata*): ffi.cdata*
23+
---@field libevdev_uinput_get_devnode fun(uinput_dev: ffi.cdata*): ffi.cdata*
24+
---@field libevdev_uinput_write_event fun(uinput_dev: ffi.cdata*, type: number, code: number, value: number): number
25+
local libevdev_uinput = ffi.load("evdev")
1926

2027
local mod = {
21-
libevdev_uinput_create_from_device = c.libevdev_uinput_create_from_device,
22-
libevdev_uinput_destroy = c.libevdev_uinput_destroy,
23-
libevdev_uinput_get_fd = c.libevdev_uinput_get_fd,
24-
libevdev_uinput_get_syspath = c.libevdev_uinput_get_syspath,
25-
libevdev_uinput_get_devnode = c.libevdev_uinput_get_devnode,
26-
libevdev_uinput_write_event = c.libevdev_uinput_write_event,
28+
lib = libevdev_uinput,
2729
}
2830

2931
return mod

evdev/libevdev.lua

Lines changed: 84 additions & 171 deletions
Original file line numberDiff line numberDiff line change
@@ -131,8 +131,6 @@ int libevdev_property_from_name_n(const char *name, size_t len);
131131
int libevdev_get_repeat(const struct libevdev *dev, int *delay, int *period);
132132
]])
133133

134-
local c = ffi.load("evdev")
135-
136134
---@diagnostic disable: undefined-field
137135

138136
local enum = {
@@ -198,177 +196,92 @@ enum.libevdev_led_value = {
198196
OFF = enum.LIBEVDEV_LED_OFF,
199197
}
200198

199+
---@class libevdev: ffi.namespace*
200+
---@field libevdev_new fun(): ffi.cdata*
201+
---@field libevdev_new_from_fd fun(fd: number, dev: ffi.cdata*): number
202+
---@field libevdev_free fun(dev: ffi.cdata*): nil
203+
---@field libevdev_set_log_function fun(logfunc: ffi.cdata*, data: ffi.cdata*): nil
204+
---@field libevdev_set_log_priority fun(priority: number): nil
205+
---@field libevdev_get_log_priority fun(): number
206+
---@field libevdev_set_device_log_function fun(dev: ffi.cdata*, logfunc: ffi.cdata*, priority: number, data: ffi.cdata*): nil
207+
---@field libevdev_grab fun(dev: ffi.cdata*, grab: number): number
208+
---@field libevdev_set_fd fun(dev: ffi.cdata*, fd: number): number
209+
---@field libevdev_change_fd fun(dev: ffi.cdata*, fd: number): number
210+
---@field libevdev_get_fd fun(dev: ffi.cdata*): number
211+
---@field libevdev_next_event fun(dev: ffi.cdata*, flags: number, ev: ffi.cdata*): number
212+
---@field libevdev_has_event_pending fun(dev: ffi.cdata*): number
213+
---@field libevdev_get_name fun(dev: ffi.cdata*): ffi.cdata*
214+
---@field libevdev_set_name fun(dev: ffi.cdata*, name: ffi.cdata*): nil
215+
---@field libevdev_get_phys fun(dev: ffi.cdata*): ffi.cdata*
216+
---@field libevdev_set_phys fun(dev: ffi.cdata*, phys: ffi.cdata*): nil
217+
---@field libevdev_get_uniq fun(dev: ffi.cdata*): ffi.cdata*
218+
---@field libevdev_set_uniq fun(dev: ffi.cdata*, uniq: ffi.cdata*): nil
219+
---@field libevdev_get_id_product fun(dev: ffi.cdata*): number
220+
---@field libevdev_set_id_product fun(dev: ffi.cdata*, product_id: number): nil
221+
---@field libevdev_get_id_vendor fun(dev: ffi.cdata*): number
222+
---@field libevdev_set_id_vendor fun(dev: ffi.cdata*, vendor_id: number): nil
223+
---@field libevdev_get_id_bustype fun(dev: ffi.cdata*): number
224+
---@field libevdev_set_id_bustype fun(dev: ffi.cdata*, bustype: number): nil
225+
---@field libevdev_get_id_version fun(dev: ffi.cdata*): number
226+
---@field libevdev_set_id_version fun(dev: ffi.cdata*, version: number): nil
227+
---@field libevdev_get_driver_version fun(dev: ffi.cdata*): number
228+
---@field libevdev_has_property fun(dev: ffi.cdata*, prop: number): number
229+
---@field libevdev_enable_property fun(dev: ffi.cdata*, prop: number): number
230+
---@field libevdev_disable_property fun(dev: ffi.cdata*, prop: number): number
231+
---@field libevdev_has_event_type fun(dev: ffi.cdata*, type: number): number
232+
---@field libevdev_has_event_code fun(dev: ffi.cdata*, type: number, code: number): number
233+
---@field libevdev_get_abs_minimum fun(dev: ffi.cdata*, code: number): number
234+
---@field libevdev_get_abs_maximum fun(dev: ffi.cdata*, code: number): number
235+
---@field libevdev_get_abs_fuzz fun(dev: ffi.cdata*, code: number): number
236+
---@field libevdev_get_abs_flat fun(dev: ffi.cdata*, code: number): number
237+
---@field libevdev_get_abs_resolution fun(dev: ffi.cdata*, code: number): number
238+
---@field libevdev_get_abs_info fun(dev: ffi.cdata*, code: number): ffi.cdata*
239+
---@field libevdev_get_event_value fun(dev: ffi.cdata*, type: number, code: number): number
240+
---@field libevdev_set_event_value fun(dev: ffi.cdata*, type: number, code: number, value: number): number
241+
---@field libevdev_fetch_event_value fun(dev: ffi.cdata*, type: number, code: number, value: ffi.cdata*): number
242+
---@field libevdev_get_slot_value fun(dev: ffi.cdata*, slot: number, code: number): number
243+
---@field libevdev_set_slot_value fun(dev: ffi.cdata*, slot: number, code: number, value: number): number
244+
---@field libevdev_fetch_slot_value fun(dev: ffi.cdata*, slot: number, code: number, value: ffi.cdata*): number
245+
---@field libevdev_get_num_slots fun(dev: ffi.cdata*): number
246+
---@field libevdev_get_current_slot fun(dev: ffi.cdata*): number
247+
---@field libevdev_set_abs_minimum fun(dev: ffi.cdata*, code: number, val: number): nil
248+
---@field libevdev_set_abs_maximum fun(dev: ffi.cdata*, code: number, val: number): nil
249+
---@field libevdev_set_abs_fuzz fun(dev: ffi.cdata*, code: number, val: number): nil
250+
---@field libevdev_set_abs_flat fun(dev: ffi.cdata*, code: number, val: number): nil
251+
---@field libevdev_set_abs_resolution fun(dev: ffi.cdata*, code: number, val: number): nil
252+
---@field libevdev_set_abs_info fun(dev: ffi.cdata*, code: number, abs: ffi.cdata*): nil
253+
---@field libevdev_enable_event_type fun(dev: ffi.cdata*, type: number): number
254+
---@field libevdev_disable_event_type fun(dev: ffi.cdata*, type: number): number
255+
---@field libevdev_enable_event_code fun(dev: ffi.cdata*, type: number, code: number, data: ffi.cdata*): number
256+
---@field libevdev_disable_event_code fun(dev: ffi.cdata*, type: number, code: number): number
257+
---@field libevdev_kernel_set_abs_info fun(dev: ffi.cdata*, code: number, abs: ffi.cdata*): number
258+
---@field libevdev_kernel_set_led_value fun(dev: ffi.cdata*, code: number, value: number): number
259+
---@field libevdev_kernel_set_led_values fun(dev: ffi.cdata*, code: number, value: number, ...): number
260+
---@field libevdev_set_clock_id fun(dev: ffi.cdata*, clockid: number): number
261+
---@field libevdev_event_is_type fun(ev: ffi.cdata*, type: number): number
262+
---@field libevdev_event_is_code fun(ev: ffi.cdata*, type: number, code: number): number
263+
---@field libevdev_event_type_get_name fun(type: number): ffi.cdata*
264+
---@field libevdev_event_code_get_name fun(type: number, code: number): ffi.cdata*
265+
---@field libevdev_property_get_name fun(prop: number): ffi.cdata*
266+
---@field libevdev_event_type_get_max fun(type: number): number
267+
---@field libevdev_event_type_from_name fun(name: ffi.cdata*): number
268+
---@field libevdev_event_type_from_name_n fun(name: ffi.cdata*, len: number): number
269+
---@field libevdev_event_code_from_name fun(type: number, name: ffi.cdata*): number
270+
---@field libevdev_event_code_from_name_n fun(type: number, name: ffi.cdata*, len: number): number
271+
---@field libevdev_event_value_from_name fun(type: number, code: number, name: ffi.cdata*): number
272+
---@field libevdev_event_type_from_code_name fun(name: ffi.cdata*): number
273+
---@field libevdev_event_type_from_code_name_n fun(name: ffi.cdata*, len: number): number
274+
---@field libevdev_event_code_from_code_name fun(name: ffi.cdata*): number
275+
---@field libevdev_event_code_from_code_name_n fun(name: ffi.cdata*, len: number): number
276+
---@field libevdev_event_value_from_name_n fun(type: number, code: number, name: ffi.cdata*, len: number): number
277+
---@field libevdev_property_from_name fun(name: ffi.cdata*): number
278+
---@field libevdev_property_from_name_n fun(name: ffi.cdata*, len: number): number
279+
---@field libevdev_get_repeat fun(dev: ffi.cdata*, delay: ffi.cdata*, period: ffi.cdata*): number
280+
local libevdev = ffi.load("evdev")
281+
201282
local mod = {
202283
enum = enum,
203-
204-
---@diagnostic disable: undefined-field
205-
206-
---@type fun(): ffi.cdata*
207-
libevdev_new = c.libevdev_new,
208-
---@type fun(fd: number, dev: ffi.cdata*): number
209-
libevdev_new_from_fd = c.libevdev_new_from_fd,
210-
---@type fun(dev: ffi.cdata*): nil
211-
libevdev_free = c.libevdev_free,
212-
213-
---@type fun(logfunc: ffi.cdata*, data: ffi.cdata*): nil
214-
libevdev_set_log_function = c.libevdev_set_log_function,
215-
---@type fun(priority: number): nil
216-
libevdev_set_log_priority = c.libevdev_set_log_priority,
217-
---@type fun(): number
218-
libevdev_get_log_priority = c.libevdev_get_log_priority,
219-
---@type fun(dev: ffi.cdata*, logfunc: ffi.cdata*, priority: number, data: ffi.cdata*): nil
220-
libevdev_set_device_log_function = c.libevdev_set_device_log_function,
221-
222-
---@type fun(dev: ffi.cdata*, grab: number): number
223-
libevdev_grab = c.libevdev_grab,
224-
---@type fun(dev: ffi.cdata*, fd: number): number
225-
libevdev_set_fd = c.libevdev_set_fd,
226-
---@type fun(dev: ffi.cdata*, fd: number): number
227-
libevdev_change_fd = c.libevdev_change_fd,
228-
---@type fun(dev: ffi.cdata*): number
229-
libevdev_get_fd = c.libevdev_get_fd,
230-
231-
---@type fun(dev: ffi.cdata*, flags: number, ev: ffi.cdata*): number
232-
libevdev_next_event = c.libevdev_next_event,
233-
---@type fun(dev: ffi.cdata*): number
234-
libevdev_has_event_pending = c.libevdev_has_event_pending,
235-
---@type fun(dev: ffi.cdata*): ffi.cdata*
236-
libevdev_get_name = c.libevdev_get_name,
237-
---@type fun(dev: ffi.cdata*, name: ffi.cdata*): nil
238-
libevdev_set_name = c.libevdev_set_name,
239-
---@type fun(dev: ffi.cdata*): ffi.cdata*
240-
libevdev_get_phys = c.libevdev_get_phys,
241-
---@type fun(dev: ffi.cdata*, phys: ffi.cdata*): nil
242-
libevdev_set_phys = c.libevdev_set_phys,
243-
---@type fun(dev: ffi.cdata*): ffi.cdata*
244-
libevdev_get_uniq = c.libevdev_get_uniq,
245-
---@type fun(dev: ffi.cdata*, uniq: ffi.cdata*): nil
246-
libevdev_set_uniq = c.libevdev_set_uniq,
247-
---@type fun(dev: ffi.cdata*): number
248-
libevdev_get_id_product = c.libevdev_get_id_product,
249-
---@type fun(dev: ffi.cdata*, product_id: number): nil
250-
libevdev_set_id_product = c.libevdev_set_id_product,
251-
---@type fun(dev: ffi.cdata*): number
252-
libevdev_get_id_vendor = c.libevdev_get_id_vendor,
253-
---@type fun(dev: ffi.cdata*, vendor_id: number): nil
254-
libevdev_set_id_vendor = c.libevdev_set_id_vendor,
255-
---@type fun(dev: ffi.cdata*): number
256-
libevdev_get_id_bustype = c.libevdev_get_id_bustype,
257-
---@type fun(dev: ffi.cdata*, bustype: number): nil
258-
libevdev_set_id_bustype = c.libevdev_set_id_bustype,
259-
---@type fun(dev: ffi.cdata*): number
260-
libevdev_get_id_version = c.libevdev_get_id_version,
261-
---@type fun(dev: ffi.cdata*, version: number): nil
262-
libevdev_set_id_version = c.libevdev_set_id_version,
263-
---@type fun(dev: ffi.cdata*): number
264-
libevdev_get_driver_version = c.libevdev_get_driver_version,
265-
---@type fun(dev: ffi.cdata*, prop: number): number
266-
libevdev_has_property = c.libevdev_has_property,
267-
---@type fun(dev: ffi.cdata*, prop: number): number
268-
libevdev_enable_property = c.libevdev_enable_property,
269-
---@type fun(dev: ffi.cdata*, prop: number): number
270-
libevdev_disable_property = c.libevdev_disable_property,
271-
---@type fun(dev: ffi.cdata*, type: number): number
272-
libevdev_has_event_type = c.libevdev_has_event_type,
273-
---@type fun(dev: ffi.cdata*, type: number, code: number): number
274-
libevdev_has_event_code = c.libevdev_has_event_code,
275-
---@type fun(dev: ffi.cdata*, code: number): number
276-
libevdev_get_abs_minimum = c.libevdev_get_abs_minimum,
277-
---@type fun(dev: ffi.cdata*, code: number): number
278-
libevdev_get_abs_maximum = c.libevdev_get_abs_maximum,
279-
---@type fun(dev: ffi.cdata*, code: number): number
280-
libevdev_get_abs_fuzz = c.libevdev_get_abs_fuzz,
281-
---@type fun(dev: ffi.cdata*, code: number): number
282-
libevdev_get_abs_flat = c.libevdev_get_abs_flat,
283-
---@type fun(dev: ffi.cdata*, code: number): number
284-
libevdev_get_abs_resolution = c.libevdev_get_abs_resolution,
285-
---@type fun(dev: ffi.cdata*, code: number): ffi.cdata*
286-
libevdev_get_abs_info = c.libevdev_get_abs_info,
287-
---@type fun(dev: ffi.cdata*, type: number, code: number): number
288-
libevdev_get_event_value = c.libevdev_get_event_value,
289-
---@type fun(dev: ffi.cdata*, type: number, code: number, value: number): number
290-
libevdev_set_event_value = c.libevdev_set_event_value,
291-
---@type fun(dev: ffi.cdata*, type: number, code: number, value: ffi.cdata*): number
292-
libevdev_fetch_event_value = c.libevdev_fetch_event_value,
293-
---@type fun(dev: ffi.cdata*, slot: number, code: number): number
294-
libevdev_get_slot_value = c.libevdev_get_slot_value,
295-
---@type fun(dev: ffi.cdata*, slot: number, code: number, value: number): number
296-
libevdev_set_slot_value = c.libevdev_set_slot_value,
297-
---@type fun(dev: ffi.cdata*, slot: number, code: number, value: ffi.cdata*): number
298-
libevdev_fetch_slot_value = c.libevdev_fetch_slot_value,
299-
---@type fun(dev: ffi.cdata*): number
300-
libevdev_get_num_slots = c.libevdev_get_num_slots,
301-
---@type fun(dev: ffi.cdata*): number
302-
libevdev_get_current_slot = c.libevdev_get_current_slot,
303-
---@type fun(dev: ffi.cdata*, code: number, val: number): nil
304-
libevdev_set_abs_minimum = c.libevdev_set_abs_minimum,
305-
---@type fun(dev: ffi.cdata*, code: number, val: number): nil
306-
libevdev_set_abs_maximum = c.libevdev_set_abs_maximum,
307-
---@type fun(dev: ffi.cdata*, code: number, val: number): nil
308-
libevdev_set_abs_fuzz = c.libevdev_set_abs_fuzz,
309-
---@type fun(dev: ffi.cdata*, code: number, val: number): nil
310-
libevdev_set_abs_flat = c.libevdev_set_abs_flat,
311-
---@type fun(dev: ffi.cdata*, code: number, val: number): nil
312-
libevdev_set_abs_resolution = c.libevdev_set_abs_resolution,
313-
---@type fun(dev: ffi.cdata*, code: number, abs: ffi.cdata*): nil
314-
libevdev_set_abs_info = c.libevdev_set_abs_info,
315-
---@type fun(dev: ffi.cdata*, type: number): number
316-
libevdev_enable_event_type = c.libevdev_enable_event_type,
317-
---@type fun(dev: ffi.cdata*, type: number): number
318-
libevdev_disable_event_type = c.libevdev_disable_event_type,
319-
---@type fun(dev: ffi.cdata*, type: number, code: number, data: ffi.cdata*): number
320-
libevdev_enable_event_code = c.libevdev_enable_event_code,
321-
---@type fun(dev: ffi.cdata*, type: number, code: number): number
322-
libevdev_disable_event_code = c.libevdev_disable_event_code,
323-
---@type fun(dev: ffi.cdata*, code: number, abs: ffi.cdata*): number
324-
libevdev_kernel_set_abs_info = c.libevdev_kernel_set_abs_info,
325-
326-
---@type fun(dev: ffi.cdata*, code: number, value: number): number
327-
libevdev_kernel_set_led_value = c.libevdev_kernel_set_led_value,
328-
---@type fun(dev: ffi.cdata*, code: number, value: number, ...): number
329-
libevdev_kernel_set_led_values = c.libevdev_kernel_set_led_values,
330-
---@type fun(dev: ffi.cdata*, clockid: number): number
331-
libevdev_set_clock_id = c.libevdev_set_clock_id,
332-
---@type fun(ev: ffi.cdata*, type: number): number
333-
libevdev_event_is_type = c.libevdev_event_is_type,
334-
---@type fun(ev: ffi.cdata*, type: number, code: number): number
335-
libevdev_event_is_code = c.libevdev_event_is_code,
336-
---@type fun(type: number): ffi.cdata*
337-
libevdev_event_type_get_name = c.libevdev_event_type_get_name,
338-
---@type fun(type: number, code: number): ffi.cdata*
339-
libevdev_event_code_get_name = c.libevdev_event_code_get_name,
340-
---@type fun(prop: number): ffi.cdata*
341-
libevdev_property_get_name = c.libevdev_property_get_name,
342-
---@type fun(type: number): number
343-
libevdev_event_type_get_max = c.libevdev_event_type_get_max,
344-
---@type fun(name: ffi.cdata*): number
345-
libevdev_event_type_from_name = c.libevdev_event_type_from_name,
346-
---@type fun(name: ffi.cdata*, len: number): number
347-
libevdev_event_type_from_name_n = c.libevdev_event_type_from_name_n,
348-
---@type fun(type: number, name: ffi.cdata*): number
349-
libevdev_event_code_from_name = c.libevdev_event_code_from_name,
350-
---@type fun(type: number, name: ffi.cdata*, len: number): number
351-
libevdev_event_code_from_name_n = c.libevdev_event_code_from_name_n,
352-
---@type fun(type: number, code: number, name: ffi.cdata*): number
353-
libevdev_event_value_from_name = c.libevdev_event_value_from_name,
354-
---@type fun(name: ffi.cdata*): number
355-
libevdev_event_type_from_code_name = c.libevdev_event_type_from_code_name,
356-
---@type fun(name: ffi.cdata*, len: number): number
357-
libevdev_event_type_from_code_name_n = c.libevdev_event_type_from_code_name_n,
358-
---@type fun(name: ffi.cdata*): number
359-
libevdev_event_code_from_code_name = c.libevdev_event_code_from_code_name,
360-
---@type fun(name: ffi.cdata*, len: number): number
361-
libevdev_event_code_from_code_name_n = c.libevdev_event_code_from_code_name_n,
362-
---@type fun(type: number, code: number, name: ffi.cdata*, len: number): number
363-
libevdev_event_value_from_name_n = c.libevdev_event_value_from_name_n,
364-
---@type fun(name: ffi.cdata*): number
365-
libevdev_property_from_name = c.libevdev_property_from_name,
366-
---@type fun(name: ffi.cdata*, len: number): number
367-
libevdev_property_from_name_n = c.libevdev_property_from_name_n,
368-
---@type fun(dev: ffi.cdata*, delay: ffi.cdata*, period: ffi.cdata*): number
369-
libevdev_get_repeat = c.libevdev_get_repeat,
370-
371-
---@diagnostic enable: undefined-field
284+
lib = libevdev,
372285
}
373286

374287
return mod

evdev/util.lua

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,10 @@ int open(const char *pathname, int flags, ...);
66
char *strerror (int errnum);
77
]])
88

9-
---@diagnostic disable: undefined-field
10-
11-
---@type fun(errnum: number): ffi.cdata*
12-
local strerror = ffi.C.strerror
13-
---@type fun(pathname: string, flags: number, ...): number
14-
local open = ffi.C.open
15-
16-
---@diagnostic enable: undefined-field
9+
---@class clib: ffi.namespace*
10+
---@field strerror fun(errnum: number): ffi.cdata*
11+
---@field open fun(pathname: string, flags: number, ...): number
12+
local clib = ffi.C
1713

1814
if not table.unpack then
1915
table.unpack = unpack
@@ -59,13 +55,13 @@ end
5955
---@param flags number[]
6056
---@return number fd file descriptor
6157
function mod.open_file(pathname, flags)
62-
return open(pathname, mod.bit_or(flags))
58+
return clib.open(pathname, mod.bit_or(flags))
6359
end
6460

6561
---@param errnum number
6662
---@return string err
6763
function mod.err_string(errnum)
68-
return mod.to_string(strerror(errnum))
64+
return mod.to_string(clib.strerror(errnum))
6965
end
7066

7167
return mod

0 commit comments

Comments
 (0)