diff options
Diffstat (limited to 'lib/CWayland/CWayland.cc')
| -rw-r--r-- | lib/CWayland/CWayland.cc | 63 |
1 files changed, 33 insertions, 30 deletions
diff --git a/lib/CWayland/CWayland.cc b/lib/CWayland/CWayland.cc index 3487f72..a8a80e3 100644 --- a/lib/CWayland/CWayland.cc +++ b/lib/CWayland/CWayland.cc @@ -5,8 +5,11 @@ #include <queue> #include <memory> #include <unordered_map> +#include <string_view> #include <chrono> +#include <algorithm> #include <cassert> +#include <cerrno> #include <poll.h> #include <fcntl.h> #include <unistd.h> @@ -239,7 +242,7 @@ namespace static void signal_handler(int signum) { - write(tx_fd, &signum, sizeof(signum)); + (void)write(tx_fd, &signum, sizeof(signum)); } public: @@ -845,8 +848,8 @@ namespace enum class type { uninitialized, i32, u32, fixed, string, object, array, fd }; struct meta { - type type{ type::uninitialized }; - ref ref{}; + type t{ type::uninitialized }; + ref r{}; }; static constexpr std::size_t max_args = 64; @@ -866,7 +869,7 @@ namespace { assert(reader_idx < writer_idx && "reached maximum number of arguments"); auto result = reader_idx++; - assert(meta[result].type == expected_type && "mismatching argument type"); + assert(meta[result].t == expected_type && "mismatching argument type"); return result; } @@ -878,29 +881,29 @@ namespace { auto i = next_write(); args[i].i = value; - meta[i].type = type::i32; + meta[i].t = type::i32; } void write_uint(uint32_t value) { auto i = next_write(); args[i].u = value; - meta[i].type = type::u32; + meta[i].t = type::u32; } void write_fixed(float value) { auto i = next_write(); args[i].f = wl_fixed_from_double(value); - meta[i].type = type::fixed; + meta[i].t = type::fixed; } void write_string(ref value) { auto i = next_write(); args[i].s = option_cstr_or_null(value.get()); - meta[i].type = type::string; - meta[i].ref = std::move(value); + meta[i].t = type::string; + meta[i].r = std::move(value); } void write_object(ref value) @@ -914,8 +917,8 @@ namespace { args[i].o = static_cast<wl_object*>(lean_get_external_data(lean_ctor_get(value.get(), 0))); } - meta[i].type = type::object; - meta[i].ref = std::move(value); + meta[i].t = type::object; + meta[i].r = std::move(value); } void write_array(ref value) @@ -925,15 +928,15 @@ namespace args[i].a->alloc = size; args[i].a->size = size; args[i].a->data = lean_sarray_cptr(value.get()); - meta[i].type = type::array; - meta[i].ref = std::move(value); + meta[i].t = type::array; + meta[i].r = std::move(value); } void write_fd(int32_t value) { auto i = next_write(); args[i].h = value; - meta[i].type = type::fd; + meta[i].t = type::fd; } void write(wl_argument arg, std::string_view signature_type) @@ -942,57 +945,57 @@ namespace args[i] = arg; if (signature_type == "i") { - meta[i].type = type::i32; + meta[i].t = type::i32; } else if (signature_type == "u") { - meta[i].type = type::u32; + meta[i].t = type::u32; } else if (signature_type == "f") { - meta[i].type = type::fixed; + meta[i].t = type::fixed; } else if (signature_type == "s" || signature_type == "?s") { - meta[i].type = type::string; + meta[i].t = type::string; if (arg.s) { auto s = std::string_view{ arg.s }; auto res = ref::steal(lean_alloc_ctor(1, 1, 0)); lean_ctor_set(res.get(), 0, lean_mk_string_from_bytes(s.data(), s.length())); - meta[i].ref = std::move(res); + meta[i].r = std::move(res); } else { - meta[i].ref = ref::steal(lean_box(0)); + meta[i].r = ref::steal(lean_box(0)); } } else if (signature_type == "o" || signature_type == "?o" || signature_type == "n") { - meta[i].type = type::object; + meta[i].t = type::object; if (arg.o) { auto res = ref::steal(lean_alloc_ctor(1, 1, 0)); auto proxy_obj = (lean_object*)(wl_proxy_get_listener((wl_proxy*)arg.o)); // set as dispatcher_data lean_inc(proxy_obj); lean_ctor_set(res.get(), 0, proxy_obj); - meta[i].ref = std::move(res); + meta[i].r = std::move(res); } else { - meta[i].ref = ref::steal(lean_box(0)); + meta[i].r = ref::steal(lean_box(0)); } } else if (signature_type == "a") { - meta[i].type = type::array; + meta[i].t = type::array; auto res = ref::steal(lean_alloc_sarray(1, arg.a->size, arg.a->size)); std::copy_n(static_cast<uint8_t*>(arg.a->data), arg.a->size, lean_sarray_cptr(res.get())); - meta[i].ref = std::move(res); + meta[i].r = std::move(res); } else if (signature_type == "h") { - meta[i].type = type::fd; + meta[i].t = type::fd; } else { @@ -1021,19 +1024,19 @@ namespace ref read_string() { auto i = next_read(type::string); - return ref{ std::move(meta[i].ref) }; + return ref{ std::move(meta[i].r) }; } ref read_object() { auto i = next_read(type::object); - return ref{ std::move(meta[i].ref) }; + return ref{ std::move(meta[i].r) }; } ref read_array() { auto i = next_read(type::array); - return ref{ std::move(meta[i].ref) }; + return ref{ std::move(meta[i].r) }; } ref read_fd() @@ -1287,4 +1290,4 @@ lean_obj_res waylean_proxy_get_type(b_lean_obj_arg proxy_obj) auto proxy = static_cast<wl_proxy*>(lean_get_external_data(proxy_obj)); auto name = wl_proxy_get_interface(proxy)->name; return lean_io_result_mk_ok(lean_mk_string(name)); -}
\ No newline at end of file +} |
