File: M000019.html

package info (click to toggle)
rubyfilter 0.12-2.1
  • links: PTS
  • area: main
  • in suites: jessie-kfreebsd
  • size: 688 kB
  • sloc: ruby: 3,228; makefile: 64
file content (55 lines) | stat: -rw-r--r-- 2,017 bytes parent folder | download | duplicates (3)
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

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>deliver_filter (RFilter::Deliver)</title>
<link rel=StyleSheet href="../../.././rdoc-style.css" type="text/css" media="screen" />
</head>
<body bgcolor="white">
<pre><span class="cmt"># File lib/rfilter/deliver.rb, line 172</span>
    <span class="kw">def</span> deliver_filter(message, *command)
      <span class="kw">begin</span>
        to_r, to_w = IO.pipe
        from_r, from_w = IO.pipe
        <span class="kw">if</span> pid = fork
          <span class="cmt"># parent</span>
          to_r.close
          from_w.close
          writer = Thread::new {
            message.each { |line|
              to_w &lt;&lt; line
              to_w &lt;&lt; <span class="str">&quot;\n&quot;</span> <span class="kw">unless</span> line[-1] == ?\n
            }
            to_w.close
          }
          <span class="kw">yield</span> from_r
        <span class="kw">else</span>
          <span class="cmt"># child</span>
          <span class="kw">begin</span>
            to_w.close
            from_r.close
            STDIN.reopen(to_r)
            to_r.close
            STDOUT.reopen(from_w)
            from_w.close
            exec(*command)
          <span class="kw">ensure</span>
            exit!
          <span class="kw">end</span>
        <span class="kw">end</span>
      <span class="kw">ensure</span>
        writer.kill <span class="kw">if</span> writer <span class="kw">and</span> writer.alive?
        [ to_r, to_w, from_r, from_w ].each { |io|
          <span class="kw">if</span> io &amp;&amp; !io.closed?
            <span class="kw">begin</span>
              io.close
            <span class="kw">rescue</span> Errno::EPIPE
            <span class="kw">end</span>
          <span class="kw">end</span>
        }
      <span class="kw">end</span>
      Process.waitpid2(pid, 0)[1]
    <span class="kw">end</span></pre>
</body>
</html>