Display (Linux): improve id generation for wayland

This commit is contained in:
Carter Li
2024-07-08 11:02:54 +08:00
parent 4f70c16d63
commit f9ce2fae0e
3 changed files with 13 additions and 2 deletions
@@ -228,7 +228,7 @@ static void waylandKdeOutputOrderListener(void *data, FF_MAYBE_UNUSED struct kde
{
uint64_t* id = (uint64_t*) data;
if (*id == 0)
strncpy((char*) id, output_name, sizeof(*id));
*id = ffWaylandGenerateIdFromName(output_name);
}
void ffWaylandHandleKdeOutputOrder(WaylandData* wldata, struct wl_registry* registry, uint32_t name, uint32_t version)
@@ -140,7 +140,7 @@ void ffWaylandOutputNameListener(void* data, FF_MAYBE_UNUSED void* output, const
display->type = FF_DISPLAY_TYPE_EXTERNAL;
if (!display->edidName.length)
ffdsMatchDrmConnector(name, &display->edidName);
strncpy((char*) &display->id, name, sizeof(display->id));
display->id = ffWaylandGenerateIdFromName(name);
ffStrbufAppendS(&display->name, name);
}
@@ -52,6 +52,17 @@ inline static void stubListener(void* data, ...)
(void) data;
}
inline static uint64_t ffWaylandGenerateIdFromName(const char* name)
{
uint64_t id = 0;
size_t len = strlen(name);
if (len > sizeof(id))
memcpy(&id, name + (len - sizeof(id)), sizeof(id)); // copy the last 8 bytes
else if (len > 0)
memcpy(&id, name, len);
return id;
}
void ffWaylandOutputNameListener(void* data, FF_MAYBE_UNUSED void* output, const char *name);
void ffWaylandOutputDescriptionListener(void* data, FF_MAYBE_UNUSED void* output, const char* description);