diff options
-rw-r--r-- | dbm/src/h_page.c | 12 | ||||
-rw-r--r-- | dbm/src/mktemp.c | 6 |
2 files changed, 14 insertions, 4 deletions
diff --git a/dbm/src/h_page.c b/dbm/src/h_page.c index 79f31477d..2c4b50f87 100644 --- a/dbm/src/h_page.c +++ b/dbm/src/h_page.c @@ -1159,7 +1159,10 @@ __free_ovflpage(HTAB *hashp, BUFHEAD *obufp) static int open_temp(HTAB *hashp) { -#if !defined(_WIN32) && !defined(_WINDOWS) && !defined(macintosh) && !defined(XP_OS2) +#ifdef XP_OS2 + hashp->fp = mkstemp(NULL); +#else +#if !defined(_WIN32) && !defined(_WINDOWS) && !defined(macintosh) sigset_t set, oset; #endif char * tmpdir; @@ -1168,7 +1171,7 @@ open_temp(HTAB *hashp) char filename[1024]; char last; -#if !defined(_WIN32) && !defined(_WINDOWS) && !defined(macintosh) && !defined(XP_OS2) +#if !defined(_WIN32) && !defined(_WINDOWS) && !defined(macintosh) /* Block signals; make sure file goes away at process exit. */ (void)sigfillset(&set); (void)sigprocmask(SIG_BLOCK, &set, &oset); @@ -1205,15 +1208,16 @@ open_temp(HTAB *hashp) #else if ((hashp->fp = mkstemp(filename)) != -1) { (void)unlink(filename); -#if !defined(macintosh) && !defined(XP_OS2) +#if !defined(macintosh) (void)fcntl(hashp->fp, F_SETFD, 1); #endif } #endif -#if !defined(_WIN32) && !defined(_WINDOWS) && !defined(macintosh) && !defined(XP_OS2) +#if !defined(_WIN32) && !defined(_WINDOWS) && !defined(macintosh) (void)sigprocmask(SIG_SETMASK, &oset, (sigset_t *)NULL); #endif +#endif /* !OS2 */ return (hashp->fp != -1 ? 0 : -1); } diff --git a/dbm/src/mktemp.c b/dbm/src/mktemp.c index 4da6c9497..574eb9fe5 100644 --- a/dbm/src/mktemp.c +++ b/dbm/src/mktemp.c @@ -69,9 +69,15 @@ static int _gettemp(char *path, register int *doopen, int extraFlags); int mkstemp(char *path) { +#ifdef XP_OS2 + FILE *temp = tmpfile(); + + return (temp ? fileno(temp) : -1); +#else int fd; return (_gettemp(path, &fd, 0) ? fd : -1); +#endif } int |