X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Fwrap.c;h=af8b30ee8fc1cced161ccec184b586e21d1b89d8;hb=6a0601ab48635465ad3400c290e5cfbca28e5367;hp=8daf076c6dea5b124c4d81643b8a4c2851102329;hpb=4a859f21bcda6fc578fc442effe9230b781eb943;p=sbcl.git diff --git a/src/runtime/wrap.c b/src/runtime/wrap.c index 8daf076..af8b30e 100644 --- a/src/runtime/wrap.c +++ b/src/runtime/wrap.c @@ -41,6 +41,8 @@ #if defined(LISP_FEATURE_WIN32) #define WIN32_LEAN_AND_MEAN +#include +#include #endif #include "runtime.h" @@ -243,6 +245,30 @@ fstat_wrapper(int filedes, struct stat_wrapper *buf) return ret; } +/* A wrapper for mkstemp(3), which seems not to exist on Windows. */ +int sb_mkstemp (char *template) { +#ifdef LISP_FEATURE_WIN32 + int fd; + char buf[MAX_PATH]; + + while (1) { + strcpy((char*)&buf, template); + if (_mktemp((char*)&buf)) { + if ((fd=open((char*)&buf, O_CREAT|O_EXCL|O_RDWR, S_IRUSR|S_IWUSR))!=-1) { + strcpy(template, (char*)&buf); + return (fd); + } else + if (errno != EEXIST) + return (-1); + } else + return (-1); + } +#else + return(mkstemp(template)); +#endif +} + + /* * getpwuid() stuff */