Commit cd51d285 authored by Jonas Ådahl's avatar Jonas Ådahl
Browse files

wayland: Clean up anonymous file creation

It was a copy paste without fully updating the coding style. There were
also some autotools macros that were no longer valid. So far its assumed
that the needed functions exist. If better portability is needed, there
needs to be some detction added to the cmake build script.
parent 6e8e9483
......@@ -24,6 +24,8 @@
//
//========================================================================
#define _GNU_SOURCE
#include "internal.h"
#include <stdio.h>
......@@ -101,43 +103,13 @@ static GLboolean createSurface(_GLFWwindow* window,
}
static int
set_cloexec_or_close(int fd)
{
long flags;
if (fd == -1)
return -1;
flags = fcntl(fd, F_GETFD);
if (flags == -1)
goto err;
if (fcntl(fd, F_SETFD, flags | FD_CLOEXEC) == -1)
goto err;
return fd;
err:
close(fd);
return -1;
}
static int
create_tmpfile_cloexec(char *tmpname)
createTmpfileCloexec(char* tmpname)
{
int fd;
#ifdef HAVE_MKOSTEMP
fd = mkostemp(tmpname, O_CLOEXEC);
if (fd >= 0)
unlink(tmpname);
#else
fd = mkstemp(tmpname);
if (fd >= 0) {
fd = set_cloexec_or_close(fd);
unlink(tmpname);
}
#endif
return fd;
}
......@@ -157,23 +129,23 @@ create_tmpfile_cloexec(char *tmpname)
* transmitting the file descriptor over Unix sockets using the
* SCM_RIGHTS methods.
*
* If the C library implements posix_fallocate(), it is used to
* guarantee that disk space is available for the file at the
* given size. If disk space is insufficent, errno is set to ENOSPC.
* If posix_fallocate() is not supported, program may receive
* SIGBUS on accessing mmap()'ed file contents instead.
* posix_fallocate() is used to guarantee that disk space is available
* for the file at the given size. If disk space is insufficent, errno
* is set to ENOSPC. If posix_fallocate() is not supported, program may
* receive SIGBUS on accessing mmap()'ed file contents instead.
*/
int
os_create_anonymous_file(off_t size)
createAnonymousFile(off_t size)
{
static const char template[] = "/glfw-shared-XXXXXX";
const char *path;
char *name;
const char* path;
char* name;
int fd;
int ret;
path = getenv("XDG_RUNTIME_DIR");
if (!path) {
if (!path)
{
errno = ENOENT;
return -1;
}
......@@ -182,14 +154,15 @@ os_create_anonymous_file(off_t size)
strcpy(name, path);
strcat(name, template);
fd = create_tmpfile_cloexec(name);
fd = createTmpfileCloexec(name);
free(name);
if (fd < 0)
return -1;
ret = posix_fallocate(fd, 0, size);
if (ret != 0) {
if (ret != 0)
{
close(fd);
errno = ret;
return -1;
......@@ -403,7 +376,7 @@ int _glfwPlatformCreateCursor(_GLFWcursor* cursor,
void *data;
int fd, i;
fd = os_create_anonymous_file(length);
fd = createAnonymousFile(length);
if (fd < 0) {
_glfwInputError(GLFW_PLATFORM_ERROR,
"Wayland: Creating a buffer file for %d B failed: %m\n",
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment