Skip to content

Commit 10afc4d

Browse files
authored
Merge pull request anbox#1209 from Logout22/master
fix(anbox#1153): compile dbus helpers in C
2 parents c732719 + b2312a3 commit 10afc4d

File tree

5 files changed

+151
-109
lines changed

5 files changed

+151
-109
lines changed

src/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,9 @@ set(SOURCES
142142
anbox/dbus/bus.h
143143
anbox/dbus/codecs.h
144144
anbox/dbus/interface.h
145+
anbox/dbus/sd_bus_helpers.c
145146
anbox/dbus/sd_bus_helpers.h
147+
anbox/dbus/sd_bus_helpers.hpp
146148
anbox/dbus/skeleton/application_manager.cpp
147149
anbox/dbus/skeleton/application_manager.h
148150
anbox/dbus/skeleton/service.cpp

src/anbox/dbus/sd_bus_helpers.c

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
/*
2+
* Copyright (C) 2019 Martin Unzner <[email protected]>
3+
*
4+
* This program is free software: you can redistribute it and/or modify it
5+
* under the terms of the GNU General Public License version 3, as published
6+
* by the Free Software Foundation.
7+
*
8+
* This program is distributed in the hope that it will be useful, but
9+
* WITHOUT ANY WARRANTY; without even the implied warranties of
10+
* MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
11+
* PURPOSE. See the GNU General Public License for more details.
12+
*
13+
* You should have received a copy of the GNU General Public License along
14+
* with this program. If not, see <http://www.gnu.org/licenses/>.
15+
*
16+
*/
17+
18+
#include "sd_bus_helpers.h"
19+
20+
sd_bus_vtable sdbus_vtable_create_start(uint64_t flags) {
21+
const sd_bus_vtable start = SD_BUS_VTABLE_START(flags);
22+
return start;
23+
}
24+
25+
sd_bus_vtable sdbus_vtable_create_end() {
26+
const sd_bus_vtable end = SD_BUS_VTABLE_END;
27+
return end;
28+
}
29+
30+
sd_bus_vtable sdbus_vtable_create_method_o(const char* member, const char* signature,
31+
const char* result,
32+
sd_bus_message_handler_t handler, size_t offset,
33+
uint64_t flags) {
34+
const sd_bus_vtable method_o = SD_BUS_METHOD_WITH_OFFSET(
35+
member, signature, result, handler, offset, flags);
36+
return method_o;
37+
}
38+
39+
sd_bus_vtable sdbus_vtable_create_method(const char* member, const char* signature,
40+
const char* result, sd_bus_message_handler_t handler,
41+
uint64_t flags) {
42+
return sdbus_vtable_create_method_o(member, signature, result, handler, 0, flags);
43+
}
44+
45+
sd_bus_vtable sdbus_vtable_create_signal(const char* member, const char* signature, uint64_t flags) {
46+
const sd_bus_vtable signal = SD_BUS_SIGNAL(member, signature, flags);
47+
return signal;
48+
}
49+
50+
sd_bus_vtable sdbus_vtable_create_property(const char* member, const char* signature,
51+
sd_bus_property_get_t get,
52+
uint64_t flags) {
53+
const sd_bus_vtable property = SD_BUS_PROPERTY(member, signature, get, 0, flags);
54+
return property;
55+
}
56+
57+
sd_bus_vtable sdbus_vtable_create_property_set(const char* member, const char* signature,
58+
sd_bus_property_get_t get,
59+
sd_bus_property_set_t set,
60+
uint64_t flags) {
61+
const sd_bus_vtable property = SD_BUS_WRITABLE_PROPERTY(member, signature, get, set, 0, flags);
62+
return property;
63+
}
64+
65+
sd_bus_vtable sdbus_vtable_create_property_o(const char* member, const char* signature,
66+
size_t offset, uint64_t flags) {
67+
const sd_bus_vtable property_o = SD_BUS_PROPERTY(member, signature, NULL, offset, flags);
68+
return property_o;
69+
}
70+
71+
sd_bus_vtable sdbus_vtable_create_property_o_set(const char* member, const char* signature,
72+
sd_bus_property_set_t set, size_t offset,
73+
uint64_t flags) {
74+
const sd_bus_vtable property_o = SD_BUS_WRITABLE_PROPERTY(
75+
member, signature, NULL, set, offset, flags);
76+
return property_o;
77+
}

src/anbox/dbus/sd_bus_helpers.h

Lines changed: 37 additions & 104 deletions
Original file line numberDiff line numberDiff line change
@@ -1,121 +1,54 @@
11
/*
2-
* Copyright (C) 2018 OpenBMC
3-
*
4-
* Taken from https://github.com/openbmc/sdbusplus/blob/master/sdbusplus/vtable.hpp
5-
*
6-
* Licensed under the Apache License, Version 2.0 (the "License");
7-
* you may not use this file except in compliance with the License.
8-
* You may obtain a copy of the License at
9-
*
10-
* http://www.apache.org/licenses/LICENSE-2.0
11-
*
12-
* Unless required by applicable law or agreed to in writing, software
13-
* distributed under the License is distributed on an "AS IS" BASIS,
14-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15-
* See the License for the specific language governing permissions and
16-
* limitations under the License.
17-
*/
2+
* Copyright (C) 2019 Martin Unzner <[email protected]>
3+
*
4+
* This program is free software: you can redistribute it and/or modify it
5+
* under the terms of the GNU General Public License version 3, as published
6+
* by the Free Software Foundation.
7+
*
8+
* This program is distributed in the hope that it will be useful, but
9+
* WITHOUT ANY WARRANTY; without even the implied warranties of
10+
* MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
11+
* PURPOSE. See the GNU General Public License for more details.
12+
*
13+
* You should have received a copy of the GNU General Public License along
14+
* with this program. If not, see <http://www.gnu.org/licenses/>.
15+
*
16+
*/
1817

1918
#ifndef ANBOX_DBUS_SD_BUS_HELPERS_H_
2019
#define ANBOX_DBUS_SD_BUS_HELPERS_H_
2120

2221
#include <systemd/sd-bus-vtable.h>
2322

24-
namespace anbox {
25-
namespace dbus {
26-
namespace sdbus {
27-
namespace vtable {
28-
constexpr sd_bus_vtable start(uint64_t flags)
29-
{
30-
sd_bus_vtable v{};
31-
v.type = _SD_BUS_VTABLE_START;
32-
v.flags = flags;
33-
v.x.start = decltype(v.x.start){sizeof(sd_bus_vtable)};
23+
sd_bus_vtable sdbus_vtable_create_start(uint64_t flags);
3424

35-
return v;
36-
}
25+
sd_bus_vtable sdbus_vtable_create_end();
3726

38-
constexpr sd_bus_vtable end() {
39-
sd_bus_vtable v{};
40-
v.type = _SD_BUS_VTABLE_END;
27+
sd_bus_vtable sdbus_vtable_create_method_o(const char* member, const char* signature,
28+
const char* result,
29+
sd_bus_message_handler_t handler, size_t offset,
30+
uint64_t flags);
4131

42-
return v;
43-
}
32+
sd_bus_vtable sdbus_vtable_create_method(const char* member, const char* signature,
33+
const char* result, sd_bus_message_handler_t handler,
34+
uint64_t flags);
4435

45-
constexpr sd_bus_vtable method_o(const char* member, const char* signature,
46-
const char* result,
47-
sd_bus_message_handler_t handler, size_t offset,
48-
uint64_t flags) {
49-
sd_bus_vtable v{};
50-
v.type = _SD_BUS_VTABLE_METHOD;
51-
v.flags = flags;
52-
v.x.method = decltype(v.x.method){member, signature, result, handler, offset};
36+
sd_bus_vtable sdbus_vtable_create_signal(const char* member, const char* signature, uint64_t flags);
5337

54-
return v;
55-
}
38+
sd_bus_vtable sdbus_vtable_create_property(const char* member, const char* signature,
39+
sd_bus_property_get_t get,
40+
uint64_t flags);
5641

57-
constexpr sd_bus_vtable method(const char* member, const char* signature,
58-
const char* result, sd_bus_message_handler_t handler,
59-
uint64_t flags) {
60-
return method_o(member, signature, result, handler, 0, flags);
61-
}
42+
sd_bus_vtable sdbus_vtable_create_property_set(const char* member, const char* signature,
43+
sd_bus_property_get_t get,
44+
sd_bus_property_set_t set,
45+
uint64_t flags);
6246

63-
constexpr sd_bus_vtable signal(const char* member, const char* signature, uint64_t flags) {
64-
sd_bus_vtable v{};
65-
v.type = _SD_BUS_VTABLE_SIGNAL;
66-
v.flags = flags;
67-
v.x.signal = decltype(v.x.signal){member, signature};
47+
sd_bus_vtable sdbus_vtable_create_property_o(const char* member, const char* signature,
48+
size_t offset, uint64_t flags);
6849

69-
return v;
70-
}
71-
72-
constexpr sd_bus_vtable property(const char* member, const char* signature,
73-
sd_bus_property_get_t get,
74-
uint64_t flags) {
75-
sd_bus_vtable v{};
76-
v.type = _SD_BUS_VTABLE_PROPERTY;
77-
v.flags = flags;
78-
v.x.property = decltype(v.x.property){member, signature, get, nullptr, 0};
79-
80-
return v;
81-
}
82-
83-
constexpr sd_bus_vtable property(const char* member, const char* signature,
84-
sd_bus_property_get_t get,
85-
sd_bus_property_set_t set,
86-
uint64_t flags) {
87-
sd_bus_vtable v{};
88-
v.type = _SD_BUS_VTABLE_WRITABLE_PROPERTY;
89-
v.flags = flags;
90-
v.x.property = decltype(v.x.property){member, signature, get, set, 0};
91-
92-
return v;
93-
}
94-
95-
constexpr sd_bus_vtable property_o(const char* member, const char* signature,
96-
size_t offset, uint64_t flags) {
97-
sd_bus_vtable v{};
98-
v.type = _SD_BUS_VTABLE_PROPERTY;
99-
v.flags = flags;
100-
v.x.property = decltype(v.x.property){member, signature, nullptr, nullptr, offset};
101-
102-
return v;
103-
}
104-
105-
constexpr sd_bus_vtable property_o(const char* member, const char* signature,
106-
sd_bus_property_set_t set, size_t offset,
107-
uint64_t flags)
108-
{
109-
sd_bus_vtable v{};
110-
v.type = _SD_BUS_VTABLE_WRITABLE_PROPERTY;
111-
v.flags = flags;
112-
v.x.property = decltype(v.x.property){member, signature, nullptr, set, offset};
113-
114-
return v;
115-
}
116-
} // namespace vtable
117-
} // namespace sd_bus
118-
} // namespace dbus
119-
} // namespace anbox
50+
sd_bus_vtable sdbus_vtable_create_property_o_set(const char* member, const char* signature,
51+
sd_bus_property_set_t set, size_t offset,
52+
uint64_t flags);
12053

12154
#endif

src/anbox/dbus/sd_bus_helpers.hpp

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/*
2+
* Copyright (C) 2019 Martin Unzner <[email protected]>
3+
*
4+
* This program is free software: you can redistribute it and/or modify it
5+
* under the terms of the GNU General Public License version 3, as published
6+
* by the Free Software Foundation.
7+
*
8+
* This program is distributed in the hope that it will be useful, but
9+
* WITHOUT ANY WARRANTY; without even the implied warranties of
10+
* MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
11+
* PURPOSE. See the GNU General Public License for more details.
12+
*
13+
* You should have received a copy of the GNU General Public License along
14+
* with this program. If not, see <http://www.gnu.org/licenses/>.
15+
*
16+
*/
17+
18+
#ifndef ANBOX_DBUS_SD_BUS_HELPERS_HPP_
19+
#define ANBOX_DBUS_SD_BUS_HELPERS_HPP_
20+
21+
namespace anbox {
22+
namespace dbus {
23+
24+
extern "C" {
25+
#include "sd_bus_helpers.h"
26+
}
27+
} // namespace dbus
28+
} // namespace anbox
29+
30+
#endif

src/anbox/dbus/skeleton/application_manager.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717

1818
#include "anbox/dbus/skeleton/application_manager.h"
1919
#include "anbox/dbus/interface.h"
20-
#include "anbox/dbus/sd_bus_helpers.h"
20+
#include "anbox/dbus/sd_bus_helpers.hpp"
2121
#include "anbox/android/intent.h"
2222
#include "anbox/logger.h"
2323

@@ -51,10 +51,10 @@ namespace anbox {
5151
namespace dbus {
5252
namespace skeleton {
5353
const sd_bus_vtable ApplicationManager::vtable[] = {
54-
sdbus::vtable::start(0),
55-
sdbus::vtable::method("Launch", "a{sv}s", "", ApplicationManager::method_launch, SD_BUS_VTABLE_UNPRIVILEGED),
56-
sdbus::vtable::property("Ready", "b", ApplicationManager::property_ready_get, SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
57-
sdbus::vtable::end()
54+
sdbus_vtable_create_start(0),
55+
sdbus_vtable_create_method("Launch", "a{sv}s", "", ApplicationManager::method_launch, SD_BUS_VTABLE_UNPRIVILEGED),
56+
sdbus_vtable_create_property("Ready", "b", ApplicationManager::property_ready_get, SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
57+
sdbus_vtable_create_end()
5858
};
5959

6060
int ApplicationManager::method_launch(sd_bus_message *m, void *userdata, sd_bus_error *ret_error) {

0 commit comments

Comments
 (0)