summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--dbm/src/h_page.c12
-rw-r--r--dbm/src/mktemp.c6
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