This source file includes following definitions.
- prepare_write
- done_write
- prepare_read
- ignore_done_read
- output_done_read
- main
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 #include <config.h>
20
21 #include "pipe-filter.h"
22
23 #include <stdio.h>
24 #include <errno.h>
25 #include <unistd.h>
26 #include <string.h>
27 #include <signal.h>
28
29 #include "binary-io.h"
30 #include "full-write.h"
31 #include "macros.h"
32
33 struct locals
34 {
35 const char *input;
36 size_t size;
37 size_t nwritten;
38 size_t nread;
39 char buf[5];
40 };
41
42 static const void *
43 prepare_write (size_t *num_bytes_p, void *private_data)
44 {
45 struct locals *l = (struct locals *) private_data;
46 if (l->nwritten < l->size)
47 {
48 *num_bytes_p = l->size - l->nwritten;
49 return l->input + l->nwritten;
50 }
51 else
52 return NULL;
53 }
54
55 static void
56 done_write (void *data_written, size_t num_bytes_written, void *private_data)
57 {
58 struct locals *l = (struct locals *) private_data;
59 l->nwritten += num_bytes_written;
60 }
61
62 static void *
63 prepare_read (size_t *num_bytes_p, void *private_data)
64 {
65 struct locals *l = (struct locals *) private_data;
66 *num_bytes_p = sizeof (l->buf);
67 return l->buf;
68 }
69
70
71
72 static void
73 ignore_done_read (void *data_read, size_t num_bytes_read, void *private_data)
74 {
75 }
76
77
78
79 static void
80 output_done_read (void *data_read, size_t num_bytes_read, void *private_data)
81 {
82 full_write (STDOUT_FILENO, data_read, num_bytes_read);
83 }
84
85 int
86 main (int argc, char **argv)
87 {
88 const char *path[] = { NULL, NULL };
89
90 ASSERT (argc == 2);
91
92 set_binary_mode (STDOUT_FILENO, O_BINARY);
93
94
95 {
96 struct locals l;
97 int rc;
98
99 l.input = "";
100 l.size = 1;
101 l.nwritten = 0;
102 l.nread = 0;
103 path[0] = "/nonexistent/blah";
104 rc = pipe_filter_ii_execute ("pipe-filter-test", path[0], path, true, false,
105 prepare_write, done_write,
106 prepare_read, ignore_done_read,
107 &l);
108 ASSERT (rc == 127 || rc == -1);
109 printf ("Test 1 passed.\n");
110 fflush (stdout);
111 }
112
113
114 {
115 struct locals l;
116 int rc;
117
118 l.input = "1 -1";
119 l.size = strlen (l.input);
120 l.nwritten = 0;
121 l.nread = 0;
122 path[0] = argv[1];
123 rc = pipe_filter_ii_execute ("pipe-filter-test", path[0], path, false, false,
124 prepare_write, done_write,
125 prepare_read, ignore_done_read,
126 &l);
127 ASSERT (rc == 1);
128 printf ("Test 2 passed.\n");
129 fflush (stdout);
130 }
131
132
133 {
134 struct locals l;
135 int rc;
136
137 l.input = "1 50\n51\n100";
138 l.size = strlen (l.input);
139 l.nwritten = 0;
140 l.nread = 0;
141 path[0] = argv[1];
142 rc = pipe_filter_ii_execute ("pipe-filter-test", path[0], path, false, true,
143 prepare_write, done_write,
144 prepare_read, output_done_read,
145 &l);
146 ASSERT (rc == 0);
147 printf ("Test 3 passed.\n");
148 fflush (stdout);
149 }
150
151 return 0;
152 }