No real need for this to be an async function sync we are going to call

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.

svn path=/trunk/; revision=17620
This commit is contained in:
Jeffrey Stedfast
2002-07-26 20:44:03 +00:00
committed by Jeffrey Stedfast
parent 7c5e6a4cd1
commit 435f2e3e58
2 changed files with 5 additions and 83 deletions

View File

@ -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

View File

@ -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);
}