diff options
Diffstat (limited to 'base/gp_mktmp.c')
-rw-r--r-- | base/gp_mktmp.c | 46 |
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; +} |