<?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">
<!-- SPDX-License-Identifier: LGPL-2.1-or-later -->

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

  <refentryinfo>
    <title>sd_journal_enumerate_fields</title>
    <productname>systemd</productname>
  </refentryinfo>

  <refmeta>
    <refentrytitle>sd_journal_enumerate_fields</refentrytitle>
    <manvolnum>3</manvolnum>
  </refmeta>

  <refnamediv>
    <refname>sd_journal_enumerate_fields</refname>
    <refname>sd_journal_restart_fields</refname>
    <refname>SD_JOURNAL_FOREACH_FIELD</refname>
    <refpurpose>Read used field names from the journal</refpurpose>
  </refnamediv>

  <refsynopsisdiv>
    <funcsynopsis>
      <funcsynopsisinfo>#include &lt;systemd/sd-journal.h&gt;</funcsynopsisinfo>

      <funcprototype>
        <funcdef>int <function>sd_journal_enumerate_fields</function></funcdef>
        <paramdef>sd_journal *<parameter>j</parameter></paramdef>
        <paramdef>const char **<parameter>field</parameter></paramdef>
      </funcprototype>

      <funcprototype>
        <funcdef>void <function>sd_journal_restart_fields</function></funcdef>
        <paramdef>sd_journal *<parameter>j</parameter></paramdef>
      </funcprototype>

      <funcprototype>
        <funcdef><function>SD_JOURNAL_FOREACH_FIELD</function></funcdef>
        <paramdef>sd_journal *<parameter>j</parameter></paramdef>
        <paramdef>const char *<parameter>field</parameter></paramdef>
      </funcprototype>

    </funcsynopsis>
  </refsynopsisdiv>

  <refsect1>
    <title>Description</title>

    <para><function>sd_journal_enumerate_fields()</function> may be used to iterate through all field names used in the
    opened journal files. On each invocation the next field name is returned. The order of the returned field names is
    not defined. It takes two arguments: the journal context object, plus a pointer to a constant string pointer where
    the field name is stored in. The returned data is in a read-only memory map and is only valid until the next
    invocation of <function>sd_journal_enumerate_fields()</function>. Note that this call is subject to the data field
    size threshold as controlled by <function>sd_journal_set_data_threshold()</function>.</para>

    <para><function>sd_journal_restart_fields()</function> resets the field name enumeration index to the beginning of
    the list. The next invocation of <function>sd_journal_enumerate_fields()</function> will return the first field
    name again.</para>

    <para>The <function>SD_JOURNAL_FOREACH_FIELD()</function> macro may be used as a handy wrapper around
    <function>sd_journal_restart_fields()</function> and <function>sd_journal_enumerate_fields()</function>.</para>

    <para>These functions currently are not influenced by matches set with <function>sd_journal_add_match()</function>
    but this might change in a later version of this software.</para>

    <para>To retrieve the possible values a specific field can take use
    <citerefentry><refentrytitle>sd_journal_query_unique</refentrytitle><manvolnum>3</manvolnum></citerefentry>.</para>
  </refsect1>

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

    <para><function>sd_journal_enumerate_fields()</function> returns a
    positive integer if the next field name has been read, 0 when no
    more field names are known, or a negative errno-style error code.
    <function>sd_journal_restart_fields()</function> returns
    nothing.</para>
  </refsect1>

  <refsect1>
    <title>Notes</title>

    <xi:include href="threads-aware.xml" xpointer="strict" />

    <xi:include href="libsystemd-pkgconfig.xml" xpointer="pkgconfig-text"/>
  </refsect1>

  <refsect1>
    <title>Examples</title>

    <para>Use the <function>SD_JOURNAL_FOREACH_FIELD()</function> macro to iterate through all field names in use in the
    current journal.</para>

    <programlisting><xi:include href="journal-enumerate-fields.c" parse="text" /></programlisting>
  </refsect1>

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

    <para>
      <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
      <citerefentry><refentrytitle>systemd.journal-fields</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
      <citerefentry><refentrytitle>sd-journal</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
      <citerefentry><refentrytitle>sd_journal_open</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
      <citerefentry><refentrytitle>sd_journal_query_unique</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
      <citerefentry><refentrytitle>sd_journal_get_data</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
      <citerefentry><refentrytitle>sd_journal_add_match</refentrytitle><manvolnum>3</manvolnum></citerefentry>
    </para>
  </refsect1>

</refentry>
