<?xml version='1.0'?>
<!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_bus_slot_get_bus" xmlns:xi="http://www.w3.org/2001/XInclude">
  <refentryinfo>
    <title>sd_bus_slot_get_bus</title>
    <productname>systemd</productname>
  </refentryinfo>

  <refmeta>
    <refentrytitle>sd_bus_slot_get_bus</refentrytitle>
    <manvolnum>3</manvolnum>
  </refmeta>

  <refnamediv>
    <refname>sd_bus_slot_get_bus</refname>
    <refname>sd_bus_slot_get_current_handler</refname>
    <refname>sd_bus_slot_get_current_message</refname>
    <refname>sd_bus_slot_get_current_userdata</refname>

    <refpurpose>Query information attached to a bus slot object</refpurpose>
  </refnamediv>

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

      <xi:include href="sd_bus_add_match.xml" xpointer="sd_bus_message_handler_t"/>

      <funcprototype>
        <funcdef>sd_bus *<function>sd_bus_slot_get_bus</function></funcdef>
        <paramdef>sd_bus_slot *<parameter>slot</parameter></paramdef>
      </funcprototype>

      <funcprototype>
        <funcdef>sd_bus_message_handler_t <function>sd_bus_slot_get_current_handler</function>
        </funcdef>
        <paramdef>sd_bus_slot *<parameter>slot</parameter></paramdef>
      </funcprototype>

      <funcprototype>
        <funcdef>sd_bus_message *<function>sd_bus_slot_get_current_message</function></funcdef>
        <paramdef>sd_bus_slot *<parameter>slot</parameter></paramdef>
      </funcprototype>

      <funcprototype>
        <funcdef>void *<function>sd_bus_slot_get_current_userdata</function></funcdef>
        <paramdef>sd_bus_slot *<parameter>slot</parameter></paramdef>
      </funcprototype>
    </funcsynopsis>
  </refsynopsisdiv>

  <refsect1>
    <title>Description</title>

    <para><function>sd_bus_slot_get_bus()</function> returns the bus object that message
    <parameter>slot</parameter> is attached to.</para>

    <para><function>sd_bus_slot_get_current_handler()</function>,
    <function>sd_bus_slot_get_current_message()</function> and
    <function>sd_bus_slot_get_current_userdata()</function> return the current handler, message and
    userdata respectively of the bus <parameter>slot</parameter> is attached to if we're currently
    executing the callback associated with <parameter>slot</parameter>.</para>
  </refsect1>

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

    <para><function>sd_bus_slot_get_bus()</function> always returns the bus object.</para>

    <para>On success, <function>sd_bus_slot_get_current_handler()</function>,
    <function>sd_bus_slot_get_current_message()</function> and
    <function>sd_bus_slot_get_current_userdata()</function> return the requested object. On failure,
    they return <constant>NULL</constant>.</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-bus</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
    </para>
  </refsect1>

</refentry>
