<?xml version='1.0'?> <!--*-nxml-*-->
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
  "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [
<!ENTITY % entities SYSTEM "custom-entities.ent" >
%entities;
]>
<!-- SPDX-License-Identifier: LGPL-2.1-or-later -->

<refentry id="udev_monitor_filter_update"
  xmlns:xi="http://www.w3.org/2001/XInclude">

  <refentryinfo>
    <title>udev_monitor_filter_update</title>
    <productname>systemd</productname>
  </refentryinfo>

  <refmeta>
    <refentrytitle>udev_monitor_filter_update</refentrytitle>
    <manvolnum>3</manvolnum>
  </refmeta>

  <refnamediv>
    <refname>udev_monitor_filter_update</refname>
    <refname>udev_monitor_filter_remove</refname>
    <refname>udev_monitor_filter_add_match_subsystem_devtype</refname>
    <refname>udev_monitor_filter_add_match_tag</refname>

    <refpurpose>Modify filters</refpurpose>
  </refnamediv>

  <refsynopsisdiv>
    <funcsynopsis>
      <funcsynopsisinfo>#include &lt;libudev.h&gt;</funcsynopsisinfo>

      <funcprototype>
        <funcdef>int <function>udev_monitor_filter_update</function></funcdef>
        <paramdef>struct udev_monitor *<parameter>udev_monitor</parameter></paramdef>
      </funcprototype>

      <funcprototype>
        <funcdef>int <function>udev_monitor_filter_remove</function></funcdef>
        <paramdef>struct udev_monitor *<parameter>udev_monitor</parameter></paramdef>
      </funcprototype>

      <funcprototype>
        <funcdef>int <function>udev_monitor_filter_add_match_subsystem_devtype</function></funcdef>
        <paramdef>struct udev_monitor *<parameter>udev_monitor</parameter></paramdef>
        <paramdef>const char *<parameter>subsystem</parameter></paramdef>
        <paramdef>const char *<parameter>devtype</parameter></paramdef>
      </funcprototype>

      <funcprototype>
        <funcdef>int <function>udev_monitor_filter_add_match_tag</function></funcdef>
        <paramdef>struct udev_monitor *<parameter>udev_monitor</parameter></paramdef>
        <paramdef>const char *<parameter>tag</parameter></paramdef>
      </funcprototype>

    </funcsynopsis>
  </refsynopsisdiv>

  <!--<refsect1>
    <title>Description</title>

    <para>XXX: Add short description.</para>
  </refsect1>-->

  <refsect1>
    <title>Return Value</title>

    <para>On success,
    <function>udev_monitor_filter_update()</function>,
    <function>udev_monitor_filter_remove()</function>,
    <function>udev_monitor_filter_add_match_subsystem_devtype()</function>
    and
    <function>udev_monitor_filter_add_match_tag()</function>
    return an integer greater than, or equal to,
    <constant>0</constant>. On failure, a negative error code is
    returned.</para>
  </refsect1>

  <refsect1>
    <title>See Also</title>

    <para>
      <citerefentry><refentrytitle>udev_new</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
      <citerefentry><refentrytitle>udev_device_new_from_syspath</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
      <citerefentry><refentrytitle>udev_enumerate_new</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
      <citerefentry><refentrytitle>udev_monitor_new_from_netlink</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
      <citerefentry><refentrytitle>udev_monitor_receive_device</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
      <citerefentry><refentrytitle>udev_list_entry</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
      <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
    </para>
  </refsect1>

</refentry>
