forked from Kistler-Group/sdbus-cpp
* chore: don't use systemd headers with elogind
In file included from src/VTableUtils.c:27:
src/VTableUtils.h:30:10: fatal error: 'systemd/sd-bus.h' file not found
#include <systemd/sd-bus.h>
^~~~~~~~~~~~~~~~~~
* chore: add basu support
Similar to elogind but also supported on non-Linux.
* chore(tests): permit /var/lib/machine-id on non-systemd
https://github.com/elogind/elogind/commit/84fdc0fc61c1
https://git.sr.ht/~emersion/basu/commit/8324e6729231
* chore(ci): add simple freebsd job
Mainly to cover libc++ and basu.
* chore(ci): explicitly pass CMAKE_INSTALL_PREFIX
Some sdbus-cpp tests require configuring system bus. However, Linux
testing relies on writing outside of prefix in order to affect current
system bus instance instead of launching a dedicated one.
* chore(tests): respect CMAKE_INSTALL_PREFIX for system bus config
DBus isn't part of base system on BSDs, so may not use /etc for configs.
Also, testing installation failed as non-root:
$ cmake -DBUILD_TESTS=1 -DCMAKE_INSTALL_PREFIX=/tmp/sdbus-cpp_prefix -DTESTS_INSTALL_PATH=/tmp/sdbus-cpp_prefix/tests
$ cmake --build .
$ cmake --install .
[...]
CMake Error at tests/cmake_install.cmake:105 (file):
file cannot create directory: /etc/dbus-1/system.d. Maybe need
administrative privileges.
* chore(tests): temporarily skip 1 test on FreeBSD to keep CI happy
* chore(ci): run tests in freebsd job
68 lines
1.7 KiB
C++
68 lines
1.7 KiB
C++
/**
|
|
* (C) 2016 - 2021 KISTLER INSTRUMENTE AG, Winterthur, Switzerland
|
|
* (C) 2016 - 2022 Stanislav Angelovic <stanislav.angelovic@protonmail.com>
|
|
*
|
|
* @file Types.cpp
|
|
*
|
|
* Created on: Nov 30, 2016
|
|
* Project: sdbus-c++
|
|
* Description: High-level D-Bus IPC C++ library based on sd-bus
|
|
*
|
|
* This file is part of sdbus-c++.
|
|
*
|
|
* sdbus-c++ is free software; you can redistribute it and/or modify it
|
|
* under the terms of the GNU Lesser General Public License as published by
|
|
* the Free Software Foundation, either version 2.1 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* sdbus-c++ is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public License
|
|
* along with sdbus-c++. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#include <sdbus-c++/Types.h>
|
|
#include <sdbus-c++/Error.h>
|
|
#include "MessageUtils.h"
|
|
#include SDBUS_HEADER
|
|
#include <cassert>
|
|
|
|
namespace sdbus {
|
|
|
|
Variant::Variant()
|
|
: msg_(createPlainMessage())
|
|
{
|
|
}
|
|
|
|
void Variant::serializeTo(Message& msg) const
|
|
{
|
|
SDBUS_THROW_ERROR_IF(isEmpty(), "Empty variant is not allowed", EINVAL);
|
|
msg_.rewind(true);
|
|
msg_.copyTo(msg, true);
|
|
}
|
|
|
|
void Variant::deserializeFrom(Message& msg)
|
|
{
|
|
msg.copyTo(msg_, false);
|
|
msg_.seal();
|
|
}
|
|
|
|
std::string Variant::peekValueType() const
|
|
{
|
|
msg_.rewind(false);
|
|
std::string type;
|
|
std::string contents;
|
|
msg_.peekType(type, contents);
|
|
return contents;
|
|
}
|
|
|
|
bool Variant::isEmpty() const
|
|
{
|
|
return msg_.isEmpty();
|
|
}
|
|
|
|
}
|