From: Alan Cox Date: Tue, 17 Mar 2015 22:17:25 +0000 (+0000) Subject: mkstemps: mkstemp/mkstemps API first cut X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=a3fcfb280e558b30bc5ccb839b08b4274aa0fa15;p=FUZIX.git mkstemps: mkstemp/mkstemps API first cut --- 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); +}