OBSOLETE: Release news of newer versions are contained in the tag descriptions.

## [0.17.13] - 2022-05-30
- preload: Wrap fstatfs(), to work with systemd 251 also with Python tests
- Fix tests in Gentoo sandbox build

## [0.17.12] - 2022-05-19
- Work around packit propose_downstream bug

## [0.17.11] - 2022-05-19
- Fix documentation build (thanks Benjamin Berg)

## [0.17.10] - 2022-05-10
- Adjust to systemd 251-rc2: Set $SYSTEMD_DEVICE_VERIFY_SYSFS, parse new udevadm format, update tests

## [0.17.9] - 2022-04-10
- preload: Wrap fortified version of readlinkat (thanks Martin Liska)

## [0.17.8] - 2022-03-23
- Fix some potential crashes spotted by Coverity
- Enable Fedora builds and bodhi updates via packit

## [0.17.7] - 2022-03-01
- Fix uevent race condition in umockdev_testbed_add_from_string()

## [0.17.6] - 2022-01-21
- Increase uevent buffer size (#167)
- Skip /umockdev-testbed-vala/detects_running_outside_testbed during normal
  builds for the time being, as it is brittle on several architectures (#169)

## [0.17.5] - 2022-01-18
- Relax overzealous stat nlink unit test

## [0.17.4] - 2022-01-18
- Include udev properties in emulated netlink messages, to work with recent
  libudev (#165)

## [0.17.3] - 2022-01-11
- tests: Work around broken HIDIOCGRDESCSIZE ioctl on big-endian architectures

## [0.17.2] - 2022-01-10
- preload: Wrap statx() and fstatat(), to fix `ls` and other tools on
  recent glibc versions. (#160)

## [0.17.1] - 2021-12-14
- Fix /sys/dev/* symlinks; regression from 0.15.3 (#155)

## [0.17.0] - 2021-12-11
- Add ioctls necessary to record/replay hidraw devices (thanks Daiki Ueno)
- meson: Respect includedir option (thanks Florentin Dubois)
- tests: Fix for Fedora koji emulated architectures s390x and arm
- Enable automatic Fedora package updates with packit

## [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
- Fix most valac build warnings

## [0.16.1] - 2021-07-02
- Fix wrong ioctl constants on ppc64el
- Fix test-umockdev-record failure in some build environments

## [0.16.0] - 2021-07-01
- Move ioctl emulation from preload library to main test process
- Add test API for custom ioctl and device read/write handlers (#96, #128)
- Support USB replay from usbmon pcap captures (#82, #117)
- Support SPI ioctl/read/write record and replay (#121)
- Many thanks to Benjamin Berg for all of the above!

## [0.15.5] - 2021-05-03
- Fix build with vala 0.52
- Fix build on 32 bit Alpine

## [0.15.4] - 2021-01-03
- preload: Trap relative paths into mocked directories
- Fix tests for NixOS and enable them in CI

## [0.15.3] - 2020-12-27
- preload: Handle chdir() and getcwd() for emulated paths
- umockdev-run: Don't strip off trailing whitespace from sysfs attributes.
  This fixes regressions with libusb 1.0.24. (#115, Debian #978310)

## [0.15.2] - 2020-11-25
- Fix "installed-tests" setup to not produce stderr output with grep ≥ 3.5

## [0.15.1] - 2020-11-17
- Fix include file install location (#111)

## [0.15] - 2020-11-16
- Switch build system to meson

## [0.14.5] - 2020-11-16
- Add support for builddir != srcdir
- Fix building with -D_FILE_OFFSET_BITS
- Fix memory leaks in unit tests, and valgrind invocation

## [0.14.4] - 2020-10-23
- Fix build against glibc ≥ 2.32.9000

## [0.14.3] - 2020-08-23
- preload: Fix SocketServer control EOF handling

## [0.14.2] - 2020-07-29
- preload: Fix incomplete reads scripts
- tests: Fix incomplete reads for fuzzy script tests (Debian #767908)
- tests: Add $SLOW_TESTBED_FACTOR env var for slow architectures (LP #1831467)

## [0.14.1] - 2020-02-12
- Fix unexpected warning in unit tests (Debian #951114)

## [0.14] - 2020-02-08
- Add all bus names from Linux kernel 5.3 (#94)
- Makefile.am: Adjust for dropped @CODE_COVERAGE_RULES@
- Fix crash on duplicate S: link targets
- preload: Avoid printing NULL strings in debug statements

## [0.13.2] - 2019-08-28
- Add locking to ioctl emulation (#92)
- Don't expect size to be non-zero for mocked /sys (#93)

## [0.13.1] - 2019-07-22
- Ship code coverage autoconf macros in dist tarball (#91)

## [0.13] - 2019-07-22
- Add support for devnode symlinks in device descriptions
- Support building without gudev
- Fix building with NDEBUG
- Use AX_CODE_COVERAGE instead of deprecated GNOME_CODE_COVERAGE

## [0.12.1] - 2018-11-18
- Fix realpath() with NULL second argument
- Fix build on systems without O_TMPFILE (#84)
- Support running tests on old Python 3.x versions
- Adjust _IOC_NSIZE() data type to fix compilation on armhf

## [0.12] - 2018-08-26
- Fix build, functionality, and tests with musl libc. This now gets tested and
  on Alpine Linux. (#83)
- preload: Wrap realpath()
- preload: Support mocks and script recording/emulation with fopen() (#19)
- Stop linking to gudev (this is only being used in tests). (#80)

## [0.11.3] - 2018-05-01
- Relax evemu delta-t test, it failed sometimes on loaded systems.

## [0.11.2] - 2018-03-24
- Fix build failures with glibc 2.27 and vala 0.40
- preload: Fix potential unterminated strings
- Fix a lot of warnings about deprecated API

## [0.11.1] - 2018-02-28
- Fix architecture specific /proc test (#74)
- Move release tarballs to https://github.com/martinpitt/umockdev/releases

## [0.11] - 2018-02-09
- Wrap openat{,64}() to work with libudev 237

## [0.10] - 2018-01-07
- Create /sys/bus symlinks for Thunderbolt devices
- Avoid buffer overflow in uevent_sender_send()

## [0.9.4] - 2017-10-14
- preload: Wrap [l]getxattr(). Fixes e. g. confusing error messages in `ls -l`.
- Refine detection of being in mock environment. Fixes message about
  nonexisting devices in `uevent_sender_send()` when using umockdev-run.
- Fix build warnings about non-applicable "static const"s.
- Disable t_gphoto_* test cases for now. These currently trigger an
  assertion about submit_node != NULL. The URB structure in libgphoto/libmtp
  apparently got more flexible, so ioctl replaying needs to be fixed for that.

## [0.9.3] - 2017-09-06
- In the /umockdev-record/system-single test, stop assuming that /dev/loop0
  always exists, as that is not the case in containers and some other build
  machines.  Use /dev/zero as second device instead. (Debian #792189)

## [0.9.2] - 2017-08-10
- Relax sysfs path check in /umockdev-testbed/dev_query_gudev test to also work
  with udev 234. (Debian #871060)

## [0.9.1] - 2017-05-01
- Relax /umockdev-testbed/proc to work on different architectures, and show
  /proc/cpuinfo on failure for easier debugging.

## [0.9] - 2017-04-13
- Add mocking of /proc. (issue #55)

## [0.8.13] - 2017-01-26
- Fix crash when client sends uevents to closed listeners. (issue #53)

## [0.8.12] - 2016-11-10
- Include missing sys/sysmacros.h to fix build with recent glibc.
- Fix /umockdev-testbed-usb/lsusb test for libusb 1.0.21.

## [0.8.11] - 2015-06-29
- test-umockdev.py: Explicitly require version 1.0 for GUdev and GUMockdev
  introspection modules to avoid deprecation warning.
- Skip /umockdev-record/system-all test with "check-installed", it's too
  brittle and prone to break on quirky hardware/kernel issues.

## [0.8.10] - 2015-06-09
- Fix build failure of tests/test-ioctl-tree.c on powerpc with recent glibcs.
- preload: Wrap readlinkat() and canonicalize_file_name(), to work with
  udev >= 220.
- Create /sys/bus/ hierarchy instead of /sys/class for "usb" and "pci"
  subsystems, to match what the real kernel does.
- Include DEVTYPE and SEQNUM properties into synthesized uevents so that
  libudev >= 220 monitoring works.

## [0.8.9] - 2015-05-22
- umockdev-record: Ignore stderr from udevadm info, to avoid udev debug
  message spew on stderr if udev debugging is enabled. (Debian #767909)
- Fix recording of USB devices on recent kernels: Pass device as major:minor
  instead of assuming that they are only 8 bit (which is not true any more).
- Skip /umockdev-run/integration/input-touchpad test instead of failing when
  X.org does not start up. Calling Xorg is not allowed in build environments in
  e. g. Fedora. (issue #47)

## [0.8.8] - 2014-09-22
- Skip O_TMPFILE test on Linux versions which don't support that.

## [0.8.7] - 2014-09-19
- /umockdev-run/integration/input-evtest-evemu test: Be more liberal in parsing
  evtest's SYN event output, as it changed in 1.32.
- preload: Properly wrap open() with O_TMPFILE. Thanks Cemil Azizoglu.

## [0.8.6] - 2014-09-01
- Fix compilation on sparc with gcc 4.9.
- Support attributes with leading directory names, such as "queue/rotational".
  (issue #41)
- Create /sys/block symlink for block devices (other part of issue #41).

## [0.8.5] - 2014-07-11
- Fix building with gcc 4.9 on 32 bit architectures.
- Restrict input-touchpad test case to 64 bit architectures, as we don't
  currently have recorded ioctls for 32 bit.
- Lower number of iterations in mt_uevent test case to avoid overflowing the
  netlink buffer on loaded machines.

## [0.8.4] - 2014-07-10
- Make SKIP messages go to to stdout, like all the other the test suite output.
- Fix test case failures when running tests without a controlling tty.

## [0.8.3] - 2014-07-10
- Add umockdev_testbed_get_property() method. This is mostly for internal
  umockdev testing, umockdev users should use libudev/gudev get_property
  functions.
- preload: Make path redirection to testbed thread-safe for wrapped functions.
  This does NOT address all multi-thread issues, but should work for simple
  cases. (https://launchpad.net/bugs/1336671)
- Make debug logging dynamically controllable with the $UMOCKDEV_DEBUG
  environment variable. See README.rst for details.
- Emulate isatty(). It would previously return true for emulated devices as
  PTYs are being used internally, but the actual emulated device is not always
  supposed to be a TTY. Fixes regression with X.org synaptics >= 1.8 device
  emulation as that uses xf86OpenSerial() to open evdev devices (which is
  wrong, but reality).
- Don't fall back to real ioctls on emulated fds.

## [0.8.2] - 2014-05-15
- Fix ioctl recording of multiple device open/close cycles. This regressed in
  0.6 to only keep the data of the last cycle.
- Update devices/cameras/canon-powershot-sx200.ioctl with ioctls from
  libgphoto2 2.5.4, to make the /umockdev-run/integration/gphoto-* tests work
  with that version.
- On ioctl recording, also record the device name on close().

## [0.8.1] - 2014-03-31
- Fix eternal hang due to negative delays when playing back evemu scripts with
  timestamps that go backwards.

## [0.8] - 2014-03-20
New features:
- Add new method umockdev_testbed_load_evemu_events() to replay an evemu events
  file into an emulated evdev device. These are platform independent and thus
  more portable than a script record.
- Add -e/--evemu-events=devname=eventsfilename option to umockdev-run, to load
  an evemu .events file. (Issue #5)
- Add -e/--evemu-events=devname=eventsfilename option to umockdev-record, to
  record reads from an evdev device into an evemu .events file. (Issue #5)
- Add umockdev_in_mock_environment(). This function returns whether
  or not the current process is running in a umockdev testbed
  environment. Thanks Chris Halse Rogers!

Bug fixes:
- Only send a "add" uevent from add_device if running in a umockdev
  testbed environment. Fixes error messages when loading devices from
  the umockdev-run commandline. Thanks Chris Halse Rogers!
- Fix detection of mismatching devices when recording into an already existing
  ioctl or script record file.

## [0.7] - 2014-03-05
- Set PTYs into raw mode to get more accurate read() semantics,
  specifically how many bytes each read() slurps.
- umockdev-record --script=/dev/device now also stores the name of the
  device node recorded in the script.
  umockdev_testbed_load_script(testbed, NULL, "device.script")
  now automatically associates the script with the original device node.

## [0.6] - 2014-02-15
- Also send DEVNAME in uevent when available. Thanks Chris Halse Rogers!
- Send an "add" uevent when adding a device
- umockdev-record --ioctl now stores the name of the device node recorded
  in the trace. umockdev_testbed_load_ioctl(testbed, NULL, "device.ioctl")
  now automatically associates the ioctl trace with the original device
  node. (issue #33)

## [0.5.1] - 2014-01-16
- Update devices/cameras/canon-powershot-sx200.ioctl with ioctls from
  libgphoto2 2.5.3, to make the /umockdev-run/integration/gphoto-* tests work
  with that version.

## [0.5] - 2014-01-08
- Add generic support for variable length structs without pointers to
  substructs. Definitions of such ioctls must provide a get_data_size()
  function which returns the number of bytes based on the ioctl number and the
  data pointer.
- Declare libc ioctl type correctly using varargs. On some architectures (e.g.
  ppc64el) the calling convention for varargs is sufficiently different that
  the previous declaration caused stack corruption. Thanks Colin Watson!

## [0.4.7] - 2013-11-14
- Skip umockdev-record loop device test if /sys exists, but there is no loop
  device.
- Slightly relax timings in /umockdev-testbed/script_replay_simple test to
  avoid failure on slow machines.
- preload: Wrap chmod() and inotify_add_watch().
- Fix assertion on umockdev_testbed_uevent() if there are no listeners.
  (issue #29)

## [0.4.6] - 2013-10-11
- Fix wrong select() call timeout which caused a failure on arm64.
- Skip umockdev-record tests which need /sys if there is no real /sys.
  (Debian #724203)

## [0.4.5] - 2013-09-17
- Make various test cases more robust.

## [0.4.4] - 2013-09-16
- testsuite: Write "skip" messages to stdout instead of stderr.
- README.rst: Add information about building, testing, running, and
  contributing.
- Add code coverage reporting with gcov and lcov, using the gnome-common
  macros. autogen.sh will enable this automatically if lcov is installed.
- Support comments in scripts and ioctl records, lines starting with '#' get
  ignored.

## [0.4.3] - 2013-08-23
- preload: Don't call overridden readlink() in helper function. Fixes building
  with gcc 4.6 and older. (issue #27)
- Support USBDEVFS_GET_CAPABILITIES ioctl.
- preload: Repair recording if device gets opened multiple times (got broken in
  0.3)
- ioctl recording: Never consider input URBs equal even if they have exactly
  the same data, as that might give a mismatch between identical SUBMITs and
  different REAPs.

## [0.4.2] - 2013-08-01
- preload: Don't intercept netlink socket() calls during recording.
- Update devices/cameras/canon-powershot-sx200.ioctl for libgphoto 2.5.

## [0.4.1] - 2013-07-29
Bug fixes:
- preload: Wrap __open_2() and __open64_2().

## [0.4] - 2013-07-29
New features:
- Add recording of Unix stream sockets. (part of issue #24)
- Add new method umockdev_testbed_load_socket_script() to replay recorded
  read()s/recv()s and write()s/send()s to a Unix socket. (part of issue #24)
- Add new umockdev-run option -u/--unix-stream to load a script for a mocked
  Unix socket into the testbed. (part of issue #24)
- Add new script file operation "f" to set a fuzz level when comparing expected
  incoming strings. (issue #26)
- Add docs/script-format.txt: document the umockdev script format.
- README.rst: Add unix socket record/replay example.

Bug fixes:
- Quote send/received data in script replay debug output, to get along with
  embedded null bytes and control characters. (issue #25)

## [0.3.2] - 2013-07-18
- script replay: Fix endless loop on end of script file.
- Fix /umockdev-run/integration/input-evtest for 32 bit architectures. Add a
  script recorded on 32 bit and select the right one in the test.
- Fix race condition in /umockdev-record/script-log-simple test which sometimes
  caused this to fail on slow machines.

## [0.3.1] - 2013-07-18
- Fix /umockdev-run/integration/input-touchpad test case to not leave behind an
  Xorg process on failure.
- Skip /umockdev-run/integration/input-touchpad test case on big-endian
  machines, as we do not have ioctl data from big endian machines at the moment.
- Flush the output file after each script recording event, to avoid losing data
  when recording programs that get terminated with a signal.
- Intercept SIGINT during ioctl recording, so that the record gets written even
  if the recorded program gets terminated with Control-C.
- Fix /umockdev-testbed-usb/lsusb test case to work with libusbx 1.0.16.
- Create PTY devices (for usage with get_dev_fd()) instead of plain files for
  other device types than tty as well, except for SUBSYSTEM=="usb". With that
  you can use record&replay for e. g. input or DRI control devices.
  (main part of issue #5)
- Reading scripts during device playback does not wrap around at EOF any more.
  This more closely reproduces how real devices behave. If we actually get an
  use case for wrapping around, we can do this by adding a new operation type
  to script files.

## [0.3] - 2013-07-12
Command line argument changes (not backwards compatible):
- Change umockdev-record's --ioctl option: The argument is now
  "devicefile=outputfile" like with umockdev-run, instead of specifying the
  device as the first positional argument. This was inconsistant, and is
  necessary to support other kinds of recording in the future.
- Rename umockdev-run's -l/--load option to -d/--device. Other kinds of files
  (ioctl dumps, and read/write scripts) also get "loaded" into the testbed, so
  the previous name does not make sense any more.

New features/API:
- Emulate SUBSYSTEM=tty mocked device nodes as PTYs instead of plain files, so
  that they behave tty-like and respond to the relevant ioctls.
  (first part of issue #9)
- Add new method umockdev_testbed_get_dev_fd() to get the master end file
  descriptor for simulated tty devices (and possibly other kinds of devices in
  the future), so that a test suite can communicate with clients that connect
  to the simulated tty device node. (second part of issue #9)
- Add recording of read()s and write()s to a device into files, called
  "device scripts". Add umockdev-record option -s/--script for this.
- Add new method umockdev_testbed_load_script() to replay read()s and
  write()s of a device from a script. (issue #18)
- Add new option -s/--script to umockdev-run to load a script into the testbed.
  (issue #18)
- Add new method umockdev_testbed_set_attribute_link() to set attributes which
  are symlinks; most importantly this allows testbeds to set the "driver"
  attribute. (first part of issue #22)
- Record the "driver" attribute in umockdev-record, and restore it in
  umockdev_testbed_add_from_string(). (second part of issue #22)
- Add new method umockdev_testbed_remove_device() to remove a sysfs device and
  all its associated links, device node, etc. (issue #17)

Bug fixes:
- umockdev-run: Give proper error message if --ioctl argument is invalid.
- preload: Only look up original libc functions once. (issue #21)
- preload: Wrap fclose(). (issue #20)
- Work around gtk-doc non-POSIX recursive variable expansion with automake >=
  1.13 and gtk-doc >= 1.19, which previously failed autogen.sh.
- Do not export internal symbols in libumockdev library.

## [0.2.11] - 2013-07-03
- Do not overwrite an existing $LD_PRELOAD in umockdev-run and umockdev-record.
- Add "make check-valgrind" target to debug memory leaks.
- Add recently added API to reference documentation.
- Fix various memory leaks.

## [0.2.10] - 2013-07-01
- Make stat()ing of emulated /dev/ nodes appear as actual block/char device
  nodes with proper major/minor number, instead of regular files. (issue #16)
- Add umockdev_testbed_add_from_file() convenience wrapper around
  add_from_string(). (issue #15)
- Handle USBDEVFS_REAPURB ioctls without a previous SUBMITURB like the real USB
  stack (return EAGAIN instead of crashing with an assertion). This makes
  umockdev work with gvfs' mtp backend.

## [0.2.9] - 2013-06-20
- preload: Do not change errno when calculating wrapped paths.
- Add umockdev_testbed_disable() and umockdev_testbed_enable() methods for
  temporarily disabling the emulated /sys and /dev. This can be used for
  temporarily switching back to the real /sys and /dev without having to
  destroy or change $UMOCKDEV_DIR and the UMockdevTestbed instance (which is
  difficult when these get exported to subprocesses like local D-BUS
  instances).

## [0.2.8] - 2013-06-17
- Link the typelib to the SONAMEd library, not the version-less development
  symlink.

## [0.2.7] - 2013-06-17
- Slightly relax errno test in /umockdev-testbed-vala/usbfs_ioctl_static, the
  real call might fail not just with ENOTTY but also with EINVAL.
- Fix tests to work on big-endian machines (tested on powerpc32).

## [0.2.6] - 2013-06-13
- Do not use automake 1.13's parallel test runner. It not buy much for this
  project, and makes it a lot harder to analyse test failures from build logs.
- Add umockdev_testbed_clear() method to remove all added devices (both sysfs
  and /dev). This is useful for cleaning up between tests in situations where
  the UMockdevTestbed object itself needs to be kept.
- test-umockdev-run: Write X.org log into a file, point to it on X.org startup
  failure, and also point out that this needs X.org's dummy driver installed.
  (issue #12)
- Fix ioctl file reading on platforms which have unsigned "char" by default,
  such as ARM. (issue #11)
- Do not read sysfs attributes of any Tegra device (on ARM systems), as these
  often trigger kernel crashes (see https://launchpad.net/bugs/1190225).
  (issue #11)
- Allow uncommon characters in sysfs attribute names.
- devices/input/synaptics-touchpad.ioctl: Add ioctl for 32 bit systems.
  (issue #13)

## [0.2.5] - 2013-06-10
- Fix test-umockdev lsusb check to work in environments without any
  /dev/bus/usb.
- preload: Do not destroy errno on wrapping open() under umockdev-record.
- Add --version option to umockdev-run and umockdev-record.
- Fix building with Vala 0.20.

## [0.2.4] - 2013-06-05
- Fix "make check" for current automake 1.13.
- Add "make check-installed" target to run tests against the installed umockdev
  instead of against the build tree.

## [0.2.3] - 2013-05-25
- preload: Wrap fopen64() call; fixes operation on 32 bit architectures.
  (issue #10)

## [0.2.2] - 2013-05-24
- umockdev-run: Fix segfault if no program is specified. (issue #6)
- preload: Print proper error message instead of assertion when trying to load
  an empty or invalid ioctl record. (issue #8)
- umockdev-run: Fix --help output to not mention the child program twice.
- Fix DEVNAME property with older libudev versions.
- Handle "L:" (link priority) lines from udevadm for newer udev versions.
- Fix segfault with gcc 4.8 (due to changed behaviour of sizeof).
- Drop our posix_extra backport of execvp(), this was added to Vala 0.16.1.
  Bump vala dependency accordingly.

## [0.2.1] - 2013-02-21
- umockdev-wrapper: Use exec to avoid keeping the shell process around and make
  killing the subprogram from outside work properly.
- Fix building with automake 1.12, thanks Peter Hutterer.
- Support opening several netlink sockets (i. e. udev monitors) at the same
  time.
- Fix building with older kernels which don't have the EVIOCGMTSLOTS ioctl yet.

## [0.2] - 2013-02-20
Compatibility break: This does not work any more with recorded ioctl files from
version 0.1.

- umockdev-run: Fix running of child program to keep stdin.
- preload: Fix resolution of "/dev" and "/sys"
- ioctl_tree: Fix endless loop when the first encountered ioctl was unknown
- preload: Support opening a /dev node multiple times for ioctl emulation
  (issue #3)
- Fix parallel build (issue #2)
- Support xz compressed ioctl files in umockdev_testbed_load_ioctl().
- Add example umockdev and ioctl files for a gphoto camera and an MTP capable
  mobile phone.
- Fix building with automake 1.11.3 and Vala 0.16.
- Generalize ioctl recording and emulation for ioctls with simple structs, i.
  e. no pointer fields. This makes it much easier to add more ioctls in the
  future.
- Store return values of ioctls in records, as they are not always 0
  (like EVIOCGBIT)
- Add support for ioctl ranges (like EVIOCGABS) and ioctls with variable length
  (like EVIOCGBIT).
- Add all reading evdev ioctls, for recording and mocking input devices like
  touch pads, touch screens, or keyboards. (issue #1)

## [0.1] - 2013-02-12
Initial release.
