summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-socket/test
diff options
context:
space:
mode:
authorksss <[email protected]>2018-01-31 11:22:37 +0900
committerksss <[email protected]>2018-01-31 11:34:29 +0900
commite422ba0bffcf9231febeaf3d1c69e65cbd530986 (patch)
tree37d98c4bb90e752efa6f2661bbd7eb3852114bc1 /mrbgems/mruby-socket/test
parent55431b4cef95541dc07f30f52b7fad9e9638b0be (diff)
downloadmruby-e422ba0bffcf9231febeaf3d1c69e65cbd530986.tar.gz
mruby-e422ba0bffcf9231febeaf3d1c69e65cbd530986.zip
Use mkstemp instead of tempnam
Diffstat (limited to 'mrbgems/mruby-socket/test')
-rw-r--r--mrbgems/mruby-socket/test/sockettest.c43
1 files changed, 37 insertions, 6 deletions
diff --git a/mrbgems/mruby-socket/test/sockettest.c b/mrbgems/mruby-socket/test/sockettest.c
index ee5975f92..c6c2e494f 100644
--- a/mrbgems/mruby-socket/test/sockettest.c
+++ b/mrbgems/mruby-socket/test/sockettest.c
@@ -2,18 +2,49 @@
#include <stdlib.h>
#include "mruby.h"
+#include "mruby/error.h"
+
+#if defined(_WIN32) || defined(_WIN64)
+
+#define close _close
+#define unlink _unlink
+
+#ifdef _MSC_VER
+static int
+mkstemp(char *p)
+{
+ int fd;
+ char* fname = _mktemp(p);
+ if (fname == NULL)
+ return -1;
+ fd = open(fname, O_RDWR | O_CREAT | O_EXCL, _S_IREAD | _S_IWRITE);
+ if (fd >= 0)
+ return fd;
+ return -1;
+}
+#endif
+
+#else
+
+#include <unistd.h>
-#ifdef _WIN32
- #define tempnam _tempnam
#endif
mrb_value
mrb_sockettest_tmppath(mrb_state *mrb, mrb_value klass)
{
- char *tmp = tempnam(NULL, "mruby-socket");
- mrb_value str = mrb_str_new_cstr(mrb, tmp);
- free(tmp);
- return str;
+ char name[] = "mruby-socket.XXXXXXXX";
+ int fd = mkstemp(name);
+ if (fd == -1) {
+ mrb_sys_fail(mrb, 0);
+ }
+ if (close(fd) == -1) {
+ mrb_sys_fail(mrb, 0);
+ }
+ if (unlink(name) == -1) {
+ mrb_sys_fail(mrb, 0);
+ }
+ return mrb_str_new_cstr(mrb, name);
}
mrb_value