Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package umockdev for openSUSE:Factory checked in at 2021-09-20 23:32:57 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/umockdev (Old) and /work/SRC/openSUSE:Factory/.umockdev.new.1899 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "umockdev" Mon Sep 20 23:32:57 2021 rev:5 rq:920069 version:0.16.3 Changes: -------- --- /work/SRC/openSUSE:Factory/umockdev/umockdev.changes 2021-09-13 16:25:41.898825669 +0200 +++ /work/SRC/openSUSE:Factory/.umockdev.new.1899/umockdev.changes 2021-09-20 23:34:31.871275720 +0200 @@ -1,0 +2,13 @@ +Wed Sep 15 08:15:19 UTC 2021 - Atri Bhattacharya <badshah...@gmail.com> + +- Update to version 0.16.3: + * Several pcap replay fixes. + * Immediately create "bus" and "class" directories in /sys to + fix udev enumerator (gh#martinpitt/umockdev#144). + * preload: Avoid some unaligned access to fix failure on sparc + (gh#martinpitt/umockdev#147). + * Fix build on Alpine. + * Don't build with -Werror by default; use meson setup --werror + to re-enable. + +------------------------------------------------------------------- Old: ---- umockdev-0.16.2.tar.xz New: ---- umockdev-0.16.3.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ umockdev.spec ++++++ --- /var/tmp/diff_new_pack.sfpGaY/_old 2021-09-20 23:34:32.263276205 +0200 +++ /var/tmp/diff_new_pack.sfpGaY/_new 2021-09-20 23:34:32.263276205 +0200 @@ -19,7 +19,7 @@ %define shlib libumockdev0 %define shlibpre libumockdev-preload0 Name: umockdev -Version: 0.16.2 +Version: 0.16.3 Release: 0 Summary: Mock hardware devices for creating unit tests and bug reporting License: LGPL-2.1-or-later ++++++ umockdev-0.16.2.tar.xz -> umockdev-0.16.3.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umockdev-0.16.2/NEWS new/umockdev-0.16.3/NEWS --- old/umockdev-0.16.2/NEWS 2021-08-25 11:26:23.118824700 +0200 +++ new/umockdev-0.16.3/NEWS 2021-09-15 07:38:31.155431500 +0200 @@ -1,3 +1,11 @@ +## [0.16.3] - 2021-09-15 +- Several pcap replay fixes (thanks Benjamin Berg) +- Immediately create "bus" and "class" directories in /sys to fix udev enumerator + (thanks David Lechner) (#144) +- preload: Avoid some unaligned access to fix failure on sparc (#147) +- Fix build on Alpine +- Don't build with `-Werror` by default; use `meson setup --werror` to re-enable + ## [0.16.2] - 2021-08-25 - Implement pcap control transfer replaying - Fix Coverity errors @@ -30,8 +38,6 @@ ## [0.15.2] - 2020-11-25 - Fix "installed-tests" setup to not produce stderr output with grep ??? 3.5 -[0.15.2]: https://github.com/martinpitt/umockdev/compare/0.15.1...0.15.2 - ## [0.15.1] - 2020-11-17 - Fix include file install location (#111) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umockdev-0.16.2/docs/reference/meson.build new/umockdev-0.16.3/docs/reference/meson.build --- old/umockdev-0.16.2/docs/reference/meson.build 2021-08-25 11:26:23.126824900 +0200 +++ new/umockdev-0.16.3/docs/reference/meson.build 2021-09-15 07:38:31.167431600 +0200 @@ -3,18 +3,13 @@ output: 'version.xml', configuration: conf) -# HACK: need to find valac'ed umockdev.c for gtk-doc; https://github.com/mesonbuild/meson/issues/3892 -# this isn't predictable between meson versions -umockdev_c = run_command('sh', '-ec', 'find -name umockdev.c| xargs dirname').stdout().strip() -umockdev_ioctl_c = run_command('sh', '-ec', 'find -name umockdev-ioctl.c| xargs dirname').stdout().strip() - gnome = import('gnome') gnome.gtkdoc('umockdev', main_xml: 'umockdev-docs.xml', - src_dir: [meson.build_root(), umockdev_c, umockdev_ioctl_c], + src_dir: [meson.build_root()], content_files: [version_xml], + gobject_typesfile: 'umockdev.types', ignore_headers: ['uevent_sender.h', 'ioctl_tree.h', 'debug.h'], - scan_args: ['--rebuild-types'], dependencies: [glib, gobject, declare_dependency(link_with : [umockdev_lib])], install: true, ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umockdev-0.16.2/docs/reference/umockdev.types new/umockdev-0.16.3/docs/reference/umockdev.types --- old/umockdev-0.16.2/docs/reference/umockdev.types 1970-01-01 01:00:00.000000000 +0100 +++ new/umockdev-0.16.3/docs/reference/umockdev.types 2021-09-15 07:38:31.167431600 +0200 @@ -0,0 +1,4 @@ +umockdev_ioctl_base_get_type +umockdev_ioctl_client_get_type +umockdev_ioctl_data_get_type +umockdev_testbed_get_type diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umockdev-0.16.2/meson.build new/umockdev-0.16.3/meson.build --- old/umockdev-0.16.2/meson.build 2021-08-25 11:26:23.130824800 +0200 +++ new/umockdev-0.16.3/meson.build 2021-09-15 07:38:31.167431600 +0200 @@ -7,7 +7,6 @@ lib_version = '0.3.0' add_project_arguments( - '-Werror', '-Werror=missing-prototypes', '-Werror=strict-prototypes', '-Werror=nested-externs', @@ -21,11 +20,13 @@ '-Werror=unused-variable', '-Werror=return-type', '-Werror=uninitialized', + # experimental: first check this on all Debian architectures + '-Wcast-align', language: 'c') # let's not clutter the code with too many #ifdefs if get_option('b_ndebug') == 'true' - add_project_arguments('-Wno-error=unused-but-set-variable', language: 'c') + add_project_arguments('-Wno-error=unused-but-set-variable', '-Wno-error=unused-variable', language: 'c') endif conf = configuration_data() @@ -121,7 +122,9 @@ '-Wl,--no-undefined', '-Wl,--version-script,@0@/umockdev.map'.format(srcdir), ], - vala_args: [ '--vapidir=@0@/src'.format(meson.current_source_dir()) ], + vala_args: ['--define=INTERNAL_REGISTER_API', + '--define=INTERNAL_UNREGISTER_PATH_API', + '--vapidir=@0@/src'.format(meson.current_source_dir())], include_directories: include_directories('src'), version: lib_version, install: true, @@ -172,7 +175,9 @@ 'src/debug.c'], dependencies: [glib, gobject, gio_unix, vapi_posix, vapi_config, vapi_ioctl, libpcap], link_with: [umockdev_utils_lib], - vala_args: [ '--vapidir=@0@/src'.format(meson.current_source_dir()) ], + vala_args: ['--define=INTERNAL_REGISTER_API', + '--define=INTERNAL_UNREGISTER_ALL_API', + '--vapidir=@0@/src'.format(meson.current_source_dir())], include_directories: include_directories('src'), install: true) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umockdev-0.16.2/src/ioctl.vapi new/umockdev-0.16.3/src/ioctl.vapi --- old/umockdev-0.16.2/src/ioctl.vapi 2021-08-25 11:26:23.130824800 +0200 +++ new/umockdev-0.16.3/src/ioctl.vapi 2021-09-15 07:38:31.167431600 +0200 @@ -46,13 +46,13 @@ [CCode (cheader_filename = "linux/usbdevice_fs.h")] public const int USBDEVFS_CAP_SUSPEND; - [CCode (cheader_filename = "sys/ioctl.h")] + [CCode (cheader_filename = "linux/ioctl.h")] public const int _IOC_SIZEBITS; - [CCode (cheader_filename = "sys/ioctl.h")] + [CCode (cheader_filename = "linux/ioctl.h")] public const int _IOC_SIZESHIFT; - [CCode (cheader_filename = "sys/ioctl.h")] + [CCode (cheader_filename = "linux/ioctl.h")] public const int _IOC_TYPEBITS; - [CCode (cheader_filename = "sys/ioctl.h")] + [CCode (cheader_filename = "linux/ioctl.h")] public const int _IOC_TYPESHIFT; [CCode (cname="struct usbdevfs_connectinfo", cheader_filename = "linux/usbdevice_fs.h")] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umockdev-0.16.2/src/ioctl_tree.c new/umockdev-0.16.3/src/ioctl_tree.c --- old/umockdev-0.16.2/src/ioctl_tree.c 2021-08-25 11:26:23.130824800 +0200 +++ new/umockdev-0.16.3/src/ioctl_tree.c 2021-09-15 07:38:31.167431600 +0200 @@ -31,6 +31,8 @@ #define TRUE 1 #define FALSE 0 +#define UNUSED __attribute__ ((unused)) + static void * callocx (size_t nmemb, size_t size) { @@ -816,7 +818,7 @@ ***********************************/ static int -ioctl_execute_success(const ioctl_tree * node, IOCTL_REQUEST_TYPE id, void *arg, int *ret) +ioctl_execute_success(UNUSED const ioctl_tree * _node, UNUSED IOCTL_REQUEST_TYPE _id, UNUSED void *_arg, int *ret) { errno = 0; *ret = 0; @@ -824,7 +826,7 @@ } static int -ioctl_execute_enodata(const ioctl_tree * node, IOCTL_REQUEST_TYPE id, void *arg, int *ret) +ioctl_execute_enodata(UNUSED const ioctl_tree * _node, UNUSED IOCTL_REQUEST_TYPE _id, UNUSED void *_arg, int *ret) { errno = ENODATA; *ret = -1; @@ -832,7 +834,7 @@ } static int -ioctl_execute_enotty(const ioctl_tree * node, IOCTL_REQUEST_TYPE id, void *arg, int *ret) +ioctl_execute_enotty(UNUSED const ioctl_tree * _node, UNUSED IOCTL_REQUEST_TYPE _id, UNUSED void *_arg, int *ret) { errno = ENOTTY; *ret = -1; @@ -840,7 +842,7 @@ } static ioctl_tree * -ioctl_insertion_parent_stateless(ioctl_tree * tree, ioctl_tree * node) +ioctl_insertion_parent_stateless(ioctl_tree * tree, UNUSED ioctl_tree *_node) { return tree; } @@ -956,7 +958,7 @@ return NULL; } -const int ioctl_data_size_by_id(IOCTL_REQUEST_TYPE id) +int ioctl_data_size_by_id(IOCTL_REQUEST_TYPE id) { ioctl_type *cur; for (cur = ioctl_db; cur->name[0] != '\0'; ++cur) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umockdev-0.16.2/src/ioctl_tree.h new/umockdev-0.16.3/src/ioctl_tree.h --- old/umockdev-0.16.2/src/ioctl_tree.h 2021-08-25 11:26:23.130824800 +0200 +++ new/umockdev-0.16.3/src/ioctl_tree.h 2021-09-15 07:38:31.167431600 +0200 @@ -95,7 +95,7 @@ return (t != NULL) ? t : tree; } -const int ioctl_data_size_by_id(IOCTL_REQUEST_TYPE id); +int ioctl_data_size_by_id(IOCTL_REQUEST_TYPE id); /* database of known ioctls; return NULL for unknown ones */ const ioctl_type *ioctl_type_get_by_id(IOCTL_REQUEST_TYPE id); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umockdev-0.16.2/src/libumockdev-preload.c new/umockdev-0.16.3/src/libumockdev-preload.c --- old/umockdev-0.16.2/src/libumockdev-preload.c 2021-08-25 11:26:23.130824800 +0200 +++ new/umockdev-0.16.3/src/libumockdev-preload.c 2021-09-15 07:38:31.167431600 +0200 @@ -34,10 +34,11 @@ #include <fcntl.h> #include <dlfcn.h> #include <limits.h> -#include <stdlib.h> #include <stdarg.h> -#include <string.h> +#include <stddef.h> #include <stdio.h> +#include <stdlib.h> +#include <string.h> #include <time.h> #include <signal.h> #include <inttypes.h> @@ -199,14 +200,14 @@ static char buf[PATH_MAX]; static char link[PATH_MAX]; int name_offset; - int i, major, minor, orig_errno; + int major, minor, orig_errno; name_offset = snprintf(buf, sizeof(buf), "%s/dev/.node/", getenv("UMOCKDEV_DIR")); buf[sizeof(buf) - 1] = 0; /* append nodename and replace / with _ */ strncpy(buf + name_offset, nodename, sizeof(buf) - name_offset - 1); - for (i = name_offset; i < sizeof(buf); ++i) + for (size_t i = name_offset; i < sizeof(buf); ++i) if (buf[i] == '/') buf[i] = '_'; @@ -373,7 +374,7 @@ } static int -netlink_bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen) +netlink_bind(int sockfd) { libc_func(bind, int, int, const struct sockaddr *, socklen_t); @@ -397,7 +398,7 @@ } static void -netlink_recvmsg(int sockfd, struct msghdr * msg, int flags, ssize_t ret) +netlink_recvmsg(int sockfd, struct msghdr * msg, ssize_t ret) { struct cmsghdr *cmsg; struct sockaddr_nl *sender; @@ -415,8 +416,9 @@ /* fake sender credentials to be uid 0 */ cmsg = CMSG_FIRSTHDR(msg); if (cmsg != NULL) { - struct ucred *cred = (struct ucred *)CMSG_DATA(cmsg); - cred->uid = 0; + const uid_t uid0 = 0; + /* don't cast into a struct ucred *, as that increases alignment requirement */ + memcpy(CMSG_DATA(cmsg) + offsetof(struct ucred, uid), &uid0, sizeof uid0); } } } @@ -895,7 +897,7 @@ } static void -script_record_connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen, int res) +script_record_connect(int sockfd, const struct sockaddr *addr, int res) { size_t i; @@ -952,8 +954,6 @@ unsigned long delta; libc_func(fwrite, size_t, const void *, size_t, size_t, FILE *); static char header[100]; - const unsigned char *cur; - int i, r; if (!fd_map_get(&script_recorded_fds, fd, (const void **)&srinfo)) return; @@ -972,12 +972,13 @@ if (srinfo->op != 0) putc('\n', srinfo->log); snprintf(header, sizeof(header), "%c %lu ", op, delta); - r = _fwrite(header, strlen(header), 1, srinfo->log); + size_t r = _fwrite(header, strlen(header), 1, srinfo->log); assert(r == 1); } /* escape ASCII control chars */ - for (i = 0, cur = buf; i < size; ++i, ++cur) { + const unsigned char *cur = buf; + for (ssize_t i = 0; i < size; ++i, ++cur) { if (*cur < 32) { putc('^', srinfo->log); putc(*cur + 64, srinfo->log); @@ -1487,7 +1488,7 @@ size_t res; res = _fread(ptr, size, nmemb, stream); - script_record_op('r', fileno(stream), ptr, (res == 0 && ferror(stream)) ? -1 : res * size); + script_record_op('r', fileno(stream), ptr, (res == 0 && ferror(stream)) ? -1 : (ssize_t) (res * size)); return res; } @@ -1498,7 +1499,7 @@ size_t res; res = _fwrite(ptr, size, nmemb, stream); - script_record_op('w', fileno(stream), ptr, (res == 0 && ferror(stream)) ? -1 : res * size); + script_record_op('w', fileno(stream), ptr, (res == 0 && ferror(stream)) ? -1 : (ssize_t) (res * size)); return res; } @@ -1545,7 +1546,7 @@ libc_func(recvmsg, int, int, struct msghdr *, int); ssize_t ret = _recvmsg(sockfd, msg, flags); - netlink_recvmsg(sockfd, msg, flags, ret); + netlink_recvmsg(sockfd, msg, ret); return ret; } @@ -1569,7 +1570,7 @@ libc_func(bind, int, int, const struct sockaddr *, socklen_t); int res; - res = netlink_bind(sockfd, addr, addrlen); + res = netlink_bind(sockfd); if (res != UNHANDLED) return res; @@ -1606,7 +1607,7 @@ } res = _connect(sockfd, addr, addrlen); - script_record_connect(sockfd, addr, addrlen, res); + script_record_connect(sockfd, addr, res); return res; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umockdev-0.16.2/src/uevent_sender.c new/umockdev-0.16.3/src/uevent_sender.c --- old/umockdev-0.16.2/src/uevent_sender.c 2021-08-25 11:26:23.130824800 +0200 +++ new/umockdev-0.16.3/src/uevent_sender.c 2021-09-15 07:38:31.167431600 +0200 @@ -65,7 +65,7 @@ } static void -sendmsg_one(uevent_sender * sender, struct msghdr *msg, const char *path) +sendmsg_one(struct msghdr *msg, const char *path) { struct sockaddr_un event_addr; int fd; @@ -111,7 +111,7 @@ if (res == 0) { size_t i; for (i = 0; i < gl.gl_pathc; ++i) - sendmsg_one(sender, msg, gl.gl_pathv[i]); + sendmsg_one(msg, gl.gl_pathv[i]); } else { /* ensure that we only fail due to that, not due to bad globs */ if (res != GLOB_NOMATCH) { @@ -148,27 +148,27 @@ unsigned int filter_tag_bloom_lo; }; -/* taken from systemd/src/libudev/libudev-util.c */ -static unsigned int +/* taken from systemd/src/basic/MurmurHash2.c */ +static uint32_t string_hash32(const char *str) { /* * 'm' and 'r' are mixing constants generated offline. * They're not really 'magic', they just happen to work well. */ - const unsigned int m = 0x5bd1e995; + const uint32_t m = 0x5bd1e995; const int r = 24; int len = strlen(str); /* initialize the hash to a 'random' value */ - unsigned int h = len; + uint32_t h = len; /* mix 4 bytes at a time into the hash */ const unsigned char *data = (const unsigned char *)str; while (len >= 4) { - unsigned int k = *(unsigned int *)data; - + uint32_t k = 0; + memcpy(&k, data, sizeof(uint32_t)); k *= m; k ^= k >> r; k *= m; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umockdev-0.16.2/src/umockdev-ioctl.vala new/umockdev-0.16.3/src/umockdev-ioctl.vala --- old/umockdev-0.16.2/src/umockdev-ioctl.vala 2021-08-25 11:26:23.130824800 +0200 +++ new/umockdev-0.16.3/src/umockdev-ioctl.vala 2021-09-15 07:38:31.167431600 +0200 @@ -741,6 +741,7 @@ listeners.remove(devnode); } +#if INTERNAL_REGISTER_API internal void register_path(GLib.MainContext? ctx, string devnode, string sockpath) { assert(DirUtils.create_with_parents(Path.get_dirname(sockpath), 0755) == 0); @@ -768,12 +769,15 @@ ctx.invoke(tmp.cb); } +#if INTERNAL_UNREGISTER_PATH_API internal void unregister_path(string devnode) { lock (listeners) listeners[devnode].cancel(); } +#endif +#if INTERNAL_UNREGISTER_ALL_API internal void unregister_all() { lock (listeners) { @@ -782,6 +786,9 @@ }); } } +#endif + +#endif // INTERNAL_REGISTER_API public virtual signal void client_connected(IoctlClient client) { } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umockdev-0.16.2/src/umockdev-pcap.vala new/umockdev-0.16.3/src/umockdev-pcap.vala --- old/umockdev-0.16.2/src/umockdev-pcap.vala 2021-08-25 11:26:23.130824800 +0200 +++ new/umockdev-0.16.3/src/umockdev-pcap.vala 2021-09-15 07:38:31.167431600 +0200 @@ -27,6 +27,20 @@ const int URB_CONTROL = 0x2; const int URB_BULK = 0x3; +private string urb_type_to_string(int type) +{ + switch (type) { + case URB_INTERRUPT: + return "INTERRUPT"; + case URB_CONTROL: + return "CONTROL"; + case URB_BULK: + return "BULK"; + default: + return "UNKNOWN (%d)".printf(type); + } +} + private struct UrbInfo { IoctlData urb_data; IoctlData buffer_data; @@ -141,8 +155,8 @@ * we are timing out on URBs that will not replay. */ if (urb_info.pcap_id == 0) { - message("Replay may be stuck: Reaping discard URB of type %d, for endpoint 0x%02x with length %d without corresponding submit", - urb.type, urb.endpoint, urb.buffer_length); + message("Replay may be stuck: Reaping discard URB of type %s, for endpoint 0x%02x with length %d without corresponding submit", + urb_type_to_string(urb.type), urb.endpoint, urb.buffer_length); } } else { urb_info = next_reapable_urb(); @@ -167,6 +181,7 @@ * packet. As such, keep it in a global state. */ private pcap.pkthdr cur_hdr; + private uint64 start_time_ms; private uint64 last_pkt_time_ms; private uint64 cur_waiting_since; private unowned uint8[]? cur_buf = null; @@ -193,6 +208,7 @@ cur_waiting_since = now; last_pkt_time_ms = urb_hdr.ts_sec * 1000 + urb_hdr.ts_usec / 1000; + start_time_ms = last_pkt_time_ms; } for (; cur_buf != null; cur_buf = rec.next(ref cur_hdr), cur_waiting_since = now) { @@ -213,16 +229,16 @@ message("Stuck for %lu ms, recording needed %lu ms", (ulong) (now - cur_waiting_since) / 1000, (ulong) (cur_pkt_time_ms - last_pkt_time_ms)); - message("Trying to reap at recording position %c packet of type %d, for endpoint 0x%02x with length %u, replay may be stuck", - urb_hdr.event_type, urb_hdr.transfer_type, urb_hdr.endpoint_number, urb_hdr.urb_len); + message("Trying to reap at recording position %c %s packet, for endpoint 0x%02x with length %u, replay may be stuck (time: %.3f)", + urb_hdr.event_type, urb_type_to_string(urb_hdr.transfer_type), urb_hdr.endpoint_number, urb_hdr.urb_len, (cur_pkt_time_ms - start_time_ms) / 1000.0); message("The device has currently %u in-flight URBs:", urbs.length); for (var i = 0; i < urbs.length; i++) { unowned UrbInfo? urb_data = urbs.index(i); Ioctl.usbdevfs_urb *urb = (Ioctl.usbdevfs_urb*) urb_data.urb_data.data; - message(" URB of type %d, for endpoint 0x%02x with length %d; %ssubmitted", - urb.type, urb.endpoint, urb.buffer_length, + message(" %s URB, for endpoint 0x%02x with length %d; %ssubmitted", + urb_type_to_string(urb.type), urb.endpoint, urb.buffer_length, urb_data.pcap_id == 0 ? "NOT " : ""); } cur_waiting_since = now; @@ -256,8 +272,11 @@ urb_buffer_length -= 8; } + /* libusb always sets URB_CONTROL endpoint to 0x00, but the + * kernel exposes it as 0x80/0x00 depending on the direction + */ if ((urb.type != urb_hdr.transfer_type) || - (urb.endpoint != urb_hdr.endpoint_number) || + ((urb.type != URB_CONTROL) && (urb.endpoint != urb_hdr.endpoint_number)) || (urb_buffer_length != urb_hdr.urb_len)) { if (debug) @@ -362,11 +381,16 @@ } /* Packet not handled. - * If it was a control transfer, still just ignore it as it is - * probably one generated by the kernel rather than the application. + * Now, if it was a control transfer of "standard" type, then we + * should just ignore it (and ignore the subsequent response). + * + * Note that we use a different mechanism to ignore the replies. */ - if (urb_hdr.transfer_type == URB_CONTROL) - continue; + if (urb_hdr.transfer_type == URB_CONTROL) { + /* 0x60 -> any direction, standard transfer, any recepient */ + if (urb_hdr.event_type == 'S' && urb_hdr.setup_flag == 0 && ((*(uint8*)&urb_hdr.s) & 0x60) == 0x00) + continue; + } /* The current packet cannot be reaped at this point, give up. */ return null; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umockdev-0.16.2/src/umockdev.vala new/umockdev-0.16.3/src/umockdev.vala --- old/umockdev-0.16.2/src/umockdev.vala 2021-08-25 11:26:23.130824800 +0200 +++ new/umockdev-0.16.3/src/umockdev.vala 2021-09-15 07:38:31.167431600 +0200 @@ -87,6 +87,12 @@ this.sys_dir = Path.build_filename(this.root_dir, "sys"); DirUtils.create(this.sys_dir, 0755); + /* Create "bus" and "class" directories to make libudev happy */ + string bus_path = Path.build_filename(this.sys_dir, "bus"); + DirUtils.create(bus_path, 0755); + string class_path = Path.build_filename(this.sys_dir, "class"); + DirUtils.create(class_path, 0755); + this.dev_fd = new HashTable<string, int> (str_hash, str_equal); this.dev_script_runner = new HashTable<string, ScriptRunner> (str_hash, str_equal); this.custom_handlers = new HashTable<string, IoctlBase> (str_hash, str_equal); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umockdev-0.16.2/tests/run-alpine new/umockdev-0.16.3/tests/run-alpine --- old/umockdev-0.16.2/tests/run-alpine 2021-08-25 11:26:23.130824800 +0200 +++ new/umockdev-0.16.3/tests/run-alpine 2021-09-15 07:38:31.171431800 +0200 @@ -11,6 +11,8 @@ fi $RUNC run --interactive ${OPTS:-} --volume `pwd`:/source:ro ${1:-docker.io/alpine} /bin/sh <<EOF +# avoid meson exit code 125; https://github.com/containers/podman/issues/11540 +trap '[ \$? -eq 0 ] || exit 1' EXIT # install build dependencies apk add --no-cache meson gcc musl-dev glib-dev eudev-dev libpcap-dev make vala linux-headers xz usbutils ${EXTRA_PACKAGES:-} @@ -19,7 +21,7 @@ su -s /bin/sh - guest << EOG set -ex cd /source -meson setup /tmp/dbg --buildtype debug +meson setup /tmp/dbg --buildtype debug --werror meson test -C /tmp/dbg -v --num-processes=1 DESTDIR=/tmp/inst meson install -C /tmp/dbg echo "===== tests done; install tree: ====" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umockdev-0.16.2/tests/run-apt new/umockdev-0.16.3/tests/run-apt --- old/umockdev-0.16.2/tests/run-apt 2021-08-25 11:26:23.130824800 +0200 +++ new/umockdev-0.16.3/tests/run-apt 2021-09-15 07:38:31.171431800 +0200 @@ -12,9 +12,12 @@ [ -n "${PUBLISH_TAR:-}" ] || MOUNT_MODE=":ro" -$RUNC run --interactive ${OPTS:-} --volume `pwd`:/source${MOUNT_MODE:-} ${1:-docker.io/amd64/ubuntu:rolling} /bin/sh << EOF +$RUNC run --interactive ${RUNC_OPTIONS:-} ${OPTS:-} --volume `pwd`:/source${MOUNT_MODE:-} ${1:-docker.io/amd64/ubuntu:rolling} /bin/sh << EOF set -ex +# avoid meson exit code 125; https://github.com/containers/podman/issues/11540 +trap '[ \$? -eq 0 ] || exit 1' EXIT + # go-faster apt echo 'Acquire::Languages "none";' > /etc/apt/apt.conf.d/90nolanguages @@ -32,7 +35,7 @@ su -s /bin/sh - build << EOG set -ex cd /source -meson setup /tmp/dbg --buildtype debug --prefix /usr -Dgtk_doc=true +meson setup /tmp/dbg --buildtype debug --prefix /usr -Dgtk_doc=true --werror cd /tmp/dbg if meson dist --help | grep -q no-tests; then meson dist --no-test @@ -58,7 +61,7 @@ su - build <<EOG set -ex cd /source -meson setup /tmp/rel --buildtype release -Db_ndebug=true --prefix /usr -Dgtk_doc=true +meson setup /tmp/rel --buildtype release -Db_ndebug=true --prefix /usr -Dgtk_doc=true --werror meson test -C /tmp/rel -v --num-processes=1 EOG diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umockdev-0.16.2/tests/run-dnf new/umockdev-0.16.3/tests/run-dnf --- old/umockdev-0.16.2/tests/run-dnf 2021-08-25 11:26:23.130824800 +0200 +++ new/umockdev-0.16.3/tests/run-dnf 2021-09-15 07:38:31.171431800 +0200 @@ -12,6 +12,10 @@ $RUNC run --interactive ${RUNC_OPTIONS:-} ${OPTS:-} --volume `pwd`:/source:ro ${1:-registry.fedoraproject.org/fedora} /bin/sh << EOF set -eu + +# avoid meson exit code 125; https://github.com/containers/podman/issues/11540 +trap '[ \$? -eq 0 ] || exit 1' EXIT + dnf -y update if grep -q ID=.*centos /etc/os-release; then @@ -34,7 +38,7 @@ su -s /bin/sh - guest << EOG set -eux cd /source -meson setup /tmp/dbg --buildtype debug --prefix /usr -Dgtk_doc=\${gtk_doc} -Db_coverage=\$coverage +meson setup /tmp/dbg --buildtype debug --prefix /usr -Dgtk_doc=\${gtk_doc} -Db_coverage=\$coverage --werror cd /tmp/dbg DESTDIR=/tmp/inst meson install meson test -v --num-processes=1 @@ -46,7 +50,7 @@ # build with clang cd /source -CC=clang meson setup /tmp/clang -Dgtk_doc=false +CC=clang meson setup /tmp/clang -Dgtk_doc=false --werror meson test -C /tmp/clang -v --num-processes=1 EOG diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umockdev-0.16.2/tests/run-nix new/umockdev-0.16.3/tests/run-nix --- old/umockdev-0.16.2/tests/run-nix 2021-08-25 11:26:23.130824800 +0200 +++ new/umockdev-0.16.3/tests/run-nix 2021-09-15 07:38:31.171431800 +0200 @@ -9,6 +9,9 @@ # sandboxing requires privileged container; https://github.com/NixOS/docker#limitations $RUNC run --interactive ${DEBUG:+--tty} --privileged --volume `pwd`:/source:ro ${1:-docker.io/nixos/nix} /bin/sh <<EOF +# avoid meson exit code 125; https://github.com/containers/podman/issues/11540 +trap '[ \$? -eq 0 ] || exit 1' EXIT + sed -i '/sandbox/ s/false/true/' /etc/nix/nix.conf cat <<EOG > /tmp/default.nix diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umockdev-0.16.2/tests/test-umockdev-vala.vala new/umockdev-0.16.3/tests/test-umockdev-vala.vala --- old/umockdev-0.16.2/tests/test-umockdev-vala.vala 2021-08-25 11:26:23.130824800 +0200 +++ new/umockdev-0.16.3/tests/test-umockdev-vala.vala 2021-09-15 07:38:31.171431800 +0200 @@ -159,14 +159,14 @@ assert_cmpstr (syspath, CompareOperator.EQ, "/sys/devices/dev1"); // absolute paths - assert_listdir ("/sys", {"bus", "devices"}); + assert_listdir ("/sys", {"bus", "class", "devices"}); assert_listdir ("/sys/devices", {"dev1"}); assert_listdir ("/sys/bus", {"pci"}); assert_listdir ("/sys/devices/dev1", {"a", "subsystem", "uevent"}); // change directory into trapped /sys assert_cmpint (Posix.chdir ("/sys"), CompareOperator.EQ, 0); - assert_listdir (".", {"bus", "devices"}); + assert_listdir (".", {"bus", "class", "devices"}); assert_listdir ("bus", {"pci"}); assert_cmpstr (Environment.get_current_dir (), CompareOperator.EQ, "/sys"); @@ -174,9 +174,6 @@ assert_listdir (".", {"a", "subsystem", "uevent"}); assert_cmpstr (Environment.get_current_dir (), CompareOperator.EQ, "/sys/devices/dev1"); - assert_cmpint (Posix.chdir ("/sys/class"), CompareOperator.EQ, -1); - assert_cmpint (Posix.errno, CompareOperator.EQ, Posix.ENOENT); - // relative paths into trapped /sys; this only works if the real /sys exists, as otherwise realpath() fails in trap_path() if (!have_real_sys) { stdout.printf ("[SKIP relative paths: environment has no real /sys]\n"); @@ -184,12 +181,12 @@ } assert_cmpint (Posix.chdir ("/"), CompareOperator.EQ, 0); - assert_listdir ("sys", {"bus", "devices"}); + assert_listdir ("sys", {"bus", "class", "devices"}); assert_listdir ("sys/devices", {"dev1"}); assert_listdir ("sys/bus", {"pci"}); assert_cmpint (Posix.chdir ("/etc"), CompareOperator.EQ, 0); - assert_listdir ("../sys", {"bus", "devices"}); + assert_listdir ("../sys", {"bus", "class", "devices"}); assert_listdir ("../sys/devices", {"dev1"}); assert_listdir ("../sys/bus", {"pci"}); @@ -504,6 +501,10 @@ { var tb = new UMockdev.Testbed (); string device; + Ioctl.usbdevfs_urb* urb_reap = null; + + /* NOTE: This test is a bit ugly. It wasn't the best idea to use a USB keyboard. */ + checked_file_get_contents (Path.build_filename(rootdir + "/devices/input/usbkbd.pcap.umockdev"), out device); tb_add_from_string (tb, device); @@ -516,15 +517,58 @@ int fd = Posix.open ("/dev/bus/usb/001/011", Posix.O_RDWR, 0); assert_cmpint (fd, CompareOperator.GE, 0); + /* We can submit this early, even if it comes later in the recording! */ var urb_buffer_ep1 = new uint8[8]; Ioctl.usbdevfs_urb urb_ep1 = {1, 0x81, 0, 0, urb_buffer_ep1, 8, 0}; assert_cmpint (Posix.ioctl (fd, Ioctl.USBDEVFS_SUBMITURB, ref urb_ep1), CompareOperator.EQ, 0); assert_cmpint (Posix.errno, CompareOperator.EQ, 0); assert_cmpuint (urb_ep1.status, CompareOperator.EQ, 0); + /* Not all control transfers are skipped in this case, we need to speak USBHID */ + /* SET_IDLE request */ + uint8 urb_buffer_setup_set_idle[8] = { 0x21, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + Ioctl.usbdevfs_urb urb_set_idle = {2, 0x00, 0, 0, urb_buffer_setup_set_idle, 8, 0}; + assert_cmpint (Posix.ioctl (fd, Ioctl.USBDEVFS_SUBMITURB, ref urb_set_idle), CompareOperator.EQ, 0); + assert_cmpint (Posix.errno, CompareOperator.EQ, 0); + + assert_cmpint (Posix.ioctl (fd, Ioctl.USBDEVFS_REAPURB, ref urb_reap), CompareOperator.EQ, 0); + assert_cmpint (Posix.errno, CompareOperator.EQ, 0); + assert (urb_reap == &urb_set_idle); + + /* GET DESCIPTOR is skipped again. */ + + /* SET_REPORT request */ + uint8 urb_buffer_setup_set_report[9] = { 0x21, 0x09, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00}; + Ioctl.usbdevfs_urb urb_set_report = {2, 0x00, 0, 0, urb_buffer_setup_set_report, 9, 0}; + assert_cmpint (Posix.ioctl (fd, Ioctl.USBDEVFS_SUBMITURB, ref urb_set_report), CompareOperator.EQ, 0); + assert_cmpint (Posix.errno, CompareOperator.EQ, 0); + + /* Now we'll receive the SET_REPORT response as EP 1 has been submitted already */ + assert_cmpint (Posix.ioctl (fd, Ioctl.USBDEVFS_REAPURB, ref urb_reap), CompareOperator.EQ, 0); + assert_cmpint (Posix.errno, CompareOperator.EQ, 0); + assert (urb_reap == &urb_set_report); + + /* We cannot reap any urbs yet as we are waiting for SET_IDLE */ + assert_cmpint (Posix.ioctl (fd, Ioctl.USBDEVFS_REAPURB, ref urb_reap), CompareOperator.EQ, -1); + assert_cmpint (Posix.errno, CompareOperator.EQ, Posix.EAGAIN); + + /* Another SET_IDLE */ + urb_buffer_setup_set_idle = { 0x21, 0x0a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00}; + urb_set_idle = {2, 0x00, 0, 0, urb_buffer_setup_set_idle, 8, 0}; + assert_cmpint (Posix.ioctl (fd, Ioctl.USBDEVFS_SUBMITURB, ref urb_set_idle), CompareOperator.EQ, 0); + assert_cmpint (Posix.errno, CompareOperator.EQ, 0); + + assert_cmpint (Posix.ioctl (fd, Ioctl.USBDEVFS_REAPURB, ref urb_reap), CompareOperator.EQ, 0); + assert_cmpint (Posix.errno, CompareOperator.EQ, 0); + assert (urb_reap == &urb_set_idle); + + /* Another SET_REPORT request */ + urb_buffer_setup_set_report = { 0x21, 0x09, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x01}; + urb_set_report = {2, 0x00, 0, 0, urb_buffer_setup_set_report, 9, 0}; + assert_cmpint (Posix.ioctl (fd, Ioctl.USBDEVFS_SUBMITURB, ref urb_set_report), CompareOperator.EQ, 0); + assert_cmpint (Posix.errno, CompareOperator.EQ, 0); /* We cannot reap any urbs yet, because we didn't make a request on EP 2 */ - Ioctl.usbdevfs_urb* urb_reap = null; assert_cmpint (Posix.ioctl (fd, Ioctl.USBDEVFS_REAPURB, ref urb_reap), CompareOperator.EQ, -1); assert_cmpint (Posix.errno, CompareOperator.EQ, Posix.EAGAIN); @@ -535,6 +579,11 @@ assert_cmpint (Posix.errno, CompareOperator.EQ, 0); assert_cmpuint (urb_ep2.status, CompareOperator.EQ, 0); + /* Now we'll receive the SET_REPORT response as EP 1 has been submitted already */ + assert_cmpint (Posix.ioctl (fd, Ioctl.USBDEVFS_REAPURB, ref urb_reap), CompareOperator.EQ, 0); + assert_cmpint (Posix.errno, CompareOperator.EQ, 0); + assert (urb_reap == &urb_set_report); + /* The first report is: 00000c0000000000 (EP1) */ assert_cmpint (Posix.ioctl (fd, Ioctl.USBDEVFS_REAPURB, ref urb_reap), CompareOperator.EQ, 0); assert_cmpint (Posix.errno, CompareOperator.EQ, 0); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umockdev-0.16.2/tests/test-umockdev.c new/umockdev-0.16.3/tests/test-umockdev.c --- old/umockdev-0.16.2/tests/test-umockdev.c 2021-08-25 11:26:23.130824800 +0200 +++ new/umockdev-0.16.3/tests/test-umockdev.c 2021-09-15 07:38:31.171431800 +0200 @@ -45,6 +45,9 @@ #define O_TMPFILE (__O_TMPFILE | O_DIRECTORY) #endif +#define UNUSED __attribute__ ((unused)) +#define UNUSED_DATA UNUSED gconstpointer data + static gboolean has_real_sysfs; static int slow_testbed_factor = 1; @@ -56,7 +59,7 @@ } UMockdevTestbedFixture; static void -t_testbed_fixture_setup(UMockdevTestbedFixture * fixture, gconstpointer data) +t_testbed_fixture_setup(UMockdevTestbedFixture * fixture, UNUSED_DATA) { fixture->testbed = umockdev_testbed_new(); g_assert(fixture->testbed != NULL); @@ -65,7 +68,7 @@ } static void -t_testbed_fixture_teardown(UMockdevTestbedFixture * fixture, gconstpointer data) +t_testbed_fixture_teardown(UMockdevTestbedFixture * fixture, UNUSED_DATA) { g_object_unref(fixture->testbed); @@ -104,27 +107,37 @@ static guint num_udev_devices(void) { - GUdevEnumerator *enumerator; - GList *result; - guint num; + struct udev *udev; + struct udev_enumerate *enumerate; + struct udev_list_entry *entry; + int err; + guint num = 0; - g_autoptr (GUdevClient) client = g_udev_client_new(NULL); - g_assert(client); + udev = udev_new(); + g_assert(udev); - enumerator = g_udev_enumerator_new(client); - g_assert(enumerator); - result = g_udev_enumerator_execute(enumerator); - num = g_list_length(result); + enumerate = udev_enumerate_new(udev); + g_assert(enumerate); + + // NB: using libudev here instead of GUdev so that we can check the return + // value of udev_enumerate_scan_devices(). + // https://github.com/martinpitt/umockdev/issues/144 + err = udev_enumerate_scan_devices(enumerate); + g_assert_cmpint(err, >=, 0); - g_list_free_full(result, g_object_unref); - g_object_unref(enumerator); + udev_list_entry_foreach(entry, udev_enumerate_get_list_entry(enumerate)) { + num++; + } + + udev_enumerate_unref(enumerate); + udev_unref(udev); return num; } /* Empty UMockdevTestbed without any devices */ static void -t_testbed_empty(UMockdevTestbedFixture * fixture, gconstpointer data) +t_testbed_empty(UNUSED UMockdevTestbedFixture *fixture, UNUSED_DATA) { g_assert_cmpuint(num_udev_devices(), ==, 0); } @@ -166,7 +179,7 @@ /* UMockdevTestbed add_devicev() with adding one device */ static void -t_testbed_add_devicev(UMockdevTestbedFixture * fixture, gconstpointer data) +t_testbed_add_devicev(UMockdevTestbedFixture * fixture, UNUSED_DATA) { gchar *attributes[] = { "idVendor", "0815", "idProduct", "AFFE", NULL }; gchar *properties[] = { "ID_INPUT", "1", "ID_INPUT_KEYBOARD", "1", NULL }; @@ -198,7 +211,7 @@ /* UMockdevTestbed add_device() with adding one device */ static void -t_testbed_add_device(UMockdevTestbedFixture * fixture, gconstpointer data) +t_testbed_add_device(UMockdevTestbedFixture * fixture, UNUSED_DATA) { struct udev *udev; struct udev_monitor *udev_mon; @@ -234,7 +247,7 @@ /* UMockdevTestbed add_device() with adding a child device */ static void -t_testbed_child_device(UMockdevTestbedFixture * fixture, gconstpointer data) +t_testbed_child_device(UMockdevTestbedFixture * fixture, UNUSED_DATA) { gchar *dev, *iface, *input; GUdevDevice *device, *device2; @@ -369,7 +382,7 @@ /* UMockdevTestbed add_device() with adding a block device */ static void -t_testbed_add_block_device(UMockdevTestbedFixture * fixture, gconstpointer data) +t_testbed_add_block_device(UMockdevTestbedFixture * fixture, UNUSED_DATA) { g_autofree gchar *syspath = umockdev_testbed_add_device( fixture->testbed, "block", "scribble", NULL, @@ -400,7 +413,7 @@ }; static gboolean -t_testbed_error_catcher(const gchar * log_domain, GLogLevelFlags log_level, const gchar * message, gpointer user_data) +t_testbed_error_catcher(UNUSED const gchar *log_domain, GLogLevelFlags log_level, const gchar * message, gpointer user_data) { struct TestbedErrorCatcherData *data = (struct TestbedErrorCatcherData *)user_data; @@ -412,14 +425,14 @@ } static void -ignore_log_handler (const gchar *log_domain, GLogLevelFlags log_level, - const gchar *message, gpointer user_data) +ignore_log_handler (UNUSED const gchar *log_domain, UNUSED GLogLevelFlags log_level, + UNUSED const gchar *message, UNUSED gpointer user_data) { } /* UMockdevTestbed add_device() error conditions */ static void -t_testbed_add_device_errors(UMockdevTestbedFixture * fixture, gconstpointer data) +t_testbed_add_device_errors(UMockdevTestbedFixture * fixture, UNUSED_DATA) { gchar *syspath; struct TestbedErrorCatcherData errors = { 0, 0, NULL }; @@ -467,7 +480,7 @@ } static void -t_testbed_set_attribute(UMockdevTestbedFixture * fixture, gconstpointer data) +t_testbed_set_attribute(UMockdevTestbedFixture * fixture, UNUSED_DATA) { GUdevDevice *device; g_autofree gchar *contents = NULL; @@ -515,7 +528,7 @@ } static void -t_testbed_set_property(UMockdevTestbedFixture * fixture, gconstpointer data) +t_testbed_set_property(UMockdevTestbedFixture * fixture, UNUSED_DATA) { GUdevDevice *device; gchar *prop; @@ -566,7 +579,7 @@ }; static void -on_uevent(GUdevClient * client, const gchar * action, GUdevDevice * device, gpointer user_data) +on_uevent(UNUSED GUdevClient *client, const gchar *action, GUdevDevice *device, gpointer user_data) { struct event_counter *counter = (struct event_counter *)user_data; @@ -593,7 +606,7 @@ } static void -t_testbed_uevent_libudev(UMockdevTestbedFixture * fixture, gconstpointer data) +t_testbed_uevent_libudev(UMockdevTestbedFixture * fixture, UNUSED_DATA) { struct udev *udev; struct udev_monitor *udev_mon, *kernel_mon; @@ -646,7 +659,7 @@ } static void -t_testbed_uevent_libudev_filter(UMockdevTestbedFixture * fixture, gconstpointer data) +t_testbed_uevent_libudev_filter(UMockdevTestbedFixture * fixture, UNUSED_DATA) { struct udev *udev; struct udev_monitor *mon; @@ -702,7 +715,7 @@ } static void -t_testbed_uevent_gudev(UMockdevTestbedFixture * fixture, gconstpointer data) +t_testbed_uevent_gudev(UMockdevTestbedFixture * fixture, UNUSED_DATA) { GMainLoop *mainloop; struct event_counter counter = { 0, 0, 0 }; @@ -750,7 +763,7 @@ } static void -t_testbed_uevent_no_listener(UMockdevTestbedFixture * fixture, gconstpointer data) +t_testbed_uevent_no_listener(UMockdevTestbedFixture * fixture, UNUSED_DATA) { g_autofree gchar *syspath = umockdev_testbed_add_device(fixture->testbed, "pci", "mydev", NULL, NULL, NULL); g_assert(syspath); @@ -760,7 +773,7 @@ } static void -t_testbed_uevent_error(UMockdevTestbedFixture * fixture, gconstpointer data) +t_testbed_uevent_error(UMockdevTestbedFixture * fixture, UNUSED_DATA) { struct udev *udev; struct udev_monitor *mon; @@ -796,7 +809,7 @@ } static void -t_testbed_uevent_null_action(UMockdevTestbedFixture * fixture, gconstpointer data) +t_testbed_uevent_null_action(UMockdevTestbedFixture * fixture, UNUSED_DATA) { g_autofree gchar *syspath = umockdev_testbed_add_device(fixture->testbed, "pci", "mydev", NULL, NULL, NULL); g_assert(syspath); @@ -810,7 +823,7 @@ } static void -t_testbed_uevent_action_overflow(UMockdevTestbedFixture * fixture, gconstpointer data) +t_testbed_uevent_action_overflow(UMockdevTestbedFixture * fixture, UNUSED_DATA) { g_autofree gchar *syspath = umockdev_testbed_add_device(fixture->testbed, "pci", "mydev", NULL, NULL, NULL); g_assert(syspath); @@ -828,7 +841,7 @@ } static void -t_testbed_add_from_string(UMockdevTestbedFixture * fixture, gconstpointer data) +t_testbed_add_from_string(UMockdevTestbedFixture * fixture, UNUSED_DATA) { GUdevDevice *device; gchar *contents; @@ -930,7 +943,7 @@ } static void -t_testbed_add_from_string_errors(UMockdevTestbedFixture * fixture, gconstpointer data) +t_testbed_add_from_string_errors(UMockdevTestbedFixture * fixture, UNUSED_DATA) { GError *error = NULL; @@ -968,7 +981,7 @@ } static void -t_testbed_add_from_file(UMockdevTestbedFixture * fixture, gconstpointer data) +t_testbed_add_from_file(UMockdevTestbedFixture * fixture, UNUSED_DATA) { gboolean success; GError *error = NULL; @@ -1011,7 +1024,7 @@ } static void -t_testbed_libc(UMockdevTestbedFixture * fixture, gconstpointer data) +t_testbed_libc(UMockdevTestbedFixture * fixture, UNUSED_DATA) { gboolean success; GError *error = NULL; @@ -1101,7 +1114,7 @@ } static void -t_testbed_usb_lsusb(UMockdevTestbedFixture * fixture, gconstpointer data) +t_testbed_usb_lsusb(UMockdevTestbedFixture * fixture, UNUSED_DATA) { g_autofree gchar *out = NULL, *err = NULL; int exit_status; @@ -1152,7 +1165,7 @@ } static void -t_testbed_dev_access(UMockdevTestbedFixture * fixture, gconstpointer data) +t_testbed_dev_access(UMockdevTestbedFixture * fixture, UNUSED_DATA) { GStatBuf st; gchar *devpath; @@ -1258,7 +1271,7 @@ } static void -t_testbed_add_from_string_dev_char(UMockdevTestbedFixture * fixture, gconstpointer data) +t_testbed_add_from_string_dev_char(UMockdevTestbedFixture * fixture, UNUSED_DATA) { GError *error = NULL; gchar *contents, *target; @@ -1318,7 +1331,7 @@ } static void -t_testbed_add_from_string_dev_block(UMockdevTestbedFixture * fixture, gconstpointer data) +t_testbed_add_from_string_dev_block(UMockdevTestbedFixture * fixture, UNUSED_DATA) { GError *error = NULL; gchar *contents; @@ -1356,7 +1369,7 @@ } static void -t_testbed_dev_query_gudev(UMockdevTestbedFixture * fixture, gconstpointer data) +t_testbed_dev_query_gudev(UMockdevTestbedFixture * fixture, UNUSED_DATA) { GError *error = NULL; GUdevDevice *device; @@ -1396,7 +1409,7 @@ errno = 0; static void -t_testbed_script_replay_evdev_event_framing(UMockdevTestbedFixture * fixture, gconstpointer data) +t_testbed_script_replay_evdev_event_framing(UMockdevTestbedFixture * fixture, UNUSED_DATA) { gboolean success; GError *error = NULL; @@ -1472,7 +1485,7 @@ } static void -t_testbed_script_replay_simple(UMockdevTestbedFixture * fixture, gconstpointer data) +t_testbed_script_replay_simple(UMockdevTestbedFixture * fixture, UNUSED_DATA) { gboolean success; GError *error = NULL; @@ -1581,7 +1594,7 @@ } static void -t_testbed_script_replay_default_device(UMockdevTestbedFixture * fixture, gconstpointer data) +t_testbed_script_replay_default_device(UMockdevTestbedFixture * fixture, UNUSED_DATA) { gboolean success; GError *error = NULL; @@ -1621,7 +1634,7 @@ } static void -t_testbed_script_replay_override_default_device(UMockdevTestbedFixture * fixture, gconstpointer data) +t_testbed_script_replay_override_default_device(UMockdevTestbedFixture * fixture, UNUSED_DATA) { gboolean success; GError *error = NULL; @@ -1661,7 +1674,7 @@ } static void -t_testbed_script_replay_socket_stream(UMockdevTestbedFixture * fixture, gconstpointer data) +t_testbed_script_replay_socket_stream(UMockdevTestbedFixture * fixture, UNUSED_DATA) { gboolean success; GError *error = NULL; @@ -1727,7 +1740,7 @@ } static void -t_testbed_script_replay_fuzz(UMockdevTestbedFixture * fixture, gconstpointer data) +t_testbed_script_replay_fuzz(UMockdevTestbedFixture * fixture, UNUSED_DATA) { gboolean success; GError *error = NULL; @@ -1790,7 +1803,7 @@ } static void -t_testbed_replay_evemu_events(UMockdevTestbedFixture * fixture, gconstpointer data) +t_testbed_replay_evemu_events(UMockdevTestbedFixture * fixture, UNUSED_DATA) { gboolean success; GError *error = NULL; @@ -1875,7 +1888,7 @@ } static void -t_testbed_replay_evemu_events_default_device(UMockdevTestbedFixture * fixture, gconstpointer data) +t_testbed_replay_evemu_events_default_device(UMockdevTestbedFixture * fixture, UNUSED_DATA) { gboolean success; GError *error = NULL; @@ -1920,7 +1933,7 @@ } static void -t_testbed_clear(UMockdevTestbedFixture * fixture, gconstpointer data) +t_testbed_clear(UMockdevTestbedFixture * fixture, UNUSED_DATA) { GError *error = NULL; gchar *dev_path, *sysdev_path; @@ -1951,7 +1964,7 @@ } static void -t_testbed_disable(UMockdevTestbedFixture * fixture, gconstpointer data) +t_testbed_disable(UMockdevTestbedFixture * fixture, UNUSED_DATA) { if (!has_real_sysfs) { g_printf("SKIP: no real /sys on this system. "); @@ -1993,7 +2006,7 @@ } static void -t_testbed_remove(UMockdevTestbedFixture * fixture, gconstpointer data) +t_testbed_remove(UMockdevTestbedFixture * fixture, UNUSED_DATA) { GError *error = NULL; @@ -2061,7 +2074,7 @@ } static void -t_testbed_proc(UMockdevTestbedFixture * fixture, gconstpointer data) +t_testbed_proc(UMockdevTestbedFixture * fixture, UNUSED_DATA) { gchar *contents; gchar *procdir, *path;