<?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_TO_STRING</refname>
    <refname>SD_ID128_STRING_MAX</refname>
    <refname>sd_id128_to_uuid_string</refname>
    <refname>SD_ID128_TO_UUID_STRING</refname>
    <refname>SD_ID128_UUID_STRING_MAX</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>

      <funcsynopsisinfo>#define SD_ID128_STRING_MAX 33U</funcsynopsisinfo>

      <funcsynopsisinfo>#define SD_ID128_UUID_STRING_MAX 37U</funcsynopsisinfo>

      <funcsynopsisinfo>#define SD_ID128_TO_STRING(id) …</funcsynopsisinfo>

      <funcsynopsisinfo>#define SD_ID128_TO_UUID_STRING(id) …</funcsynopsisinfo>

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

      <funcprototype>
        <funcdef>char *<function>sd_id128_uuid_string</function></funcdef>
        <paramdef>sd_id128_t <parameter>id</parameter>, char <parameter>s</parameter>[static SD_ID128_UUID_STRING_MAX]</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
    (<constant>SD_ID128_STRING_MAX</constant>). The ID will be formatted as 32 lowercase hexadecimal digits
    and be terminated by a <constant>NUL</constant> byte.</para>

    <para><function>SD_ID128_TO_STRING()</function> is a macro that wraps
    <function>sd_id128_to_string()</function> and passes an appropriately sized buffer as second argument,
    allocated as C99 compound literal. Each use will thus implicitly acquire a suitable buffer on the stack
    which remains valid until the end of the current code block. This is usually the simplest way to acquire
    a string representation of a 128-bit ID in a buffer that is valid in the current code block.</para>

    <para><function>sd_id128_to_uuid_string()</function> and <function>SD_ID128_TO_UUID_STRING()</function>
    are similar to these two functions/macros, but format the 128bit values as RFC4122 UUIDs, i.e. a series
    of 36 lowercase hexadeciaml digits and dashes, 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 formatting and parsing 36 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>
