clients: Use new shm interface
diff --git a/clients/screenshot.c b/clients/screenshot.c
index 8b1edf6..6cc2ebb 100644
--- a/clients/screenshot.c
+++ b/clients/screenshot.c
@@ -89,6 +89,7 @@
 create_shm_buffer(int width, int height, void **data_out)
 {
 	char filename[] = "/tmp/wayland-shm-XXXXXX";
+	struct wl_shm_pool *pool;
 	struct wl_buffer *buffer;
 	int fd, size, stride;
 	void *data;
@@ -115,10 +116,11 @@
 		return NULL;
 	}
 
-	buffer = wl_shm_create_buffer(shm, fd, width, height, stride,
-				      WL_SHM_FORMAT_XRGB8888);
-
+	pool = wl_shm_create_pool(shm, fd, size);
 	close(fd);
+	buffer = wl_shm_pool_create_buffer(pool, 0, width, height, stride,
+					   WL_SHM_FORMAT_XRGB8888);
+	wl_shm_pool_destroy(pool);
 
 	*data_out = data;
 
diff --git a/clients/simple-shm.c b/clients/simple-shm.c
index 7026af9..d1fe0c6 100644
--- a/clients/simple-shm.c
+++ b/clients/simple-shm.c
@@ -57,6 +57,7 @@
 		  int width, int height, uint32_t format, void **data_out)
 {
 	char filename[] = "/tmp/wayland-shm-XXXXXX";
+	struct wl_shm_pool *pool;
 	struct wl_buffer *buffer;
 	int fd, size, stride;
 	void *data;
@@ -83,9 +84,10 @@
 		return NULL;
 	}
 
-	buffer = wl_shm_create_buffer(display->shm, fd,
-				      width, height, stride, format);
-
+	pool = wl_shm_create_pool(display->shm, fd, size);
+	buffer = wl_shm_pool_create_buffer(pool, 0,
+					   width, height, stride, format);
+	wl_shm_pool_destroy(pool);
 	close(fd);
 
 	*data_out = data;
diff --git a/clients/simple-touch.c b/clients/simple-touch.c
index 0e2bac6..c3ee877 100644
--- a/clients/simple-touch.c
+++ b/clients/simple-touch.c
@@ -50,6 +50,7 @@
 static void
 create_shm_buffer(struct touch *touch)
 {
+	struct wl_shm_pool *pool;
 	char filename[] = "/tmp/wayland-shm-XXXXXX";
 	int fd, size, stride;
 
@@ -76,10 +77,12 @@
 		exit(1);
 	}
 
+	pool = wl_shm_create_pool(touch->shm, fd, size);
 	touch->buffer =
-		wl_shm_create_buffer(touch->shm, fd,
-				     touch->width, touch->height, stride,
-				     WL_SHM_FORMAT_ARGB8888);
+		wl_shm_pool_create_buffer(pool, 0,
+					  touch->width, touch->height, stride,
+					  WL_SHM_FORMAT_ARGB8888);
+	wl_shm_pool_destroy(pool);
 
 	close(fd);
 }
diff --git a/clients/window.c b/clients/window.c
index 74ddedd..3e949c2 100644
--- a/clients/window.c
+++ b/clients/window.c
@@ -461,15 +461,49 @@
 	munmap(data->map, data->length);
 }
 
+static struct wl_shm_pool *
+make_shm_pool(struct display *display, int size, void **data)
+{
+	char filename[] = "/tmp/wayland-shm-XXXXXX";
+	struct wl_shm_pool *pool;
+	int fd;
+
+	fd = mkstemp(filename);
+	if (fd < 0) {
+		fprintf(stderr, "open %s failed: %m\n", filename);
+		return NULL;
+	}
+	if (ftruncate(fd, size) < 0) {
+		fprintf(stderr, "ftruncate failed: %m\n");
+		close(fd);
+		return NULL;
+	}
+
+	*data = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
+	unlink(filename);
+
+	if (*data == MAP_FAILED) {
+		fprintf(stderr, "mmap failed: %m\n");
+		close(fd);
+		return NULL;
+	}
+
+	pool = wl_shm_create_pool(display->shm, fd, size);
+
+	close(fd);
+
+	return pool;
+}
+
 static cairo_surface_t *
 display_create_shm_surface(struct display *display,
 			   struct rectangle *rectangle, uint32_t flags)
 {
 	struct shm_surface_data *data;
+	struct wl_shm_pool *pool;
 	uint32_t format;
 	cairo_surface_t *surface;
-	int stride, fd;
-	char filename[] = "/tmp/wayland-shm-XXXXXX";
+	int stride;
 
 	data = malloc(sizeof *data);
 	if (data == NULL)
@@ -478,26 +512,7 @@
 	stride = cairo_format_stride_for_width (CAIRO_FORMAT_ARGB32,
 						rectangle->width);
 	data->length = stride * rectangle->height;
-	fd = mkstemp(filename);
-	if (fd < 0) {
-		fprintf(stderr, "open %s failed: %m\n", filename);
-		return NULL;
-	}
-	if (ftruncate(fd, data->length) < 0) {
-		fprintf(stderr, "ftruncate failed: %m\n");
-		close(fd);
-		return NULL;
-	}
-
-	data->map = mmap(NULL, data->length,
-			 PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
-	unlink(filename);
-
-	if (data->map == MAP_FAILED) {
-		fprintf(stderr, "mmap failed: %m\n");
-		close(fd);
-		return NULL;
-	}
+	pool = make_shm_pool(display, data->length, &data->map);
 
 	surface = cairo_image_surface_create_for_data (data->map,
 						       CAIRO_FORMAT_ARGB32,
@@ -513,13 +528,12 @@
 	else
 		format = WL_SHM_FORMAT_ARGB8888;
 
-	data->data.buffer = wl_shm_create_buffer(display->shm,
-						 fd,
-						 rectangle->width,
-						 rectangle->height,
-						 stride, format);
+	data->data.buffer = wl_shm_pool_create_buffer(pool, 0,
+						      rectangle->width,
+						      rectangle->height,
+						      stride, format);
 
-	close(fd);
+	wl_shm_pool_destroy(pool);
 
 	return surface;
 }