summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'base/gp_mktmp.c')
-rw-r--r--base/gp_mktmp.c46
1 files changed, 46 insertions, 0 deletions
diff --git a/base/gp_mktmp.c b/base/gp_mktmp.c
new file mode 100644
index 00000000..ebdd5ee6
--- /dev/null
+++ b/base/gp_mktmp.c
@@ -0,0 +1,46 @@
+/* Copyright (C) 2001-2019 Artifex Software, Inc.
+ All Rights Reserved.
+
+ This software is provided AS-IS with no warranty, either express or
+ implied.
+
+ This software is distributed under license and may not be copied,
+ modified or distributed except as expressly authorized under the terms
+ of the license contained in the file LICENSE in this distribution.
+
+ Refer to licensing information at http://www.artifex.com or contact
+ Artifex Software, Inc., 1305 Grant Avenue - Suite 200, Novato,
+ CA 94945, U.S.A., +1(415)492-9861, for further information.
+*/
+
+
+/* Replacement for missing mktemp */
+#include "stat_.h"
+#include "string_.h"
+
+/* This procedure simulates mktemp on platforms that don't provide it. */
+char *
+mktemp(char *fname)
+{
+ struct stat fst;
+ int len = strlen(fname);
+ char *end = fname + len - 6;
+
+ if (len < 6 || strcmp(end, "XXXXXX"))
+ return (char *)0; /* invalid */
+ strcpy(end, "AA.AAA");
+
+ while (stat(fname, &fst) == 0) {
+ char *inc = fname + len - 1;
+
+ while (*inc == 'Z' || *inc == '.') {
+ if (inc == end)
+ return (char *)0; /* failure */
+ if (*inc == 'Z')
+ *inc = 'A';
+ --inc;
+ }
+ ++*inc;
+ }
+ return fname;
+}