static void
adapter_appeared(void *data, const char *path)
{
    struct context *ctx = data;
    int r;

    if (ctx->adapter_path)
        return;

    ctx->adapter_path = strdup(path);
    SOL_NULL_CHECK(ctx->adapter_path);

    r = sol_bus_map_cached_properties(ctx->bluez, path,
        "org.bluez.Adapter1",
        adapter_properties,
        adapter_property_changed, ctx);
    SOL_INT_CHECK_GOTO(r, < 0, error_map);

    if (sol_ptr_vector_get_len(&ctx->sessions) > 0) {
        r = adapter_set_powered(ctx, ctx->adapter_path, true);
        SOL_INT_CHECK(r, < 0);
    }
static void
_bus_initialized(sd_bus *bus)
{
    sd_bus_message *m = NULL;
    int r;

    _ctx.properties.system_state = SOL_PLATFORM_STATE_UNKNOWN;

    r = sd_bus_message_new_method_call(bus, &m,
        "org.freedesktop.systemd1",
        "/org/freedesktop/systemd1",
        "org.freedesktop.systemd1.Manager",
        "Subscribe");
    SOL_INT_CHECK_GOTO(r, < 0, fail_new_method);

    r = sd_bus_call_async(bus, NULL, m, sol_bus_log_callback, NULL, 0);
    SOL_INT_CHECK_GOTO(r, < 0, fail_call);
    sd_bus_message_unref(m);

    r = sol_bus_map_cached_properties(bus,
        "org.freedesktop.systemd1",
        "/org/freedesktop/systemd1",
        "org.freedesktop.systemd1.Manager",
        _manager_properties,
        _manager_properties_changed,
        &_ctx);
    SOL_INT_CHECK_GOTO(r, < 0, fail_map_properties);

    return;

fail_call:
    sd_bus_message_unref(m);
fail_map_properties:
fail_new_method:
    sol_bus_close();
}