<?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_list_entry"
  xmlns:xi="http://www.w3.org/2001/XInclude">

  <refentryinfo>
    <title>udev_list_entry</title>
    <productname>systemd</productname>
  </refentryinfo>

  <refmeta>
    <refentrytitle>udev_list_entry</refentrytitle>
    <manvolnum>3</manvolnum>
  </refmeta>

  <refnamediv>
    <refname>udev_list_entry</refname>
    <refname>udev_list_entry_get_next</refname>
    <refname>udev_list_entry_get_by_name</refname>
    <refname>udev_list_entry_get_name</refname>
    <refname>udev_list_entry_get_value</refname>

    <refpurpose>Iterate and access udev lists</refpurpose>
  </refnamediv>

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

      <funcprototype>
        <funcdef>struct udev_list_entry *<function>udev_list_entry_get_next</function></funcdef>
        <paramdef>struct udev_list_entry *<parameter>list_entry</parameter></paramdef>
      </funcprototype>

      <funcprototype>
        <funcdef>struct udev_list_entry *<function>udev_list_entry_get_by_name</function></funcdef>
        <paramdef>struct udev_list_entry *<parameter>list_entry</parameter></paramdef>
        <paramdef>const char *<parameter>name</parameter></paramdef>
      </funcprototype>

      <funcprototype>
        <funcdef>const char *<function>udev_list_entry_get_name</function></funcdef>
        <paramdef>struct udev_list_entry *<parameter>list_entry</parameter></paramdef>
      </funcprototype>

      <funcprototype>
        <funcdef>const char *<function>udev_list_entry_get_value</function></funcdef>
        <paramdef>struct udev_list_entry *<parameter>list_entry</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_list_entry_get_next()</function> and
    <function>udev_list_entry_get_by_name()</function> return
    a pointer to the requested list entry. If no such entry can
    be found, or on failure, <constant>NULL</constant> is
    returned.</para>

    <para>On success,
    <function>udev_list_entry_get_name()</function> and
    <function>udev_list_entry_get_value()</function> return a
    pointer to a constant string representing the requested value.
    The string is bound to the lifetime of the list entry itself.
    On failure, <constant>NULL</constant> 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>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
    </para>
  </refsect1>

</refentry>
