- int pipefd[2];
- pid_t child_id;
-
- if (pipe (pipefd) == -1) {
- g_printerr (_("Error creating pipe: %s\n"), g_strerror (errno));
- exit (-1);
- }
-
- child_id = fork ();
- if (child_id == -1) {
- g_printerr (_("Error forking: %s\n"), g_strerror (errno));
- exit (-1);
- }
-
- if (child_id == 0) {
- char **argv;
- const char *pager;
- int ret;
-
- pager = g_getenv ("PAGER");
- if (pager == NULL)
- pager = DEFAULT_PAGER;
- argv = g_strsplit (pager, " ", 0);
-
- /* child process */
- close (pipefd[1]);
- dup2 (pipefd[0], STDIN_FILENO);
- close (pipefd[0]);
-
- ret = execvp (argv[0], argv);
+ GError *error = NULL;
+ gchar **argv;
+ const gchar *pager;
+ gint stdin_fd;
+ gchar **envp;
+
+ pager = g_getenv ("PAGER");
+ if (pager == NULL)
+ pager = DEFAULT_PAGER;
+
+ argv = g_strsplit (pager, " ", 0);
+
+ envp = g_get_environ ();
+ envp = g_environ_setenv (envp, "LESS", DEFAULT_LESS_OPTS, TRUE);
+
+ if (!g_spawn_async_with_pipes (NULL, argv, envp,
+ G_SPAWN_DO_NOT_REAP_CHILD | G_SPAWN_SEARCH_PATH,
+ NULL, NULL, &child_pid, &stdin_fd,
+ /* pass null stdout/stderr to inherit our fds */
+ NULL, NULL, &error)) {
+ g_warning ("g_spawn_async_with_pipes() failed: %s\n",
+ GST_STR_NULL (error->message));