18e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington/* GLIB - Library of useful routines for C programming 28e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald 38e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington * 48e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington * This library is free software; you can redistribute it and/or 58e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington * modify it under the terms of the GNU Lesser General Public 68e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington * License as published by the Free Software Foundation; either 78e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington * version 2 of the License, or (at your option) any later version. 88e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington * 98e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington * This library is distributed in the hope that it will be useful, 108e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington * but WITHOUT ANY WARRANTY; without even the implied warranty of 118e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 128e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington * Lesser General Public License for more details. 138e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington * 148e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington * You should have received a copy of the GNU Lesser General Public 158e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington * License along with this library; if not, write to the 168e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington * Free Software Foundation, Inc., 59 Temple Place - Suite 330, 178e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington * Boston, MA 02111-1307, USA. 188e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington */ 198e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington 208e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington/* 218e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington * Modified by the GLib Team and others 1997-2000. See the AUTHORS 228e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington * file for a list of people on the GLib Team. See the ChangeLog 238e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington * files for a list of changes. These files are distributed with 248e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington * GLib at ftp://ftp.gtk.org/pub/gtk/. 258e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington */ 268e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington 273fa620d4dfeb3440526682b4970bc9147b6665c9Darin Adler#undef G_DISABLE_ASSERT 288e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington#undef G_LOG_DOMAIN 298e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington 308e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington#include <glib.h> 318e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington#include <stdio.h> 328e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington#include <string.h> 338e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington#include <stdlib.h> 348e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington 351f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist#ifdef G_OS_WIN32 361f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist#include <fcntl.h> 372781d5f6b3cf40fcf63b041932e58cd9d228d99eHans Breuer#include <io.h> 387d2ec70a49558247fb5874b1770e315e8deff235Tor Lillqvist#define pipe(fds) _pipe(fds, 4096, _O_BINARY) 391f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist#endif 401f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist 418e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington 428e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Penningtonstatic void 438e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Penningtonrun_tests (void) 448e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington{ 458e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington GError *err; 468e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington gchar *output = NULL; 471f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist#ifdef G_OS_WIN32 481f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist gchar *erroutput = NULL; 491f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist int pipedown[2], pipeup[2]; 501f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist gchar **argv = 0; 511f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist#endif 528e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington 538e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington err = NULL; 548e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington if (!g_spawn_command_line_sync ("nonexistent_application foo 'bar baz' blah blah", 558e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington NULL, NULL, NULL, 568e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington &err)) 578e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington { 588e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington g_error_free (err); 598e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington } 607221f500f53591f980fbb2368c7eaa7f9beb6f27Matthias Clasen else 617221f500f53591f980fbb2368c7eaa7f9beb6f27Matthias Clasen { 627221f500f53591f980fbb2368c7eaa7f9beb6f27Matthias Clasen g_warning ("no error for sync spawn of nonexistent application"); 637221f500f53591f980fbb2368c7eaa7f9beb6f27Matthias Clasen exit (1); 647221f500f53591f980fbb2368c7eaa7f9beb6f27Matthias Clasen } 658e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington 668e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington err = NULL; 678e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington if (!g_spawn_command_line_async ("nonexistent_application foo bar baz \"blah blah\"", 688e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington &err)) 698e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington { 708e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington g_error_free (err); 718e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington } 727221f500f53591f980fbb2368c7eaa7f9beb6f27Matthias Clasen else 737221f500f53591f980fbb2368c7eaa7f9beb6f27Matthias Clasen { 747221f500f53591f980fbb2368c7eaa7f9beb6f27Matthias Clasen g_warning ("no error for async spawn of nonexistent application"); 757221f500f53591f980fbb2368c7eaa7f9beb6f27Matthias Clasen exit (1); 767221f500f53591f980fbb2368c7eaa7f9beb6f27Matthias Clasen } 778e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington 788e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington err = NULL; 79fb4de1c50d96cd500f53f7701629fd01ec99d7adTor Lillqvist#ifdef G_OS_UNIX 808e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington if (!g_spawn_command_line_sync ("/bin/sh -c 'echo hello'", 818e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington &output, NULL, NULL, 828e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington &err)) 838e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington { 848e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington fprintf (stderr, "Error: %s\n", err->message); 858e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington g_error_free (err); 868e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington exit (1); 878e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington } 888e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington else 898e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington { 908e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington g_assert (output != NULL); 918e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington 928e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington if (strcmp (output, "hello\n") != 0) 938e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington { 948e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington printf ("output was '%s', should have been 'hello'\n", 958e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington output); 968e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington 978e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington exit (1); 988e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington } 998e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington 1008e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington g_free (output); 1018e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington } 102fb4de1c50d96cd500f53f7701629fd01ec99d7adTor Lillqvist#else 103fb4de1c50d96cd500f53f7701629fd01ec99d7adTor Lillqvist#ifdef G_OS_WIN32 10420378332aea3a273a27bd0d40451811b21a7a1f6Tor Lillqvist printf ("Running netstat synchronously, collecting its output\n"); 1051f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist 10620378332aea3a273a27bd0d40451811b21a7a1f6Tor Lillqvist if (!g_spawn_command_line_sync ("netstat -n", 1071f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist &output, &erroutput, NULL, 108fb4de1c50d96cd500f53f7701629fd01ec99d7adTor Lillqvist &err)) 109fb4de1c50d96cd500f53f7701629fd01ec99d7adTor Lillqvist { 110fb4de1c50d96cd500f53f7701629fd01ec99d7adTor Lillqvist fprintf (stderr, "Error: %s\n", err->message); 111fb4de1c50d96cd500f53f7701629fd01ec99d7adTor Lillqvist g_error_free (err); 112fb4de1c50d96cd500f53f7701629fd01ec99d7adTor Lillqvist exit (1); 113fb4de1c50d96cd500f53f7701629fd01ec99d7adTor Lillqvist } 114fb4de1c50d96cd500f53f7701629fd01ec99d7adTor Lillqvist else 115fb4de1c50d96cd500f53f7701629fd01ec99d7adTor Lillqvist { 116fb4de1c50d96cd500f53f7701629fd01ec99d7adTor Lillqvist g_assert (output != NULL); 1171f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist g_assert (erroutput != NULL); 118fb4de1c50d96cd500f53f7701629fd01ec99d7adTor Lillqvist 11920378332aea3a273a27bd0d40451811b21a7a1f6Tor Lillqvist if (strstr (output, "Active Connections") == 0) 120fb4de1c50d96cd500f53f7701629fd01ec99d7adTor Lillqvist { 12120378332aea3a273a27bd0d40451811b21a7a1f6Tor Lillqvist printf ("output was '%s', should have contained 'Active Connections'\n", 122fb4de1c50d96cd500f53f7701629fd01ec99d7adTor Lillqvist output); 123fb4de1c50d96cd500f53f7701629fd01ec99d7adTor Lillqvist 124fb4de1c50d96cd500f53f7701629fd01ec99d7adTor Lillqvist exit (1); 125fb4de1c50d96cd500f53f7701629fd01ec99d7adTor Lillqvist } 1261f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist if (erroutput[0] != '\0') 1271f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist { 1281f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist printf ("error output was '%s', should have been empty\n", 1291f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist erroutput); 1301f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist exit (1); 1311f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist } 1321f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist 1331f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist g_free (output); 1341f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist output = NULL; 1351f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist g_free (erroutput); 1361f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist erroutput = NULL; 1371f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist } 1381f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist 139f4cb22c78d573d53dba62b7f6743cbe0a1d1e135Tor Lillqvist printf ("Running spawn-test-win32-gui in various ways. Click on the OK buttons.\n"); 140f4cb22c78d573d53dba62b7f6743cbe0a1d1e135Tor Lillqvist 141f4cb22c78d573d53dba62b7f6743cbe0a1d1e135Tor Lillqvist printf ("First asynchronously (without wait).\n"); 1421f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist 1431f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist if (!g_spawn_command_line_async ("'.\\spawn-test-win32-gui.exe' 1", &err)) 1441f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist { 1451f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist fprintf (stderr, "Error: %s\n", err->message); 1461f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist g_error_free (err); 1471f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist exit (1); 1481f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist } 1491f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist 150f4cb22c78d573d53dba62b7f6743cbe0a1d1e135Tor Lillqvist printf ("Now synchronously, collecting its output.\n"); 1511f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist if (!g_spawn_command_line_sync ("'.\\spawn-test-win32-gui.exe' 2", 1521f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist &output, &erroutput, NULL, 1531f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist &err)) 1541f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist { 1551f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist fprintf (stderr, "Error: %s\n", err->message); 1561f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist g_error_free (err); 1571f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist exit (1); 1581f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist } 1591f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist else 1601f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist { 1611f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist g_assert (output != NULL); 1621f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist g_assert (erroutput != NULL); 1631f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist 1641f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist if (strcmp (output, "This is stdout\r\n") != 0) 1651f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist { 1661f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist printf ("output was '%s', should have been 'This is stdout'\n", 1671f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist g_strescape (output, NULL)); 1681f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist 1691f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist exit (1); 1701f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist } 1711f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist if (strcmp (erroutput, "This is stderr\r\n") != 0) 1721f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist { 1731f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist printf ("error output was '%s', should have been 'This is stderr'\n", 1741f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist g_strescape (erroutput, NULL)); 1751f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist exit (1); 1761f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist } 177fb4de1c50d96cd500f53f7701629fd01ec99d7adTor Lillqvist 178fb4de1c50d96cd500f53f7701629fd01ec99d7adTor Lillqvist g_free (output); 1791f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist g_free (erroutput); 1801f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist } 1811f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist 182f4cb22c78d573d53dba62b7f6743cbe0a1d1e135Tor Lillqvist printf ("Now with G_SPAWN_FILE_AND_ARGV_ZERO.\n"); 183f4cb22c78d573d53dba62b7f6743cbe0a1d1e135Tor Lillqvist 184f4cb22c78d573d53dba62b7f6743cbe0a1d1e135Tor Lillqvist if (!g_shell_parse_argv ("'.\\spawn-test-win32-gui.exe' this-should-be-argv-zero nop", NULL, &argv, &err)) 185f4cb22c78d573d53dba62b7f6743cbe0a1d1e135Tor Lillqvist { 186f4cb22c78d573d53dba62b7f6743cbe0a1d1e135Tor Lillqvist fprintf (stderr, "Error parsing command line? %s\n", err->message); 187f4cb22c78d573d53dba62b7f6743cbe0a1d1e135Tor Lillqvist g_error_free (err); 188f4cb22c78d573d53dba62b7f6743cbe0a1d1e135Tor Lillqvist exit (1); 189f4cb22c78d573d53dba62b7f6743cbe0a1d1e135Tor Lillqvist } 190f4cb22c78d573d53dba62b7f6743cbe0a1d1e135Tor Lillqvist 191f4cb22c78d573d53dba62b7f6743cbe0a1d1e135Tor Lillqvist if (!g_spawn_async (NULL, argv, NULL, 192f4cb22c78d573d53dba62b7f6743cbe0a1d1e135Tor Lillqvist G_SPAWN_FILE_AND_ARGV_ZERO, 193f4cb22c78d573d53dba62b7f6743cbe0a1d1e135Tor Lillqvist NULL, NULL, NULL, 194f4cb22c78d573d53dba62b7f6743cbe0a1d1e135Tor Lillqvist &err)) 195f4cb22c78d573d53dba62b7f6743cbe0a1d1e135Tor Lillqvist { 196f4cb22c78d573d53dba62b7f6743cbe0a1d1e135Tor Lillqvist fprintf (stderr, "Error: %s\n", err->message); 197f4cb22c78d573d53dba62b7f6743cbe0a1d1e135Tor Lillqvist g_error_free (err); 198f4cb22c78d573d53dba62b7f6743cbe0a1d1e135Tor Lillqvist exit (1); 199f4cb22c78d573d53dba62b7f6743cbe0a1d1e135Tor Lillqvist } 200f4cb22c78d573d53dba62b7f6743cbe0a1d1e135Tor Lillqvist 201f4cb22c78d573d53dba62b7f6743cbe0a1d1e135Tor Lillqvist printf ("Now talking to it through pipes.\n"); 2021f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist 2031f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist if (pipe (pipedown) < 0 || 2041f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist pipe (pipeup) < 0) 2051f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist { 2061f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist fprintf (stderr, "Could not create pipes\n"); 2071f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist exit (1); 208fb4de1c50d96cd500f53f7701629fd01ec99d7adTor Lillqvist } 209fb4de1c50d96cd500f53f7701629fd01ec99d7adTor Lillqvist 2101f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist if (!g_shell_parse_argv (g_strdup_printf ("'.\\spawn-test-win32-gui.exe' pipes %d %d", 2111f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist pipedown[0], pipeup[1]), 2121f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist NULL, &argv, 2131f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist &err)) 2141f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist { 2151f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist fprintf (stderr, "Error parsing command line? %s\n", err->message); 2161f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist g_error_free (err); 2171f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist exit (1); 2181f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist } 2191f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist 2201f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist if (!g_spawn_async (NULL, argv, NULL, 2211f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist G_SPAWN_LEAVE_DESCRIPTORS_OPEN | 2221f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist G_SPAWN_DO_NOT_REAP_CHILD, 2231f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist NULL, NULL, NULL, 2241f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist &err)) 2251f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist { 2261f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist fprintf (stderr, "Error: %s\n", err->message); 2271f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist g_error_free (err); 2281f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist exit (1); 2291f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist } 2301f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist else 2311f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist { 2321f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist int k, n; 2331f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist char buf[100]; 2341f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist 2351f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist if ((k = read (pipeup[0], &n, sizeof (n))) != sizeof (n)) 2361f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist { 2371f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist if (k == -1) 2381f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist fprintf (stderr, "Read error: %s\n", g_strerror (errno)); 2391f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist else 2401f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist fprintf (stderr, "Wanted to read %d bytes, got %d\n", 2411f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist sizeof (n), k); 2421f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist exit (1); 2431f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist } 2441f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist 2451f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist if ((k = read (pipeup[0], buf, n)) != n) 2461f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist { 2471f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist if (k == -1) 2481f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist fprintf (stderr, "Read error: %s\n", g_strerror (errno)); 2491f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist else 2501f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist fprintf (stderr, "Wanted to read %d bytes, got %d\n", 2511f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist n, k); 2521f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist exit (1); 2531f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist } 2541f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist 2551f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist n = strlen ("Bye then"); 2561f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist if (write (pipedown[1], &n, sizeof (n)) == -1 || 2571f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist write (pipedown[1], "Bye then", n) == -1) 2581f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist { 2591f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist fprintf (stderr, "Write error: %s\n", g_strerror (errno)); 2601f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist exit (1); 2611f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist } 2621f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist 2631f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist if ((k = read (pipeup[0], &n, sizeof (n))) != sizeof (n)) 2641f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist { 2651f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist if (k == -1) 2661f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist fprintf (stderr, "Read error: %s\n", g_strerror (errno)); 2671f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist else 2681f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist fprintf (stderr, "Wanted to read %d bytes, got %d\n", 2691f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist sizeof (n), k); 2701f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist exit (1); 2711f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist } 2721f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist 2731f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist if ((k = read (pipeup[0], buf, n)) != n) 2741f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist { 2751f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist if (k == -1) 2761f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist fprintf (stderr, "Read error: %s\n", g_strerror (errno)); 2771f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist else 2781f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist fprintf (stderr, "Wanted to read %d bytes, got %d\n", 2791f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist n, k); 2801f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist exit (1); 2811f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist } 2821f04f2cce236311e79fef775890a5114123ced37Tor Lillqvist } 283fb4de1c50d96cd500f53f7701629fd01ec99d7adTor Lillqvist#endif 284fb4de1c50d96cd500f53f7701629fd01ec99d7adTor Lillqvist#endif 2858e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington} 2868e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington 2878e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Penningtonint 2888e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Penningtonmain (int argc, 2898e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington char *argv[]) 2908e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington{ 2918e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington run_tests (); 2928e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington 2938e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington return 0; 2948e3a3eef63c3c298c93fa8f8e827b10dd1b6327cHavoc Pennington} 295