Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:11.4:Update
libgnomesu
libgnomesu-1.0.0-spin-mainloop.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File libgnomesu-1.0.0-spin-mainloop.patch of Package libgnomesu
diff -upr libgnomesu-1.0.0-pre/tools/gnomesu.c libgnomesu-1.0.0-post/tools/gnomesu.c --- libgnomesu-1.0.0-pre/tools/gnomesu.c 2004-11-28 12:09:18.000000000 -0600 +++ libgnomesu-1.0.0-post/tools/gnomesu.c 2006-03-20 17:03:44.000000000 -0600 @@ -33,7 +33,8 @@ static gchar *command = NULL; static gchar *user = NULL; - +static gint final_status = 0; +GMainLoop *main_loop; static struct poptOption options[] = { { "command", 'c', POPT_ARG_STRING, &command, 0, @@ -47,6 +48,12 @@ static struct poptOption options[] = { { NULL, '\0', 0, NULL, 0 } }; +static void +child_exit_cb (GPid pid, gint status, gpointer data) +{ + final_status = status; + g_main_loop_quit (main_loop); +} int main (int argc, char *argv[]) @@ -70,6 +77,8 @@ main (int argc, char *argv[]) g_value_init (&value, G_TYPE_POINTER)); pctx = g_value_get_pointer (&value); + main_loop = g_main_loop_new (NULL, FALSE); + if (!command) { GList *arglist = NULL; gchar *arg, **args; @@ -90,8 +99,10 @@ main (int argc, char *argv[]) if (!gnomesu_spawn_command_async (user, terminal, &pid)) return 255; - waitpid (pid, &status, 0); - return WEXITSTATUS (status); + g_child_watch_add (pid, child_exit_cb, NULL); + g_main_loop_run (main_loop); + + return WEXITSTATUS (final_status); } args = g_new0 (gchar *, g_list_length (arglist) + 1); @@ -102,11 +113,13 @@ main (int argc, char *argv[]) if (!gnomesu_spawn_async (user, args, &pid)) return 255; - waitpid (pid, &status, 0); + + g_child_watch_add (pid, child_exit_cb, NULL); + g_main_loop_run (main_loop); g_list_free (arglist); g_free (args); - return WEXITSTATUS (status); + return WEXITSTATUS (final_status); } else { int status, pid; @@ -114,8 +127,10 @@ main (int argc, char *argv[]) if (!gnomesu_spawn_command_async (user, command, &pid)) return 255; - waitpid (pid, &status, 0); - return WEXITSTATUS (status); + g_child_watch_add (pid, child_exit_cb, NULL); + g_main_loop_run (main_loop); + + return WEXITSTATUS (final_status); } return 0;
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor