Skip to content

Commit f9ce2fa

Browse files
committed
Display (Linux): improve id generation for wayland
1 parent 4f70c16 commit f9ce2fa

File tree

3 files changed

+13
-2
lines changed

3 files changed

+13
-2
lines changed

src/detection/displayserver/linux/wayland/kde-output.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ static void waylandKdeOutputOrderListener(void *data, FF_MAYBE_UNUSED struct kde
228228
{
229229
uint64_t* id = (uint64_t*) data;
230230
if (*id == 0)
231-
strncpy((char*) id, output_name, sizeof(*id));
231+
*id = ffWaylandGenerateIdFromName(output_name);
232232
}
233233

234234
void ffWaylandHandleKdeOutputOrder(WaylandData* wldata, struct wl_registry* registry, uint32_t name, uint32_t version)

src/detection/displayserver/linux/wayland/wayland.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ void ffWaylandOutputNameListener(void* data, FF_MAYBE_UNUSED void* output, const
140140
display->type = FF_DISPLAY_TYPE_EXTERNAL;
141141
if (!display->edidName.length)
142142
ffdsMatchDrmConnector(name, &display->edidName);
143-
strncpy((char*) &display->id, name, sizeof(display->id));
143+
display->id = ffWaylandGenerateIdFromName(name);
144144
ffStrbufAppendS(&display->name, name);
145145
}
146146

src/detection/displayserver/linux/wayland/wayland.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,17 @@ inline static void stubListener(void* data, ...)
5252
(void) data;
5353
}
5454

55+
inline static uint64_t ffWaylandGenerateIdFromName(const char* name)
56+
{
57+
uint64_t id = 0;
58+
size_t len = strlen(name);
59+
if (len > sizeof(id))
60+
memcpy(&id, name + (len - sizeof(id)), sizeof(id)); // copy the last 8 bytes
61+
else if (len > 0)
62+
memcpy(&id, name, len);
63+
return id;
64+
}
65+
5566
void ffWaylandOutputNameListener(void* data, FF_MAYBE_UNUSED void* output, const char *name);
5667
void ffWaylandOutputDescriptionListener(void* data, FF_MAYBE_UNUSED void* output, const char* description);
5768

0 commit comments

Comments
 (0)