io-console 0.4.1 → 0.4.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/console.c +45 -1
  3. data/extconf.rb +9 -3
  4. metadata +7 -7
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 325b97fec58e062aaca201458a4bfe69f8fd6f10
4
- data.tar.gz: bf95ec75f4252e9628d023906439e352a40bcdf7
3
+ metadata.gz: f84c71a10c07466a96df3e243d33729d409b5983
4
+ data.tar.gz: 82ffd31d1858ed4d574efad6ef0ed86fb65636a8
5
5
  SHA512:
6
- metadata.gz: aff1c59c522eab1b58220f5d6d597d801207cf3fa595283ee2932ecb0fcc0e25163d41d96a1b8c0a4f14a69d03ef66e1f741bf38075fed0d79234753b031bfb4
7
- data.tar.gz: 01a283fdff673b555bbb2b151117ca049de53b18631a63c256eec7fb0b919b94885040532d7ef78d25126824987c72dd915d74f1b5d32477728816b8f8045268
6
+ metadata.gz: ec1125bd8d61efee82b4bfcdc2de73b5a4b075b622a19e911408e4262415b7e2707f9c643bf711f7ddc4b6e64c2861585f99b0a3cd21539f811197042d0de40a
7
+ data.tar.gz: 1748231bba6d1a9adb725424878d63562a8fae3dc6fb066651c4d4c56a59d103a34812b7b66fbd6abec1a2fdc13121fb0423b02bb3cf5e781d12851813e1d6f8
data/console.c CHANGED
@@ -7,6 +7,8 @@
7
7
  #include "ruby/io.h"
8
8
  #else
9
9
  #include "rubyio.h"
10
+ /* assumes rb_io_t doesn't have pathv */
11
+ #include "util.h" /* for ruby_strdup() */
10
12
  #endif
11
13
 
12
14
  #ifndef HAVE_RB_IO_T
@@ -23,6 +25,10 @@ typedef OpenFile rb_io_t;
23
25
  #include <sys/ioctl.h>
24
26
  #endif
25
27
 
28
+ #ifndef RB_TYPE_P
29
+ #define RB_TYPE_P(obj, type) (TYPE(obj) == type)
30
+ #endif
31
+
26
32
  #if defined HAVE_TERMIOS_H
27
33
  # include <termios.h>
28
34
  typedef struct termios conmode;
@@ -101,11 +107,28 @@ rawmode_opt(int argc, VALUE *argv, rawmode_arg_t *opts)
101
107
  {
102
108
  rawmode_arg_t *optp = NULL;
103
109
  VALUE vopts;
110
+ #ifdef HAVE_RB_SCAN_ARGS_OPTIONAL_HASH
104
111
  rb_scan_args(argc, argv, "0:", &vopts);
112
+ #else
113
+ vopts = Qnil;
114
+ if (argc > 0) {
115
+ vopts = argv[--argc];
116
+ if (!NIL_P(vopts)) {
117
+ # ifdef HAVE_RB_CHECK_HASH_TYPE
118
+ vopts = rb_check_hash_type(vopts);
119
+ if (NIL_P(vopts)) ++argc;
120
+ # else
121
+ Check_Type(vopts, T_HASH);
122
+ # endif
123
+ }
124
+ }
125
+ rb_scan_args(argc, argv, "0");
126
+ #endif
105
127
  if (!NIL_P(vopts)) {
106
128
  VALUE vmin = rb_hash_aref(vopts, ID2SYM(rb_intern("min")));
107
129
  VALUE vtime = rb_hash_aref(vopts, ID2SYM(rb_intern("time")));
108
- opts->vmin = 0;
130
+ /* default values by `stty raw` */
131
+ opts->vmin = 1;
109
132
  opts->vtime = 0;
110
133
  if (!NIL_P(vmin)) {
111
134
  opts->vmin = NUM2INT(vmin);
@@ -643,6 +666,23 @@ console_ioflush(VALUE io)
643
666
  return io;
644
667
  }
645
668
 
669
+ #ifndef HAVE_RB_CLOEXEC_OPEN
670
+ static int
671
+ rb_cloexec_open(const char *pathname, int flags, mode_t mode)
672
+ {
673
+ int ret;
674
+ #ifdef O_CLOEXEC
675
+ /* O_CLOEXEC is available since Linux 2.6.23. Linux 2.6.18 silently ignore it. */
676
+ flags |= O_CLOEXEC;
677
+ #elif defined O_NOINHERIT
678
+ flags |= O_NOINHERIT;
679
+ #endif
680
+ return open(pathname, flags, mode);
681
+ }
682
+
683
+ #define rb_update_max_fd(fd) (void)(fd)
684
+ #endif
685
+
646
686
  /*
647
687
  * call-seq:
648
688
  * IO.console -> #<File:/dev/tty>
@@ -704,7 +744,11 @@ console_dev(VALUE klass)
704
744
  args[0] = INT2NUM(fd);
705
745
  con = rb_class_new_instance(2, args, klass);
706
746
  GetOpenFile(con, fptr);
747
+ #ifdef HAVE_RUBY_IO_H
707
748
  fptr->pathv = rb_obj_freeze(rb_str_new2(CONSOLE_DEVICE));
749
+ #else
750
+ fptr->path = ruby_strdup(CONSOLE_DEVICE);
751
+ #endif
708
752
  #ifdef CONSOLE_DEVICE_FOR_WRITING
709
753
  GetOpenFile(out, ofptr);
710
754
  # ifdef HAVE_RB_IO_GET_WRITE_IO
data/extconf.rb CHANGED
@@ -12,9 +12,15 @@ when have_header(hdr = "sgtty.h")
12
12
  else
13
13
  ok = false
14
14
  end
15
- have_header("sys/ioctl.h")
16
- have_func("rb_io_get_write_io", "ruby/io.h")
17
- have_func("dup3", "unistd.h")
15
+ ok &&= enable_config("io-console-force-compatible-with-1.8") ||
16
+ macro_defined?("HAVE_RUBY_IO_H", cpp_include("ruby.h"))
18
17
  if ok
18
+ have_header("sys/ioctl.h")
19
+ have_func("rb_check_hash_type", "ruby.h")
20
+ have_func("rb_io_get_write_io", "ruby/io.h")
21
+ have_func("rb_cloexec_open", "ruby/io.h")
22
+ if enable_config("io-console-rb_scan_args-optional-hash", true)
23
+ $defs << "-DHAVE_RB_SCAN_ARGS_OPTIONAL_HASH=1"
24
+ end
19
25
  create_makefile("io/console")
20
26
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: io-console
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nobu Nakada
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-02-04 00:00:00.000000000 Z
11
+ date: 2013-02-16 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: add console capabilities to IO instances.
14
14
  email: nobu@ruby-lang.org
@@ -27,20 +27,20 @@ metadata: {}
27
27
  post_install_message:
28
28
  rdoc_options: []
29
29
  require_paths:
30
- - "."
30
+ - .
31
31
  required_ruby_version: !ruby/object:Gem::Requirement
32
32
  requirements:
33
- - - ">="
33
+ - - '>='
34
34
  - !ruby/object:Gem::Version
35
- version: '0'
35
+ version: 1.9.3
36
36
  required_rubygems_version: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - '>='
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  requirements: []
42
42
  rubyforge_project:
43
- rubygems_version: 2.0.0.rc.2
43
+ rubygems_version: 2.0.0
44
44
  signing_key:
45
45
  specification_version: 4
46
46
  summary: Console interface