Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package umockdev for openSUSE:Factory checked in at 2026-03-28 20:13:19 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/umockdev (Old) and /work/SRC/openSUSE:Factory/.umockdev.new.8177 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "umockdev" Sat Mar 28 20:13:19 2026 rev:26 rq:1342920 version:0.19.6 Changes: -------- --- /work/SRC/openSUSE:Factory/umockdev/umockdev.changes 2025-11-18 15:28:01.961555990 +0100 +++ /work/SRC/openSUSE:Factory/.umockdev.new.8177/umockdev.changes 2026-03-28 20:14:34.092436902 +0100 @@ -1,0 +2,10 @@ +Mon Mar 23 02:45:52 UTC 2026 - Atri Bhattacharya <[email protected]> + +- Update to version 0.19.6: + * preload: Reinitialize mutexes after forking +- Changes from version 0.19.5: + * ioctl: Forward standard termios calls to real pty (fixes tests + with Rust coreutils) + * ioctl: Implement POSIX-compliant errno handling + +------------------------------------------------------------------- Old: ---- umockdev-0.19.4.tar.xz New: ---- umockdev-0.19.6.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ umockdev.spec ++++++ --- /var/tmp/diff_new_pack.rlh8fV/_old 2026-03-28 20:14:34.684461335 +0100 +++ /var/tmp/diff_new_pack.rlh8fV/_new 2026-03-28 20:14:34.688461500 +0100 @@ -1,7 +1,7 @@ # # spec file for package umockdev # -# Copyright (c) 2025 SUSE LLC and contributors +# Copyright (c) 2026 SUSE LLC and contributors # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -19,7 +19,7 @@ %define shlib libumockdev0 %define shlibpre libumockdev-preload0 Name: umockdev -Version: 0.19.4 +Version: 0.19.6 Release: 0 Summary: Mock hardware devices for creating unit tests and bug reporting License: LGPL-2.1-or-later ++++++ umockdev-0.19.4.tar.xz -> umockdev-0.19.6.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umockdev-0.19.4/.version new/umockdev-0.19.6/.version --- old/umockdev-0.19.4/.version 2025-10-12 09:58:04.775742500 +0200 +++ new/umockdev-0.19.6/.version 2026-03-22 05:03:08.329472000 +0100 @@ -1 +1 @@ -0.19.4 +0.19.6 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umockdev-0.19.4/meson.build new/umockdev-0.19.6/meson.build --- old/umockdev-0.19.4/meson.build 2025-10-12 09:56:41.000000000 +0200 +++ new/umockdev-0.19.6/meson.build 2026-03-22 04:59:39.000000000 +0100 @@ -162,6 +162,8 @@ 'src/uevent_sender.c', 'src/ioctl_tree.vapi', 'src/ioctl_tree.c', + 'src/ioctl_termios.vapi', + 'src/ioctl_termios.c', 'src/utils.c', 'src/debug.c'], vala_vapi: 'umockdev-1.0.vapi', @@ -224,6 +226,8 @@ 'src/umockdev-spi.vala', 'src/ioctl_tree.vapi', 'src/ioctl_tree.c', + 'src/ioctl_termios.vapi', + 'src/ioctl_termios.c', 'src/utils.c', 'src/debug.c'], dependencies: [glib, gobject, gio_unix, vapi_posix, vapi_config, vapi_ioctl, vapi_selinux, libpcap, selinux], @@ -282,7 +286,9 @@ depends: [preload_lib]) test('umockdev-vala', executable('test-umockdev-vala', - 'tests/test-umockdev-vala.vala', + ['tests/test-umockdev-vala.vala', + 'src/ioctl_termios.vapi', + 'src/ioctl_termios.c'], include_directories: include_directories('src'), dependencies: [glib, gobject, gio, gudev, vapi_posix, vapi_assertions, vapi_ioctl, vapi_glibc, vapi_selinux, selinux], link_with: [umockdev_lib, umockdev_utils_lib], diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umockdev-0.19.4/src/ioctl_termios.c new/umockdev-0.19.6/src/ioctl_termios.c --- old/umockdev-0.19.4/src/ioctl_termios.c 1970-01-01 01:00:00.000000000 +0100 +++ new/umockdev-0.19.6/src/ioctl_termios.c 2026-03-22 04:59:39.000000000 +0100 @@ -0,0 +1,43 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* + * ioctl_termios.c - Helper functions for termios ioctl handling + * + * We can't use the Linux.Termios.TCGETS2 constants here: It is defined in sys/ioctl.h using _IOR(struct termios2), + * and Vala tries to apply sizeof() to the incomplete termios2 struct. Also, the TC*2 variants are not available + * on ppc64le, and Vala does not have conditional compilation. + */ + +#include "ioctl_termios.h" +#include <sys/ioctl.h> +#include <asm/termbits.h> +#include <asm/ioctls.h> + +bool is_termios_ioctl(unsigned long request) +{ + switch (request) { + case TCGETS: + case TCSETS: + case TCSETSW: + case TCSETSF: + case TCGETA: + case TCSETA: + case TCSETAW: + case TCSETAF: + case TIOCGWINSZ: + case TIOCSWINSZ: +#ifdef TCGETS2 + case TCGETS2: + case TCSETS2: + case TCSETSW2: + case TCSETSF2: +#endif + return true; + default: + return false; + } +} + +unsigned long get_tcgets_ioctl(void) +{ + return TCGETS; +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umockdev-0.19.4/src/ioctl_termios.h new/umockdev-0.19.6/src/ioctl_termios.h --- old/umockdev-0.19.4/src/ioctl_termios.h 1970-01-01 01:00:00.000000000 +0100 +++ new/umockdev-0.19.6/src/ioctl_termios.h 2026-03-22 04:59:39.000000000 +0100 @@ -0,0 +1,11 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* + * ioctl_termios.h - Helper functions for termios ioctl handling + */ + +#pragma once + +#include <stdbool.h> + +bool is_termios_ioctl(unsigned long request); +unsigned long get_tcgets_ioctl(void); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umockdev-0.19.4/src/ioctl_termios.vapi new/umockdev-0.19.6/src/ioctl_termios.vapi --- old/umockdev-0.19.4/src/ioctl_termios.vapi 1970-01-01 01:00:00.000000000 +0100 +++ new/umockdev-0.19.6/src/ioctl_termios.vapi 2026-03-22 04:59:39.000000000 +0100 @@ -0,0 +1,8 @@ +[CCode (cprefix = "", lower_case_cprefix = "", cheader_filename = "ioctl_termios.h")] +namespace IoctlTermios { + [CCode (cname = "is_termios_ioctl")] + public bool is_termios_ioctl(ulong request); + + [CCode (cname = "get_tcgets_ioctl")] + public ulong get_tcgets_ioctl(); +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umockdev-0.19.4/src/libumockdev-preload.c new/umockdev-0.19.6/src/libumockdev-preload.c --- old/umockdev-0.19.4/src/libumockdev-preload.c 2025-10-12 09:56:41.000000000 +0200 +++ new/umockdev-0.19.6/src/libumockdev-preload.c 2026-03-22 04:59:39.000000000 +0100 @@ -172,6 +172,25 @@ /* multi-thread locking for ioctls */ pthread_mutex_t ioctl_lock = PTHREAD_MUTEX_INITIALIZER; +static void +after_fork_in_child(void) +{ + ioctl_lock = trap_path_lock = (pthread_mutex_t)PTHREAD_MUTEX_INITIALIZER; +} + +__attribute__((constructor)) +static void +on_load(void) +{ + int ret; + + ret = pthread_atfork(NULL, NULL, after_fork_in_child); + if (ret != 0) { + errx(EXIT_FAILURE, "umockdev: pthread_atfork failed: %s", + strerror(ret)); + } +} + #define TRAP_PATH_LOCK \ do { \ sigset_t sig_set; \ @@ -760,7 +779,9 @@ switch (req.cmd) { case IOCTL_RES_DONE: - errno = req.arg2; + /* Only set errno on failure (POSIX behavior) */ + if (req.arg1 == (unsigned long)-1) + errno = req.arg2; pthread_mutex_unlock (&fdinfo->sock_lock); pthread_sigmask(SIG_SETMASK, &sig_restore, NULL); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umockdev-0.19.4/src/umockdev-ioctl.vala new/umockdev-0.19.6/src/umockdev-ioctl.vala --- old/umockdev-0.19.4/src/umockdev-ioctl.vala 2025-10-12 09:56:41.000000000 +0200 +++ new/umockdev-0.19.6/src/umockdev-ioctl.vala 2026-03-22 04:59:39.000000000 +0100 @@ -1,5 +1,4 @@ - namespace UMockdev { /** @@ -30,7 +29,6 @@ return continue_emission; } - /** * UMockdevIoctlData: * @@ -568,6 +566,9 @@ } if (!handled && args[0] == 1) { + /* No specific handler for this ioctl. First try stateless ioctls + * (like USB ioctls), then fall back to executing on the real fd + * for terminal ioctls on PTY-backed devices. */ IoctlTree.Tree tree = null; IoctlData? data = null; ulong size = IoctlTree.data_size_by_id(_request); @@ -585,16 +586,30 @@ return; } + /* Set default errno for tree.execute if it doesn't set one itself */ if ((char) type == 'E') { Posix.errno = Posix.ENOENT; } else { Posix.errno = Posix.ENOTTY; } + + /* Try handling with ioctl tree (stateless ioctls like USB) */ tree.execute(null, _request, *(void**) _arg.data, out ret); - my_errno = Posix.errno; - Posix.errno = 0; + my_errno = Posix.errno; /* Capture errno (may be set by tree.execute) */ - if (ret != -1) { + if (ret == -1) { + /* tree.execute failed - check if we should forward to real PTY for termios */ + if (my_errno == Posix.ENOTTY && IoctlTermios.is_termios_ioctl(_request)) { + try { + ret = execute(out my_errno); + /* execute() returns errno from real ioctl on failure, + * or preserved errno on success (POSIX behavior) */ + } catch (IOError e) { + /* execute() threw exception - keep ENOTTY */ + } + } + } else { + /* tree.execute succeeded - errno not used (preload doesn't set it on success) */ my_errno = 0; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/umockdev-0.19.4/tests/test-umockdev-vala.vala new/umockdev-0.19.6/tests/test-umockdev-vala.vala --- old/umockdev-0.19.4/tests/test-umockdev-vala.vala 2025-10-12 09:56:41.000000000 +0200 +++ new/umockdev-0.19.6/tests/test-umockdev-vala.vala 2026-03-22 04:59:39.000000000 +0100 @@ -261,7 +261,6 @@ int i = 1; assert_cmpint (Posix.ioctl (fd, Ioctl.USBDEVFS_CLAIMINTERFACE, ref i), CompareOperator.EQ, 0); - assert_cmpint (Posix.errno, CompareOperator.EQ, 0); assert_cmpint (Posix.ioctl (fd, Ioctl.USBDEVFS_GETDRIVER, ref i), CompareOperator.EQ, -1); assert_cmpint (Posix.errno, CompareOperator.EQ, Posix.ENODATA); Posix.errno = 0; @@ -279,12 +278,44 @@ Posix.close (fd); Posix.errno = 0; + // Test that termios ioctls work on an emulated TTY device (backed by a real PTY) + tb_add_from_string (tb, """P: /devices/serial/ttyTest +N: ttyTest +E: DEVNAME=/dev/ttyTest +E: SUBSYSTEM=tty +"""); + + fd = Posix.open ("/dev/ttyTest", Posix.O_RDWR | Posix.O_NONBLOCK, 0); + assert_cmpint (fd, CompareOperator.GE, 0); + Posix.errno = 0; + // Use TCGETS - a simple termios ioctl; struct termios is ~60 bytes + uint8 tio_data[128] = {0}; + assert_cmpint (Posix.ioctl (fd, (int) IoctlTermios.get_tcgets_ioctl(), tio_data), CompareOperator.EQ, 0); + + // Verify errno is preserved on successful termios ioctl (POSIX behavior) + Posix.errno = Posix.EINVAL; // Set a non-zero errno + assert_cmpint (Posix.ioctl (fd, (int) IoctlTermios.get_tcgets_ioctl(), tio_data), CompareOperator.EQ, 0); + assert_cmpint (Posix.errno, CompareOperator.EQ, Posix.EINVAL); // Should be preserved + + // TCGETS with NULL argument fails with expected error + Posix.errno = 0; + assert_cmpint (Posix.ioctl (fd, (int) IoctlTermios.get_tcgets_ioctl(), null), CompareOperator.EQ, -1); + assert_cmpint (Posix.errno, CompareOperator.EQ, Posix.EFAULT); + + // Non-termios ioctl on TTY is not forwarded to underlying PTY + Posix.errno = 0; + int dummy_val = 0; + assert_cmpint (Posix.ioctl (fd, Ioctl.FIONREAD, out dummy_val), CompareOperator.EQ, -1); + assert_cmpint (Posix.errno, CompareOperator.EQ, Posix.ENOTTY); + + Posix.close (fd); + Posix.errno = 0; + // unknown ioctls do work on non-emulated devices fd = Posix.open ("/dev/stdout", Posix.O_WRONLY, 0); assert_cmpint (fd, CompareOperator.GE, 0); assert_cmpint (Posix.errno, CompareOperator.EQ, 0); assert_cmpint (Posix.ioctl (fd, Ioctl.FIONREAD, out argp), CompareOperator.EQ, 0); - assert_cmpint (Posix.errno, CompareOperator.EQ, 0); Posix.close (fd); } @@ -339,12 +370,10 @@ // static ioctl assert_cmpint (Posix.ioctl (fd, Ioctl.USBDEVFS_CLAIMINTERFACE, ref i), CompareOperator.EQ, 0); - assert_cmpint (Posix.errno, CompareOperator.EQ, 0); // loaded ioctl var ci = Ioctl.usbdevfs_connectinfo(); assert_cmpint (Posix.ioctl (fd, Ioctl.USBDEVFS_CONNECTINFO, ref ci), CompareOperator.EQ, 0); - assert_cmpint (Posix.errno, CompareOperator.EQ, 0); assert_cmpuint (ci.devnum, CompareOperator.EQ, 11); assert_cmpuint (ci.slow, CompareOperator.EQ, 0); @@ -352,13 +381,11 @@ var urb_buffer = new uint8[4]; Ioctl.usbdevfs_urb urb = {1, 129, 0, 0, urb_buffer, 4, 0}; assert_cmpint (Posix.ioctl (fd, Ioctl.USBDEVFS_SUBMITURB, ref urb), CompareOperator.EQ, 0); - assert_cmpint (Posix.errno, CompareOperator.EQ, 0); assert_cmpuint (urb.status, CompareOperator.EQ, 0); assert_cmpint (urb_buffer[0], CompareOperator.EQ, 0); Ioctl.usbdevfs_urb* urb_reap = null; 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); assert_cmpint (urb.status, CompareOperator.EQ, -1); assert_cmpuint (urb.buffer[0], CompareOperator.EQ, 0x99); @@ -374,7 +401,6 @@ ci.devnum = 99; ci.slow = 99; assert_cmpint (Posix.ioctl (fd2, Ioctl.USBDEVFS_CONNECTINFO, ref ci), CompareOperator.EQ, 0); - assert_cmpint (Posix.errno, CompareOperator.EQ, 0); assert_cmpuint (ci.devnum, CompareOperator.EQ, 11); assert_cmpuint (ci.slow, CompareOperator.EQ, 0); @@ -382,7 +408,6 @@ ci.devnum = 99; ci.slow = 99; assert_cmpint (Posix.ioctl (fd, Ioctl.USBDEVFS_CONNECTINFO, ref ci), CompareOperator.EQ, 42); - assert_cmpint (Posix.errno, CompareOperator.EQ, 0); assert_cmpuint (ci.devnum, CompareOperator.EQ, 12); assert_cmpuint (ci.slow, CompareOperator.EQ, 1); @@ -391,7 +416,6 @@ ci.devnum = 99; ci.slow = 99; assert_cmpint (Posix.ioctl (fd2, Ioctl.USBDEVFS_CONNECTINFO, ref ci), CompareOperator.EQ, 42); - assert_cmpint (Posix.errno, CompareOperator.EQ, 0); assert_cmpuint (ci.devnum, CompareOperator.EQ, 12); assert_cmpuint (ci.slow, CompareOperator.EQ, 1); Posix.close (fd2); @@ -438,7 +462,6 @@ // loaded ioctl var ci = Ioctl.usbdevfs_connectinfo(); assert_cmpint (Posix.ioctl (fd, Ioctl.USBDEVFS_CONNECTINFO, ref ci), CompareOperator.EQ, 0); - assert_cmpint (Posix.errno, CompareOperator.EQ, 0); assert_cmpuint (ci.devnum, CompareOperator.EQ, 11); assert_cmpuint (ci.slow, CompareOperator.EQ, 0); } @@ -484,7 +507,6 @@ // loaded ioctl var ci = Ioctl.usbdevfs_connectinfo(); assert_cmpint (Posix.ioctl (fd, Ioctl.USBDEVFS_CONNECTINFO, ref ci), CompareOperator.EQ, 0); - assert_cmpint (Posix.errno, CompareOperator.EQ, 0); assert_cmpuint (ci.devnum, CompareOperator.EQ, 11); assert_cmpuint (ci.slow, CompareOperator.EQ, 0); } @@ -536,12 +558,10 @@ var ci = Ioctl.usbdevfs_connectinfo(); assert_cmpint (Posix.ioctl (fd, Ioctl.USBDEVFS_CONNECTINFO, ref ci), CompareOperator.EQ, 0); - assert_cmpint (Posix.errno, CompareOperator.EQ, 0); assert_cmpuint (ci.devnum, CompareOperator.EQ, 11); assert_cmpuint (ci.slow, CompareOperator.EQ, 0); assert_cmpint (Posix.ioctl (fd, Ioctl.USBDEVFS_CONNECTINFO, ref ci), CompareOperator.EQ, 42); - assert_cmpint (Posix.errno, CompareOperator.EQ, 0); assert_cmpuint (ci.devnum, CompareOperator.EQ, 12); assert_cmpuint (ci.slow, CompareOperator.EQ, 1); @@ -580,7 +600,6 @@ 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 */ @@ -588,10 +607,8 @@ 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. */ @@ -600,11 +617,9 @@ 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 */ @@ -615,17 +630,14 @@ 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 */ assert_cmpint (Posix.ioctl (fd, Ioctl.USBDEVFS_REAPURB, ref urb_reap), CompareOperator.EQ, -1); @@ -635,17 +647,14 @@ var urb_buffer_ep2 = new uint8[4]; Ioctl.usbdevfs_urb urb_ep2 = {1, 0x82, 0, 0, urb_buffer_ep2, 4, 0}; assert_cmpint (Posix.ioctl (fd, Ioctl.USBDEVFS_SUBMITURB, ref urb_ep2), CompareOperator.EQ, 0); - 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); assert (urb_reap == &urb_ep1); assert_cmpint (urb_ep1.status, CompareOperator.EQ, 0); assert_cmpuint (urb_ep1.buffer[0], CompareOperator.EQ, 0x00); @@ -659,11 +668,9 @@ /* Resubmit URB to get next report */ assert_cmpint (Posix.ioctl (fd, Ioctl.USBDEVFS_SUBMITURB, ref urb_ep1), CompareOperator.EQ, 0); - assert_cmpint (Posix.errno, CompareOperator.EQ, 0); /* The second report is: 0000000000000000 (EP1) */ 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_ep1); assert_cmpint (urb_ep1.status, CompareOperator.EQ, 0); assert_cmpuint (urb_ep1.buffer[0], CompareOperator.EQ, 0x00); @@ -770,13 +777,11 @@ int i = 0; assert_cmpint (Posix.ioctl (fd, Ioctl.HIDIOCGRDESCSIZE, ref i), CompareOperator.EQ, 0); - assert_cmpint (Posix.errno, CompareOperator.EQ, 0); // HACK: This is broken on big-endian machines like s390x and ppc64, it is 0x22000000 there if (BYTE_ORDER == ByteOrder.LITTLE_ENDIAN) assert_cmpint (i, CompareOperator.EQ, 34); Ioctl.hidraw_report_descriptor desc = { 34, }; assert_cmpint (Posix.ioctl (fd, Ioctl.HIDIOCGRDESC, ref desc), CompareOperator.EQ, 0); - assert_cmpint (Posix.errno, CompareOperator.EQ, 0); uint8 desc_value[] = { 0x06, 0xD0, 0xF1, 0x09, 0x01, 0xA1, 0x01, 0x09, 0x20, 0x15, 0x00, 0x26, 0xFF, 0x00, 0x75, 0x08, 0x95, 0x40, 0x81, 0x02, 0x09, 0x21, 0x15, 0x00, @@ -806,7 +811,6 @@ Ioctl.cros_ec_command_v2 *s_cmd = malloc (sizeof (Ioctl.cros_ec_command_v2) + 4); assert_cmpint (Posix.ioctl (fd, Ioctl.CROS_EC_DEV_IOCXCMD_V2, s_cmd), CompareOperator.EQ, 4); - assert_cmpint (Posix.errno, CompareOperator.EQ, 0); uint8 fpmode_data[] = { 0x80, 0x00, 0x00, 0x00 }; @@ -814,7 +818,6 @@ s_cmd = realloc(s_cmd, sizeof (Ioctl.cros_ec_command_v2) + 48); assert_cmpint (Posix.ioctl (fd, Ioctl.CROS_EC_DEV_IOCXCMD_V2, s_cmd), CompareOperator.EQ, 48); - assert_cmpint (Posix.errno, CompareOperator.EQ, 0); uint8 fpinfo_data[] = { 0x46, 0x50, 0x43, 0x20, 0x09, 0x00, 0x00, 0x00, 0x1B, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x94, 0x66, 0x00, 0x00, 0x47, 0x52, 0x45, 0x59, @@ -825,7 +828,6 @@ s_cmd = realloc(s_cmd, sizeof (Ioctl.cros_ec_command_v2) + 22); assert_cmpint (Posix.ioctl (fd, Ioctl.CROS_EC_DEV_IOCXCMD_V2, s_cmd), CompareOperator.EQ, 22); - assert_cmpint (Posix.errno, CompareOperator.EQ, 0); uint8 fpstats_data[] = { 0x65, 0x63, 0x01, 0x00, 0xB4, 0x4A, 0x02, 0x00, 0x07, 0xB3, 0x03, 0x00, 0xDC, 0x33, 0x50, 0x5A, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00 @@ -1142,21 +1144,17 @@ int value = (int) 0xdeadbeef; assert_cmpint (Posix.ioctl (fd, 1, value), CompareOperator.EQ, value); - assert_cmpint (Posix.errno, CompareOperator.EQ, 0); assert_cmpint (Posix.ioctl (fd, 2, value), CompareOperator.EQ, -1); assert_cmpint (Posix.errno, CompareOperator.EQ, Posix.ENOMEM); assert_cmpint (Posix.ioctl (fd, 3, &ioctl_target), CompareOperator.EQ, 0); assert_cmpint (ioctl_target, CompareOperator.EQ, (int) 0xc00fffee); - assert_cmpint (Posix.errno, CompareOperator.EQ, 0); /* Test whether we can write and get the value mirrored back. */ assert_cmpint ((int) Posix.write (fd, write_buf, 10), CompareOperator.EQ, 10); - assert_cmpint (Posix.errno, CompareOperator.EQ, 0); assert_cmpint ((int) Posix.read (fd, read_buf, 10), CompareOperator.EQ, 10); - assert_cmpint (Posix.errno, CompareOperator.EQ, 0); assert_cmpint (Posix.memcmp (read_buf, write_buf, 10), CompareOperator.EQ, 0); /* A further read returns EAGAIN */
