summaryrefslogtreecommitdiff
path: root/lib/CWayland
diff options
context:
space:
mode:
Diffstat (limited to 'lib/CWayland')
-rw-r--r--lib/CWayland/CWayland.cc63
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
+}