+FILE *get_command_output_stream(const char* cmdline)
+{
+ GPid pid;
+ GError *err = NULL;
+ gchar **argv = NULL;
+ int fd;
+
+ cm_return_val_if_fail(cmdline != NULL, NULL);
+
+ debug_print("get_command_output_stream(): executing: %s\n", cmdline);
+
+ /* turn the command-line string into an array */
+ if (!g_shell_parse_argv(cmdline, NULL, &argv, &err)) {
+ g_warning("could not parse command line from '%s': %s\n", cmdline, err->message);
+ g_error_free(err);
+ return NULL;
+ }
+
+ if (!g_spawn_async_with_pipes(NULL, argv, NULL, G_SPAWN_SEARCH_PATH,
+ NULL, NULL, &pid, NULL, &fd, NULL, &err)
+ && err)
+ {
+ g_warning("could not spawn '%s': %s\n", cmdline, err->message);
+ g_error_free(err);
+ g_strfreev(argv);
+ return NULL;
+ }
+
+ g_strfreev(argv);
+ return fdopen(fd, "r");
+}
+