From a3fcfb280e558b30bc5ccb839b08b4274aa0fa15 Mon Sep 17 00:00:00 2001 From: Alan Cox Date: Tue, 17 Mar 2015 22:17:25 +0000 Subject: [PATCH] mkstemps: mkstemp/mkstemps API first cut --- Library/libs/mkstemps.c | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 Library/libs/mkstemps.c diff --git a/Library/libs/mkstemps.c b/Library/libs/mkstemps.c new file mode 100644 index 00000000..5ca52491 --- /dev/null +++ b/Library/libs/mkstemps.c @@ -0,0 +1,37 @@ +#include +#include +#include +#include +#include +#include + +int mkstemps(char *s, int slen) +{ + __ktime_t t; + char *p = s + strlen(s) - slen; + char *n; + int fd; + + if (p < s) + goto bad; + if (memcmp(p, "XXXXXX", 6)) + goto bad; + _time(&t, 0); + n = _itoa(getuid() << 8 + getpid() + (uint16_t)t.time); + do { + n += 7919; /* Any old prime ought to do */ + memcpy(p, "000000", 6); + memcpy(p + 6 - strlen(n), n, strlen(n)); + fd = open(s, O_CREAT|O_EXCL|O_RDWR, 0600); + } + while(fd == -1 && errno == EEXIST); + return fd; +bad: + errno = EINVAL; + return -1; +} + +int mkstemp(char *s) +{ + return mkstemps(s, 0); +} -- 2.34.1