[RFC wayland 01/18] shm: add getters for the fd and offset
Derek Foreman
derekf at osg.samsung.com
Tue Feb 9 16:55:48 UTC 2016
From: Giulio Camuffo <giuliocamuffo at gmail.com>
This allows to share the buffer data by mmapping the fd again.
Reviewed-by: David FORT <contact at hardening-consulting.com>
Signed-off-by: Derek Foreman <derekf at osg.samsung.com>
---
src/wayland-server-core.h | 6 ++++++
src/wayland-shm.c | 16 +++++++++++++++-
2 files changed, 21 insertions(+), 1 deletion(-)
diff --git a/src/wayland-server-core.h b/src/wayland-server-core.h
index e8e1e9c..3316022 100644
--- a/src/wayland-server-core.h
+++ b/src/wayland-server-core.h
@@ -480,6 +480,12 @@ wl_shm_buffer_create(struct wl_client *client,
uint32_t id, int32_t width, int32_t height,
int32_t stride, uint32_t format) WL_DEPRECATED;
+int
+wl_shm_buffer_get_offset(struct wl_shm_buffer *buffer);
+
+int
+wl_shm_buffer_get_fd(struct wl_shm_buffer *buffer);
+
void wl_log_set_handler_server(wl_log_func_t handler);
#ifdef __cplusplus
diff --git a/src/wayland-shm.c b/src/wayland-shm.c
index a4343a4..911165d 100644
--- a/src/wayland-shm.c
+++ b/src/wayland-shm.c
@@ -55,6 +55,7 @@ struct wl_shm_pool {
int refcount;
char *data;
int32_t size;
+ int fd;
};
struct wl_shm_buffer {
@@ -80,6 +81,7 @@ shm_pool_unref(struct wl_shm_pool *pool)
return;
munmap(pool->data, pool->size);
+ close(pool->fd);
free(pool);
}
@@ -253,7 +255,7 @@ shm_create_pool(struct wl_client *client, struct wl_resource *resource,
"failed mmap fd %d", fd);
goto err_close;
}
- close(fd);
+ pool->fd = fd;
pool->resource =
wl_resource_create(client, &wl_shm_pool_interface, 1, id);
@@ -421,6 +423,18 @@ wl_shm_pool_unref(struct wl_shm_pool *pool)
shm_pool_unref(pool);
}
+WL_EXPORT int
+wl_shm_buffer_get_offset(struct wl_shm_buffer *buffer)
+{
+ return buffer->offset;
+}
+
+WL_EXPORT int
+wl_shm_buffer_get_fd(struct wl_shm_buffer *buffer)
+{
+ return buffer->pool->fd;
+}
+
static void
reraise_sigbus(void)
{
--
2.7.0
More information about the wayland-devel
mailing list