rubysl-pty 2.0.2 → 2.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0e45c272bab13b32a67ff684e47892397576b895
4
- data.tar.gz: 75c93df9034041b5b527c06d782239e93cddb4f8
3
+ metadata.gz: da964a021b41c3d8908cc6d09a82b39f2a05166f
4
+ data.tar.gz: 2547e6607b59d30e5e38052595a6f3bc9f0f7ad2
5
5
  SHA512:
6
- metadata.gz: 5cde05155c951165a7d9631d9f91aa38a7314cc3d77b10d7e3b2faea37814c5a84f1b55b21c52ffde87d35bec55b0e0c4d3ac5dbf711d6730ceb33912f83d139
7
- data.tar.gz: 63d5cf4a30dc53bd7c95ea4afdb681374285b6e4909fa2fe6e4373afbfd4c97980f0f999ea29724ff96cdd65c5e0ea9e8412ffc13728dc75340f857ae544bda1
6
+ metadata.gz: 9dc482d93408011b66b2e559118df48541c2c00c15f6efa9b257c52c4731228641c0f2ad7526506677ffc4a680d277569b06b05d1b6c25d3ce9edd80d13cafcc
7
+ data.tar.gz: 492d65972f7c6664692c12d70fcdd3622a80814999b64c1ad522fd7414cdd63a6585fae8d7b8e2ce1aaf3ac27e22f3d6a65cbadd186b8451422920e251a9d36c
@@ -1,9 +1,12 @@
1
1
  language: ruby
2
- before_install:
3
- - rvm use $RVM --install --binary --fuzzy
4
- - gem update --system
5
- - gem --version
6
- - gem install rubysl-bundler
7
2
  env:
8
- - RVM=rbx-nightly-d21 RUBYLIB=lib
9
- script: bundle exec mspec spec
3
+ - RUBYLIB=lib:.
4
+ script: mspec spec
5
+ branches:
6
+ only:
7
+ - 1.0
8
+ - 2.0
9
+ rvm:
10
+ - 2.1.0
11
+ - rbx-2
12
+
@@ -315,6 +315,9 @@ get_device_once(int *master, int *slave, char SlaveName[DEVICELEN], int nomesg,
315
315
  if (ioctl(slavefd, I_PUSH, "ttcompat") == -1) goto error;
316
316
  #endif
317
317
 
318
+ rb_fd_fix_cloexec(masterfd);
319
+ rb_fd_fix_cloexec(slavefd);
320
+
318
321
  *master = masterfd;
319
322
  *slave = slavefd;
320
323
  strlcpy(SlaveName, slavedevice, DEVICELEN);
@@ -339,6 +342,10 @@ error:
339
342
  if (!fail) return -1;
340
343
  rb_raise(rb_eRuntimeError, "openpty() failed");
341
344
  }
345
+
346
+ rb_fd_fix_cloexec(*master);
347
+ rb_fd_fix_cloexec(*slave);
348
+
342
349
  if (no_mesg(SlaveName, nomesg) == -1) {
343
350
  if (!fail) return -1;
344
351
  rb_raise(rb_eRuntimeError, "can't chmod slave pty");
@@ -356,6 +363,10 @@ error:
356
363
  }
357
364
 
358
365
  *slave = open(name, O_RDWR);
366
+
367
+ rb_fd_fix_cloexec(*master);
368
+ rb_fd_fix_cloexec(*slave);
369
+
359
370
  /* error check? */
360
371
  strlcpy(SlaveName, name, DEVICELEN);
361
372
 
@@ -382,6 +393,10 @@ error:
382
393
  if(ioctl(slavefd, I_PUSH, "ldterm") == -1) goto error;
383
394
  ioctl(slavefd, I_PUSH, "ttcompat");
384
395
  #endif
396
+
397
+ rb_fd_fix_cloexec(masterfd);
398
+ rb_fd_fix_cloexec(slavefd);
399
+
385
400
  *master = masterfd;
386
401
  *slave = slavefd;
387
402
  strlcpy(SlaveName, slavedevice, DEVICELEN);
@@ -401,9 +416,11 @@ error:
401
416
  snprintf(MasterName, sizeof MasterName, MasterDevice, *p);
402
417
  if ((masterfd = open(MasterName,O_RDWR,0)) >= 0) {
403
418
  *master = masterfd;
419
+ rb_fd_fix_cloexec(*master);
404
420
  snprintf(SlaveName, DEVICELEN, SlaveDevice, *p);
405
421
  if ((slavefd = open(SlaveName,O_RDWR,0)) >= 0) {
406
422
  *slave = slavefd;
423
+ rb_fd_fix_cloexec(*slave);
407
424
  if (chown(SlaveName, getuid(), getgid()) != 0) goto error;
408
425
  if (chmod(SlaveName, nomesg ? 0600 : 0622) != 0) goto error;
409
426
  return 0;
@@ -489,7 +506,7 @@ pty_getpty(int argc, VALUE *argv, VALUE self)
489
506
  rb_ivar_set(rport, rb_intern("@path"), rb_str_new2(SlaveName));
490
507
 
491
508
  wport = rb_funcall(rb_cFile, rb_intern("new"), 2, INT2FIX(dup(info.fd)),
492
- rb_str_new2("r"));
509
+ rb_str_new2("w"));
493
510
 
494
511
  rb_ivar_set(wport, rb_intern("@path"), rb_str_new2(SlaveName));
495
512
  rb_funcall(wport, rb_intern("sync="), 1, Qtrue);
@@ -503,6 +520,51 @@ pty_getpty(int argc, VALUE *argv, VALUE self)
503
520
  return res;
504
521
  }
505
522
 
523
+ static VALUE
524
+ pty_close_pty(VALUE assoc)
525
+ {
526
+ VALUE io;
527
+ int i;
528
+
529
+ for (i = 0; i < 2; i++) {
530
+ io = rb_ary_entry(assoc, i);
531
+ if (RB_TYPE_P(io, T_FILE) && 0 <= RFILE(io)->fptr->fd) {
532
+ rb_io_close(io);
533
+ }
534
+ }
535
+ return Qnil;
536
+ }
537
+
538
+ static VALUE
539
+ pty_open(VALUE klass) {
540
+ int master_fd, slave_fd;
541
+ char slavename[DEVICELEN];
542
+ VALUE master_io, slave_file;
543
+ rb_io_t *master_fptr, *slave_fptr;
544
+ VALUE assoc;
545
+
546
+ getDevice(&master_fd, &slave_fd, slavename, 1);
547
+
548
+ master_io = rb_funcall(rb_cIO, rb_intern("new"), 2, INT2FIX(master_fd),
549
+ rb_str_new2("r+"));
550
+
551
+ rb_funcall(master_io, rb_intern("sync="), 1, Qtrue);
552
+
553
+ slave_file = rb_funcall(rb_cFile, rb_intern("new"), 2, INT2FIX(slave_fd),
554
+ rb_str_new2("r+"));
555
+
556
+ rb_ivar_set(slave_file, rb_intern("@path"),
557
+ rb_obj_freeze(rb_str_new2(slavename)));
558
+ rb_funcall(slave_file, rb_intern("sync="), 1, Qtrue);
559
+
560
+ assoc = rb_assoc_new(master_io, slave_file);
561
+
562
+ if (rb_block_given_p()) {
563
+ return rb_ensure(rb_yield, assoc, pty_close_pty, assoc);
564
+ }
565
+ return assoc;
566
+ }
567
+
506
568
  /*
507
569
  * Document-class: PTY::ChildExited
508
570
  *
@@ -523,6 +585,7 @@ Init_pty()
523
585
  VALUE cPTY = rb_define_module("PTY");
524
586
  rb_define_module_function(cPTY, "getpty", pty_getpty, -1);
525
587
  rb_define_module_function(cPTY, "spawn", pty_getpty, -1);
588
+ rb_define_singleton_method(cPTY, "open", pty_open, 0);
526
589
  rb_define_singleton_method(cPTY, "__get_device__", pty_get_device, 0);
527
590
 
528
591
  eChildExited = rb_define_class_under(cPTY, "ChildExited", rb_eRuntimeError);
@@ -1,5 +1,5 @@
1
1
  module RubySL
2
2
  module PTY
3
- VERSION = "2.0.2"
3
+ VERSION = "2.0.3"
4
4
  end
5
5
  end
@@ -0,0 +1,50 @@
1
+ require "pty"
2
+
3
+ describe "PTY.open" do
4
+ before(:each) do
5
+ @master, @slave = PTY.open
6
+ end
7
+
8
+ after(:each) do
9
+ @master.close
10
+ @slave.close
11
+ end
12
+
13
+ it "returns master as an IO object" do
14
+ @master.class.should == IO
15
+ end
16
+
17
+ it "returns slave as a File object" do
18
+ @slave.class.should == File
19
+ end
20
+
21
+ it "returns master and slave as ttys" do
22
+ @master.tty?.should == true
23
+ @slave.tty?.should == true
24
+ end
25
+
26
+ it "returns slave as a device file" do
27
+ @slave.stat.chardev?.should == true
28
+ end
29
+
30
+ it "syncs master and slave" do
31
+ @master.sync.should == true
32
+ @slave.sync.should == true
33
+ end
34
+
35
+ it "allows writing to master, and reading from slave" do
36
+ @master.puts "sshao was here"
37
+ @slave.gets.should == "sshao was here\n"
38
+ end
39
+
40
+ it "sets master and slave fd flags to 2" do
41
+ require "fcntl"
42
+ @master.fcntl(Fcntl::F_GETFL).should == 2
43
+ @slave.fcntl(Fcntl::F_GETFL).should == 2
44
+ end
45
+
46
+ it "sets master and slave to close on exec" do
47
+ @master.close_on_exec?.should == true
48
+ @slave.close_on_exec?.should == true
49
+ end
50
+ end
@@ -0,0 +1,12 @@
1
+ require "pty"
2
+
3
+ describe "PTY.spawn" do
4
+ before(:each) do
5
+ @read, @write, @pid = PTY.spawn
6
+ end
7
+
8
+ it "allows reading from the first IO, and writing from the second IO" do
9
+ @write.puts "sshao was here"
10
+ @read.gets.should == "sshao was here\r\n"
11
+ end
12
+ end
metadata CHANGED
@@ -1,67 +1,67 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubysl-pty
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.2
4
+ version: 2.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brian Shirai
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-10-07 00:00:00.000000000 Z
11
+ date: 2014-12-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
- requirement: !ruby/object:Gem::Requirement
15
+ type: :development
16
+ version_requirements: !ruby/object:Gem::Requirement
16
17
  requirements:
17
18
  - - "~>"
18
19
  - !ruby/object:Gem::Version
19
20
  version: '1.3'
20
- type: :development
21
21
  prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
22
+ requirement: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.3'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
- requirement: !ruby/object:Gem::Requirement
29
+ type: :development
30
+ version_requirements: !ruby/object:Gem::Requirement
30
31
  requirements:
31
32
  - - "~>"
32
33
  - !ruby/object:Gem::Version
33
34
  version: '10.0'
34
- type: :development
35
35
  prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
36
+ requirement: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '10.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: mspec
43
- requirement: !ruby/object:Gem::Requirement
43
+ type: :development
44
+ version_requirements: !ruby/object:Gem::Requirement
44
45
  requirements:
45
46
  - - "~>"
46
47
  - !ruby/object:Gem::Version
47
48
  version: '1.5'
48
- type: :development
49
49
  prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
50
+ requirement: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '1.5'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rubysl-prettyprint
57
- requirement: !ruby/object:Gem::Requirement
57
+ type: :development
58
+ version_requirements: !ruby/object:Gem::Requirement
58
59
  requirements:
59
60
  - - "~>"
60
61
  - !ruby/object:Gem::Version
61
62
  version: '2.0'
62
- type: :development
63
63
  prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
64
+ requirement: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
@@ -86,6 +86,8 @@ files:
86
86
  - lib/rubysl/pty.rb
87
87
  - lib/rubysl/pty/version.rb
88
88
  - rubysl-pty.gemspec
89
+ - spec/open_spec.rb
90
+ - spec/spawn_spec.rb
89
91
  homepage: https://github.com/rubysl/rubysl-pty
90
92
  licenses:
91
93
  - BSD
@@ -106,9 +108,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
106
108
  version: '0'
107
109
  requirements: []
108
110
  rubyforge_project:
109
- rubygems_version: 2.0.7
111
+ rubygems_version: 2.4.5
110
112
  signing_key:
111
113
  specification_version: 4
112
114
  summary: Ruby standard library pty.
113
- test_files: []
114
- has_rdoc:
115
+ test_files:
116
+ - spec/open_spec.rb
117
+ - spec/spawn_spec.rb