nexmon – Blame information for rev 1

Subversion Repositories:
Rev:
Rev Author Line No. Line
1 office 1 /* GLIB - Library of useful routines for C programming
2 * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, see <http://www.gnu.org/licenses/>.
16 */
17  
18 /*
19 * Modified by the GLib Team and others 1997-2000. See the AUTHORS
20 * file for a list of people on the GLib Team. See the ChangeLog
21 * files for a list of changes. These files are distributed with
22 * GLib at ftp://ftp.gtk.org/pub/gtk/.
23 */
24  
25 #undef G_DISABLE_ASSERT
26 #undef G_LOG_DOMAIN
27  
28 #include <glib.h>
29 #include <stdio.h>
30 #include <string.h>
31 #include <stdlib.h>
32  
33 #ifdef G_OS_WIN32
34 #include <fcntl.h>
35 #include <io.h>
36 #define pipe(fds) _pipe(fds, 4096, _O_BINARY)
37 #endif
38  
39  
40 static void
41 run_tests (void)
42 {
43 GError *err;
44 gchar *output = NULL;
45 #ifdef G_OS_WIN32
46 gchar *erroutput = NULL;
47 int pipedown[2], pipeup[2];
48 gchar **argv = 0;
49 #endif
50  
51 err = NULL;
52 if (!g_spawn_command_line_sync ("nonexistent_application foo 'bar baz' blah blah",
53 NULL, NULL, NULL,
54 &err))
55 {
56 g_error_free (err);
57 }
58 else
59 {
60 g_warning ("no error for sync spawn of nonexistent application");
61 exit (1);
62 }
63  
64 err = NULL;
65 if (!g_spawn_command_line_async ("nonexistent_application foo bar baz \"blah blah\"",
66 &err))
67 {
68 g_error_free (err);
69 }
70 else
71 {
72 g_warning ("no error for async spawn of nonexistent application");
73 exit (1);
74 }
75  
76 err = NULL;
77 #ifdef G_OS_UNIX
78 if (!g_spawn_command_line_sync ("/bin/sh -c 'echo hello'",
79 &output, NULL, NULL,
80 &err))
81 {
82 fprintf (stderr, "Error: %s\n", err->message);
83 g_error_free (err);
84 exit (1);
85 }
86 else
87 {
88 g_assert (output != NULL);
89  
90 if (strcmp (output, "hello\n") != 0)
91 {
92 printf ("output was '%s', should have been 'hello'\n",
93 output);
94  
95 exit (1);
96 }
97  
98 g_free (output);
99 }
100 #else
101 #ifdef G_OS_WIN32
102 printf ("Running netstat synchronously, collecting its output\n");
103  
104 if (!g_spawn_command_line_sync ("netstat -n",
105 &output, &erroutput, NULL,
106 &err))
107 {
108 fprintf (stderr, "Error: %s\n", err->message);
109 g_error_free (err);
110 exit (1);
111 }
112 else
113 {
114 g_assert (output != NULL);
115 g_assert (erroutput != NULL);
116  
117 if (strstr (output, "Active Connections") == 0)
118 {
119 printf ("output was '%s', should have contained 'Active Connections'\n",
120 output);
121  
122 exit (1);
123 }
124 if (erroutput[0] != '\0')
125 {
126 printf ("error output was '%s', should have been empty\n",
127 erroutput);
128 exit (1);
129 }
130  
131 g_free (output);
132 output = NULL;
133 g_free (erroutput);
134 erroutput = NULL;
135 }
136  
137 printf ("Running spawn-test-win32-gui in various ways. Click on the OK buttons.\n");
138  
139 printf ("First asynchronously (without wait).\n");
140  
141 if (!g_spawn_command_line_async ("'.\\spawn-test-win32-gui.exe' 1", &err))
142 {
143 fprintf (stderr, "Error: %s\n", err->message);
144 g_error_free (err);
145 exit (1);
146 }
147  
148 printf ("Now synchronously, collecting its output.\n");
149 if (!g_spawn_command_line_sync ("'.\\spawn-test-win32-gui.exe' 2",
150 &output, &erroutput, NULL,
151 &err))
152 {
153 fprintf (stderr, "Error: %s\n", err->message);
154 g_error_free (err);
155 exit (1);
156 }
157 else
158 {
159 g_assert (output != NULL);
160 g_assert (erroutput != NULL);
161  
162 if (strcmp (output, "This is stdout\r\n") != 0)
163 {
164 printf ("output was '%s', should have been 'This is stdout'\n",
165 g_strescape (output, NULL));
166  
167 exit (1);
168 }
169 if (strcmp (erroutput, "This is stderr\r\n") != 0)
170 {
171 printf ("error output was '%s', should have been 'This is stderr'\n",
172 g_strescape (erroutput, NULL));
173 exit (1);
174 }
175  
176 g_free (output);
177 g_free (erroutput);
178 }
179  
180 printf ("Now with G_SPAWN_FILE_AND_ARGV_ZERO.\n");
181  
182 if (!g_shell_parse_argv ("'.\\spawn-test-win32-gui.exe' this-should-be-argv-zero nop", NULL, &argv, &err))
183 {
184 fprintf (stderr, "Error parsing command line? %s\n", err->message);
185 g_error_free (err);
186 exit (1);
187 }
188  
189 if (!g_spawn_async (NULL, argv, NULL,
190 G_SPAWN_FILE_AND_ARGV_ZERO,
191 NULL, NULL, NULL,
192 &err))
193 {
194 fprintf (stderr, "Error: %s\n", err->message);
195 g_error_free (err);
196 exit (1);
197 }
198  
199 printf ("Now talking to it through pipes.\n");
200  
201 if (pipe (pipedown) < 0 ||
202 pipe (pipeup) < 0)
203 {
204 fprintf (stderr, "Could not create pipes\n");
205 exit (1);
206 }
207  
208 if (!g_shell_parse_argv (g_strdup_printf ("'.\\spawn-test-win32-gui.exe' pipes %d %d",
209 pipedown[0], pipeup[1]),
210 NULL, &argv,
211 &err))
212 {
213 fprintf (stderr, "Error parsing command line? %s\n", err->message);
214 g_error_free (err);
215 exit (1);
216 }
217  
218 if (!g_spawn_async (NULL, argv, NULL,
219 G_SPAWN_LEAVE_DESCRIPTORS_OPEN |
220 G_SPAWN_DO_NOT_REAP_CHILD,
221 NULL, NULL, NULL,
222 &err))
223 {
224 fprintf (stderr, "Error: %s\n", err->message);
225 g_error_free (err);
226 exit (1);
227 }
228 else
229 {
230 int k, n;
231 char buf[100];
232  
233 if ((k = read (pipeup[0], &n, sizeof (n))) != sizeof (n))
234 {
235 if (k == -1)
236 fprintf (stderr, "Read error: %s\n", g_strerror (errno));
237 else
238 fprintf (stderr, "Wanted to read %d bytes, got %d\n",
239 sizeof (n), k);
240 exit (1);
241 }
242  
243 if ((k = read (pipeup[0], buf, n)) != n)
244 {
245 if (k == -1)
246 fprintf (stderr, "Read error: %s\n", g_strerror (errno));
247 else
248 fprintf (stderr, "Wanted to read %d bytes, got %d\n",
249 n, k);
250 exit (1);
251 }
252  
253 n = strlen ("Bye then");
254 if (write (pipedown[1], &n, sizeof (n)) == -1 ||
255 write (pipedown[1], "Bye then", n) == -1)
256 {
257 fprintf (stderr, "Write error: %s\n", g_strerror (errno));
258 exit (1);
259 }
260  
261 if ((k = read (pipeup[0], &n, sizeof (n))) != sizeof (n))
262 {
263 if (k == -1)
264 fprintf (stderr, "Read error: %s\n", g_strerror (errno));
265 else
266 fprintf (stderr, "Wanted to read %d bytes, got %d\n",
267 sizeof (n), k);
268 exit (1);
269 }
270  
271 if ((k = read (pipeup[0], buf, n)) != n)
272 {
273 if (k == -1)
274 fprintf (stderr, "Read error: %s\n", g_strerror (errno));
275 else
276 fprintf (stderr, "Wanted to read %d bytes, got %d\n",
277 n, k);
278 exit (1);
279 }
280 }
281 #endif
282 #endif
283 }
284  
285 int
286 main (int argc,
287 char *argv[])
288 {
289 run_tests ();
290  
291 return 0;
292 }