aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mail/ChangeLog4
-rw-r--r--mail/mail-ops.c84
2 files changed, 5 insertions, 83 deletions
diff --git a/mail/ChangeLog b/mail/ChangeLog
index e0f8117b68..c5e02b0ed4 100644
--- a/mail/ChangeLog
+++ b/mail/ChangeLog
@@ -1,5 +1,9 @@
2002-07-26 Jeffrey Stedfast <fejj@ximian.com>
+ * mail-ops.c (mail_execute_shell_command): No real need for this
+ to be an async function sync we are going to call
+ gnome_execute_async anyway.
+
* component-factory.c (create_component): Add a new menu item for
posting to the New toolbar button thing.
(destination_folder_handle_drop): Don't use a NULL exception when
diff --git a/mail/mail-ops.c b/mail/mail-ops.c
index 5de88d9633..4f9fc77968 100644
--- a/mail/mail-ops.c
+++ b/mail/mail-ops.c
@@ -2275,93 +2275,11 @@ mail_store_set_offline (CamelStore *store, gboolean offline,
/* ** Execute Shell Command ***************************************************** */
-struct _execute_shell_command_msg {
- struct _mail_msg msg;
-
- GPtrArray *argv;
-};
-
-static char *
-execute_shell_command_desc (struct _mail_msg *mm, int done)
-{
- struct _execute_shell_command_msg *m = (struct _execute_shell_command_msg *) mm;
- char *msg;
-
- msg = g_strdup_printf (_("Executing shell command: %s"), m->argv->pdata[0]);
-
- return msg;
-}
-
-static void
-execute_shell_command_do (struct _mail_msg *mm)
-{
- struct _execute_shell_command_msg *m = (struct _execute_shell_command_msg *) mm;
- pid_t result, pid;
- int status;
-
- if (!(pid = fork ())) {
- /* child process */
- GPtrArray *args;
- int maxfd, i;
-
- setsid ();
-
- maxfd = sysconf (_SC_OPEN_MAX);
- for (i = 0; i < maxfd; i++)
- close (i);
-
- execvp (m->argv->pdata[0], (char **) m->argv->pdata);
-
- d(printf ("Could not execute %s: %s\n", m->argv->pdata[0], g_strerror (errno)));
- _exit (255);
- } else if (pid < 0) {
- camel_exception_setv (&mm->ex, CAMEL_EXCEPTION_SYSTEM,
- _("Failed to create create child process '%s': %s"),
- m->argv->pdata[0], g_strerror (errno));
- return -1;
- }
-
- do {
- result = waitpid (pid, &status, 0);
- } while (result != pid);
-}
-
-static void
-execute_shell_command_free (struct _mail_msg *mm)
-{
- struct _execute_shell_command_msg *m = (struct _execute_shell_command_msg *) mm;
- int i;
-
- for (i = 0; i < m->argv; i++)
- g_free (m->argv->pdata[i]);
-
- g_ptr_array_free (m->argv, TRUE);
-}
-
-static struct _mail_msg_op execute_shell_command_op = {
- execute_shell_command_desc,
- execute_shell_command_do,
- NULL,
- execute_shell_command_free,
-};
-
void
mail_execute_shell_command (CamelFilterDriver *driver, int argc, char **argv, void *data)
{
- struct _execute_shell_command_msg *m;
- GPtrArray *args;
- int i;
-
if (argc <= 0)
return;
- args = g_ptr_array_new ();
- for (i = 0; i < argc; i++)
- g_ptr_array_add (args, g_strdup (argv[i]));
- g_ptr_array_add (args, NULL);
-
- m = mail_msg_new (&execute_shell_command_op, NULL, sizeof (*m));
- m->argv = args;
-
- e_thread_put (mail_thread_queued, (EMsg *) m);
+ gnome_execute_async_fds (NULL, argc, argv, TRUE);
}