X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Fwrap.c;h=af8b30ee8fc1cced161ccec184b586e21d1b89d8;hb=6a0601ab48635465ad3400c290e5cfbca28e5367;hp=1d17e9ac1837725dc57ea31580e8241e11170441;hpb=9c61930488da84cccaeaaabea55d3ad4e1323fda;p=sbcl.git diff --git a/src/runtime/wrap.c b/src/runtime/wrap.c index 1d17e9a..af8b30e 100644 --- a/src/runtime/wrap.c +++ b/src/runtime/wrap.c @@ -39,6 +39,12 @@ #endif #include +#if defined(LISP_FEATURE_WIN32) +#define WIN32_LEAN_AND_MEAN +#include +#include +#endif + #include "runtime.h" #include "util.h" #include "wrap.h" @@ -239,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 */ @@ -307,7 +337,6 @@ wrapped_environ() } #ifdef LISP_FEATURE_WIN32 -#define WIN32_LEAN_AND_MEAN #include #include /*