freebsd-ports/graphics/wayland/files/patch-src_wayland-server.c
Jan Beich 39240339a7 graphics/wayland: update to 1.16.0
- New libwayland-egl home for consumers as Mesa 18.2 dropped it

Changes:	https://lists.freedesktop.org/archives/wayland-devel/2018-April/037767.html
Changes:	https://lists.freedesktop.org/archives/wayland-devel/2018-August/039358.html
PR:		227423
Submitted by:	Greg V <greg@unrelenting.technology>
Approved by:	maintainer timeout (5 months)
2018-10-15 23:59:23 +00:00

96 lines
2.2 KiB
C

--- src/wayland-server.c.orig 2018-04-09 17:19:26 UTC
+++ src/wayland-server.c
@@ -25,6 +25,8 @@
#define _GNU_SOURCE
+#include "../config.h"
+
#include <stdlib.h>
#include <stdint.h>
#include <stddef.h>
@@ -43,6 +45,11 @@
#include <sys/file.h>
#include <sys/stat.h>
+#ifdef HAVE_SYS_UCRED_H
+#include <sys/types.h>
+#include <sys/ucred.h>
+#endif
+
#include "wayland-util.h"
#include "wayland-private.h"
#include "wayland-server.h"
@@ -77,7 +84,13 @@ struct wl_client {
struct wl_list link;
struct wl_map objects;
struct wl_priv_signal destroy_signal;
+#ifdef HAVE_SYS_UCRED_H
+ /* FreeBSD */
+ struct xucred xucred;
+#else
+ /* Linux */
struct ucred ucred;
+#endif
int error;
struct wl_priv_signal resource_created_signal;
};
@@ -303,7 +316,13 @@ wl_resource_post_error(struct wl_resource *resource,
static void
destroy_client_with_error(struct wl_client *client, const char *reason)
{
+#ifdef HAVE_SYS_UCRED_H
+ /* FreeBSD */
+ wl_log("%s\n", reason);
+#else
+ /* Linux */
wl_log("%s (pid %u)\n", reason, client->ucred.pid);
+#endif
wl_client_destroy(client);
}
@@ -517,10 +536,20 @@ wl_client_create(struct wl_display *display, int fd)
if (!client->source)
goto err_client;
+#if defined(SO_PEERCRED)
+ /* Linux */
len = sizeof client->ucred;
if (getsockopt(fd, SOL_SOCKET, SO_PEERCRED,
&client->ucred, &len) < 0)
goto err_source;
+#elif defined(LOCAL_PEERCRED)
+ /* FreeBSD */
+ len = sizeof client->xucred;
+ if (getsockopt(fd, SOL_SOCKET, LOCAL_PEERCRED,
+ &client->xucred, &len) < 0 ||
+ client->xucred.cr_version != XUCRED_VERSION)
+ goto err_source;
+#endif
client->connection = wl_connection_create(fd);
if (client->connection == NULL)
@@ -574,12 +603,23 @@ WL_EXPORT void
wl_client_get_credentials(struct wl_client *client,
pid_t *pid, uid_t *uid, gid_t *gid)
{
+#ifdef HAVE_SYS_UCRED_H
+ /* FreeBSD */
if (pid)
+ *pid = 0; /* FIXME: not defined on FreeBSD */
+ if (uid)
+ *uid = client->xucred.cr_uid;
+ if (gid)
+ *gid = client->xucred.cr_gid;
+#else
+ /* Linux */
+ if (pid)
*pid = client->ucred.pid;
if (uid)
*uid = client->ucred.uid;
if (gid)
*gid = client->ucred.gid;
+#endif
}
/** Get the file descriptor for the client