1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
|
#include <stdlib.h>
#include <mruby.h>
#include <mruby/error.h>
#if defined(_WIN32)
#include <io.h>
#if defined(_MSC_VER) || \
(defined(MRB_MINGW32_VERSION) && MRB_MINGW32_VERSION < 3021) || \
(defined(MRB_MINGW64_VERSION) && MRB_MINGW64_VERSION < 4000)
#include <fcntl.h>
#include <sys/stat.h>
#define open _open
#define close _close
#define unlink _unlink
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>
#endif
mrb_value
mrb_sockettest_tmppath(mrb_state *mrb, mrb_value klass)
{
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
mrb_sockettest_win_p(mrb_state *mrb, mrb_value klass)
{
#ifdef _WIN32
return mrb_true_value();
#else
return mrb_false_value();
#endif
}
mrb_value
mrb_sockettest_cygwin_p(mrb_state *mrb, mrb_value klass)
{
#if defined(__CYGWIN__) || defined(__CYGWIN32__)
return mrb_true_value();
#else
return mrb_false_value();
#endif
}
void
mrb_mruby_socket_gem_test(mrb_state* mrb)
{
struct RClass *c = mrb_define_module(mrb, "SocketTest");
mrb_define_class_method(mrb, c, "tmppath", mrb_sockettest_tmppath, MRB_ARGS_NONE());
mrb_define_class_method(mrb, c, "win?", mrb_sockettest_win_p, MRB_ARGS_NONE());
mrb_define_class_method(mrb, c, "cygwin?", mrb_sockettest_cygwin_p, MRB_ARGS_NONE());
}
|