Mesa (master): util: add os_file_create_unique()
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Fri Jun 28 22:47:35 UTC 2019
Module: Mesa
Branch: master
Commit: 1b259f1ae798099de280dd0ee10018d1fd54be04
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=1b259f1ae798099de280dd0ee10018d1fd54be04
Author: Eric Engestrom <eric.engestrom at intel.com>
Date: Mon Jun 3 17:51:37 2019 +0100
util: add os_file_create_unique()
Signed-off-by: Eric Engestrom <eric.engestrom at intel.com>
Reviewed-by: Kristian H. Kristensen <hoegsberg at google.com>
Reviewed-by: Marek Olšák <marek.olsak at amd.com>
---
src/util/os_file.c | 23 +++++++++++++++++++++++
src/util/os_file.h | 11 +++++++++++
2 files changed, 34 insertions(+)
diff --git a/src/util/os_file.c b/src/util/os_file.c
index 756164c3dfe..ae41506332d 100644
--- a/src/util/os_file.c
+++ b/src/util/os_file.c
@@ -6,7 +6,30 @@
#include "os_file.h"
#include <errno.h>
+#include <fcntl.h>
#include <stdlib.h>
+#include <sys/stat.h>
+
+
+#if defined(WIN32)
+#include <io.h>
+#define open _open
+#define fdopen _fdopen
+#define O_CREAT _O_CREAT
+#define O_EXCL _O_EXCL
+#define O_WRONLY _O_WRONLY
+#endif
+
+
+FILE *
+os_file_create_unique(const char *filename, int filemode)
+{
+ int fd = open(filename, O_CREAT | O_EXCL | O_WRONLY, filemode);
+ if (fd == -1)
+ return NULL;
+ return fdopen(fd, "w");
+}
+
#if defined(__linux__)
diff --git a/src/util/os_file.h b/src/util/os_file.h
index 2f97c19ed55..d691302d12d 100644
--- a/src/util/os_file.h
+++ b/src/util/os_file.h
@@ -8,11 +8,22 @@
#ifndef _OS_FILE_H_
#define _OS_FILE_H_
+#include <stdio.h>
+
#ifdef __cplusplus
extern "C" {
#endif
/*
+ * Create a new file and opens it for writing-only.
+ * If the given filename already exists, nothing is done and NULL is returned.
+ * `errno` gets set to the failure reason; if that is not EEXIST, the caller
+ * might want to do something other than trying again.
+ */
+FILE *
+os_file_create_unique(const char *filename, int filemode);
+
+/*
* Read a file.
* Returns a char* that the caller must free(), or NULL and sets errno.
*/
More information about the mesa-commit
mailing list