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

  <refentryinfo>
    <title>sd_id128_to_string</title>
    <productname>systemd</productname>
  </refentryinfo>

  <refmeta>
    <refentrytitle>sd_id128_to_string</refentrytitle>
    <manvolnum>3</manvolnum>
  </refmeta>

  <refnamediv>
    <refname>sd_id128_to_string</refname>
    <refname>sd_id128_from_string</refname>
    <refpurpose>Format or parse 128-bit IDs as strings</refpurpose>
  </refnamediv>

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

      <funcprototype>
        <funcdef>char *<function>sd_id128_to_string</function></funcdef>
        <paramdef>sd_id128_t <parameter>id</parameter>, char <parameter>s</parameter>[33]</paramdef>
      </funcprototype>

      <funcprototype>
        <funcdef>int <function>sd_id128_from_string</function></funcdef>
        <paramdef>const char *<parameter>s</parameter>, sd_id128_t *<parameter>ret</parameter></paramdef>
      </funcprototype>

    </funcsynopsis>
  </refsynopsisdiv>

  <refsect1>
    <title>Description</title>

    <para><function>sd_id128_to_string()</function> formats a 128-bit
    ID as a character string. It expects the ID and a string array
    capable of storing 33 characters. The ID will be formatted as 32
    lowercase hexadecimal digits and be terminated by a
    <constant>NUL</constant> byte.</para>

    <para><function>sd_id128_from_string()</function> implements the reverse operation: it takes a 33 character string
    with 32 hexadecimal digits (either lowercase or uppercase, terminated by <constant>NUL</constant>) and parses them
    back into a 128-bit ID returned in <parameter>ret</parameter>. Alternatively, this call can also parse a
    37-character string with a 128-bit ID formatted as RFC UUID. If <parameter>ret</parameter> is passed as
    <constant>NULL</constant> the function will validate the passed ID string, but not actually return it in parsed
    form.</para>

    <para>Note that when parsing 37 character UUIDs this is done strictly in Big Endian byte order,
    i.e. according to <ulink url="https://tools.ietf.org/html/rfc4122">RFC4122</ulink> Variant 1
    rules, even if the UUID encodes a different variant. This matches behaviour in various other Linux
    userspace tools. It's probably wise to avoid UUIDs of other variant types.</para>

    <para>For more information about the <literal>sd_id128_t</literal>
    type see
    <citerefentry><refentrytitle>sd-id128</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
    Note that these calls operate the same way on all architectures,
    i.e. the results do not depend on endianness.</para>

    <para>When formatting a 128-bit ID into a string, it is often
    easier to use a format string for
    <citerefentry project='man-pages'><refentrytitle>printf</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
    This is easily done using the
    <constant>SD_ID128_FORMAT_STR</constant> and <function>SD_ID128_FORMAT_VAL()</function> macros. For
    more information see
    <citerefentry><refentrytitle>sd-id128</refentrytitle><manvolnum>3</manvolnum></citerefentry>.</para>
  </refsect1>

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

    <para><function>sd_id128_to_string()</function> always succeeds
    and returns a pointer to the string array passed in.
    <function>sd_id128_from_string()</function> returns 0 on success, in
    which case <parameter>ret</parameter> is filled in, or a negative
    errno-style error code.</para>
  </refsect1>

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

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

    <para>
      <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
      <citerefentry><refentrytitle>sd-id128</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
      <citerefentry project='man-pages'><refentrytitle>printf</refentrytitle><manvolnum>3</manvolnum></citerefentry>
    </para>
  </refsect1>

</refentry>
