Apply PIE to nghttpx
[platform/upstream/nghttp2.git] / third-party / mruby / mrbgems / mruby-socket / test / sockettest.c
1 #include <stdio.h>
2 #include <stdlib.h>
3
4 #include "mruby.h"
5 #include "mruby/error.h"
6
7 #if defined(_WIN32) || defined(_WIN64)
8
9 #include <io.h>
10
11 #ifdef _MSC_VER
12
13 #include <fcntl.h>
14 #include <sys/stat.h>
15 #define open  _open
16 #define close _close
17 #define unlink _unlink
18
19 static int
20 mkstemp(char *p)
21 {
22   int fd;
23   char* fname = _mktemp(p);
24   if (fname == NULL)
25     return -1;
26   fd = open(fname, O_RDWR | O_CREAT | O_EXCL, _S_IREAD | _S_IWRITE);
27   if (fd >= 0)
28     return fd;
29   return -1;
30 }
31 #endif
32
33 #else
34
35 #include <unistd.h>
36
37 #endif
38
39 mrb_value
40 mrb_sockettest_tmppath(mrb_state *mrb, mrb_value klass)
41 {
42   char name[] = "mruby-socket.XXXXXXXX";
43   int fd = mkstemp(name);
44   if (fd == -1) {
45     mrb_sys_fail(mrb, 0);
46   }
47   if (close(fd) == -1) {
48     mrb_sys_fail(mrb, 0);
49   }
50   if (unlink(name) == -1) {
51     mrb_sys_fail(mrb, 0);
52   }
53   return mrb_str_new_cstr(mrb, name);
54 }
55
56 mrb_value
57 mrb_sockettest_win_p(mrb_state *mrb, mrb_value klass)
58 {
59 #ifdef _WIN32
60   return mrb_true_value();
61 #else
62   return mrb_false_value();
63 #endif
64 }
65
66 mrb_value
67 mrb_sockettest_cygwin_p(mrb_state *mrb, mrb_value klass)
68 {
69 #if defined(__CYGWIN__) || defined(__CYGWIN32__)
70   return mrb_true_value();
71 #else
72   return mrb_false_value();
73 #endif
74 }
75
76 void
77 mrb_mruby_socket_gem_test(mrb_state* mrb)
78 {
79   struct RClass *c = mrb_define_module(mrb, "SocketTest");
80   mrb_define_class_method(mrb, c, "tmppath", mrb_sockettest_tmppath, MRB_ARGS_NONE());
81   mrb_define_class_method(mrb, c, "win?", mrb_sockettest_win_p, MRB_ARGS_NONE());
82   mrb_define_class_method(mrb, c, "cygwin?", mrb_sockettest_cygwin_p, MRB_ARGS_NONE());
83 }