rubysl-pty 1.0.0 → 2.0.2

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: d77df78cc8ecc2aa4f7a0b17ea7caee11093fa21
4
- data.tar.gz: 3ba373c4cc32822347f63e2b87221c101cfb9a43
3
+ metadata.gz: 0e45c272bab13b32a67ff684e47892397576b895
4
+ data.tar.gz: 75c93df9034041b5b527c06d782239e93cddb4f8
5
5
  SHA512:
6
- metadata.gz: 101bdb40064ff296c584ab6b480be71e767e9af91c9d27aa991e3e7f8403660d1f3391a44732ac48b67f76d669bda8d437f929b785013cc5427296aa37d5cdf4
7
- data.tar.gz: ccf8dc49c46a2333ccdc977674fd193048e0db7efbfd629e1b94353f691d8fb2d1a96b0c65413fefd981a10ea92546a7082b5c4705067c9c8695838b3872e1f0
6
+ metadata.gz: 5cde05155c951165a7d9631d9f91aa38a7314cc3d77b10d7e3b2faea37814c5a84f1b55b21c52ffde87d35bec55b0e0c4d3ac5dbf711d6730ceb33912f83d139
7
+ data.tar.gz: 63d5cf4a30dc53bd7c95ea4afdb681374285b6e4909fa2fe6e4373afbfd4c97980f0f999ea29724ff96cdd65c5e0ea9e8412ffc13728dc75340f857ae544bda1
data/.travis.yml CHANGED
@@ -1,8 +1,9 @@
1
1
  language: ruby
2
2
  before_install:
3
+ - rvm use $RVM --install --binary --fuzzy
3
4
  - gem update --system
4
5
  - gem --version
5
6
  - gem install rubysl-bundler
7
+ env:
8
+ - RVM=rbx-nightly-d21 RUBYLIB=lib
6
9
  script: bundle exec mspec spec
7
- rvm:
8
- - rbx-nightly-18mode
@@ -5,12 +5,13 @@ if /mswin32|mingw|bccwin32/ !~ RUBY_PLATFORM
5
5
  have_header("sys/wait.h")
6
6
  have_func("setresuid")
7
7
  have_header("libutil.h")
8
+ have_header("unistd.h")
8
9
  have_header("pty.h")
9
10
  have_library("util", "openpty")
10
11
  if have_func("openpty") or
11
12
  have_func("_getpty") or
12
13
  have_func("ptsname") or
13
14
  have_func("ioctl")
14
- create_makefile('pty')
15
+ create_makefile('pty/pty')
15
16
  end
16
17
  end
data/ext/rubysl/pty/pty.c CHANGED
@@ -1,4 +1,8 @@
1
- #include "config.h"
1
+ #include "ruby/config.h"
2
+ #ifdef RUBY_EXTCONF_H
3
+ #include RUBY_EXTCONF_H
4
+ #endif
5
+ #include <stdlib.h>
2
6
  #include <stdio.h>
3
7
  #include <sys/types.h>
4
8
  #include <sys/stat.h>
@@ -12,19 +16,24 @@
12
16
  #ifdef HAVE_LIBUTIL_H
13
17
  #include <libutil.h>
14
18
  #endif
19
+ #ifdef HAVE_UTIL_H
20
+ #include <util.h>
21
+ #endif
15
22
  #ifdef HAVE_PTY_H
16
23
  #include <pty.h>
17
24
  #endif
18
25
  #ifdef HAVE_SYS_WAIT_H
19
26
  #include <sys/wait.h>
20
27
  #else
28
+ #ifndef WIFSTOPPED
21
29
  #define WIFSTOPPED(status) (((status) & 0xff) == 0x7f)
22
30
  #endif
31
+ #endif
23
32
  #include <ctype.h>
24
33
 
25
- #include "ruby.h"
26
- #include "rubyio.h"
27
- #include "util.h"
34
+ #include "ruby/ruby.h"
35
+ #include "ruby/io.h"
36
+ #include "ruby/util.h"
28
37
 
29
38
  #include <signal.h>
30
39
  #ifdef HAVE_SYS_STROPTS_H
@@ -35,14 +44,32 @@
35
44
  #include <unistd.h>
36
45
  #endif
37
46
 
47
+ #if defined(HAVE_OPENPTY) && !defined(HAVE_PTY_H)
48
+ /* Normally, the following header would be used:
49
+ * #include <util.h>
50
+ *
51
+ * but MRI has an include file "util.h" which may be picked up depending on the
52
+ * order of include directories. Rather than futz with that, we just add the
53
+ * prototype.
54
+ */
55
+ #include <sys/termios.h>
56
+
57
+ int openpty(int *amaster, int *aslave, char *name, struct termios *termp,
58
+ struct winsize *winp);
59
+ #endif
60
+
61
+ #ifdef TIOCSCTTY
62
+ #include <sys/ioctl.h>
63
+ #endif
64
+
38
65
  #define DEVICELEN 16
39
66
 
40
67
  #if !defined(HAVE_OPENPTY)
41
68
  #if defined(__hpux)
42
69
  static const
43
- char MasterDevice[] = "/dev/ptym/pty%s",
44
- SlaveDevice[] = "/dev/pty/tty%s",
45
- *const deviceNo[] = {
70
+ char MasterDevice[] = "/dev/ptym/pty%s",
71
+ SlaveDevice[] = "/dev/pty/tty%s",
72
+ *const deviceNo[] = {
46
73
  "p0","p1","p2","p3","p4","p5","p6","p7",
47
74
  "p8","p9","pa","pb","pc","pd","pe","pf",
48
75
  "q0","q1","q2","q3","q4","q5","q6","q7",
@@ -63,9 +90,9 @@ char MasterDevice[] = "/dev/ptym/pty%s",
63
90
  };
64
91
  #elif defined(_IBMESA) /* AIX/ESA */
65
92
  static const
66
- char MasterDevice[] = "/dev/ptyp%s",
67
- SlaveDevice[] = "/dev/ttyp%s",
68
- *const deviceNo[] = {
93
+ char MasterDevice[] = "/dev/ptyp%s",
94
+ SlaveDevice[] = "/dev/ttyp%s",
95
+ *const deviceNo[] = {
69
96
  "00","01","02","03","04","05","06","07","08","09","0a","0b","0c","0d","0e","0f",
70
97
  "10","11","12","13","14","15","16","17","18","19","1a","1b","1c","1d","1e","1f",
71
98
  "20","21","22","23","24","25","26","27","28","29","2a","2b","2c","2d","2e","2f",
@@ -85,9 +112,9 @@ char MasterDevice[] = "/dev/ptyp%s",
85
112
  };
86
113
  #elif !defined(HAVE_PTSNAME)
87
114
  static const
88
- char MasterDevice[] = "/dev/pty%s",
89
- SlaveDevice[] = "/dev/tty%s",
90
- *const deviceNo[] = {
115
+ char MasterDevice[] = "/dev/pty%s",
116
+ SlaveDevice[] = "/dev/tty%s",
117
+ *const deviceNo[] = {
91
118
  "p0","p1","p2","p3","p4","p5","p6","p7",
92
119
  "p8","p9","pa","pb","pc","pd","pe","pf",
93
120
  "q0","q1","q2","q3","q4","q5","q6","q7",
@@ -115,9 +142,11 @@ char MasterDevice[] = "/dev/pty%s",
115
142
 
116
143
  static VALUE eChildExited;
117
144
 
145
+ /* Returns the exit status of the child for which PTY#check
146
+ * raised this exception
147
+ */
118
148
  static VALUE
119
- echild_status(self)
120
- VALUE self;
149
+ echild_status(VALUE self)
121
150
  {
122
151
  return rb_ivar_get(self, rb_intern("status"));
123
152
  }
@@ -128,51 +157,7 @@ struct pty_info {
128
157
  VALUE thread;
129
158
  };
130
159
 
131
- static void
132
- raise_from_wait(state, info)
133
- struct pty_info *info;
134
- char *state;
135
- {
136
- VALUE last_status = rb_gv_get("$?");
137
- char buf[1024];
138
- VALUE exc;
139
-
140
- snprintf(buf, sizeof(buf), "pty - %s: %ld", state, (long)info->child_pid);
141
- exc = rb_exc_new2(eChildExited, buf);
142
- rb_iv_set(exc, "status", last_status);
143
- rb_funcall(info->thread, rb_intern("raise"), 1, exc);
144
- }
145
-
146
- static VALUE
147
- pty_syswait(info)
148
- struct pty_info *info;
149
- {
150
- int cpid, status;
151
-
152
- for (;;) {
153
- cpid = rb_waitpid(info->child_pid, &status, WUNTRACED);
154
- if (cpid == -1) return Qnil;
155
-
156
- #if defined(WIFSTOPPED)
157
- #elif defined(IF_STOPPED)
158
- #define WIFSTOPPED(status) IF_STOPPED(status)
159
- #else
160
- ---->> Either IF_STOPPED or WIFSTOPPED is needed <<----
161
- #endif /* WIFSTOPPED | IF_STOPPED */
162
- if (WIFSTOPPED(status)) { /* suspend */
163
- raise_from_wait("stopped", info);
164
- }
165
- else if (kill(info->child_pid, 0) == 0) {
166
- raise_from_wait("changed", info);
167
- }
168
- else {
169
- raise_from_wait("exited", info);
170
- return Qnil;
171
- }
172
- }
173
- }
174
-
175
- static void getDevice _((int*, int*, char [DEVICELEN]));
160
+ static void getDevice _((int*, int*, char [DEVICELEN], int));
176
161
 
177
162
  struct exec_info {
178
163
  int argc;
@@ -191,11 +176,8 @@ pty_exec(v)
191
176
  }
192
177
 
193
178
  static void
194
- establishShell(argc, argv, info, SlaveName)
195
- int argc;
196
- VALUE *argv;
197
- struct pty_info *info;
198
- char SlaveName[DEVICELEN];
179
+ establishShell(int argc, VALUE *argv, struct pty_info *info,
180
+ char SlaveName[DEVICELEN])
199
181
  {
200
182
  int i, master, slave;
201
183
  char *p, tmp, *getenv();
@@ -221,7 +203,7 @@ establishShell(argc, argv, info, SlaveName)
221
203
  argc = 1;
222
204
  argv = &v;
223
205
  }
224
- getDevice(&master, &slave, SlaveName);
206
+ getDevice(&master, &slave, SlaveName, 0);
225
207
 
226
208
  info->thread = rb_thread_current();
227
209
  VALUE child_pid = rb_funcall(rb_mKernel, rb_intern("fork"), 0);
@@ -297,115 +279,202 @@ establishShell(argc, argv, info, SlaveName)
297
279
  }
298
280
 
299
281
  static int
300
- get_device_once(master, slave, SlaveName, fail)
301
- int *master, *slave, fail;
302
- char SlaveName[DEVICELEN];
282
+ no_mesg(char *slavedevice, int nomesg)
303
283
  {
304
- #if defined HAVE_OPENPTY
305
- /*
306
- * Use openpty(3) of 4.3BSD Reno and later,
307
- * or the same interface function.
308
- */
284
+ if (nomesg) {
285
+ return chmod(slavedevice, 0600);
286
+ } else {
287
+ return 0;
288
+ }
289
+ }
290
+
291
+ static int
292
+ get_device_once(int *master, int *slave, char SlaveName[DEVICELEN], int nomesg, int fail)
293
+ {
294
+ #if defined(HAVE_POSIX_OPENPT)
295
+ int masterfd = -1, slavefd = -1;
296
+ char *slavedevice;
297
+ struct sigaction dfl, old;
298
+
299
+ dfl.sa_handler = SIG_DFL;
300
+ dfl.sa_flags = 0;
301
+ sigemptyset(&dfl.sa_mask);
302
+
303
+ if ((masterfd = posix_openpt(O_RDWR|O_NOCTTY)) == -1) goto error;
304
+ if (sigaction(SIGCHLD, &dfl, &old) == -1) goto error;
305
+ if (grantpt(masterfd) == -1) goto grantpt_error;
306
+ if (sigaction(SIGCHLD, &old, NULL) == -1) goto error;
307
+ if (unlockpt(masterfd) == -1) goto error;
308
+ if ((slavedevice = ptsname(masterfd)) == NULL) goto error;
309
+ if (no_mesg(slavedevice, nomesg) == -1) goto error;
310
+ if ((slavefd = open(slavedevice, O_RDWR|O_NOCTTY, 0)) == -1) goto error;
311
+
312
+ #if defined I_PUSH && !defined linux
313
+ if (ioctl(slavefd, I_PUSH, "ptem") == -1) goto error;
314
+ if (ioctl(slavefd, I_PUSH, "ldterm") == -1) goto error;
315
+ if (ioctl(slavefd, I_PUSH, "ttcompat") == -1) goto error;
316
+ #endif
317
+
318
+ *master = masterfd;
319
+ *slave = slavefd;
320
+ strlcpy(SlaveName, slavedevice, DEVICELEN);
321
+ return 0;
322
+
323
+ grantpt_error:
324
+ sigaction(SIGCHLD, &old, NULL);
325
+ error:
326
+ if (slavefd != -1) close(slavefd);
327
+ if (masterfd != -1) close(masterfd);
328
+ if (fail) {
329
+ rb_raise(rb_eRuntimeError, "can't get Master/Slave device");
330
+ }
331
+ return -1;
332
+ #elif defined HAVE_OPENPTY
333
+ /*
334
+ * Use openpty(3) of 4.3BSD Reno and later,
335
+ * or the same interface function.
336
+ */
309
337
  if (openpty(master, slave, SlaveName,
310
- (struct termios *)0, (struct winsize *)0) == -1) {
338
+ (struct termios *)0, (struct winsize *)0) == -1) {
339
+ if (!fail) return -1;
340
+ rb_raise(rb_eRuntimeError, "openpty() failed");
341
+ }
342
+ if (no_mesg(SlaveName, nomesg) == -1) {
311
343
  if (!fail) return -1;
312
- rb_raise(rb_eRuntimeError, "openpty() failed");
344
+ rb_raise(rb_eRuntimeError, "can't chmod slave pty");
313
345
  }
314
346
 
315
347
  return 0;
348
+
316
349
  #elif defined HAVE__GETPTY
317
350
  char *name;
351
+ mode_t mode = nomesg ? 0600 : 0622;
318
352
 
319
- if (!(name = _getpty(master, O_RDWR, 0622, 0))) {
353
+ if (!(name = _getpty(master, O_RDWR, mode, 0))) {
320
354
  if (!fail) return -1;
321
355
  rb_raise(rb_eRuntimeError, "_getpty() failed");
322
356
  }
323
357
 
324
358
  *slave = open(name, O_RDWR);
325
- strncpy(SlaveName, name, sizeof SlaveName);
359
+ /* error check? */
360
+ strlcpy(SlaveName, name, DEVICELEN);
326
361
 
327
362
  return 0;
328
- #else /* HAVE__GETPTY */
329
- int i,j;
330
-
331
- #ifdef HAVE_PTSNAME
332
- char *pn;
363
+ #elif defined(HAVE_PTSNAME)
364
+ int masterfd = -1, slavefd = -1;
365
+ char *slavedevice;
333
366
  void (*s)();
334
367
 
335
368
  extern char *ptsname(int);
336
369
  extern int unlockpt(int);
337
370
  extern int grantpt(int);
338
371
 
339
- if((i = open("/dev/ptmx", O_RDWR, 0)) != -1) {
340
- s = signal(SIGCHLD, SIG_DFL);
341
- if(grantpt(i) != -1) {
342
- signal(SIGCHLD, s);
343
- if(unlockpt(i) != -1) {
344
- if((pn = ptsname(i)) != NULL) {
345
- if((j = open(pn, O_RDWR, 0)) != -1) {
346
- #if defined I_PUSH && !defined linux
347
- if(ioctl(j, I_PUSH, "ptem") != -1) {
348
- if(ioctl(j, I_PUSH, "ldterm") != -1) {
349
- ioctl(j, I_PUSH, "ttcompat");
350
- #endif
351
- *master = i;
352
- *slave = j;
353
- strncpy(SlaveName, pn, sizeof SlaveName);
354
- return 0;
372
+ if((masterfd = open("/dev/ptmx", O_RDWR, 0)) == -1) goto error;
373
+ s = signal(SIGCHLD, SIG_DFL);
374
+ if(grantpt(masterfd) == -1) goto error;
375
+ signal(SIGCHLD, s);
376
+ if(unlockpt(masterfd) == -1) goto error;
377
+ if((slavedevice = ptsname(masterfd)) == NULL) goto error;
378
+ if (no_mesg(slavedevice, nomesg) == -1) goto error;
379
+ if((slavefd = open(slavedevice, O_RDWR, 0)) == -1) goto error;
355
380
  #if defined I_PUSH && !defined linux
356
- }
357
- }
381
+ if(ioctl(slavefd, I_PUSH, "ptem") == -1) goto error;
382
+ if(ioctl(slavefd, I_PUSH, "ldterm") == -1) goto error;
383
+ ioctl(slavefd, I_PUSH, "ttcompat");
358
384
  #endif
359
- }
360
- }
361
- }
362
- }
363
- close(i);
364
- }
365
- if (!fail) rb_raise(rb_eRuntimeError, "can't get Master/Slave device");
385
+ *master = masterfd;
386
+ *slave = slavefd;
387
+ strlcpy(SlaveName, slavedevice, DEVICELEN);
388
+ return 0;
389
+
390
+ error:
391
+ if (slavefd != -1) close(slavefd);
392
+ if (masterfd != -1) close(masterfd);
393
+ if (fail) rb_raise(rb_eRuntimeError, "can't get Master/Slave device");
366
394
  return -1;
367
395
  #else
368
- char **p;
396
+ int masterfd = -1, slavefd = -1;
397
+ const char *const *p;
369
398
  char MasterName[DEVICELEN];
370
399
 
371
400
  for (p = deviceNo; *p != NULL; p++) {
372
401
  snprintf(MasterName, sizeof MasterName, MasterDevice, *p);
373
- if ((i = open(MasterName,O_RDWR,0)) >= 0) {
374
- *master = i;
375
- snprintf(SlaveName, sizeof SlaveName, SlaveDevice, *p);
376
- if ((j = open(SlaveName,O_RDWR,0)) >= 0) {
377
- *slave = j;
378
- chown(SlaveName, getuid(), getgid());
379
- chmod(SlaveName, 0622);
402
+ if ((masterfd = open(MasterName,O_RDWR,0)) >= 0) {
403
+ *master = masterfd;
404
+ snprintf(SlaveName, DEVICELEN, SlaveDevice, *p);
405
+ if ((slavefd = open(SlaveName,O_RDWR,0)) >= 0) {
406
+ *slave = slavefd;
407
+ if (chown(SlaveName, getuid(), getgid()) != 0) goto error;
408
+ if (chmod(SlaveName, nomesg ? 0600 : 0622) != 0) goto error;
380
409
  return 0;
381
410
  }
382
- close(i);
411
+ close(masterfd);
383
412
  }
384
413
  }
414
+ error:
415
+ if (slavefd != -1) close(slavefd);
416
+ if (masterfd != -1) close(masterfd);
385
417
  if (fail) rb_raise(rb_eRuntimeError, "can't get %s", SlaveName);
386
418
  return -1;
387
419
  #endif
388
- #endif
389
420
  }
390
421
 
391
422
  static void
392
- getDevice(master, slave, slavename)
393
- int *master, *slave;
394
- char slavename[DEVICELEN];
423
+ getDevice(int *master, int *slave, char SlaveName[DEVICELEN], int nomesg)
395
424
  {
396
- if (get_device_once(master, slave, slavename, 0)) {
397
- rb_gc();
398
- get_device_once(master, slave, slavename, 1);
425
+ if (get_device_once(master, slave, SlaveName, nomesg, 0)) {
426
+ get_device_once(master, slave, SlaveName, nomesg, 1);
399
427
  }
400
428
  }
401
429
 
402
- /* ruby function: getpty */
403
430
  static VALUE
404
- pty_getpty(argc, argv, self)
405
- int argc;
406
- VALUE *argv;
407
- VALUE self;
431
+ pty_get_device(VALUE klass)
432
+ {
433
+ int master_fd, slave_fd;
434
+ char slavename[DEVICELEN];
435
+ VALUE ary;
436
+
437
+ getDevice(&master_fd, &slave_fd, slavename, 1);
438
+ ary = rb_ary_new3(3, INT2NUM(master_fd), INT2NUM(slave_fd),
439
+ rb_str_new_cstr(slavename));
440
+ return ary;
441
+ }
442
+
443
+ /*
444
+ * call-seq:
445
+ * PTY.spawn(command_line) { |r, w, pid| ... }
446
+ * PTY.spawn(command_line) => [r, w, pid]
447
+ * PTY.spawn(command, args, ...) { |r, w, pid| ... }
448
+ * PTY.spawn(command, args, ...) => [r, w, pid]
449
+ * PTY.getpty(command_line) { |r, w, pid| ... }
450
+ * PTY.getpty(command_line) => [r, w, pid]
451
+ * PTY.getpty(command, args, ...) { |r, w, pid| ... }
452
+ * PTY.getpty(command, args, ...) => [r, w, pid]
453
+ *
454
+ * Spawns the specified command on a newly allocated pty.
455
+ *
456
+ * The command's controlling tty is set to the slave device of the pty
457
+ * and its standard input/output/error is redirected to the slave device.
458
+ *
459
+ * <tt>command_line</tt>:: The full command line to run
460
+ * <tt>command</tt>:: The command to run, as a String.
461
+ * <tt>args</tt>:: Zero or more arguments, as Strings, representing
462
+ * the arguments to +command+
463
+ *
464
+ * In the non-block form this returns an array of size three,
465
+ * <tt>[r, w, pid]</tt>. In the block form the block will be called with
466
+ * these as arguments, <tt>|r,w,pid|</tt>:
467
+ *
468
+ * +r+:: An IO that can be read from that contains the command's
469
+ * standard output and standard error
470
+ * +w+:: An IO that can be written to that is the command's
471
+ * standard input
472
+ * +pid+:: The process identifier for the command.
473
+ */
474
+ static VALUE
475
+ pty_getpty(int argc, VALUE *argv, VALUE self)
408
476
  {
477
+
409
478
  VALUE res, rport, wport;
410
479
  struct pty_info info;
411
480
  struct pty_info thinfo;
@@ -425,10 +494,7 @@ pty_getpty(argc, argv, self)
425
494
  rb_ivar_set(wport, rb_intern("@path"), rb_str_new2(SlaveName));
426
495
  rb_funcall(wport, rb_intern("sync="), 1, Qtrue);
427
496
 
428
- res = rb_ary_new2(3);
429
- rb_ary_store(res,0,(VALUE)rport);
430
- rb_ary_store(res,1,(VALUE)wport);
431
- rb_ary_store(res,2,INT2FIX(info.child_pid));
497
+ res = rb_ary_new3(3, (VALUE)rport, (VALUE)wport, INT2FIX(info.child_pid));
432
498
 
433
499
  if (rb_block_given_p()) {
434
500
  rb_yield(res);
@@ -437,34 +503,28 @@ pty_getpty(argc, argv, self)
437
503
  return res;
438
504
  }
439
505
 
440
- /* ruby function: protect_signal - obsolete */
441
- static VALUE
442
- pty_protect(self)
443
- VALUE self;
444
- {
445
- rb_warn("PTY::protect_signal is no longer needed");
446
- rb_yield(Qnil);
447
- return self;
448
- }
506
+ /*
507
+ * Document-class: PTY::ChildExited
508
+ *
509
+ * Thrown when PTY#check is called for a pid that represents a process that
510
+ * has exited.
511
+ */
449
512
 
450
- /* ruby function: reset_signal - obsolete */
451
- static VALUE
452
- pty_reset_signal(self)
453
- VALUE self;
454
- {
455
- rb_warn("PTY::reset_signal is no longer needed");
456
- return self;
457
- }
513
+ /*
514
+ * Document-class: PTY
515
+ *
516
+ * Creates and managed pseudo terminals (PTYs). See also
517
+ * http://en.wikipedia.org/wiki/Pseudo_terminal
518
+ */
458
519
 
459
520
  void
460
521
  Init_pty()
461
522
  {
462
523
  VALUE cPTY = rb_define_module("PTY");
463
- rb_define_module_function(cPTY,"getpty",pty_getpty,-1);
464
- rb_define_module_function(cPTY,"spawn",pty_getpty,-1);
465
- rb_define_module_function(cPTY,"protect_signal",pty_protect,0);
466
- rb_define_module_function(cPTY,"reset_signal",pty_reset_signal,0);
524
+ rb_define_module_function(cPTY, "getpty", pty_getpty, -1);
525
+ rb_define_module_function(cPTY, "spawn", pty_getpty, -1);
526
+ rb_define_singleton_method(cPTY, "__get_device__", pty_get_device, 0);
467
527
 
468
- eChildExited = rb_define_class_under(cPTY,"ChildExited",rb_eRuntimeError);
469
- rb_define_method(eChildExited,"status",echild_status,0);
528
+ eChildExited = rb_define_class_under(cPTY, "ChildExited", rb_eRuntimeError);
529
+ rb_define_method(eChildExited, "status", echild_status, 0);
470
530
  }
@@ -1,5 +1,5 @@
1
1
  module RubySL
2
2
  module PTY
3
- VERSION = "1.0.0"
3
+ VERSION = "2.0.2"
4
4
  end
5
5
  end
data/rubysl-pty.gemspec CHANGED
@@ -17,8 +17,10 @@ Gem::Specification.new do |spec|
17
17
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
18
  spec.require_paths = ["lib"]
19
19
 
20
+ spec.required_ruby_version = "~> 2.0"
21
+
20
22
  spec.add_development_dependency "bundler", "~> 1.3"
21
23
  spec.add_development_dependency "rake", "~> 10.0"
22
24
  spec.add_development_dependency "mspec", "~> 1.5"
23
- spec.add_development_dependency "rubysl-prettyprint", "~> 1.0"
25
+ spec.add_development_dependency "rubysl-prettyprint", "~> 2.0"
24
26
  end
metadata CHANGED
@@ -1,71 +1,71 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubysl-pty
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 2.0.2
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-12-27 00:00:00.000000000 Z
11
+ date: 2013-10-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.3'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !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
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
33
  version: '10.0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !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
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ~>
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
47
  version: '1.5'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !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
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ~>
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '1.0'
61
+ version: '2.0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ~>
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '1.0'
68
+ version: '2.0'
69
69
  description: Ruby standard library pty.
70
70
  email:
71
71
  - brixen@gmail.com
@@ -74,8 +74,8 @@ extensions:
74
74
  - ext/rubysl/pty/extconf.rb
75
75
  extra_rdoc_files: []
76
76
  files:
77
- - .gitignore
78
- - .travis.yml
77
+ - ".gitignore"
78
+ - ".travis.yml"
79
79
  - Gemfile
80
80
  - LICENSE
81
81
  - README.md
@@ -96,12 +96,12 @@ require_paths:
96
96
  - lib
97
97
  required_ruby_version: !ruby/object:Gem::Requirement
98
98
  requirements:
99
- - - '>='
99
+ - - "~>"
100
100
  - !ruby/object:Gem::Version
101
- version: '0'
101
+ version: '2.0'
102
102
  required_rubygems_version: !ruby/object:Gem::Requirement
103
103
  requirements:
104
- - - '>='
104
+ - - ">="
105
105
  - !ruby/object:Gem::Version
106
106
  version: '0'
107
107
  requirements: []
@@ -111,3 +111,4 @@ signing_key:
111
111
  specification_version: 4
112
112
  summary: Ruby standard library pty.
113
113
  test_files: []
114
+ has_rdoc: