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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
#include <config.h>
#include <glib.h>
#include <string.h>
#include <stdio.h>
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
#include "test.h"
#ifdef G_OS_WIN32
#include <io.h>
#define read _read
#define close _close
#endif
RESULT
test_spawn_sync ()
{
gchar *out;
gchar *err;
gint status = -1;
GError *error = NULL;
if (!g_spawn_command_line_sync ("ls", &out, &err, &status, &error))
return FAILED ("Error executing 'ls'");
if (status != 0)
return FAILED ("Status is %d", status);
if (out == NULL || strlen (out) == 0)
return FAILED ("Didn't get any output from ls!?");
g_free (out);
g_free (err);
return OK;
}
RESULT
test_spawn_async ()
{
/*
gboolean
g_spawn_async_with_pipes (const gchar *working_directory,
gchar **argv,
gchar **envp,
GSpawnFlags flags,
GSpawnChildSetupFunc child_setup,
gpointer user_data,
GPid *child_pid,
gint *standard_input,
gint *standard_output,
gint *standard_error,
GError **error) */
char *argv [15];
int stdout_fd = -1;
char buffer [512];
pid_t child_pid = 0;
memset (argv, 0, 15 * sizeof (char *));
argv [0] = "ls";
if (!g_spawn_async_with_pipes (NULL, argv, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, &child_pid, NULL, &stdout_fd, NULL, NULL))
return FAILED ("1 Failed to run ls");
if (child_pid == 0)
return FAILED ("2 child pid not returned");
if (stdout_fd == -1)
return FAILED ("3 out fd is -1");
while (read (stdout_fd, buffer, 512) > 0);
close (stdout_fd);
return OK;
}
static Test spawn_tests [] = {
{"g_shell_spawn_sync", test_spawn_sync},
{"g_shell_spawn_async_with_pipes", test_spawn_async},
{NULL, NULL}
};
DEFINE_TEST_GROUP_INIT(spawn_tests_init, spawn_tests)
|